summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/backends/oracle/test_operations.py17
-rw-r--r--tests/backends/sqlite/test_operations.py24
2 files changed, 37 insertions, 4 deletions
diff --git a/tests/backends/oracle/test_operations.py b/tests/backends/oracle/test_operations.py
index 523bdcda8a..1f9447bde7 100644
--- a/tests/backends/oracle/test_operations.py
+++ b/tests/backends/oracle/test_operations.py
@@ -1,7 +1,7 @@
import unittest
from django.core.management.color import no_style
-from django.db import connection
+from django.db import connection, models
from django.test import TransactionTestCase
from ..models import Person, Tag
@@ -22,14 +22,25 @@ class OperationsTests(TransactionTestCase):
objects = range(2**16)
self.assertEqual(connection.ops.bulk_batch_size([], objects), len(objects))
# Each field is a parameter for each object.
+ first_name_field = Person._meta.get_field("first_name")
+ last_name_field = Person._meta.get_field("last_name")
self.assertEqual(
- connection.ops.bulk_batch_size(["id"], objects),
+ connection.ops.bulk_batch_size([first_name_field], objects),
connection.features.max_query_params,
)
self.assertEqual(
- connection.ops.bulk_batch_size(["id", "other"], objects),
+ connection.ops.bulk_batch_size(
+ [first_name_field, last_name_field],
+ objects,
+ ),
connection.features.max_query_params // 2,
)
+ composite_pk = models.CompositePrimaryKey("first_name", "last_name")
+ composite_pk.fields = [first_name_field, last_name_field]
+ self.assertEqual(
+ connection.ops.bulk_batch_size([composite_pk, first_name_field], objects),
+ connection.features.max_query_params // 3,
+ )
def test_sql_flush(self):
statements = connection.ops.sql_flush(
diff --git a/tests/backends/sqlite/test_operations.py b/tests/backends/sqlite/test_operations.py
index 3ff055248d..10cbffdf80 100644
--- a/tests/backends/sqlite/test_operations.py
+++ b/tests/backends/sqlite/test_operations.py
@@ -1,7 +1,7 @@
import unittest
from django.core.management.color import no_style
-from django.db import connection
+from django.db import connection, models
from django.test import TestCase
from ..models import Person, Tag
@@ -86,3 +86,25 @@ class SQLiteOperationsTests(TestCase):
"zzz'",
statements[-1],
)
+
+ def test_bulk_batch_size(self):
+ self.assertEqual(connection.ops.bulk_batch_size([], [Person()]), 1)
+ first_name_field = Person._meta.get_field("first_name")
+ last_name_field = Person._meta.get_field("last_name")
+ self.assertEqual(
+ connection.ops.bulk_batch_size([first_name_field], [Person()]), 500
+ )
+ self.assertEqual(
+ connection.ops.bulk_batch_size(
+ [first_name_field, last_name_field], [Person()]
+ ),
+ connection.features.max_query_params // 2,
+ )
+ composite_pk = models.CompositePrimaryKey("first_name", "last_name")
+ composite_pk.fields = [first_name_field, last_name_field]
+ self.assertEqual(
+ connection.ops.bulk_batch_size(
+ [composite_pk, first_name_field], [Person()]
+ ),
+ connection.features.max_query_params // 3,
+ )