11use std:: collections:: HashSet ;
2+
23use anyhow:: Result ;
34use sqlparser:: ast:: { ColumnDef , ObjectName } ;
45
56use super :: Binder ;
67use crate :: binder:: { lower_case_name, split_name} ;
78use crate :: catalog:: ColumnCatalog ;
89use crate :: planner:: logical_create_table_plan:: LogicalCreateTablePlan ;
9- use crate :: planner:: operator:: create_table:: CreateOperator ;
1010
1111impl Binder {
1212 pub ( crate ) fn bind_create_table (
1313 & mut self ,
14- name : & ObjectName ,
14+ name : ObjectName ,
1515 columns : & [ ColumnDef ] ,
1616 ) -> Result < LogicalCreateTablePlan > {
1717 let name = lower_case_name ( & name) ;
18+
1819 let ( _, table_name) = split_name ( & name) ?;
1920
2021 // check duplicated column names
2122 let mut set = HashSet :: new ( ) ;
2223 for col in columns. iter ( ) {
23- let col_name = & col. name . value ;
24- if !set. insert ( col_name. clone ( ) ) {
24+ if !set. insert ( col. name . value . clone ( ) ) {
2525 return Err ( anyhow:: Error :: msg ( format ! (
2626 "bind duplicated column {}" ,
27- col_name
27+ col . name . value . clone ( )
2828 ) ) ) ;
2929 }
3030 }
@@ -35,10 +35,8 @@ impl Binder {
3535 . collect ( ) ;
3636
3737 let plan = LogicalCreateTablePlan {
38- operator : CreateOperator {
39- table_name : table_name. to_string ( ) ,
40- columns
41- } ,
38+ table_name : table_name. to_string ( ) ,
39+ columns,
4240 } ;
4341 Ok ( plan)
4442 }
@@ -48,7 +46,7 @@ impl Binder {
4846mod tests {
4947 use super :: * ;
5048 use crate :: binder:: BinderContext ;
51- use crate :: catalog:: { ColumnCatalog , ColumnDesc , RootCatalog } ;
49+ use crate :: catalog:: { ColumnDesc , RootCatalog } ;
5250 use crate :: planner:: LogicalPlan ;
5351 use crate :: types:: LogicalType ;
5452
@@ -60,21 +58,19 @@ mod tests {
6058 let plan1 = binder. bind ( & stmt[ 0 ] ) . unwrap ( ) ;
6159
6260 let plan2 = LogicalPlan :: CreateTable ( LogicalCreateTablePlan {
63- operator : CreateOperator {
64- table_name : "t1" . to_string ( ) ,
65- columns : vec ! [
66- ColumnCatalog :: new(
67- "id" . to_string( ) ,
68- false ,
69- ColumnDesc :: new( LogicalType :: Integer , false )
70- ) ,
71- ColumnCatalog :: new(
72- "name" . to_string( ) ,
73- false ,
74- ColumnDesc :: new( LogicalType :: Varchar , false )
75- )
76- ] ,
77- } ,
61+ table_name : "t1" . to_string ( ) ,
62+ columns : vec ! [
63+ ColumnCatalog :: new(
64+ "id" . to_string( ) ,
65+ false ,
66+ ColumnDesc :: new( LogicalType :: Integer , false )
67+ ) ,
68+ ColumnCatalog :: new(
69+ "name" . to_string( ) ,
70+ false ,
71+ ColumnDesc :: new( LogicalType :: Varchar , false )
72+ )
73+ ] ,
7874 } ) ;
7975
8076 assert_eq ! ( plan1, plan2) ;
0 commit comments