From a22c36209dfc923cf9ebb9447fa47f4f8230fb60 Mon Sep 17 00:00:00 2001 From: Yuval Shkolar Date: Tue, 6 Dec 2022 14:11:27 +0200 Subject: [PATCH] Support the type key --- src/parser.rs | 2 +- tests/sqlparser_snowflake.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/parser.rs b/src/parser.rs index 45c472acd..6f8b3cb45 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -3818,7 +3818,7 @@ impl<'a> Parser<'a> { )?, }, // Case when Snowflake Semi-structured data like key:value - Keyword::NoKeyword | Keyword::LOCATION if dialect_of!(self is SnowflakeDialect | GenericDialect) => { + Keyword::NoKeyword | Keyword::LOCATION | Keyword::TYPE if dialect_of!(self is SnowflakeDialect | GenericDialect) => { Ok(Value::UnQuotedString(w.value)) } _ => self.expected( diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 1ec57939c..e10141545 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -169,6 +169,28 @@ fn parse_json_using_colon() { select.projection[0] ); + let sql = "SELECT a:type FROM t"; + let select = snowflake().verified_only_select(sql); + assert_eq!( + SelectItem::UnnamedExpr(Expr::JsonAccess { + left: Box::new(Expr::Identifier(Ident::new("a"))), + operator: JsonOperator::Colon, + right: Box::new(Expr::Value(Value::UnQuotedString("type".to_string()))), + }), + select.projection[0] + ); + + let sql = "SELECT a:location FROM t"; + let select = snowflake().verified_only_select(sql); + assert_eq!( + SelectItem::UnnamedExpr(Expr::JsonAccess { + left: Box::new(Expr::Identifier(Ident::new("a"))), + operator: JsonOperator::Colon, + right: Box::new(Expr::Value(Value::UnQuotedString("location".to_string()))), + }), + select.projection[0] + ); + snowflake().one_statement_parses_to("SELECT a:b::int FROM t", "SELECT CAST(a:b AS INT) FROM t"); }