mirror of
https://github.com/django/django.git
synced 2025-07-18 18:55:18 +00:00

Some checks failed
Docs / docs (push) Has been cancelled
Tests / Windows, SQLite, Python 3.13 (push) Has been cancelled
Tests / JavaScript tests (push) Has been cancelled
Linters / black (push) Has been cancelled
Docs / blacken-docs (push) Has been cancelled
Linters / flake8 (push) Has been cancelled
Linters / isort (push) Has been cancelled
Regression in 764af7a3d6
.
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import unittest
|
|
from datetime import date
|
|
|
|
from django.db import connection
|
|
from django.db.models.expressions import RawSQL
|
|
from django.test import TestCase
|
|
|
|
from ..models import Article, Reporter, Square
|
|
|
|
|
|
@unittest.skipUnless(connection.vendor == "postgresql", "PostgreSQL tests")
|
|
class BulkCreateUnnestTests(TestCase):
|
|
def test_single_object(self):
|
|
with self.assertNumQueries(1) as ctx:
|
|
Square.objects.bulk_create([Square(root=2, square=4)])
|
|
self.assertNotIn("UNNEST", ctx[0]["sql"])
|
|
|
|
def test_non_literal(self):
|
|
with self.assertNumQueries(1) as ctx:
|
|
Square.objects.bulk_create(
|
|
[Square(root=2, square=RawSQL("%s", (4,))), Square(root=3, square=9)]
|
|
)
|
|
self.assertNotIn("UNNEST", ctx[0]["sql"])
|
|
|
|
def test_unnest_eligible(self):
|
|
with self.assertNumQueries(1) as ctx:
|
|
Square.objects.bulk_create(
|
|
[Square(root=2, square=4), Square(root=3, square=9)]
|
|
)
|
|
self.assertIn("UNNEST", ctx[0]["sql"])
|
|
|
|
def test_unnest_eligible_db_default(self):
|
|
with self.assertNumQueries(1) as ctx:
|
|
squares = Square.objects.bulk_create([Square(root=3), Square(root=3)])
|
|
self.assertIn("UNNEST", ctx[0]["sql"])
|
|
self.assertEqual([square.square for square in squares], [9, 9])
|
|
|
|
def test_unnest_eligible_foreign_keys(self):
|
|
reporter = Reporter.objects.create()
|
|
with self.assertNumQueries(1) as ctx:
|
|
articles = Article.objects.bulk_create(
|
|
[
|
|
Article(pub_date=date.today(), reporter=reporter),
|
|
Article(pub_date=date.today(), reporter=reporter),
|
|
]
|
|
)
|
|
self.assertIn("UNNEST", ctx[0]["sql"])
|
|
self.assertEqual(
|
|
[article.reporter for article in articles], [reporter, reporter]
|
|
)
|