diff options
| author | Eric Atkin <eatkin@omnisolutions.biz> | 2018-02-22 14:16:14 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-02-22 15:06:01 -0500 |
| commit | b6e4a16809744255213a4598dc49a9cff9738b0b (patch) | |
| tree | 0c9ea8faf57389d41c64ad5d0d81a02ebf67f457 /test/sql | |
| parent | 5614bffb2549b0aae2e7e41fe10bed12e06f457d (diff) | |
| download | sqlalchemy-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.py | 43 |
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'), |
