JSONIn crashes at database level when preparing a models.Value(None, models.CharField()) on SQLite
Value(None, output_field=CharField()) represents SQL NULL and compiles without bound parameters. This query worked on 6.0 on SQLite:
from django.db import models
class Person(models.Model):
metadata = models.JSONField()
def run():
qs = Person.objects.filter(metadata__in=[models.Value(None, models.CharField())])
print(qs)
SELECT "app_person"."id",
"app_person"."metadata"
FROM "app_person"
WHERE "app_person"."metadata" IN (NULL)
LIMIT 21
But after 9b8e4c6d7d47f7b2e96817ba334e9fd53c10a0df (6.1), it crashes on SQLite with:
File "/Users/jwalls/django/django/db/models/lookups.py", line 349, in <genexpr>
self.resolve_expression_parameter(compiler, connection, sql, param)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jwalls/django/django/db/models/fields/json.py", line 444, in resolve_expression_parameter
and params[0] not in connection.ops.jsonfield_datatype_values
~~~~~~^^^
IndexError: list index out of range
And differently on 6.1.2 after #37377, at the database level:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 4 supplied.
Change History
(6)
| Owner: |
set to Clifford Gama
|
| Status: |
new → assigned
|
| Triage Stage: |
Unreviewed → Accepted
|
| Triage Stage: |
Accepted → Ready for checkin
|
| Resolution: |
→ fixed
|
| Status: |
assigned → closed
|
In 1b4d021b: