@@ -470,6 +470,12 @@ impl<'a> DFParser<'a> {
470470 Token :: Word ( w) => {
471471 match w. keyword {
472472 Keyword :: CREATE => {
473+ if let Token :: Word ( w) = self . parser . peek_nth_token ( 2 ) . token {
474+ // use native parser for CREATE EXTERNAL VOLUME
475+ if w. keyword == Keyword :: VOLUME {
476+ / return self . parse_and_handle_statement ( ) ;
477+ }
478+ }
473479 self . parser . next_token ( ) ; // CREATE
474480 self . parse_create ( )
475481 }
@@ -695,14 +701,10 @@ impl<'a> DFParser<'a> {
695701
696702 /// Parse a SQL `CREATE` statement handling `CREATE EXTERNAL TABLE`
697703 pub fn parse_create ( & mut self ) -> Result < Statement , DataFusionError > {
698- if self
699- . parser
700- . parse_keywords ( & [ Keyword :: EXTERNAL , Keyword :: TABLE ] )
701- {
704+ if self . parser . parse_keyword ( Keyword :: EXTERNAL ) {
702705 self . parse_create_external_table ( false )
703706 } else if self . parser . parse_keyword ( Keyword :: UNBOUNDED ) {
704- self . parser
705- . expect_keywords ( & [ Keyword :: EXTERNAL , Keyword :: TABLE ] ) ?;
707+ self . parser . expect_keyword ( Keyword :: EXTERNAL ) ?;
706708 self . parse_create_external_table ( true )
707709 } else {
708710 // Push back CREATE
@@ -860,6 +862,7 @@ impl<'a> DFParser<'a> {
860862 . parser
861863 . parse_one_of_keywords ( & [ Keyword :: TEMP , Keyword :: TEMPORARY ] )
862864 . is_some ( ) ;
865+ self . parser . expect_keyword ( Keyword :: TABLE ) ?;
863866 let if_not_exists =
864867 self . parser
865868 . parse_keywords ( & [ Keyword :: IF , Keyword :: NOT , Keyword :: EXISTS ] ) ;
0 commit comments