From e9af3cf954d36694fa74af40eb470c016f78d50e Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 15:48:40 +0530 Subject: [PATCH 1/6] Add ObjectType Sequence --- src/ast/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 019622433..79b2cc9c6 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -2844,6 +2844,7 @@ pub enum ObjectType { Index, Schema, Role, + Sequence, } impl fmt::Display for ObjectType { @@ -2854,6 +2855,7 @@ impl fmt::Display for ObjectType { ObjectType::Index => "INDEX", ObjectType::Schema => "SCHEMA", ObjectType::Role => "ROLE", + ObjectType::Sequence => "SEQUENCE", }) } } From bd7fcc0af1a1285ee9bcc26cdc9b51ce12a38f31 Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 20:47:45 +0530 Subject: [PATCH 2/6] Drop sequence test cases added. --- tests/sqlparser_postgres.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 93be8e4ad..1ed3e0316 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -22,6 +22,25 @@ use sqlparser::ast::*; use sqlparser::dialect::{GenericDialect, PostgreSqlDialect}; use sqlparser::parser::ParserError; + +#[test] +fn parse_drop_sequence() { + // SimpleLogger::new().init().unwrap(); + let sql1 = "DROP SEQUENCE IF EXISTS name0 CASCADE"; + pg().one_statement_parses_to(sql1, "DROP SEQUENCE IF EXISTS name0 CASCADE"); + let sql2 = "DROP SEQUENCE IF EXISTS name1 RESTRICT"; + pg().one_statement_parses_to(sql2, "DROP SEQUENCE IF EXISTS name1 RESTRICT"); + let sql3 = "DROP SEQUENCE name2 CASCADE"; + pg().one_statement_parses_to(sql3, "DROP SEQUENCE name2 CASCADE"); + let sql4 = "DROP SEQUENCE name2"; + pg().one_statement_parses_to(sql4, "DROP SEQUENCE name2"); + let sql5 = "DROP SEQUENCE name0 CASCADE"; + pg().one_statement_parses_to(sql5, "DROP SEQUENCE name0 CASCADE"); + let sql6 = "DROP SEQUENCE name1 RESTRICT"; + pg().one_statement_parses_to(sql6, "DROP SEQUENCE name1 RESTRICT"); +} + + #[test] fn parse_create_table_with_defaults() { let sql = "CREATE TABLE public.customer ( From be9ab3b3040f2edbcfb88da51f72508ab3d31dd2 Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 20:59:35 +0530 Subject: [PATCH 3/6] Parser and Drop statement Display updated. --- src/ast/mod.rs | 8 ++++++-- src/parser.rs | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 79b2cc9c6..ab7af0167 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -1184,6 +1184,9 @@ pub enum Statement { /// Whether `CASCADE` was specified. This will be `false` when /// `RESTRICT` or no drop behavior at all was specified. cascade: bool, + /// Whether `RESTRICT` was specified. This will be `false` when + /// `CASCADE` or no drop behavior at all was specified. + restrict: bool, /// Hive allows you specify whether the table's stored data will be /// deleted along with the dropped table purge: bool, @@ -2124,14 +2127,15 @@ impl fmt::Display for Statement { if_exists, names, cascade, - purge, + restrict, purge, } => write!( f, - "DROP {}{} {}{}{}", + "DROP {}{} {}{}{}{}", object_type, if *if_exists { " IF EXISTS" } else { "" }, display_comma_separated(names), if *cascade { " CASCADE" } else { "" }, + if *restrict { " RESTRICT" } else { "" }, if *purge { " PURGE" } else { "" } ), Statement::Discard { object_type } => { diff --git a/src/parser.rs b/src/parser.rs index 0c0bd9c5a..9aa9498de 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2328,9 +2328,11 @@ impl<'a> Parser<'a> { ObjectType::Role } else if self.parse_keyword(Keyword::SCHEMA) { ObjectType::Schema + } else if self.parse_keyword(Keyword::SEQUENCE) { + ObjectType::Sequence } else { return self.expected( - "TABLE, VIEW, INDEX, ROLE, or SCHEMA after DROP", + "TABLE, VIEW, INDEX, ROLE, SCHEMA, or SEQUENCE after DROP", self.peek_token(), ); }; From 9b45c51c0ccfe6d21dbd873256b5d5172ed993b5 Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 21:01:51 +0530 Subject: [PATCH 4/6] Parser and Drop statement Display updated. --- src/parser.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser.rs b/src/parser.rs index 9aa9498de..beb49e7d9 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2354,6 +2354,7 @@ impl<'a> Parser<'a> { if_exists, names, cascade, + restrict, purge, }) } From 88391217d856474f4f261643fe239e866837fd4c Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 21:14:00 +0530 Subject: [PATCH 5/6] Fix compile errors --- src/ast/mod.rs | 3 ++- tests/sqlparser_common.rs | 2 ++ tests/sqlparser_postgres.rs | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index ab7af0167..01cc72380 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -2127,7 +2127,8 @@ impl fmt::Display for Statement { if_exists, names, cascade, - restrict, purge, + restrict, + purge, } => write!( f, "DROP {}{} {}{}{}{}", diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index aa4013394..d6b0ff135 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -4463,6 +4463,7 @@ fn parse_drop_table() { names, cascade, purge: _, + .. } => { assert!(!if_exists); assert_eq!(ObjectType::Table, object_type); @@ -4483,6 +4484,7 @@ fn parse_drop_table() { names, cascade, purge: _, + .. } => { assert!(if_exists); assert_eq!(ObjectType::Table, object_type); diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 1ed3e0316..5a14b8088 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -22,7 +22,6 @@ use sqlparser::ast::*; use sqlparser::dialect::{GenericDialect, PostgreSqlDialect}; use sqlparser::parser::ParserError; - #[test] fn parse_drop_sequence() { // SimpleLogger::new().init().unwrap(); @@ -40,7 +39,6 @@ fn parse_drop_sequence() { pg().one_statement_parses_to(sql6, "DROP SEQUENCE name1 RESTRICT"); } - #[test] fn parse_create_table_with_defaults() { let sql = "CREATE TABLE public.customer ( From f832c6cd203f5e8b0fc90a4de72c374ecc3e02c3 Mon Sep 17 00:00:00 2001 From: sam-mmm <2740878+sam-mmm@users.noreply.github.com> Date: Fri, 14 Oct 2022 21:38:11 +0530 Subject: [PATCH 6/6] add new test case --- tests/sqlparser_postgres.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 5a14b8088..7b6828ae4 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -37,6 +37,8 @@ fn parse_drop_sequence() { pg().one_statement_parses_to(sql5, "DROP SEQUENCE name0 CASCADE"); let sql6 = "DROP SEQUENCE name1 RESTRICT"; pg().one_statement_parses_to(sql6, "DROP SEQUENCE name1 RESTRICT"); + let sql7 = "DROP SEQUENCE name1, name2, name3"; + pg().one_statement_parses_to(sql7, "DROP SEQUENCE name1, name2, name3"); } #[test]