11use std:: collections:: HashSet ;
2-
32use anyhow:: Result ;
43use sqlparser:: ast:: { ColumnDef , ObjectName } ;
54
65use super :: Binder ;
76use crate :: binder:: { lower_case_name, split_name} ;
87use crate :: catalog:: ColumnCatalog ;
98use crate :: planner:: logical_create_table_plan:: LogicalCreateTablePlan ;
9+ use crate :: planner:: operator:: create_table:: CreateTableOperator ;
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-
1918 let ( _, table_name) = split_name ( & name) ?;
2019
2120 // check duplicated column names
2221 let mut set = HashSet :: new ( ) ;
2322 for col in columns. iter ( ) {
24- if !set. insert ( col. name . value . clone ( ) ) {
23+ let col_name = & col. name . value ;
24+ if !set. insert ( col_name. clone ( ) ) {
2525 return Err ( anyhow:: Error :: msg ( format ! (
2626 "bind duplicated column {}" ,
27- col . name . value . clone ( )
27+ col_name
2828 ) ) ) ;
2929 }
3030 }
@@ -35,8 +35,10 @@ impl Binder {
3535 . collect ( ) ;
3636
3737 let plan = LogicalCreateTablePlan {
38- table_name : table_name. to_string ( ) ,
39- columns,
38+ operator : CreateTableOperator {
39+ table_name : table_name. to_string ( ) ,
40+ columns
41+ } ,
4042 } ;
4143 Ok ( plan)
4244 }
@@ -46,7 +48,7 @@ impl Binder {
4648mod tests {
4749 use super :: * ;
4850 use crate :: binder:: BinderContext ;
49- use crate :: catalog:: { ColumnDesc , RootCatalog } ;
51+ use crate :: catalog:: { ColumnCatalog , ColumnDesc , RootCatalog } ;
5052 use crate :: planner:: LogicalPlan ;
5153 use crate :: types:: LogicalType ;
5254
@@ -58,19 +60,21 @@ mod tests {
5860 let plan1 = binder. bind ( & stmt[ 0 ] ) . unwrap ( ) ;
5961
6062 let plan2 = LogicalPlan :: CreateTable ( LogicalCreateTablePlan {
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- ] ,
63+ operator : CreateTableOperator {
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+ } ,
7478 } ) ;
7579
7680 assert_eq ! ( plan1, plan2) ;
0 commit comments