From 05c9b229fb5eb9216d87f2d3ba99430cee4b4d24 Mon Sep 17 00:00:00 2001 From: osipovartem Date: Wed, 23 Sep 2026 10:45:17 +0300 Subject: [PATCH] Reject quoted structured OBJECT fields --- src/parser/mod.rs | 3 +++ tests/sqlparser_snowflake.rs | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 1d5261440..3271a5796 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -13902,6 +13902,9 @@ impl<'a> Parser<'a> { fn parse_structured_object_type_def(&mut self) -> Result, ParserError> { self.expect_token(&Token::LParen)?; let fields = self.parse_comma_separated(|parser| { + if matches!(parser.peek_token_ref().token, Token::SingleQuotedString(_)) { + return parser.expected("an object field identifier", parser.peek_token()); + } let name = parser.parse_identifier()?; let data_type = parser.parse_data_type()?; let options = if parser.parse_keywords(&[Keyword::NOT, Keyword::NULL]) { diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 12e5792a0..f02d46213 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -5561,6 +5561,8 @@ fn test_structured_object_type() { fn test_structured_object_type_errors() { for sql in [ "CREATE TABLE t (o OBJECT(VARCHAR))", + "CREATE TABLE t (o OBJECT('json'))", + "CREATE TABLE t (o OBJECT('city' VARCHAR))", "CREATE TABLE t (o OBJECT(city VARCHAR NULL))", "CREATE TABLE t (o OBJECT(city VARCHAR)", ] {