summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorChris Wesseling <chris@maykinmedia.nl>2025-11-20 15:01:14 +0100
committerJacob Walls <jacobtylerwalls@gmail.com>2025-11-20 17:22:46 -0500
commit5834643f43a767fe19f2c6d10217b204e7584ec8 (patch)
treeadbc0a865f9338296e984ba7a92ba868c4039458 /tests/postgres_tests
parentff843bcbce1f7fc16fcc4d4810c221a2eb11c167 (diff)
Fixed #36748 -- Filtered non-standard placeholders from UNNEST queries.
Diffstat (limited to 'tests/postgres_tests')
-rw-r--r--tests/postgres_tests/fields.py5
-rw-r--r--tests/postgres_tests/migrations/0002_create_test_models.py23
-rw-r--r--tests/postgres_tests/models.py5
-rw-r--r--tests/postgres_tests/test_bulk_update.py8
4 files changed, 41 insertions, 0 deletions
diff --git a/tests/postgres_tests/fields.py b/tests/postgres_tests/fields.py
index c5dddf197f..d099effdd5 100644
--- a/tests/postgres_tests/fields.py
+++ b/tests/postgres_tests/fields.py
@@ -57,3 +57,8 @@ except ImportError:
class EnumField(models.CharField):
def get_prep_value(self, value):
return value.value if isinstance(value, enum.Enum) else value
+
+
+class OffByOneField(models.IntegerField):
+ def get_placeholder(self, value, compiler, connection):
+ return "(%s + 1)"
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py
index 859d45f29d..d2f9eceb99 100644
--- a/tests/postgres_tests/migrations/0002_create_test_models.py
+++ b/tests/postgres_tests/migrations/0002_create_test_models.py
@@ -9,6 +9,7 @@ from ..fields import (
EnumField,
HStoreField,
IntegerRangeField,
+ OffByOneField,
SearchVectorField,
)
from ..models import TagField
@@ -565,4 +566,26 @@ class Migration(migrations.Migration):
"required_db_vendor": "postgresql",
},
),
+ migrations.CreateModel(
+ name="OffByOneModel",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ verbose_name="ID",
+ serialize=False,
+ auto_created=True,
+ primary_key=True,
+ ),
+ ),
+ (
+ "one_off",
+ OffByOneField(),
+ ),
+ ],
+ options={
+ "required_db_vendor": "postgresql",
+ },
+ bases=(models.Model,),
+ ),
]
diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py
index 6a3d25a6af..ae9518f892 100644
--- a/tests/postgres_tests/models.py
+++ b/tests/postgres_tests/models.py
@@ -9,6 +9,7 @@ from .fields import (
EnumField,
HStoreField,
IntegerRangeField,
+ OffByOneField,
SearchVectorField,
)
@@ -207,3 +208,7 @@ class HotelReservation(PostgreSQLModel):
end = models.DateTimeField()
cancelled = models.BooleanField(default=False)
requirements = models.JSONField(blank=True, null=True)
+
+
+class OffByOneModel(PostgreSQLModel):
+ one_off = OffByOneField()
diff --git a/tests/postgres_tests/test_bulk_update.py b/tests/postgres_tests/test_bulk_update.py
index 85dfcedd09..f3e8ac8a40 100644
--- a/tests/postgres_tests/test_bulk_update.py
+++ b/tests/postgres_tests/test_bulk_update.py
@@ -6,6 +6,7 @@ from .models import (
IntegerArrayModel,
NestedIntegerArrayModel,
NullableIntegerArrayModel,
+ OffByOneModel,
OtherTypesArrayModel,
RangesModel,
)
@@ -44,3 +45,10 @@ class BulkSaveTests(PostgreSQLTestCase):
self.assertSequenceEqual(
Model.objects.filter(**{field: new}), instances
)
+
+ def test_bulk_create(self):
+ OffByOneModel.objects.bulk_create(OffByOneModel(one_off=0) for _ in range(20))
+
+ self.assertSequenceEqual(
+ [m.one_off for m in OffByOneModel.objects.all()], 20 * [1]
+ )