if asfrom:
if cte_alias_name:
text = self.preparer.format_alias(cte, cte_alias_name)
+ if self.preparer._requires_quotes(cte_name):
+ cte_name = self.preparer.quote(cte_name)
text += self.get_render_as_alias_suffix(cte_name)
else:
return self.preparer.format_alias(cte, cte_name)
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):
'(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'),