From 4554ab4c7d6b2bbbaa6f4d0b810bf477d1a505a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 25 Sep 2023 10:20:09 +0200 Subject: Merging upstream version 18.7.0. Signed-off-by: Daniel Baumann --- tests/dialects/test_redshift.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'tests/dialects/test_redshift.py') diff --git a/tests/dialects/test_redshift.py b/tests/dialects/test_redshift.py index e261c01..c75654c 100644 --- a/tests/dialects/test_redshift.py +++ b/tests/dialects/test_redshift.py @@ -1,3 +1,4 @@ +from sqlglot import transpile from tests.dialects.test_dialect import Validator @@ -270,6 +271,26 @@ class TestRedshift(Validator): ) def test_values(self): + # Test crazy-sized VALUES clause to UNION ALL conversion to ensure we don't get RecursionError + values = [str(v) for v in range(0, 10000)] + values_query = f"SELECT * FROM (VALUES {', '.join('(' + v + ')' for v in values)})" + union_query = f"SELECT * FROM ({' UNION ALL '.join('SELECT ' + v for v in values)})" + self.assertEqual(transpile(values_query, write="redshift")[0], union_query) + + self.validate_identity( + "SELECT * FROM (VALUES (1), (2))", + """SELECT + * +FROM ( + SELECT + 1 + UNION ALL + SELECT + 2 +)""", + pretty=True, + ) + self.validate_all( "SELECT * FROM (VALUES (1, 2)) AS t", write={ @@ -291,9 +312,9 @@ class TestRedshift(Validator): }, ) self.validate_all( - "SELECT a, b FROM (VALUES (1, 2), (3, 4)) AS t (a, b)", + 'SELECT a, b FROM (VALUES (1, 2), (3, 4)) AS "t" (a, b)', write={ - "redshift": "SELECT a, b FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3, 4) AS t", + "redshift": 'SELECT a, b FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3, 4) AS "t"', }, ) self.validate_all( @@ -320,6 +341,16 @@ class TestRedshift(Validator): "redshift": "INSERT INTO t (a, b) VALUES (1, 2), (3, 4)", }, ) + self.validate_identity( + 'SELECT * FROM (VALUES (1)) AS "t"(a)', + '''SELECT + * +FROM ( + SELECT + 1 AS a +) AS "t"''', + pretty=True, + ) def test_create_table_like(self): self.validate_all( -- cgit v1.2.3