From: Tobias Pfeiffer Date: Tue, 15 Nov 2022 04:22:45 +0000 (+0900) Subject: extract partial index flag from index_list() pragma call X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af4a0a3a25e910896e31e70c2059994acf222b2a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git extract partial index flag from index_list() pragma call --- diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index c3cb10cefa..99d84ae162 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -2651,7 +2651,11 @@ class SQLiteDialect(default.DefaultDialect): "sqlite_autoindex" ): continue - indexes.append(dict(name=row[1], column_names=[], unique=row[2])) + indexes.append( + dict( + name=row[1], column_names=[], unique=row[2], partial=row[4] + ) + ) # loop thru unique indexes to get the column names. for idx in list(indexes): diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py index 643a56c1b6..1d88f49459 100644 --- a/test/dialect/test_sqlite.py +++ b/test/dialect/test_sqlite.py @@ -2282,6 +2282,7 @@ class ConstraintReflectionTest(fixtures.TestBase): "unique": 1, "name": "sqlite_autoindex_o_1", "column_names": ["foo"], + "partial": False, } ], ) @@ -2297,10 +2298,42 @@ class ConstraintReflectionTest(fixtures.TestBase): "unique": 0, "name": "ix_main_l_bar", "column_names": ["bar"], + "partial": False, } ], ) + def test_reflect_partial_indexes(self): + with testing.db.begin() as conn: + conn.exec_driver_sql( + "create table foo_with_partial_index (x integer, y integer)" + ) + conn.exec_driver_sql( + "create unique index ix_partial on foo_with_partial_index (x) where y > 10" + ) + conn.exec_driver_sql( + "create unique index ix_no_partial on foo_with_partial_index (x)" + ) + + inspector = inspect(conn) + eq_( + inspector.get_indexes("foo_with_partial_index"), + [ + { + "unique": 1, + "name": "ix_no_partial", + "column_names": ["x"], + "partial": False, + }, + { + "unique": 1, + "name": "ix_partial", + "column_names": ["x"], + "partial": True, + }, + ], + ) + def test_unique_constraint_named(self): inspector = inspect(testing.db) eq_(