Commit 0a0a0d66 authored by Anssi Kääriäinen's avatar Anssi Kääriäinen
Browse files

Fixed #19351 -- SQLite bulk_insert of more than 500 single-field objs

parent a2758248
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -120,8 +120,12 @@ class DatabaseOperations(BaseDatabaseOperations):
        """
        SQLite has a compile-time default (SQLITE_LIMIT_VARIABLE_NUMBER) of
        999 variables per query.

        If there is just single field to insert, then we can hit another
        limit, SQLITE_MAX_COMPOUND_SELECT which defaults to 500.
        """
        return (999 // len(fields)) if len(fields) > 0 else len(objs)
        limit = 999 if len(fields) > 1 else 500
        return (limit // len(fields)) if len(fields) > 0 else len(objs)

    def date_extract_sql(self, lookup_type, field_name):
        # sqlite doesn't support extract, so we fake it with the user-defined
+8 −0
Original line number Diff line number Diff line
@@ -102,6 +102,14 @@ class BulkCreateTests(TestCase):
            101)
        self.assertEqual(TwoFields.objects.filter(f2__gte=901).count(), 101)

    @skipUnlessDBFeature('has_bulk_insert')
    def test_large_single_field_batch(self):
        # SQLite had a problem with more than 500 UNIONed selects in single
        # query.
        Restaurant.objects.bulk_create([
            Restaurant() for i in range(0, 501)
        ])

    @skipUnlessDBFeature('has_bulk_insert')
    def test_large_batch_efficiency(self):
        with override_settings(DEBUG=True):