@@ -297,6 +297,62 @@ fn parse_create_table_auto_increment() {
297
297
}
298
298
}
299
299
300
+ #[ test]
301
+ fn parse_create_table_unique_key ( ) {
302
+ let sql = "CREATE TABLE foo (id INT PRIMARY KEY AUTO_INCREMENT, bar INT NOT NULL, UNIQUE KEY bar_key (bar))" ;
303
+ let canonical = "CREATE TABLE foo (id INT PRIMARY KEY AUTO_INCREMENT, bar INT NOT NULL, CONSTRAINT bar_key UNIQUE (bar))" ;
304
+ match mysql ( ) . one_statement_parses_to ( sql, canonical) {
305
+ Statement :: CreateTable {
306
+ name,
307
+ columns,
308
+ constraints,
309
+ ..
310
+ } => {
311
+ assert_eq ! ( name. to_string( ) , "foo" ) ;
312
+ assert_eq ! (
313
+ vec![ TableConstraint :: Unique {
314
+ name: Some ( Ident :: new( "bar_key" ) ) ,
315
+ columns: vec![ Ident :: new( "bar" ) ] ,
316
+ is_primary: false
317
+ } ] ,
318
+ constraints
319
+ ) ;
320
+ assert_eq ! (
321
+ vec![
322
+ ColumnDef {
323
+ name: Ident :: new( "id" ) ,
324
+ data_type: DataType :: Int ( None ) ,
325
+ collation: None ,
326
+ options: vec![
327
+ ColumnOptionDef {
328
+ name: None ,
329
+ option: ColumnOption :: Unique { is_primary: true } ,
330
+ } ,
331
+ ColumnOptionDef {
332
+ name: None ,
333
+ option: ColumnOption :: DialectSpecific ( vec![ Token :: make_keyword(
334
+ "AUTO_INCREMENT"
335
+ ) ] ) ,
336
+ } ,
337
+ ] ,
338
+ } ,
339
+ ColumnDef {
340
+ name: Ident :: new( "bar" ) ,
341
+ data_type: DataType :: Int ( None ) ,
342
+ collation: None ,
343
+ options: vec![ ColumnOptionDef {
344
+ name: None ,
345
+ option: ColumnOption :: NotNull ,
346
+ } , ] ,
347
+ } ,
348
+ ] ,
349
+ columns
350
+ ) ;
351
+ }
352
+ _ => unreachable ! ( ) ,
353
+ }
354
+ }
355
+
300
356
#[ test]
301
357
fn parse_create_table_comment ( ) {
302
358
let canonical = "CREATE TABLE foo (bar INT) COMMENT 'baz'" ;
0 commit comments