From: Tobias Pfeiffer Date: Tue, 15 Nov 2022 09:47:34 +0000 (+0900) Subject: use a text() for sqlite_where, not str X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0bd27506c49e9297f9cc156f45341298b811e833;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git use a text() for sqlite_where, not str --- diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index cda8c7687e..26b9c8afc6 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -893,6 +893,7 @@ from .json import JSONPathType from ... import exc from ... import schema as sa_schema from ... import sql +from ... import text from ... import types as sqltypes from ... import util from ...engine import default @@ -2684,7 +2685,9 @@ class SQLiteDialect(default.DefaultDialect): rs = connection.exec_driver_sql(s, (row[1],)) index_sql = rs.scalar() predicate = partial_pred_re.search(index_sql).group(1) - indexes[-1]["dialect_options"]["sqlite_where"] = predicate + indexes[-1]["dialect_options"]["sqlite_where"] = text( + predicate + ) # 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 a5e24b382d..9425ce1e45 100644 --- a/test/dialect/test_sqlite.py +++ b/test/dialect/test_sqlite.py @@ -4,6 +4,7 @@ import datetime import json import os +from unittest.mock import ANY from sqlalchemy import and_ from sqlalchemy import bindparam @@ -2311,28 +2312,23 @@ class ConstraintReflectionTest(fixtures.TestBase): 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) + indexes = inspector.get_indexes("foo_with_partial_index") eq_( - inspector.get_indexes("foo_with_partial_index"), + indexes, [ - { - "unique": 1, - "name": "ix_no_partial", - "column_names": ["x"], - "dialect_options": {}, - }, { "unique": 1, "name": "ix_partial", "column_names": ["x"], - "dialect_options": {"sqlite_where": "y > 10"}, - }, + "dialect_options": {"sqlite_where": ANY}, + } ], ) + assert ( + indexes[0]["dialect_options"]["sqlite_where"].text == "y > 10" + ) def test_unique_constraint_named(self): inspector = inspect(testing.db)