@@ -55,9 +55,10 @@ use datafusion_expr::{
5555 TransactionIsolationLevel , TransactionStart , Volatility , WriteOp , cast, col,
5656} ;
5757use sqlparser:: ast:: {
58- self , BeginTransactionKind , IndexColumn , IndexType , OrderByExpr , Set ,
59- ShowStatementIn , ShowStatementOptions , SqliteOnConflict , TableObject , Update ,
60- UpdateTableFromKind , ValueWithSpan ,
58+ self , BeginTransactionKind , CheckConstraint , ForeignKeyConstraint , IndexColumn ,
59+ IndexType , NullsDistinctOption , OrderByExpr , OrderByOptions , PrimaryKeyConstraint ,
60+ Set , ShowStatementIn , ShowStatementOptions , SqliteOnConflict , TableObject ,
61+ UniqueConstraint , Update , UpdateTableFromKind , ValueWithSpan ,
6162} ;
6263use sqlparser:: ast:: {
6364 Assignment , AssignmentTarget , ColumnDef , CreateIndex , CreateTable ,
@@ -104,19 +105,69 @@ fn get_schema_name(schema_name: &SchemaName) -> String {
104105fn calc_inline_constraints_from_columns ( columns : & [ ColumnDef ] ) -> Vec < TableConstraint > {
105106 let mut constraints: Vec < TableConstraint > = vec ! [ ] ;
106107 for column in columns {
107- for ast:: ColumnOptionDef { name : _ , option } in & column. options {
108+ for ast:: ColumnOptionDef { name, option } in & column. options {
108109 match option {
109110 ast:: ColumnOption :: Unique ( constraint) => {
110- constraints. push ( TableConstraint :: Unique ( constraint. clone ( ) ) )
111+ constraints. push ( TableConstraint :: Unique ( UniqueConstraint {
112+ name : name. clone ( ) ,
113+ index_name : None ,
114+ index_type_display : ast:: KeyOrIndexDisplay :: None ,
115+ index_type : None ,
116+ columns : vec ! [ IndexColumn {
117+ column: OrderByExpr {
118+ expr: SQLExpr :: Identifier ( column. name. clone( ) ) ,
119+ options: OrderByOptions {
120+ asc: None ,
121+ nulls_first: None ,
122+ } ,
123+ with_fill: None ,
124+ } ,
125+ operator_class: None ,
126+ } ] ,
127+ index_options : vec ! [ ] ,
128+ characteristics : constraint. characteristics ,
129+ nulls_distinct : NullsDistinctOption :: None ,
130+ } ) )
111131 }
112132 ast:: ColumnOption :: PrimaryKey ( constraint) => {
113- constraints. push ( TableConstraint :: PrimaryKey ( constraint. clone ( ) ) )
133+ constraints. push ( TableConstraint :: PrimaryKey ( PrimaryKeyConstraint {
134+ name : name. clone ( ) ,
135+ index_name : None ,
136+ index_type : None ,
137+ columns : vec ! [ IndexColumn {
138+ column: OrderByExpr {
139+ expr: SQLExpr :: Identifier ( column. name. clone( ) ) ,
140+ options: OrderByOptions {
141+ asc: None ,
142+ nulls_first: None ,
143+ } ,
144+ with_fill: None ,
145+ } ,
146+ operator_class: None ,
147+ } ] ,
148+ index_options : vec ! [ ] ,
149+ characteristics : constraint. characteristics ,
150+ } ) )
114151 }
115152 ast:: ColumnOption :: ForeignKey ( constraint) => {
116- constraints. push ( TableConstraint :: ForeignKey ( constraint. clone ( ) ) )
153+ constraints. push ( TableConstraint :: ForeignKey ( ForeignKeyConstraint {
154+ name : name. clone ( ) ,
155+ index_name : None ,
156+ columns : vec ! [ ] ,
157+ foreign_table : constraint. foreign_table . clone ( ) ,
158+ referred_columns : constraint. referred_columns . clone ( ) ,
159+ on_delete : constraint. on_delete ,
160+ on_update : constraint. on_update ,
161+ match_kind : None ,
162+ characteristics : constraint. characteristics ,
163+ } ) )
117164 }
118165 ast:: ColumnOption :: Check ( constraint) => {
119- constraints. push ( TableConstraint :: Check ( constraint. clone ( ) ) )
166+ constraints. push ( TableConstraint :: Check ( CheckConstraint {
167+ name : name. clone ( ) ,
168+ expr : constraint. expr . clone ( ) ,
169+ enforced : None ,
170+ } ) )
120171 }
121172 ast:: ColumnOption :: Default ( _)
122173 | ast:: ColumnOption :: Null
0 commit comments