@@ -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 ,
@@ -12440,3 +12441,83 @@ fn test_reserved_keywords_for_identifiers() {
12440
12441
let sql = "SELECT MAX(interval) FROM tbl" ;
12441
12442
dialects. parse_sql_statements ( sql) . unwrap ( ) ;
12442
12443
}
12444
+
12445
+ #[ test]
12446
+ fn parse_create_table_with_enum_types ( ) {
12447
+ let sql = "CREATE TABLE t0 (foo ENUM8('a' = 1, 'b' = 2), bar ENUM16('a' = 1, 'b' = 2), baz ENUM('a', 'b'))" ;
12448
+ match all_dialects ( ) . verified_stmt ( sql) {
12449
+ Statement :: CreateTable ( CreateTable { name, columns, .. } ) => {
12450
+ std:: assert_eq!( name. to_string( ) , "t0" ) ;
12451
+ std:: assert_eq!(
12452
+ vec![
12453
+ ColumnDef {
12454
+ name: Ident :: new( "foo" ) ,
12455
+ data_type: DataType :: Enum (
12456
+ vec![
12457
+ EnumMember :: NamedValue (
12458
+ "a" . to_string( ) ,
12459
+ Expr :: Value ( Number ( "1" . parse( ) . unwrap( ) , false ) )
12460
+ ) ,
12461
+ EnumMember :: NamedValue (
12462
+ "b" . to_string( ) ,
12463
+ Expr :: Value ( Number ( "2" . parse( ) . unwrap( ) , false ) )
12464
+ )
12465
+ ] ,
12466
+ Some ( 8 )
12467
+ ) ,
12468
+ collation: None ,
12469
+ options: vec![ ] ,
12470
+ } ,
12471
+ ColumnDef {
12472
+ name: Ident :: new( "bar" ) ,
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 ( 16 )
12485
+ ) ,
12486
+ collation: None ,
12487
+ options: vec![ ] ,
12488
+ } ,
12489
+ ColumnDef {
12490
+ name: Ident :: new( "baz" ) ,
12491
+ data_type: DataType :: Enum (
12492
+ vec![
12493
+ EnumMember :: Name ( "a" . to_string( ) ) ,
12494
+ EnumMember :: Name ( "b" . to_string( ) )
12495
+ ] ,
12496
+ None
12497
+ ) ,
12498
+ collation: None ,
12499
+ options: vec![ ] ,
12500
+ }
12501
+ ] ,
12502
+ columns
12503
+ ) ;
12504
+ }
12505
+ _ => unreachable ! ( ) ,
12506
+ }
12507
+
12508
+ // invalid case missing value for enum pair
12509
+ std:: assert_eq!(
12510
+ all_dialects( )
12511
+ . parse_sql_statements( "CREATE TABLE t0 (foo ENUM8('a' = 1, 'b' = ))" )
12512
+ . unwrap_err( ) ,
12513
+ ParserError :: ParserError ( "Expected: a value, found: )" . to_string( ) )
12514
+ ) ;
12515
+
12516
+ // invalid case that name is not a string
12517
+ std:: assert_eq!(
12518
+ all_dialects( )
12519
+ . parse_sql_statements( "CREATE TABLE t0 (foo ENUM8('a' = 1, 2))" )
12520
+ . unwrap_err( ) ,
12521
+ ParserError :: ParserError ( "Expected: literal string, found: 2" . to_string( ) )
12522
+ ) ;
12523
+ }
0 commit comments