1
0
Fork 0

Adding upstream version 20.1.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 21:16:46 +01:00
parent 6a89523da4
commit 5bd573dda1
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
127 changed files with 73384 additions and 73067 deletions

View file

@ -115,7 +115,26 @@ class TestExpressions(unittest.TestCase):
self.assertIsNone(column.find_ancestor(exp.Join))
def test_to_dot(self):
column = parse_one('a.b.c."d".e.f').find(exp.Column)
orig = parse_one('a.b.c."d".e.f')
self.assertEqual(".".join(str(p) for p in orig.parts), 'a.b.c."d".e.f')
self.assertEqual(
".".join(
str(p)
for p in exp.Dot.build(
[
exp.to_table("a.b.c"),
exp.to_identifier("d"),
exp.to_identifier("e"),
exp.to_identifier("f"),
]
).parts
),
"a.b.c.d.e.f",
)
self.assertEqual(".".join(str(p) for p in orig.parts), 'a.b.c."d".e.f')
column = orig.find(exp.Column)
dot = column.to_dot()
self.assertEqual(dot.sql(), 'a.b.c."d".e.f')
@ -198,17 +217,42 @@ class TestExpressions(unittest.TestCase):
"foo.`{bar,er}`",
)
self.assertEqual(exp.table_name(bq_dashed_table, identify=True), '"a-1"."b"."c"')
def test_table(self):
self.assertEqual(exp.table_("a", alias="b"), parse_one("select * from a b").find(exp.Table))
self.assertEqual(exp.table_("a", "").sql(), "a")
self.assertEqual(exp.Table(db=exp.to_identifier("a")).sql(), "a")
def test_replace_tables(self):
self.assertEqual(
exp.replace_tables(
parse_one("select * from a AS a, b, c.a, d.a cross join e.a"),
{"a": "a1", "b": "b.a", "c.a": "c.a2", "d.a": "d2"},
parse_one(
'select * from a AS a, b, c.a, d.a cross join e.a cross join "f-F"."A" cross join G'
),
{
"a": "a1",
"b": "b.a",
"c.a": "c.a2",
"d.a": "d2",
"`f-F`.`A`": '"F"',
"g": "g1.a",
},
dialect="bigquery",
).sql(),
"SELECT * FROM a1 AS a, b.a, c.a2, d2 CROSS JOIN e.a",
'SELECT * FROM a1 AS a /* a */, b.a /* b */, c.a2 /* c.a */, d2 /* d.a */ CROSS JOIN e.a CROSS JOIN "F" /* f-F.A */ CROSS JOIN g1.a /* g */',
)
def test_expand(self):
self.assertEqual(
exp.expand(
parse_one('select * from "a-b"."C" AS a'),
{
"`a-b`.`c`": parse_one("select 1"),
},
dialect="spark",
).sql(),
"SELECT * FROM (SELECT 1) AS a /* source: a-b.c */",
)
def test_replace_placeholders(self):
@ -267,9 +311,18 @@ class TestExpressions(unittest.TestCase):
self.assertEqual(exp.func("bla", 1, "foo").sql(), "BLA(1, foo)")
self.assertEqual(exp.func("COUNT", exp.Star()).sql(), "COUNT(*)")
self.assertEqual(exp.func("bloo").sql(), "BLOO()")
self.assertEqual(exp.func("concat", exp.convert("a")).sql("duckdb"), "CONCAT('a')")
self.assertEqual(
exp.func("locate", "'x'", "'xo'", dialect="hive").sql("hive"), "LOCATE('x', 'xo')"
)
self.assertEqual(
exp.func("log", exp.to_identifier("x"), 2, dialect="bigquery").sql("bigquery"),
"LOG(x, 2)",
)
self.assertEqual(
exp.func("log", dialect="bigquery", expression="x", this=2).sql("bigquery"),
"LOG(x, 2)",
)
self.assertIsInstance(exp.func("instr", "x", "b", dialect="mysql"), exp.StrPosition)
self.assertIsInstance(exp.func("bla", 1, "foo"), exp.Anonymous)
@ -284,6 +337,15 @@ class TestExpressions(unittest.TestCase):
with self.assertRaises(ValueError):
exp.func("abs")
with self.assertRaises(ValueError) as cm:
exp.func("to_hex", dialect="bigquery", this=5)
self.assertEqual(
str(cm.exception),
"Unable to convert 'to_hex' into a Func. Either manually construct the Func "
"expression of interest or parse the function call.",
)
def test_named_selects(self):
expression = parse_one(
"SELECT a, b AS B, c + d AS e, *, 'zz', 'zz' AS z FROM foo as bar, baz"