]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add mssql_include option for mssql dialect
authorDerek Harland <derek.harland@finq.co.nz>
Mon, 14 Jan 2013 04:03:38 +0000 (17:03 +1300)
committerDerek Harland <derek.harland@finq.co.nz>
Mon, 14 Jan 2013 04:03:38 +0000 (17:03 +1300)
lib/sqlalchemy/dialects/mssql/base.py
test/dialect/test_mssql.py

index aacc58ba8010f72a4f0b5101bf78da0a909e1798..29f32f3f10cb1a4bee50e8b007163c4f2df19e85 100644 (file)
@@ -957,6 +957,16 @@ class MSDDLCompiler(compiler.DDLCompiler):
                         preparer.format_table(index.table),
                         ', '.join([preparer.quote(c.name, c.quote) + (" " + o if o else "")
                                    for c, o in zip(index.columns, ordering)]))
+
+        # handle other included columns
+        if index.kwargs.get("mssql_include"):
+            inclusions = [index.table.c[col] if isinstance(col, basestring) else col
+                          for col in index.kwargs["mssql_include"]]
+
+            text += " INCLUDE (%s)" \
+                % ', '.join([preparer.quote(c.name, c.quote)
+                             for c in inclusions])
+
         return text
 
     def visit_drop_index(self, drop):
index 4c02bfd15656c53afbf9f7fe8533f9fa1ec1db91..d2c6fb488e6cbd4206c417714ff741e114265c9e 100644 (file)
@@ -524,6 +524,24 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
                             "CREATE INDEX foo ON test (x DESC, y)"
                             )
 
+    def test_index_extra_include_1(self):
+        metadata = MetaData()
+        tbl = Table('test', metadata,
+                    Column('x', Integer), Column('y', Integer), Column('z', Integer))
+        idx = Index("foo", tbl.c.x, mssql_include=['y'])
+        self.assert_compile(schema.CreateIndex(idx),
+                            "CREATE INDEX foo ON test (x) INCLUDE (y)"
+                            )
+
+    def test_index_extra_include_2(self):
+        metadata = MetaData()
+        tbl = Table('test', metadata,
+                    Column('x', Integer), Column('y', Integer), Column('z', Integer))
+        idx = Index("foo", tbl.c.x, mssql_include=[tbl.c.y])
+        self.assert_compile(schema.CreateIndex(idx),
+                            "CREATE INDEX foo ON test (x) INCLUDE (y)"
+                            )
+
 class SchemaAliasingTest(fixtures.TestBase, AssertsCompiledSQL):
     """SQL server cannot reference schema-qualified tables in a SELECT statement, they
     must be aliased.