diff options
| author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2022-12-01 20:23:43 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-12-15 06:17:57 +0100 |
| commit | 09ffc5c1212d4ced58b708cbbf3dfbfb77b782ca (patch) | |
| tree | 15bb8bb049f9339f30d637e78b340473c2038126 /django/db/models/functions | |
| parent | d44ee518c4c110af25bebdbedbbf9fba04d197aa (diff) | |
Fixed #33308 -- Added support for psycopg version 3.
Thanks Simon Charette, Tim Graham, and Adam Johnson for reviews.
Co-authored-by: Florian Apolloner <florian@apolloner.eu>
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'django/db/models/functions')
| -rw-r--r-- | django/db/models/functions/comparison.py | 10 | ||||
| -rw-r--r-- | django/db/models/functions/text.py | 18 |
2 files changed, 25 insertions, 3 deletions
diff --git a/django/db/models/functions/comparison.py b/django/db/models/functions/comparison.py index eb1f20a77c..de7eef4cdc 100644 --- a/django/db/models/functions/comparison.py +++ b/django/db/models/functions/comparison.py @@ -1,6 +1,7 @@ """Database functions that do comparisons or type conversions.""" from django.db import NotSupportedError from django.db.models.expressions import Func, Value +from django.db.models.fields import TextField from django.db.models.fields.json import JSONField from django.utils.regex_helper import _lazy_re_compile @@ -158,7 +159,14 @@ class JSONObject(Func): return super().as_sql(compiler, connection, **extra_context) def as_postgresql(self, compiler, connection, **extra_context): - return self.as_sql( + copy = self.copy() + copy.set_source_expressions( + [ + Cast(expression, TextField()) if index % 2 == 0 else expression + for index, expression in enumerate(copy.get_source_expressions()) + ] + ) + return super(JSONObject, copy).as_sql( compiler, connection, function="JSONB_BUILD_OBJECT", diff --git a/django/db/models/functions/text.py b/django/db/models/functions/text.py index a54ce8f19b..34a1e81982 100644 --- a/django/db/models/functions/text.py +++ b/django/db/models/functions/text.py @@ -1,7 +1,7 @@ from django.db import NotSupportedError from django.db.models.expressions import Func, Value -from django.db.models.fields import CharField, IntegerField -from django.db.models.functions import Coalesce +from django.db.models.fields import CharField, IntegerField, TextField +from django.db.models.functions import Cast, Coalesce from django.db.models.lookups import Transform @@ -82,6 +82,20 @@ class ConcatPair(Func): **extra_context, ) + def as_postgresql(self, compiler, connection, **extra_context): + copy = self.copy() + copy.set_source_expressions( + [ + Cast(expression, TextField()) + for expression in copy.get_source_expressions() + ] + ) + return super(ConcatPair, copy).as_sql( + compiler, + connection, + **extra_context, + ) + def as_mysql(self, compiler, connection, **extra_context): # Use CONCAT_WS with an empty separator so that NULLs are ignored. return super().as_sql( |
