From 7cd299584dd9b152c736854c6558670e57512d40 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Thu, 8 Oct 2015 21:14:24 -0400 Subject: [PATCH] [1.9.x] Fixed #22705 -- Fixed QuerySet.bulk_create() on models without any fields on Oracle. Fixed on other backends by 134ca4d438bd7cbe8f0f287a00d545f96fa04a01. Thanks Mariusz Felisiak for the solution. Backport of 7a5b7e35bf2e219225b9f26d3dd3e34f26e83e9c from master --- django/db/backends/oracle/operations.py | 3 +++ tests/bulk_create/models.py | 4 ++++ tests/bulk_create/tests.py | 8 ++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index ce6946011b..0651105d9f 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -267,6 +267,9 @@ WHEN (new.%(col_name)s IS NULL) def max_name_length(self): return 30 + def pk_default_value(self): + return "NULL" + def prep_for_iexact_query(self, x): return x diff --git a/tests/bulk_create/models.py b/tests/bulk_create/models.py index 22d16e75e5..c302a70b1b 100644 --- a/tests/bulk_create/models.py +++ b/tests/bulk_create/models.py @@ -47,3 +47,7 @@ class State(models.Model): class TwoFields(models.Model): f1 = models.IntegerField(unique=True) f2 = models.IntegerField(unique=True) + + +class NoFields(models.Model): + pass diff --git a/tests/bulk_create/tests.py b/tests/bulk_create/tests.py index ce069504d0..f881a1dba0 100644 --- a/tests/bulk_create/tests.py +++ b/tests/bulk_create/tests.py @@ -10,8 +10,8 @@ from django.test import ( ) from .models import ( - Country, Pizzeria, ProxyCountry, ProxyMultiCountry, ProxyMultiProxyCountry, - ProxyProxyCountry, Restaurant, State, TwoFields, + Country, NoFields, Pizzeria, ProxyCountry, ProxyMultiCountry, + ProxyMultiProxyCountry, ProxyProxyCountry, Restaurant, State, TwoFields, ) @@ -177,6 +177,10 @@ class BulkCreateTests(TestCase): TwoFields.objects.bulk_create(objs, len(objs)) self.assertEqual(TwoFields.objects.count(), len(objs)) + def test_empty_model(self): + NoFields.objects.bulk_create([NoFields() for i in range(2)]) + self.assertEqual(NoFields.objects.count(), 2) + @skipUnlessDBFeature('has_bulk_insert') def test_explicit_batch_size_efficiency(self): objs = [TwoFields(f1=i, f2=i) for i in range(0, 100)]