1
0
Fork 0

Merging upstream version 26.16.4.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-04 09:27:42 +02:00
parent c0dccc98e9
commit 542c175872
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
57 changed files with 54950 additions and 53265 deletions

View file

@ -11,6 +11,7 @@ class TestSnowflake(Validator):
dialect = "snowflake"
def test_snowflake(self):
self.validate_identity("SELECT GET(a, b)")
self.assertEqual(
# Ensures we don't fail when generating ParseJSON with the `safe` arg set to `True`
self.validate_identity("""SELECT TRY_PARSE_JSON('{"x: 1}')""").sql(),
@ -22,7 +23,7 @@ class TestSnowflake(Validator):
self.assertEqual(expr.sql(dialect="snowflake"), "SELECT APPROX_TOP_K(C4, 3, 5) FROM t")
self.validate_identity("INSERT INTO test VALUES (x'48FAF43B0AFCEF9B63EE3A93EE2AC2')")
self.validate_identity("exclude := [foo]")
self.validate_identity("SELECT STAR(tbl, exclude := [foo])")
self.validate_identity("SELECT CAST([1, 2, 3] AS VECTOR(FLOAT, 3))")
self.validate_identity("SELECT CONNECT_BY_ROOT test AS test_column_alias")
self.validate_identity("SELECT number").selects[0].assert_is(exp.Column)
@ -110,6 +111,10 @@ class TestSnowflake(Validator):
"SELECT 1 put",
"SELECT 1 AS put",
)
self.validate_identity(
"SELECT 1 get",
"SELECT 1 AS get",
)
self.validate_identity(
"WITH t (SELECT 1 AS c) SELECT c FROM t",
"WITH t AS (SELECT 1 AS c) SELECT c FROM t",
@ -2465,6 +2470,33 @@ SINGLE = TRUE""",
check_command_warning=True,
)
def test_get_from_stage(self):
self.validate_identity('GET @"my_DB"."schEMA1"."MYstage" \'file:///dir/tmp.csv\'')
self.validate_identity("GET @s1/test 'file:///dir/tmp.csv'")
# GET with file path and stage ref containing spaces (wrapped in single quotes)
ast = parse_one("GET '@s1/my folder' 'file://my file.txt'", read="snowflake")
self.assertIsInstance(ast, exp.Get)
self.assertEqual(ast.args["target"], exp.Var(this="'@s1/my folder'"))
self.assertEqual(ast.this, exp.Literal(this="file://my file.txt", is_string=True))
self.assertEqual(ast.sql("snowflake"), "GET '@s1/my folder' 'file://my file.txt'")
# expression with additional properties
ast = parse_one("GET @stage1/folder 'file:///tmp/my.txt' PARALLEL = 1", read="snowflake")
self.assertIsInstance(ast, exp.Get)
self.assertEqual(ast.args["target"], exp.Var(this="@stage1/folder"))
self.assertEqual(ast.this, exp.Literal(this="file:///tmp/my.txt", is_string=True))
properties = ast.args.get("properties")
props_dict = {prop.this.this: prop.args["value"].this for prop in properties.expressions}
self.assertEqual(props_dict, {"PARALLEL": "1"})
# the unquoted URI variant is not fully supported yet
self.validate_identity("GET @%table file:///dir/tmp.csv", check_command_warning=True)
self.validate_identity(
"GET @s1/test file:///dir/tmp.csv PARALLEL=1",
check_command_warning=True,
)
def test_querying_semi_structured_data(self):
self.validate_identity("SELECT $1")
self.validate_identity("SELECT $1.elem")
@ -2578,3 +2610,11 @@ SINGLE = TRUE""",
self.assertEqual(expr.find(exp.Placeholder), exp.Placeholder(this="1"))
self.validate_identity("SELECT :1, :2")
self.validate_identity("SELECT :1 + :2")
def test_max_by_min_by(self):
max_by = self.validate_identity("MAX_BY(DISTINCT selected_col, filtered_col)")
min_by = self.validate_identity("MIN_BY(DISTINCT selected_col, filtered_col)")
for node in (max_by, min_by):
self.assertEqual(len(node.this.expressions), 1)
self.assertIsInstance(node.expression, exp.Column)