Commit 7cd29958 authored by Tim Graham's avatar Tim Graham
Browse files

[1.9.x] Fixed #22705 -- Fixed QuerySet.bulk_create() on models without any fields on Oracle.

Fixed on other backends by 134ca4d4.

Thanks Mariusz Felisiak for the solution.

Backport of 7a5b7e35 from master
parent f717cb2a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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

+4 −0
Original line number Diff line number Diff line
@@ -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
+6 −2
Original line number Diff line number Diff line
@@ -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)]