From 8083bd2946c83938a5dec2ffeacd338ee4f4672e Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Fri, 31 Jan 2025 16:38:05 +0200 Subject: [PATCH 01/13] Added ShowObjects statement --- src/ast/mod.rs | 37 +++++++++++++++++++++++++++++++++++++ src/ast/spans.rs | 1 + src/keywords.rs | 1 + 3 files changed, 39 insertions(+) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 17b5276aa..375a8df07 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -2980,6 +2980,32 @@ pub enum Statement { show_options: ShowStatementOptions, }, /// ```sql + /// SHOW [ TERSE ] OBJECTS [ LIKE '' ] + /// [ IN + /// { + /// ACCOUNT | + /// + /// DATABASE | + /// DATABASE | + /// + /// SCHEMA | + /// SCHEMA | + /// + /// + /// APPLICATION | + /// APPLICATION PACKAGE | + /// } + /// ] + /// [ STARTS WITH '' ] + /// [ LIMIT [ FROM '' ] ] + /// ``` + /// Snowflake-specific statement + /// + ShowObjects { + terse: bool, + options: ShowStatementOptions, + }, + /// ```sql /// SHOW TABLES /// ``` ShowTables { @@ -4642,6 +4668,17 @@ impl fmt::Display for Statement { )?; Ok(()) } + Statement::ShowObjects { + terse, + show_options, + } => { + write!( + f, + "SHOW {terse}OBJECTS{show_options}", + terse = if *terse { "TERSE " } else { "" }, + )?; + Ok(()) + } Statement::ShowTables { terse, history, diff --git a/src/ast/spans.rs b/src/ast/spans.rs index f37c0194f..09c323622 100644 --- a/src/ast/spans.rs +++ b/src/ast/spans.rs @@ -490,6 +490,7 @@ impl Spanned for Statement { Statement::DropPolicy { .. } => Span::empty(), Statement::ShowDatabases { .. } => Span::empty(), Statement::ShowSchemas { .. } => Span::empty(), + Statement::ShowObjects { .. } => Span::empty(), Statement::ShowViews { .. } => Span::empty(), Statement::LISTEN { .. } => Span::empty(), Statement::NOTIFY { .. } => Span::empty(), diff --git a/src/keywords.rs b/src/keywords.rs index 5937d7755..9163b3069 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -586,6 +586,7 @@ define_keywords!( NUMERIC, NVARCHAR, OBJECT, + OBJECTS, OCCURRENCES_REGEX, OCTETS, OCTET_LENGTH, From 1d71037aa50778752e30a18ba9bd2a728196aaed Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Fri, 31 Jan 2025 17:32:44 +0200 Subject: [PATCH 02/13] Parsing, next tests --- src/dialect/snowflake.rs | 19 +++++++++++++++++++ src/parser/mod.rs | 5 +++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index d775ffc36..699436795 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -182,6 +182,13 @@ impl Dialect for SnowflakeDialect { return Some(parse_file_staging_command(kw, parser)); } + if parser.parse_keyword(Keyword::SHOW) { + let terse = parser.parse_keyword(Keyword::TERSE); + if parser.parse_keyword(Keyword::OBJECTS) { + return Some(parse_show_objects(terse, parser)); + } + } + None } @@ -1054,3 +1061,15 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result +fn parse_show_objects(terse: bool, parser: &mut Parser) -> Result { + let options = parser.parse_show_stmt_options()?; + Ok( + Statement::ShowObjects { + terse, + options, + } + ) +} diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 28cba0393..092b6d2a7 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -14171,8 +14171,9 @@ impl<'a> Parser<'a> { } false } - - fn parse_show_stmt_options(&mut self) -> Result { + + //Made this public to be able to parse it in Snowflake dialect for ShowObjects statement + pub fn parse_show_stmt_options(&mut self) -> Result { let show_in; let mut filter_position = None; if self.dialect.supports_show_like_before_in() { From e745fb27cfeff254e267d1835717d5bffc5bb747 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Fri, 31 Jan 2025 17:36:16 +0200 Subject: [PATCH 03/13] Small comment --- src/dialect/snowflake.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 699436795..01f7a5209 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -1065,6 +1065,8 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result fn parse_show_objects(terse: bool, parser: &mut Parser) -> Result { + //TODO: Copy some functionality of parse_show_stmt_options() into another function, + // since it has more statemtns that we sholdun'ts support let options = parser.parse_show_stmt_options()?; Ok( Statement::ShowObjects { From c0f4f3c88891f7978ff598f8687adf148547cb14 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Fri, 31 Jan 2025 18:08:32 +0200 Subject: [PATCH 04/13] Tests done according to other SHOW statements --- src/ast/mod.rs | 2 +- src/dialect/snowflake.rs | 4 ++-- tests/sqlparser_snowflake.rs | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 375a8df07..147b6f6ad 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -3003,7 +3003,7 @@ pub enum Statement { /// ShowObjects { terse: bool, - options: ShowStatementOptions, + show_options: ShowStatementOptions, }, /// ```sql /// SHOW TABLES diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 01f7a5209..0aa75f63a 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -1067,11 +1067,11 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result Result { //TODO: Copy some functionality of parse_show_stmt_options() into another function, // since it has more statemtns that we sholdun'ts support - let options = parser.parse_show_stmt_options()?; + let show_options = parser.parse_show_stmt_options()?; Ok( Statement::ShowObjects { terse, - options, + show_options, } ) } diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index c68ada3c9..8f0fe2489 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2975,6 +2975,25 @@ fn test_parse_show_schemas() { snowflake().verified_stmt("SHOW SCHEMAS IN DATABASE STARTS WITH 'abc' LIMIT 20 FROM 'xyz'"); } +#[test] +fn test_parse_show_objects() { + //Only happy path for now + snowflake().verified_stmt("SHOW OBJECTS"); + snowflake().verified_stmt("SHOW OBJECTS IN abc"); + snowflake().verified_stmt("SHOW OBJECTS LIKE '%test%' IN abc"); + snowflake().verified_stmt("SHOW OBJECTS IN ACCOUNT"); + snowflake().verified_stmt("SHOW OBJECTS IN DATABASE"); + snowflake().verified_stmt("SHOW OBJECTS IN DATABASE abc"); + snowflake().verified_stmt("SHOW OBJECTS IN SCHEMA"); + snowflake().verified_stmt("SHOW OBJECTS IN SCHEMA abc"); + snowflake().verified_stmt("SHOW TERSE OBJECTS"); + snowflake().verified_stmt("SHOW TERSE OBJECTS IN abc"); + snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc"); + snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b'"); + snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10"); + snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10 FROM 'x'"); +} + #[test] fn test_parse_show_tables() { snowflake().verified_stmt("SHOW TABLES"); From 01615ef40e4d9d8f4ae760ff287993a3fdeb8bc4 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Mon, 3 Feb 2025 14:52:11 +0200 Subject: [PATCH 05/13] Removed unnecessary comments --- src/dialect/snowflake.rs | 2 -- src/parser/mod.rs | 1 - tests/sqlparser_snowflake.rs | 1 - 3 files changed, 4 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 0aa75f63a..2bf223c6c 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -1065,8 +1065,6 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result fn parse_show_objects(terse: bool, parser: &mut Parser) -> Result { - //TODO: Copy some functionality of parse_show_stmt_options() into another function, - // since it has more statemtns that we sholdun'ts support let show_options = parser.parse_show_stmt_options()?; Ok( Statement::ShowObjects { diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 092b6d2a7..9536c368a 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -14172,7 +14172,6 @@ impl<'a> Parser<'a> { false } - //Made this public to be able to parse it in Snowflake dialect for ShowObjects statement pub fn parse_show_stmt_options(&mut self) -> Result { let show_in; let mut filter_position = None; diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 8f0fe2489..36866b6aa 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2977,7 +2977,6 @@ fn test_parse_show_schemas() { #[test] fn test_parse_show_objects() { - //Only happy path for now snowflake().verified_stmt("SHOW OBJECTS"); snowflake().verified_stmt("SHOW OBJECTS IN abc"); snowflake().verified_stmt("SHOW OBJECTS LIKE '%test%' IN abc"); From e13a1b844b176746dbc5f04987e0b97d78df88b4 Mon Sep 17 00:00:00 2001 From: Denys Tsomenko Date: Tue, 4 Feb 2025 20:04:39 +0200 Subject: [PATCH 06/13] Fix test in other that object cases. Cargo fmt. --- src/dialect/snowflake.rs | 19 ++++++++++--------- src/parser/mod.rs | 2 +- tests/sqlparser_snowflake.rs | 3 ++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 2bf223c6c..5db38603b 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -23,9 +23,10 @@ use crate::ast::helpers::stmt_data_loading::{ StageLoadSelectItem, StageParamsObject, }; use crate::ast::{ - ColumnOption, ColumnPolicy, ColumnPolicyProperty, Ident, IdentityParameters, IdentityProperty, - IdentityPropertyFormatKind, IdentityPropertyKind, IdentityPropertyOrder, ObjectName, - RowAccessPolicy, Statement, TagsColumnOption, WrappedCollection, + ColumnOption, ColumnPolicy, ColumnPolicyProperty, Ident, + IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, + IdentityPropertyOrder, ObjectName, RowAccessPolicy, Statement, TagsColumnOption, + WrappedCollection, }; use crate::dialect::{Dialect, Precedence}; use crate::keywords::Keyword; @@ -186,6 +187,8 @@ impl Dialect for SnowflakeDialect { let terse = parser.parse_keyword(Keyword::TERSE); if parser.parse_keyword(Keyword::OBJECTS) { return Some(parse_show_objects(terse, parser)); + } else { + return Some(parser.parse_show()); } } @@ -1066,10 +1069,8 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result fn parse_show_objects(terse: bool, parser: &mut Parser) -> Result { let show_options = parser.parse_show_stmt_options()?; - Ok( - Statement::ShowObjects { - terse, - show_options, - } - ) + Ok(Statement::ShowObjects { + terse, + show_options, + }) } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 9536c368a..1fe7eb040 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -14171,7 +14171,7 @@ impl<'a> Parser<'a> { } false } - + pub fn parse_show_stmt_options(&mut self) -> Result { let show_in; let mut filter_position = None; diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 36866b6aa..36b864e4e 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2990,7 +2990,8 @@ fn test_parse_show_objects() { snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc"); snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b'"); snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10"); - snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10 FROM 'x'"); + snowflake() + .verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10 FROM 'x'"); } #[test] From 7768f6fba55427ee3ff3e8a8cbb3df9823e94b71 Mon Sep 17 00:00:00 2001 From: DanCodedThis <94703934+DanCodedThis@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:41:35 +0200 Subject: [PATCH 07/13] Update src/parser/mod.rs As suggested Co-authored-by: Ifeanyi Ubah --- src/parser/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 1fe7eb040..fead6e7b4 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -14172,7 +14172,7 @@ impl<'a> Parser<'a> { false } - pub fn parse_show_stmt_options(&mut self) -> Result { + pub(crate) fn parse_show_stmt_options(&mut self) -> Result { let show_in; let mut filter_position = None; if self.dialect.supports_show_like_before_in() { From dd4d972b2369b566aba374284136dad36ce68392 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 13:10:43 +0200 Subject: [PATCH 08/13] Should fix the defer to generic dialect --- src/dialect/snowflake.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 5db38603b..b628bbc20 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -187,9 +187,13 @@ impl Dialect for SnowflakeDialect { let terse = parser.parse_keyword(Keyword::TERSE); if parser.parse_keyword(Keyword::OBJECTS) { return Some(parse_show_objects(terse, parser)); - } else { - return Some(parser.parse_show()); } + //Give back Keyword::TERSE + if terse { + parser.prev_token(); + } + //Give back Keyword::SHOW + parser.prev_token(); } None From 0a4fcd2e79d928a8011b7bfd45a6aafba249080f Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 14:47:05 +0200 Subject: [PATCH 09/13] Suggested done --- src/ast/mod.rs | 36 ++++++++++++------------------------ src/dialect/snowflake.rs | 11 +++++------ tests/sqlparser_snowflake.rs | 21 +++++++++++++++++++++ 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 147b6f6ad..6df009467 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -2980,31 +2980,11 @@ pub enum Statement { show_options: ShowStatementOptions, }, /// ```sql - /// SHOW [ TERSE ] OBJECTS [ LIKE '' ] - /// [ IN - /// { - /// ACCOUNT | - /// - /// DATABASE | - /// DATABASE | - /// - /// SCHEMA | - /// SCHEMA | - /// - /// - /// APPLICATION | - /// APPLICATION PACKAGE | - /// } - /// ] - /// [ STARTS WITH '' ] - /// [ LIMIT [ FROM '' ] ] + /// SHOW OBJECTS LIKE 'line%' IN mydb.public /// ``` /// Snowflake-specific statement /// - ShowObjects { - terse: bool, - show_options: ShowStatementOptions, - }, + ShowObjects(ShowObjects), /// ```sql /// SHOW TABLES /// ``` @@ -4668,10 +4648,10 @@ impl fmt::Display for Statement { )?; Ok(()) } - Statement::ShowObjects { + Statement::ShowObjects(ShowObjects { terse, show_options, - } => { + }) => { write!( f, "SHOW {terse}OBJECTS{show_options}", @@ -8310,6 +8290,14 @@ impl fmt::Display for ShowStatementIn { } } +#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))] +pub struct ShowObjects { + pub terse: bool, + pub show_options: ShowStatementOptions, +} + /// MSSQL's json null clause /// /// ```plaintext diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index b628bbc20..419699f78 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -23,10 +23,9 @@ use crate::ast::helpers::stmt_data_loading::{ StageLoadSelectItem, StageParamsObject, }; use crate::ast::{ - ColumnOption, ColumnPolicy, ColumnPolicyProperty, Ident, - IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, - IdentityPropertyOrder, ObjectName, RowAccessPolicy, Statement, TagsColumnOption, - WrappedCollection, + ColumnOption, ColumnPolicy, ColumnPolicyProperty, Ident, IdentityParameters, IdentityProperty, + IdentityPropertyFormatKind, IdentityPropertyKind, IdentityPropertyOrder, ObjectName, + RowAccessPolicy, ShowObjects, Statement, TagsColumnOption, WrappedCollection, }; use crate::dialect::{Dialect, Precedence}; use crate::keywords::Keyword; @@ -1073,8 +1072,8 @@ fn parse_column_tags(parser: &mut Parser, with: bool) -> Result fn parse_show_objects(terse: bool, parser: &mut Parser) -> Result { let show_options = parser.parse_show_stmt_options()?; - Ok(Statement::ShowObjects { + Ok(Statement::ShowObjects(ShowObjects { terse, show_options, - }) + })) } diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 36b864e4e..a98d95747 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2992,6 +2992,27 @@ fn test_parse_show_objects() { snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10"); snowflake() .verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc STARTS WITH 'b' LIMIT 10 FROM 'x'"); + match snowflake().verified_stmt("SHOW TERSE OBJECTS LIKE '%test%' IN abc") { + Statement::ShowObjects(ShowObjects { + terse, + show_options, + }) => { + assert!(terse); + let name = show_options + .show_in + .unwrap() + .parent_name + .unwrap() + .to_string(); + assert_eq!("abc", name); + let like = match show_options.filter_position { + Some(ShowStatementFilterPosition::Infix(ShowStatementFilter::Like(val))) => val, + _ => unreachable!(), + }; + assert_eq!("%test%", like); + } + _ => unreachable!(), + } } #[test] From bb86d890499a9723af8b5235a1f1f802d1048ed3 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 14:51:02 +0200 Subject: [PATCH 10/13] import github fail --- src/dialect/snowflake.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 0108130be..305b8af42 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -23,10 +23,7 @@ use crate::ast::helpers::stmt_data_loading::{ StageLoadSelectItem, StageParamsObject, }; use crate::ast::{ - ColumnOption, ColumnPolicy, ColumnPolicyProperty, CopyIntoSnowflakeKind, Ident, - IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, - IdentityPropertyOrder, ObjectName, RowAccessPolicy, Statement, TagsColumnOption, - WrappedCollection, + ColumnOption, ColumnPolicy, ColumnPolicyProperty, CopyIntoSnowflakeKind, Ident, IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, IdentityPropertyOrder, ObjectName, RowAccessPolicy, ShowObjects, Statement, TagsColumnOption, WrappedCollection }; use crate::dialect::{Dialect, Precedence}; use crate::keywords::Keyword; From b7bcc3b417ddc0bac68ccc5e470ada37692de5c5 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 14:57:33 +0200 Subject: [PATCH 11/13] Added `TERSE` in other snowflake tests, just in case --- tests/sqlparser_snowflake.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index f05f775df..a9789a891 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -3083,6 +3083,7 @@ fn test_parentheses_overflow() { #[test] fn test_show_databases() { snowflake().verified_stmt("SHOW DATABASES"); + snowflake().verified_stmt("SHOW TERSE DATABASES"); snowflake().verified_stmt("SHOW DATABASES HISTORY"); snowflake().verified_stmt("SHOW DATABASES LIKE '%abc%'"); snowflake().verified_stmt("SHOW DATABASES STARTS WITH 'demo_db'"); @@ -3095,6 +3096,7 @@ fn test_show_databases() { #[test] fn test_parse_show_schemas() { snowflake().verified_stmt("SHOW SCHEMAS"); + snowflake().verified_stmt("SHOW TERSE SCHEMAS"); snowflake().verified_stmt("SHOW SCHEMAS IN ACCOUNT"); snowflake().verified_stmt("SHOW SCHEMAS IN ACCOUNT abc"); snowflake().verified_stmt("SHOW SCHEMAS IN DATABASE"); @@ -3147,6 +3149,7 @@ fn test_parse_show_objects() { #[test] fn test_parse_show_tables() { snowflake().verified_stmt("SHOW TABLES"); + snowflake().verified_stmt("SHOW TERSE TABLES"); snowflake().verified_stmt("SHOW TABLES IN ACCOUNT"); snowflake().verified_stmt("SHOW TABLES IN DATABASE"); snowflake().verified_stmt("SHOW TABLES IN DATABASE xyz"); @@ -3169,6 +3172,7 @@ fn test_parse_show_tables() { #[test] fn test_show_views() { snowflake().verified_stmt("SHOW VIEWS"); + snowflake().verified_stmt("SHOW TERSE VIEWS"); snowflake().verified_stmt("SHOW VIEWS IN ACCOUNT"); snowflake().verified_stmt("SHOW VIEWS IN DATABASE"); snowflake().verified_stmt("SHOW VIEWS IN DATABASE xyz"); From 1812ace0636d03c4b811fddbe1dd2dd6240ab4b5 Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 15:07:03 +0200 Subject: [PATCH 12/13] no unwraps --- tests/sqlparser_snowflake.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index a9789a891..7cfd24944 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -3129,12 +3129,12 @@ fn test_parse_show_objects() { show_options, }) => { assert!(terse); - let name = show_options - .show_in - .unwrap() - .parent_name - .unwrap() - .to_string(); + let name = match show_options.show_in { + Some(ShowStatementIn { parent_name: Some(val), .. }) => { + val.to_string() + } + _ => unreachable!(), + }; assert_eq!("abc", name); let like = match show_options.filter_position { Some(ShowStatementFilterPosition::Infix(ShowStatementFilter::Like(val))) => val, From 6f562d81016f7aa7b72791cc3e7cc3331cdd262b Mon Sep 17 00:00:00 2001 From: DanCodedThis Date: Thu, 6 Feb 2025 15:07:50 +0200 Subject: [PATCH 13/13] cargo fmt --- src/dialect/snowflake.rs | 5 ++++- tests/sqlparser_snowflake.rs | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 305b8af42..68166cbef 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -23,7 +23,10 @@ use crate::ast::helpers::stmt_data_loading::{ StageLoadSelectItem, StageParamsObject, }; use crate::ast::{ - ColumnOption, ColumnPolicy, ColumnPolicyProperty, CopyIntoSnowflakeKind, Ident, IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, IdentityPropertyOrder, ObjectName, RowAccessPolicy, ShowObjects, Statement, TagsColumnOption, WrappedCollection + ColumnOption, ColumnPolicy, ColumnPolicyProperty, CopyIntoSnowflakeKind, Ident, + IdentityParameters, IdentityProperty, IdentityPropertyFormatKind, IdentityPropertyKind, + IdentityPropertyOrder, ObjectName, RowAccessPolicy, ShowObjects, Statement, TagsColumnOption, + WrappedCollection, }; use crate::dialect::{Dialect, Precedence}; use crate::keywords::Keyword; diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 7cfd24944..ffcd4e69d 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -3130,9 +3130,10 @@ fn test_parse_show_objects() { }) => { assert!(terse); let name = match show_options.show_in { - Some(ShowStatementIn { parent_name: Some(val), .. }) => { - val.to_string() - } + Some(ShowStatementIn { + parent_name: Some(val), + .. + }) => val.to_string(), _ => unreachable!(), }; assert_eq!("abc", name);