summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2023-12-22 09:43:45 +0100
committerGitHub <noreply@github.com>2023-12-22 09:43:45 +0100
commit6c08dba5176606e8a62dd108bb6c9467d678d2f4 (patch)
treea0feebc97946f4148a4cb93f988fe1595dc2aaa0
parent2bf46c3825ad4ec170324791d6f3a329316ae2d4 (diff)
Fixed #35054 -- Fixed crash on Oracle when fetching JSONFields with oracledb 2.0.0.
-rw-r--r--django/db/backends/oracle/base.py6
-rw-r--r--docs/releases/5.0.1.txt2
2 files changed, 7 insertions, 1 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index a5e7f97df0..2d91468d25 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -453,7 +453,7 @@ class FormatStylePlaceholderCursor:
def _output_type_handler(cursor, name, defaultType, length, precision, scale):
"""
Called for each db column fetched from cursors. Return numbers as the
- appropriate Python type.
+ appropriate Python type, and NCLOB with JSON as strings.
"""
if defaultType == Database.NUMBER:
if scale == -127:
@@ -483,6 +483,10 @@ class FormatStylePlaceholderCursor:
arraysize=cursor.arraysize,
outconverter=outconverter,
)
+ # oracledb 2.0.0+ returns NLOB columns with IS JSON constraints as
+ # dicts. Use a no-op converter to avoid this.
+ elif defaultType == Database.DB_TYPE_NCLOB:
+ return cursor.var(Database.DB_TYPE_NCLOB, arraysize=cursor.arraysize)
def _format_params(self, params):
try:
diff --git a/docs/releases/5.0.1.txt b/docs/releases/5.0.1.txt
index 79fbf9a0a1..592454e893 100644
--- a/docs/releases/5.0.1.txt
+++ b/docs/releases/5.0.1.txt
@@ -27,3 +27,5 @@ Bugfixes
* Fixed a regression in Django 5.0 where admin fields on the same line could
overflow the page and become non-interactive (:ticket:`35012`).
+
+* Added compatibility for ``oracledb`` 2.0.0 (:ticket:`35054`).