1
0
mirror of https://github.com/django/django.git synced 2025-03-10 01:12:53 +00:00

[5.0.x] Fixed #35054 -- Fixed crash on Oracle when fetching JSONFields with oracledb 2.0.0.

Backport of 6c08dba5176606e8a62dd108bb6c9467d678d2f4 from main
This commit is contained in:
Mariusz Felisiak 2023-12-22 09:43:45 +01:00
parent bc60b1e292
commit 42c31f867f
2 changed files with 7 additions and 1 deletions

View File

@ -453,7 +453,7 @@ class FormatStylePlaceholderCursor:
def _output_type_handler(cursor, name, defaultType, length, precision, scale): def _output_type_handler(cursor, name, defaultType, length, precision, scale):
""" """
Called for each db column fetched from cursors. Return numbers as the 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 defaultType == Database.NUMBER:
if scale == -127: if scale == -127:
@ -483,6 +483,10 @@ class FormatStylePlaceholderCursor:
arraysize=cursor.arraysize, arraysize=cursor.arraysize,
outconverter=outconverter, 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): def _format_params(self, params):
try: try:

View File

@ -27,3 +27,5 @@ Bugfixes
* Fixed a regression in Django 5.0 where admin fields on the same line could * Fixed a regression in Django 5.0 where admin fields on the same line could
overflow the page and become non-interactive (:ticket:`35012`). overflow the page and become non-interactive (:ticket:`35012`).
* Added compatibility for ``oracledb`` 2.0.0 (:ticket:`35054`).