From f5a5a6bf43faf53569f21cf05d4a28a4ba1f5229 Mon Sep 17 00:00:00 2001 From: Derek Harland Date: Mon, 14 Jan 2013 17:03:38 +1300 Subject: [PATCH] Add mssql_include option for mssql dialect --- lib/sqlalchemy/dialects/mssql/base.py | 10 ++++++++++ test/dialect/test_mssql.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index aacc58ba80..29f32f3f10 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -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): diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index 4c02bfd156..d2c6fb488e 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -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. -- 2.47.2