@@ -51,6 +51,7 @@ mod test_utils;
51
51
use pretty_assertions:: assert_eq;
52
52
use sqlparser:: ast:: ColumnOption :: Comment ;
53
53
use sqlparser:: ast:: Expr :: { Identifier , UnaryOp } ;
54
+ use sqlparser:: ast:: Value :: Number ;
54
55
use sqlparser:: test_utils:: all_dialects_except;
55
56
56
57
#[ test]
@@ -9250,7 +9251,7 @@ fn parse_cache_table() {
9250
9251
format!(
9251
9252
"CACHE {table_flag} TABLE '{cache_table_name}' OPTIONS('K1' = 'V1', 'K2' = 0.88) {sql}" ,
9252
9253
)
9253
- . as_str( )
9254
+ . as_str( )
9254
9255
) ,
9255
9256
Statement :: Cache {
9256
9257
table_flag: Some ( ObjectName ( vec![ Ident :: new( table_flag) ] ) ) ,
@@ -9275,7 +9276,7 @@ fn parse_cache_table() {
9275
9276
format!(
9276
9277
"CACHE {table_flag} TABLE '{cache_table_name}' OPTIONS('K1' = 'V1', 'K2' = 0.88) AS {sql}" ,
9277
9278
)
9278
- . as_str( )
9279
+ . as_str( )
9279
9280
) ,
9280
9281
Statement :: Cache {
9281
9282
table_flag: Some ( ObjectName ( vec![ Ident :: new( table_flag) ] ) ) ,
@@ -11459,7 +11460,7 @@ fn parse_explain_with_option_list() {
11459
11460
} ) ,
11460
11461
} ,
11461
11462
] ;
11462
- run_explain_analyze (
11463
+ run_explain_analyze (
11463
11464
all_dialects_where ( |d| d. supports_explain_with_utility_options ( ) ) ,
11464
11465
"EXPLAIN (ANALYZE, VERBOSE true, WAL OFF, FORMAT YAML, USER_DEF_NUM -100.1) SELECT sqrt(id) FROM foo" ,
11465
11466
false ,
@@ -12459,3 +12460,82 @@ fn parse_create_table_with_bit_types() {
12459
12460
_ => unreachable ! ( ) ,
12460
12461
}
12461
12462
}
12463
+
12464
+ fn parse_create_table_with_enum_types ( ) {
12465
+ let sql = "CREATE TABLE t0 (foo ENUM8('a' = 1, 'b' = 2), bar ENUM16('a' = 1, 'b' = 2), baz ENUM('a', 'b'))" ;
12466
+ match all_dialects ( ) . verified_stmt ( sql) {
12467
+ Statement :: CreateTable ( CreateTable { name, columns, .. } ) => {
12468
+ std:: assert_eq!( name. to_string( ) , "t0" ) ;
12469
+ std:: assert_eq!(
12470
+ vec![
12471
+ ColumnDef {
12472
+ name: Ident :: new( "foo" ) ,
12473
+ data_type: DataType :: Enum (
12474
+ vec![
12475
+ EnumMember :: NamedValue (
12476
+ "a" . to_string( ) ,
12477
+ Expr :: Value ( Number ( "1" . parse( ) . unwrap( ) , false ) )
12478
+ ) ,
12479
+ EnumMember :: NamedValue (
12480
+ "b" . to_string( ) ,
12481
+ Expr :: Value ( Number ( "2" . parse( ) . unwrap( ) , false ) )
12482
+ )
12483
+ ] ,
12484
+ Some ( 8 )
12485
+ ) ,
12486
+ collation: None ,
12487
+ options: vec![ ] ,
12488
+ } ,
12489
+ ColumnDef {
12490
+ name: Ident :: new( "bar" ) ,
12491
+ data_type: DataType :: Enum (
12492
+ vec![
12493
+ EnumMember :: NamedValue (
12494
+ "a" . to_string( ) ,
12495
+ Expr :: Value ( Number ( "1" . parse( ) . unwrap( ) , false ) )
12496
+ ) ,
12497
+ EnumMember :: NamedValue (
12498
+ "b" . to_string( ) ,
12499
+ Expr :: Value ( Number ( "2" . parse( ) . unwrap( ) , false ) )
12500
+ )
12501
+ ] ,
12502
+ Some ( 16 )
12503
+ ) ,
12504
+ collation: None ,
12505
+ options: vec![ ] ,
12506
+ } ,
12507
+ ColumnDef {
12508
+ name: Ident :: new( "baz" ) ,
12509
+ data_type: DataType :: Enum (
12510
+ vec![
12511
+ EnumMember :: Name ( "a" . to_string( ) ) ,
12512
+ EnumMember :: Name ( "b" . to_string( ) )
12513
+ ] ,
12514
+ None
12515
+ ) ,
12516
+ collation: None ,
12517
+ options: vec![ ] ,
12518
+ }
12519
+ ] ,
12520
+ columns
12521
+ ) ;
12522
+ }
12523
+ _ => unreachable ! ( ) ,
12524
+ }
12525
+
12526
+ // invalid case missing value for enum pair
12527
+ std:: assert_eq!(
12528
+ all_dialects( )
12529
+ . parse_sql_statements( "CREATE TABLE t0 (foo ENUM8('a' = 1, 'b' = ))" )
12530
+ . unwrap_err( ) ,
12531
+ ParserError :: ParserError ( "Expected: a value, found: )" . to_string( ) )
12532
+ ) ;
12533
+
12534
+ // invalid case that name is not a string
12535
+ std:: assert_eq!(
12536
+ all_dialects( )
12537
+ . parse_sql_statements( "CREATE TABLE t0 (foo ENUM8('a' = 1, 2))" )
12538
+ . unwrap_err( ) ,
12539
+ ParserError :: ParserError ( "Expected: literal string, found: 2" . to_string( ) )
12540
+ ) ;
12541
+ }
0 commit comments