File tree Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -347,6 +347,7 @@ pub enum SQLStatement {
347
347
/// VALUES (vector of rows to insert)
348
348
values : Vec < Vec < ASTNode > > ,
349
349
} ,
350
+ /// COPY (PostgreSQL-specific)
350
351
SQLCopy {
351
352
/// TABLE
352
353
table_name : SQLObjectName ,
@@ -371,6 +372,11 @@ pub enum SQLStatement {
371
372
/// WHERE
372
373
selection : Option < ASTNode > ,
373
374
} ,
375
+ /// DROP
376
+ SQLDrop {
377
+ object_type : String ,
378
+ name : SQLObjectName ,
379
+ } ,
374
380
/// CREATE VIEW
375
381
SQLCreateView {
376
382
/// View name
@@ -468,6 +474,9 @@ impl ToString for SQLStatement {
468
474
}
469
475
s
470
476
}
477
+ SQLStatement :: SQLDrop { object_type, name } => {
478
+ format ! ( "DROP {} {}" , object_type, name. to_string( ) )
479
+ }
471
480
SQLStatement :: SQLCreateView {
472
481
name,
473
482
query,
Original file line number Diff line number Diff line change @@ -99,6 +99,7 @@ impl Parser {
99
99
"CREATE" => Ok ( self . parse_create ( ) ?) ,
100
100
"DELETE" => Ok ( self . parse_delete ( ) ?) ,
101
101
"INSERT" => Ok ( self . parse_insert ( ) ?) ,
102
+ "DROP" => Ok ( self . parse_drop ( ) ?) ,
102
103
"ALTER" => Ok ( self . parse_alter ( ) ?) ,
103
104
"COPY" => Ok ( self . parse_copy ( ) ?) ,
104
105
_ => parser_err ! ( format!(
@@ -838,6 +839,18 @@ impl Parser {
838
839
}
839
840
}
840
841
842
+ pub fn parse_drop ( & mut self ) -> Result < SQLStatement , ParserError > {
843
+ let object_type = if self . parse_keyword ( "VIEW" ) {
844
+ "VIEW" . to_string ( )
845
+ } else if self . parse_keyword ( "TABLE" ) {
846
+ "TABLE" . to_string ( )
847
+ } else {
848
+ return self . expected ( "VIEW or TABLE after DROP" , self . peek_token ( ) ) ;
849
+ } ;
850
+ let name = self . parse_object_name ( ) ?;
851
+ Ok ( SQLStatement :: SQLDrop { object_type, name } )
852
+ }
853
+
841
854
pub fn parse_alter ( & mut self ) -> Result < SQLStatement , ParserError > {
842
855
self . expect_keyword ( "TABLE" ) ?;
843
856
let _ = self . parse_keyword ( "ONLY" ) ;
Original file line number Diff line number Diff line change @@ -620,6 +620,22 @@ fn parse_create_external_table() {
620
620
}
621
621
}
622
622
623
+ #[ test]
624
+ fn parse_drop ( ) {
625
+ check_one ( "DROP TABLE mytable" , "TABLE" , "mytable" ) ;
626
+ check_one ( "DROP VIEW myview" , "VIEW" , "myview" ) ;
627
+
628
+ fn check_one ( sql : & str , expected_type : & str , expected_name : & str ) {
629
+ match all_dialects ( ) . verified_stmt ( sql) {
630
+ SQLStatement :: SQLDrop { name, object_type } => {
631
+ assert_eq ! ( name. to_string( ) , expected_name) ;
632
+ assert_eq ! ( object_type, expected_type) ;
633
+ }
634
+ _ => unreachable ! ( ) ,
635
+ }
636
+ }
637
+ }
638
+
623
639
#[ test]
624
640
fn parse_alter_table_constraint_primary_key ( ) {
625
641
let sql = "ALTER TABLE bazaar.address \
You can’t perform that action at this time.
0 commit comments