From: Allen Chen Date: Thu, 2 Oct 2025 05:40:33 +0000 (+0800) Subject: test: add test to check index ordering X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=39ec45a29faeed657eaae5c3764051bc1ceb03f4;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git test: add test to check index ordering --- diff --git a/lib/sqlalchemy/testing/suite/test_reflection.py b/lib/sqlalchemy/testing/suite/test_reflection.py index aa1a4e90a8..6431e88c96 100644 --- a/lib/sqlalchemy/testing/suite/test_reflection.py +++ b/lib/sqlalchemy/testing/suite/test_reflection.py @@ -2699,6 +2699,25 @@ class ComponentReflectionTestExtra(ComparesIndexes, fixtures.TestBase): ], ) + def test_index_column_order(self, metadata, inspect_for_table): + """test for #12894""" + with inspect_for_table("sa_multi_index") as (schema, inspector): + test_table = Table( + "sa_multi_index", + metadata, + Column("Column1", Integer, primary_key=True), + Column("Column2", Integer), + Column("Column3", Integer), + ) + Index( + "Index_Example", + test_table.c.Column3, + test_table.c.Column1, + test_table.c.Column2, + ) + indexes = inspector.get_indexes("sa_multi_index") + eq_(indexes[0]["column_names"], ["Column3", "Column1", "Column2"]) + @testing.requires.indexes_with_expressions def test_reflect_expression_based_indexes(self, metadata, connection): t = Table( diff --git a/test/dialect/mssql/test_reflection.py b/test/dialect/mssql/test_reflection.py index 06e5147fbe..85f8f13df0 100644 --- a/test/dialect/mssql/test_reflection.py +++ b/test/dialect/mssql/test_reflection.py @@ -715,6 +715,46 @@ class ReflectionTest(fixtures.TestBase, ComparesTables, AssertsCompiledSQL): CreateIndex(idx), "CREATE NONCLUSTERED INDEX idx_x ON t (x)" ) + def test_index_column_order_clustered(self, metadata, connection): + """test for #12894""" + test_table = Table( + "t", + metadata, + Column("id", Integer, primary_key=True), + Column("x", Integer), + Column("y", Integer), + PrimaryKeyConstraint('id', mssql_clustered=False), + ) + Index( + "idx_x", + test_table.c.y, + test_table.c.id, + test_table.c.x, + mssql_clustered=True, + ) + metadata.create_all(connection) + indexes = testing.db.dialect.get_indexes(connection, "t", None) + eq_(indexes[0]["column_names"], ["y", "id", "x"]) + + def test_index_column_order_nonclustered(self, metadata, connection): + """test for #12894""" + test_table = Table( + "t", + metadata, + Column("id", Integer, primary_key=True), + Column("x", Integer), + Column("y", Integer), + ) + Index( + "idx_x", + test_table.c.y, + test_table.c.id, + test_table.c.x, + ) + metadata.create_all(connection) + indexes = testing.db.dialect.get_indexes(connection, "t", None) + eq_(indexes[0]["column_names"], ["y", "id", "x"]) + @testing.only_if("mssql>=12") def test_index_reflection_colstore_clustered(self, metadata, connection): t1 = Table(