from ...sql import coercions
from ...sql import compiler
from ...sql import elements
+from ...sql import operators
from ...sql import roles
from ...sql import util as sql_util
from ...sql.sqltypes import Unicode
self._verify_index_table(index)
preparer = self.preparer
table = preparer.format_table(index.table)
+
columns = [
self.sql_compiler.process(
- expr, include_table=False, literal_binds=True
+ elements.Grouping(expr)
+ if (
+ not isinstance(expr, elements.ColumnClause)
+ and (
+ not isinstance(expr, elements.UnaryExpression)
+ or expr.modifier
+ not in (operators.desc_op, operators.asc_op)
+ )
+ )
+ else expr,
+ include_table=False,
+ literal_binds=True,
)
for expr in index.expressions
]
t1 = Table("foo", m, Column("x", Integer))
self.assert_compile(
schema.CreateIndex(Index("bar", t1.c.x > 5)),
- "CREATE INDEX bar ON foo (x > 5)",
+ "CREATE INDEX bar ON foo ((x > 5))",
+ )
+
+ def test_create_index_expr_two(self):
+ m = MetaData()
+ tbl = Table("testtbl", m, Column("x", Integer), Column("y", Integer))
+ idx1 = Index("test_idx1", tbl.c.x + tbl.c.y)
+ idx2 = Index(
+ "test_idx2", tbl.c.x, tbl.c.x + tbl.c.y, tbl.c.y - tbl.c.x
+ )
+ idx3 = Index("test_idx3", tbl.c.x.desc())
+
+ self.assert_compile(
+ schema.CreateIndex(idx1),
+ "CREATE INDEX test_idx1 ON testtbl ((x + y))",
+ )
+ self.assert_compile(
+ schema.CreateIndex(idx2),
+ "CREATE INDEX test_idx2 ON testtbl (x, (x + y), (y - x))",
+ )
+
+ self.assert_compile(
+ schema.CreateIndex(idx3),
+ "CREATE INDEX test_idx3 ON testtbl (x DESC)",
+ )
+
+ def test_create_index_expr_func(self):
+ m = MetaData()
+ tbl = Table("testtbl", m, Column("data", Integer))
+ idx1 = Index("test_idx1", func.radians(tbl.c.data))
+
+ self.assert_compile(
+ schema.CreateIndex(idx1),
+ "CREATE INDEX test_idx1 ON testtbl ((radians(data)))",
+ )
+
+ def test_create_index_expr_func_unary(self):
+ m = MetaData()
+ tbl = Table("testtbl", m, Column("data", Integer))
+ idx1 = Index("test_idx1", -tbl.c.data)
+
+ self.assert_compile(
+ schema.CreateIndex(idx1),
+ "CREATE INDEX test_idx1 ON testtbl ((-data))",
)
def test_deferrable_initially_kw_not_ignored(self):