cursor.execute() fails when fetching from table with NCLOB column and IS JSON check. · Issue #271 · oracle/python-oracledb (original) (raw)
cursor.execute()
crashes when fetching from table with NCLOB
column and IS JSON
check. The following SQL crashes in Django:
cursor.execute('SELECT * FROM "INSPECTDB_JSONFIELDCOLUMNTYPE" WHERE ROWNUM < 2 AND 2 > 0')
(it works with the 1.4.2 version).
Table definition:
CREATE TABLE "INSPECTDB_JSONFIELDCOLUMNTYPE" ( "ID" NUMBER(11) GENERATED BY DEFAULT ON NULL AS IDENTITY NOT NULL PRIMARY KEY, "JSON_FIELD" NCLOB NOT NULL CHECK ("JSON_FIELD" IS JSON), "NULL_JSON_FIELD" NCLOB NULL CHECK ("NULL_JSON_FIELD" IS JSON) )
- What versions are you using?
Oracle 23c (crashes the same way on Oracle 19c).
platform.platform: Linux-5.15.0-89-generic-x86_64-with-glibc2.35
sys.maxsize > 2**32: True
platform.python_version: 3.10.9
oracledb.__version__: 2.0.0
- Is it an error or a hang or a crash?
crash
- What error(s) or behavior you are seeing?
File "python3.10/site-packages/oracledb/cursor.py", line 744, in execute
impl.execute(self)
File "src/oracledb/impl/thin/cursor.pyx", line 173, in oracledb.thin_impl.ThinCursorImpl.execute
File "src/oracledb/impl/thin/protocol.pyx", line 425, in oracledb.thin_impl.Protocol._process_single_message
File "src/oracledb/impl/thin/messages.pyx", line 1323, in oracledb.thin_impl.MessageWithData.postprocess
IndexError: list index out of range
- Does your application call init_oracle_client()?
No
- Include a runnable Python script that shows the problem.
I was not able to reproduce it with the bare oracledb
cursor or Django cursor, but it crashes in our test suite. Maybe previous fetchall()
, fetchone()
, execute()
calls affect it somehow 🤔 🤯