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

index d7c29654a3cfc607e6118e0d0a64d0ddde0ba750..74d1a132039f7a06701840f1c85d3e658be57f91 100644 (file)
@@ -932,6 +932,26 @@ class MSDDLCompiler(compiler.DDLCompiler):
 
         return colspec
 
+    def visit_create_index(self, create, include_schema=False):
+        index = create.element
+        preparer = self.preparer
+        text = "CREATE "
+        if index.unique:
+            text += "UNIQUE "
+
+        # handle clustering option
+        if index.kwargs.get("mssql_clustered"):
+            text += "CLUSTERED "
+
+        text += "INDEX %s ON %s (%s)" \
+                    % (
+                        self._prepared_index_name(index,
+                                include_schema=include_schema),
+                       preparer.format_table(index.table),
+                       ', '.join(preparer.quote(c.name, c.quote)
+                                 for c in index.columns))
+        return text
+
     def visit_drop_index(self, drop):
         return "\nDROP INDEX %s.%s" % (
             self.preparer.quote_identifier(drop.element.table.name),
index 8c1c0873a1ff2ce58fd72963c33ba03cf59b7bf8..346022c315c08f3d4ec0716a276af122995dd155 100644 (file)
@@ -506,6 +506,15 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
                             "CREATE TABLE test (id INTEGER NOT NULL IDENTITY(1,1))"
                             )
 
+    def test_index_clustering(self):
+        metadata = MetaData()
+        tbl = Table('test', metadata,
+                    Column('id', Integer))
+        idx = Index("foo", tbl.c.id, mssql_clustered=True)
+        self.assert_compile(schema.CreateIndex(idx),
+                            "CREATE CLUSTERED INDEX foo ON test (id)"
+                            )
+
 class SchemaAliasingTest(fixtures.TestBase, AssertsCompiledSQL):
     """SQL server cannot reference schema-qualified tables in a SELECT statement, they
     must be aliased.