summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-10-21 12:37:04 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-10-21 12:37:04 -0400
commite9df3e8de0caaea20ddf0ab7f46b1110ba6dd0e9 (patch)
tree54b88684c3f0bc61f86a3aae7b7821c1ef49ce08 /lib/sqlalchemy
parent2fc5cf56a4b146b94b5dd14239a791e354d7ebe4 (diff)
downloadsqlalchemy-e9df3e8de0caaea20ddf0ab7f46b1110ba6dd0e9.tar.gz
Only convert Range for sqlalchemy Range object
Refined the new approach to range objects described at :ref:`change_7156` to accommodate driver-specific range and multirange objects, to better accommodate both legacy code as well as when passing results from raw SQL result sets back into new range or multirange expressions. Fixes: #8690 Change-Id: I7e62c47067f695c6380ad0fe2fe19deaf33594d1
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/asyncpg.py14
-rw-r--r--lib/sqlalchemy/dialects/postgresql/psycopg.py20
-rw-r--r--lib/sqlalchemy/dialects/postgresql/psycopg2.py8
3 files changed, 19 insertions, 23 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/asyncpg.py b/lib/sqlalchemy/dialects/postgresql/asyncpg.py
index 96bac59d9..cd161d28e 100644
--- a/lib/sqlalchemy/dialects/postgresql/asyncpg.py
+++ b/lib/sqlalchemy/dialects/postgresql/asyncpg.py
@@ -293,13 +293,11 @@ class AsyncpgCHAR(sqltypes.CHAR):
class _AsyncpgRange(ranges.AbstractRangeImpl):
def bind_processor(self, dialect):
- Range = dialect.dbapi.asyncpg.Range
-
- NoneType = type(None)
+ asyncpg_Range = dialect.dbapi.asyncpg.Range
def to_range(value):
- if not isinstance(value, (str, NoneType)):
- value = Range(
+ if isinstance(value, ranges.Range):
+ value = asyncpg_Range(
value.lower,
value.upper,
lower_inc=value.bounds[0] == "[",
@@ -328,7 +326,7 @@ class _AsyncpgRange(ranges.AbstractRangeImpl):
class _AsyncpgMultiRange(ranges.AbstractMultiRangeImpl):
def bind_processor(self, dialect):
- Range = dialect.dbapi.asyncpg.Range
+ asyncpg_Range = dialect.dbapi.asyncpg.Range
NoneType = type(None)
@@ -337,8 +335,8 @@ class _AsyncpgMultiRange(ranges.AbstractMultiRangeImpl):
return value
def to_range(value):
- if not isinstance(value, (str, NoneType)):
- value = Range(
+ if isinstance(value, ranges.Range):
+ value = asyncpg_Range(
value.lower,
value.upper,
lower_inc=value.bounds[0] == "[",
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg.py b/lib/sqlalchemy/dialects/postgresql/psycopg.py
index 7ca274e2c..400c3186e 100644
--- a/lib/sqlalchemy/dialects/postgresql/psycopg.py
+++ b/lib/sqlalchemy/dialects/postgresql/psycopg.py
@@ -164,13 +164,11 @@ class _PGBoolean(sqltypes.Boolean):
class _PsycopgRange(ranges.AbstractRangeImpl):
def bind_processor(self, dialect):
- Range = cast(PGDialect_psycopg, dialect)._psycopg_Range
-
- NoneType = type(None)
+ psycopg_Range = cast(PGDialect_psycopg, dialect)._psycopg_Range
def to_range(value):
- if not isinstance(value, (str, NoneType)):
- value = Range(
+ if isinstance(value, ranges.Range):
+ value = psycopg_Range(
value.lower, value.upper, value.bounds, value.empty
)
return value
@@ -193,18 +191,20 @@ class _PsycopgRange(ranges.AbstractRangeImpl):
class _PsycopgMultiRange(ranges.AbstractMultiRangeImpl):
def bind_processor(self, dialect):
- Range = cast(PGDialect_psycopg, dialect)._psycopg_Range
- Multirange = cast(PGDialect_psycopg, dialect)._psycopg_Multirange
+ psycopg_Range = cast(PGDialect_psycopg, dialect)._psycopg_Range
+ psycopg_Multirange = cast(
+ PGDialect_psycopg, dialect
+ )._psycopg_Multirange
NoneType = type(None)
def to_range(value):
- if isinstance(value, (str, NoneType)):
+ if isinstance(value, (str, NoneType, psycopg_Multirange)):
return value
- return Multirange(
+ return psycopg_Multirange(
[
- Range(
+ psycopg_Range(
element.lower,
element.upper,
element.bounds,
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
index 350f4b616..4a8df5b5e 100644
--- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py
+++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
@@ -503,16 +503,14 @@ class _Psycopg2Range(ranges.AbstractRangeImpl):
_psycopg2_range_cls = "none"
def bind_processor(self, dialect):
- Range = getattr(
+ psycopg2_Range = getattr(
cast(PGDialect_psycopg2, dialect)._psycopg2_extras,
self._psycopg2_range_cls,
)
- NoneType = type(None)
-
def to_range(value):
- if not isinstance(value, (str, NoneType)):
- value = Range(
+ if isinstance(value, ranges.Range):
+ value = psycopg2_Range(
value.lower, value.upper, value.bounds, value.empty
)
return value