]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Parenthesis will be applied to a compound SQL expression as
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 13 Oct 2013 00:21:18 +0000 (20:21 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 13 Oct 2013 00:21:38 +0000 (20:21 -0400)
rendered in the column list of a CREATE INDEX statement.
[ticket:2742]

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/dialects/postgresql/base.py
test/dialect/postgresql/test_compiler.py

index 3d2179f5a77a96016524f4735d29bf9475e3aaf3..134a683493dd20676ee459f67c90d0b37024b05f 100644 (file)
 .. changelog::
     :version: 0.8.3
 
+    .. change::
+        :tags: bug, postgresql
+        :tickets: 2742
+        :versions: 0.9.0
+
+        Parenthesis will be applied to a compound SQL expression as
+        rendered in the column list of a CREATE INDEX statement.
+
     .. change::
         :tags: bug, sql
         :tickets: 2742
index 2cbe7c83008d11bdaa5586e262ab242e4e195229..b879fb742b2b16b58af08d97279f581f82974342 100644 (file)
@@ -1102,7 +1102,10 @@ class PGDDLCompiler(compiler.DDLCompiler):
                 % (
                     ', '.join([
                         self.sql_compiler.process(
-                                expr, include_table=False, literal_binds=True) +
+                                expr.self_group()
+                                if not isinstance(expr, expression.ColumnClause)
+                                    else expr,
+                                include_table=False, literal_binds=True) +
                         (c.key in ops and (' ' + ops[c.key]) or '')
                         for expr, c in zip(index.expressions, index.columns)])
                     )
index 858f3e763659ec8c8bd7bb4dd3bd2d901a4a3e82..76fd9d90722b3313f7a20d3d7a65ad9b3ffc5359 100644 (file)
@@ -173,6 +173,17 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
                             'USING hash (data)',
                             dialect=postgresql.dialect())
 
+
+    def test_create_index_expr_gets_parens(self):
+        m = MetaData()
+        tbl = Table('testtbl', m, Column('x', Integer), Column('y', Integer))
+
+        idx1 = Index('test_idx1', 5 / (tbl.c.x + tbl.c.y))
+        self.assert_compile(
+            schema.CreateIndex(idx1),
+            "CREATE INDEX test_idx1 ON testtbl ((5 / (x + y)))"
+        )
+
     def test_create_index_literals(self):
         m = MetaData()
         tbl = Table('testtbl', m, Column('data', Integer))
@@ -180,7 +191,7 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
         idx1 = Index('test_idx1', tbl.c.data + 5)
         self.assert_compile(
             schema.CreateIndex(idx1),
-            "CREATE INDEX test_idx1 ON testtbl (data + 5)"
+            "CREATE INDEX test_idx1 ON testtbl ((data + 5))"
         )
 
     def test_exclude_constraint_min(self):