summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-12-12 18:05:07 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-12-13 09:49:30 -0500
commita8d76cff39dbaf6354d42d35cd68332df469d124 (patch)
tree5eeed7a331136a84e2d8c9fe7ffaeb567102c0aa /test
parente0eea374c2df82f879d69b99ba2230c743bbae27 (diff)
downloadsqlalchemy-a8d76cff39dbaf6354d42d35cd68332df469d124.tar.gz
check index_list pragma for number of columns returned
Fixed regression caused by new support for reflection of partial indexes on SQLite added in 1.4.45 for :ticket:`8804`, where the ``index_list`` pragma command in very old versions of SQLite (possibly prior to 3.8.9) does not return the current expected number of columns, leading to exceptions raised when reflecting tables and indexes. Fixes: #8969 Change-Id: If317cdcfc6782f7e180df329b6ea0ddb48ce2269
Diffstat (limited to 'test')
-rw-r--r--test/dialect/test_sqlite.py1
-rw-r--r--test/requirements.py24
2 files changed, 25 insertions, 0 deletions
diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py
index 07117b862..c52c9f195 100644
--- a/test/dialect/test_sqlite.py
+++ b/test/dialect/test_sqlite.py
@@ -2360,6 +2360,7 @@ class ConstraintReflectionTest(fixtures.TestBase):
],
)
+ @testing.requires.sqlite_partial_indexes
def test_reflect_partial_indexes(self, connection):
connection.exec_driver_sql(
"create table foo_with_partial_index (x integer, y integer)"
diff --git a/test/requirements.py b/test/requirements.py
index 83cd65cd8..2e0ad0afe 100644
--- a/test/requirements.py
+++ b/test/requirements.py
@@ -1133,6 +1133,30 @@ class DefaultRequirements(SuiteRequirements):
def sqlite_memory(self):
return only_on(self._sqlite_memory_db)
+ def _sqlite_partial_idx(self, config):
+ if not against(config, "sqlite"):
+ return False
+ else:
+ with config.db.connect() as conn:
+ connection = conn.connection
+ cursor = connection.cursor()
+ try:
+ cursor.execute("SELECT * FROM pragma_index_info('idx52')")
+ except:
+ return False
+ else:
+ return (
+ cursor.description is not None
+ and len(cursor.description) >= 3
+ )
+ finally:
+ cursor.close()
+
+ @property
+ def sqlite_partial_indexes(self):
+
+ return only_on(self._sqlite_partial_idx)
+
@property
def reflects_json_type(self):
return only_on(