Opened 5 years ago
Closed 5 years ago
#30822 closed Bug (duplicate)
Oracle Bulk Create TextField fails when there is a mix of short and long string.
Reported by: | Ahmet Kucuk | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 2.2 |
Severity: | Normal | Keywords: | |
Cc: | Georgi Yanchev | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Following test currently fails because oracle DB backend converts params larger than 4000 to be CLOB.
class OracleTextFieldBulkCreateTests(TestCase): @unittest.skipIf(connection.vendor != 'oracle', 'Only an oracle issue') def test_text_field_bulk_create(self): m1 = ModelD(name='a'*4001) m2 = ModelD(name='a') ModelD.objects.bulk_create([m1, m2])
DatabaseError: ORA-01790: expression must have same datatype as corresponding expression File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "django/db/backends/oracle/base.py", line 510, in execute return self.cursor.execute(query, self._param_generator(params)) DatabaseError: ORA-01790: expression must have same datatype as corresponding expression (10 additional frame(s) were not displayed) ... File "job_queue/management/commands/worker.py", line 48, in __call__ return execute(sql, params, many, context) File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "django/db/backends/oracle/base.py", line 510, in execute return self.cursor.execute(query, self._param_generator(params))
Adding TextField: TO_CLOB mapping to the following object seems to fix the issue: https://github.com/django/django/blob/c4e2fc5d9872c9a0c9c052a2e124f8a9b87de9b4/django/db/backends/oracle/utils.py#L34
I am planning to open a PR with the fix if this is an acceptable solution.
Change History (4)
comment:1 by , 5 years ago
Description: | modified (diff) |
---|
comment:2 by , 5 years ago
Description: | modified (diff) |
---|
comment:3 by , 5 years ago
Cc: | added |
---|
comment:4 by , 5 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
Summary: | Oracle Bulk Create TextField fails when there is a mix of short and long string → Oracle Bulk Create TextField fails when there is a mix of short and long string. |
Note:
See TracTickets
for help on using tickets.
Thanks for this report, proposed solution sounds reasonable. Please create a PR and reference to an original ticket #30510. I'll evaluate both patches and choose one of them. I like your proposition because it's minimal and looks sufficient for now. I hope that someday I will have time to refactor
bulk_create()
on Oracle (see comment) but this can take time.Duplicate of #30510.