summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authorEric Atkin <eatkin@omnisolutions.biz>2018-02-22 14:16:14 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2018-02-22 15:06:01 -0500
commitb6e4a16809744255213a4598dc49a9cff9738b0b (patch)
tree0c9ea8faf57389d41c64ad5d0d81a02ebf67f457 /test/sql
parent5614bffb2549b0aae2e7e41fe10bed12e06f457d (diff)
downloadsqlalchemy-b6e4a16809744255213a4598dc49a9cff9738b0b.tar.gz
Quote cte alias if needed
Fixed bug where CTE expressions would not have their name or alias name quoted when the given name is case sensitive or otherwise requires quoting. Pull request courtesy Eric Atkin. Fixes: #4197 Change-Id: Ib8573e82b9a1ca94b50c7c5d73ee98b79465d689 Pull-request: https://github.com/zzzeek/sqlalchemy/pull/426
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_cte.py43
1 files changed, 42 insertions, 1 deletions
diff --git a/test/sql/test_cte.py b/test/sql/test_cte.py
index f33516cc2..aadd470e8 100644
--- a/test/sql/test_cte.py
+++ b/test/sql/test_cte.py
@@ -4,7 +4,7 @@ from sqlalchemy.sql import table, column, select, func, literal, exists, and_
from sqlalchemy.dialects import mssql
from sqlalchemy.engine import default
from sqlalchemy.exc import CompileError
-
+from sqlalchemy.sql.elements import quoted_name
class CTETest(fixtures.TestBase, AssertsCompiledSQL):
@@ -319,6 +319,47 @@ class CTETest(fixtures.TestBase, AssertsCompiledSQL):
'(SELECT "CTE".id AS id FROM "CTE") AS anon_2'
)
+ def test_named_alias_no_quote(self):
+ cte = select([literal(1).label("id")]).cte(name='CTE')
+
+ s1 = select([cte.c.id]).alias(name="no_quotes")
+
+ s = select([s1])
+ self.assert_compile(
+ s,
+ 'WITH "CTE" AS (SELECT :param_1 AS id) '
+ 'SELECT no_quotes.id FROM '
+ '(SELECT "CTE".id AS id FROM "CTE") AS no_quotes'
+ )
+
+ def test_named_alias_quote(self):
+ cte = select([literal(1).label("id")]).cte(name='CTE')
+
+ s1 = select([cte.c.id]).alias(name="Quotes Required")
+
+ s = select([s1])
+ self.assert_compile(
+ s,
+ 'WITH "CTE" AS (SELECT :param_1 AS id) '
+ 'SELECT "Quotes Required".id FROM '
+ '(SELECT "CTE".id AS id FROM "CTE") AS "Quotes Required"'
+ )
+
+ def test_named_alias_disable_quote(self):
+ cte = select([literal(1).label("id")]).cte(
+ name=quoted_name('CTE', quote=False))
+
+ s1 = select([cte.c.id]).alias(
+ name=quoted_name("DontQuote", quote=False))
+
+ s = select([s1])
+ self.assert_compile(
+ s,
+ 'WITH CTE AS (SELECT :param_1 AS id) '
+ 'SELECT DontQuote.id FROM '
+ '(SELECT CTE.id AS id FROM CTE) AS DontQuote'
+ )
+
def test_positional_binds(self):
orders = table('orders',
column('order'),