File tree Expand file tree Collapse file tree 4 files changed +61
-10
lines changed
Expand file tree Collapse file tree 4 files changed +61
-10
lines changed Original file line number Diff line number Diff line change @@ -418,9 +418,6 @@ impl Display for CreateTable {
418418 write ! ( f, " WITH TAG ({})" , display_comma_separated( tag. as_slice( ) ) ) ?;
419419 }
420420
421- if let Some ( query) = & self . query {
422- write ! ( f, " AS {query}" ) ?;
423- }
424421 if let Some ( default_charset) = & self . default_charset {
425422 write ! ( f, " DEFAULT CHARSET={default_charset}" ) ?;
426423 }
@@ -440,6 +437,9 @@ impl Display for CreateTable {
440437 if self . strict {
441438 write ! ( f, " STRICT" ) ?;
442439 }
440+ if let Some ( query) = & self . query {
441+ write ! ( f, " AS {query}" ) ?;
442+ }
443443 Ok ( ( ) )
444444 }
445445}
Original file line number Diff line number Diff line change @@ -5418,13 +5418,6 @@ impl<'a> Parser<'a> {
54185418
54195419 let create_table_config = self . parse_optional_create_table_config ( ) ?;
54205420
5421- // Parse optional `AS ( query )`
5422- let query = if self . parse_keyword ( Keyword :: AS ) {
5423- Some ( self . parse_boxed_query ( ) ?)
5424- } else {
5425- None
5426- } ;
5427-
54285421 let default_charset = if self . parse_keywords ( & [ Keyword :: DEFAULT , Keyword :: CHARSET ] ) {
54295422 self . expect_token ( & Token :: Eq ) ?;
54305423 let next_token = self . next_token ( ) ;
@@ -5477,6 +5470,13 @@ impl<'a> Parser<'a> {
54775470 None
54785471 } ;
54795472
5473+ // Parse optional `AS ( query )`
5474+ let query = if self . parse_keyword ( Keyword :: AS ) {
5475+ Some ( self . parse_boxed_query ( ) ?)
5476+ } else {
5477+ None
5478+ } ;
5479+
54805480 Ok ( CreateTableBuilder :: new ( table_name)
54815481 . temporary ( temporary)
54825482 . columns ( columns)
Original file line number Diff line number Diff line change @@ -802,6 +802,30 @@ fn test_query_with_format_clause() {
802802 }
803803}
804804
805+ #[ test]
806+ fn parse_create_table_on_commit_and_as_query ( ) {
807+ let sql = r#"CREATE LOCAL TEMPORARY TABLE test ON COMMIT PRESERVE ROWS AS SELECT 1"# ;
808+ match clickhouse_and_generic ( ) . verified_stmt ( sql) {
809+ Statement :: CreateTable ( CreateTable {
810+ name,
811+ on_commit,
812+ query,
813+ ..
814+ } ) => {
815+ assert_eq ! ( name. to_string( ) , "test" ) ;
816+ assert_eq ! ( on_commit, Some ( OnCommit :: PreserveRows ) ) ;
817+ assert_eq ! (
818+ query. unwrap( ) . body. as_select( ) . unwrap( ) . projection,
819+ vec![ UnnamedExpr ( Expr :: Value ( Value :: Number (
820+ "1" . parse( ) . unwrap( ) ,
821+ false
822+ ) ) ) ]
823+ ) ;
824+ }
825+ _ => unreachable ! ( ) ,
826+ }
827+ }
828+
805829fn clickhouse ( ) -> TestedDialects {
806830 TestedDialects {
807831 dialects : vec ! [ Box :: new( ClickHouseDialect { } ) ] ,
Original file line number Diff line number Diff line change @@ -812,6 +812,33 @@ fn parse_create_table_collate() {
812812 }
813813}
814814
815+ #[ test]
816+ fn parse_create_table_both_options_and_as_query ( ) {
817+ let sql = "CREATE TABLE foo (id INT(11)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb4_0900_ai_ci AS SELECT 1" ;
818+ match mysql_and_generic ( ) . verified_stmt ( sql) {
819+ Statement :: CreateTable ( CreateTable {
820+ name,
821+ collation,
822+ query,
823+ ..
824+ } ) => {
825+ assert_eq ! ( name. to_string( ) , "foo" ) ;
826+ assert_eq ! ( collation, Some ( "utf8mb4_0900_ai_ci" . to_string( ) ) ) ;
827+ assert_eq ! (
828+ query. unwrap( ) . body. as_select( ) . unwrap( ) . projection,
829+ vec![ SelectItem :: UnnamedExpr ( Expr :: Value ( number( "1" ) ) ) ]
830+ ) ;
831+ }
832+ _ => unreachable ! ( ) ,
833+ }
834+
835+ let sql = r"CREATE TABLE foo (id INT(11)) ENGINE=InnoDB AS SELECT 1 DEFAULT CHARSET=utf8mb3" ;
836+ assert ! ( matches!(
837+ mysql_and_generic( ) . parse_sql_statements( sql) ,
838+ Err ( ParserError :: ParserError ( _) )
839+ ) ) ;
840+ }
841+
815842#[ test]
816843fn parse_create_table_comment_character_set ( ) {
817844 let sql = "CREATE TABLE foo (s TEXT CHARACTER SET utf8mb4 COMMENT 'comment')" ;
You can’t perform that action at this time.
0 commit comments