summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2023-05-10 17:22:45 +0200
committerGitHub <noreply@github.com>2023-05-10 17:22:45 +0200
commit6e32d1fa1dafd0c9cd9f93997ecebb26cd9a1b62 (patch)
tree7646d821bc72b65acbc620906fa98569f4901e37
parentc494c6974dd0e7c5a43ea3e220b34641abc3ba29 (diff)
downloaddjango-6e32d1fa1dafd0c9cd9f93997ecebb26cd9a1b62.tar.gz
Fixed #34554 -- Fixed Reverse(Value(…)) crash on Oracle.
-rw-r--r--django/db/models/functions/text.py3
-rw-r--r--tests/db_functions/text/test_reverse.py15
2 files changed, 11 insertions, 7 deletions
diff --git a/django/db/models/functions/text.py b/django/db/models/functions/text.py
index 34421eb15d..fba2840c4b 100644
--- a/django/db/models/functions/text.py
+++ b/django/db/models/functions/text.py
@@ -257,7 +257,7 @@ class Reverse(Transform):
def as_oracle(self, compiler, connection, **extra_context):
# REVERSE in Oracle is undocumented and doesn't support multi-byte
# strings. Use a special subquery instead.
- return super().as_sql(
+ sql, params = super().as_sql(
compiler,
connection,
template=(
@@ -268,6 +268,7 @@ class Reverse(Transform):
),
**extra_context,
)
+ return sql, params * 3
class Right(Left):
diff --git a/tests/db_functions/text/test_reverse.py b/tests/db_functions/text/test_reverse.py
index 62d769d80c..3e94c111be 100644
--- a/tests/db_functions/text/test_reverse.py
+++ b/tests/db_functions/text/test_reverse.py
@@ -1,5 +1,5 @@
from django.db import connection
-from django.db.models import CharField
+from django.db.models import CharField, Value
from django.db.models.functions import Length, Reverse, Trim
from django.test import TestCase
from django.test.utils import register_lookup
@@ -24,15 +24,18 @@ class ReverseTests(TestCase):
)
def test_basic(self):
- authors = Author.objects.annotate(backward=Reverse("name"))
+ authors = Author.objects.annotate(
+ backward=Reverse("name"),
+ constant=Reverse(Value("static string")),
+ )
self.assertQuerySetEqual(
authors,
[
- ("John Smith", "htimS nhoJ"),
- ("Élena Jordan", "nadroJ anelÉ"),
- ("パイソン", "ンソイパ"),
+ ("John Smith", "htimS nhoJ", "gnirts citats"),
+ ("Élena Jordan", "nadroJ anelÉ", "gnirts citats"),
+ ("パイソン", "ンソイパ", "gnirts citats"),
],
- lambda a: (a.name, a.backward),
+ lambda a: (a.name, a.backward, a.constant),
ordered=False,
)