Skip to content

Commit 563e8da

Browse files
committed
fix: fix the table constraints parser
Signed-off-by: StandingMan <jmtangcs@gmail.com>
1 parent 8b018d8 commit 563e8da

File tree

1 file changed

+59
-8
lines changed

1 file changed

+59
-8
lines changed

datafusion/sql/src/statement.rs

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@ use datafusion_expr::{
5555
TransactionIsolationLevel, TransactionStart, Volatility, WriteOp, cast, col,
5656
};
5757
use 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
};
6263
use sqlparser::ast::{
6364
Assignment, AssignmentTarget, ColumnDef, CreateIndex, CreateTable,
@@ -104,19 +105,69 @@ fn get_schema_name(schema_name: &SchemaName) -> String {
104105
fn 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

Comments
 (0)