@@ -51,6 +51,7 @@ mod test_utils;
5151use pretty_assertions:: assert_eq;
5252use sqlparser:: ast:: ColumnOption :: Comment ;
5353use sqlparser:: ast:: Expr :: { Identifier , UnaryOp } ;
54+ use sqlparser:: ast:: Value :: Number ;
5455use sqlparser:: test_utils:: all_dialects_except;
5556
5657#[ test]
@@ -9250,7 +9251,7 @@ fn parse_cache_table() {
92509251 format!(
92519252 "CACHE {table_flag} TABLE '{cache_table_name}' OPTIONS('K1' = 'V1', 'K2' = 0.88) {sql}" ,
92529253 )
9253- . as_str( )
9254+ . as_str( )
92549255 ) ,
92559256 Statement :: Cache {
92569257 table_flag: Some ( ObjectName ( vec![ Ident :: new( table_flag) ] ) ) ,
@@ -9275,7 +9276,7 @@ fn parse_cache_table() {
92759276 format!(
92769277 "CACHE {table_flag} TABLE '{cache_table_name}' OPTIONS('K1' = 'V1', 'K2' = 0.88) AS {sql}" ,
92779278 )
9278- . as_str( )
9279+ . as_str( )
92799280 ) ,
92809281 Statement :: Cache {
92819282 table_flag: Some ( ObjectName ( vec![ Ident :: new( table_flag) ] ) ) ,
@@ -11459,7 +11460,7 @@ fn parse_explain_with_option_list() {
1145911460 } ) ,
1146011461 } ,
1146111462 ] ;
11462- run_explain_analyze (
11463+ run_explain_analyze (
1146311464 all_dialects_where ( |d| d. supports_explain_with_utility_options ( ) ) ,
1146411465 "EXPLAIN (ANALYZE, VERBOSE true, WAL OFF, FORMAT YAML, USER_DEF_NUM -100.1) SELECT sqrt(id) FROM foo" ,
1146511466 false ,
@@ -12459,3 +12460,82 @@ fn parse_create_table_with_bit_types() {
1245912460 _ => unreachable ! ( ) ,
1246012461 }
1246112462}
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