]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
extract partial index flag from index_list() pragma call
authorTobias Pfeiffer <tgp@preferred.jp>
Tue, 15 Nov 2022 04:22:45 +0000 (13:22 +0900)
committerTobias Pfeiffer <tgp@preferred.jp>
Tue, 15 Nov 2022 04:22:45 +0000 (13:22 +0900)
lib/sqlalchemy/dialects/sqlite/base.py
test/dialect/test_sqlite.py

index c3cb10cefa5e5314b11036e411a0748727bf5bd8..99d84ae162da07ec876e2e1866d56f5f41e2fa65 100644 (file)
@@ -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):
index 643a56c1b620cf6a0f8b6690704ea4ff32cc7f6f..1d88f49459a3790ec6484bedd4c4c1ebc2dd11d1 100644 (file)
@@ -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_(