#28371: Cast generating invalid SQL for SQLite and PostgreSQL -------------------------------------+------------------------------------- Reporter: | Owner: nobody jamesdoherty | Type: Bug | Status: new Component: Database | Version: 1.11 layer (models, ORM) | Severity: Normal | Keywords: Triage Stage: | Has patch: 0 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- I have a nullable IntegerField. When trying to cast it to a char, SQLite and PostgreSQL error due to invalid SQL:
{{{ class Numbers(models.Model): number = models.IntegerField(null=True) }}} The following code causes the error. {{{ Numbers.objects.annotate(as_string=Cast('number', CharField())) }}} PostgreSQL {{{ ProgrammingError: syntax error at or near "None" LINE 1: ...mbers"."number", "demo_numbers"."number"::varchar(None) AS "... SELECT "demo_numbers"."id", "demo_numbers"."number", "demo_numbers"."number"::varchar(None) AS "as_string" FROM "demo_numbers" }}} Removing the '(None)' from the SQL makes this work. SQLite {{{ OperationalError: near "None": syntax error SELECT "demo_numbers"."id", "demo_numbers"."number", CAST("demo_numbers"."number" AS varchar(None)) AS "as_string" FROM "demo_numbers" }}} According to the SQLite documentation, varchar is not a valid type for SQLite: http://www.sqlite.org/lang_expr.html#castexpr Changing the SQL to 'CAST("demo_numbers"."number" AS TEXT)' succeeds. It's worth noting that it is possible to give SQLite an invalid cast type that doesn't cause an error (eg, try 'CAST("demo_numbers"."number" AS BOGUS)' ) -- Ticket URL: <https://code.djangoproject.com/ticket/28371> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/055.e45176d8a8c0896738b390e32ca3f938%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.