this method returns 'django_date_trunc("<precision>", <field>)'. in sqlite3, double quoted strings are identifiers, and string literals are single quoted (see http://www.sqlite.org/lang_keywords.html). so it should return "django_date_trunc('<precision>', <field>)". this breaks code such as the following:
MyModel.objects.extra(select={'year':connection.ops.date_trunc_sql('year', '"mymodel"."date"')}).values('year').order_by().annotate(total=Count('pk'))
the resulting query:
[{'time': '0.007', 'sql': u'SELECT (django_date_trunc("year", "mymodel"."date")) AS "year", COUNT("mymodel"."id") AS "total" FROM "mymodel" GROUP BY django_date_trunc("year", "mymodel"."date")'}]
same problem exists with date_extract_sql()
I was not able to reproduce this issue. My guess is that it was fixed in this revision[0].
Attached is a patch which adds a test for this bug.
[0] http://code.djangoproject.com/changeset/12573/django/trunk/django/db/backends/sqlite3/base.py