compiler.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.db.models.sql import compiler
  2. from django.utils.six.moves import zip_longest
  3. class SQLCompiler(compiler.SQLCompiler):
  4. def resolve_columns(self, row, fields=()):
  5. values = []
  6. index_extra_select = len(self.query.extra_select)
  7. for value, field in zip_longest(row[index_extra_select:], fields):
  8. if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
  9. value in (0, 1)):
  10. value = bool(value)
  11. values.append(value)
  12. return row[:index_extra_select] + tuple(values)
  13. def as_subquery_condition(self, alias, columns, qn):
  14. qn2 = self.connection.ops.quote_name
  15. sql, params = self.as_sql()
  16. return '(%s) IN (%s)' % (', '.join('%s.%s' % (qn(alias), qn2(column)) for column in columns), sql), params
  17. class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
  18. pass
  19. class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
  20. pass
  21. class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
  22. pass
  23. class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
  24. pass
  25. class SQLDateCompiler(compiler.SQLDateCompiler, SQLCompiler):
  26. pass
  27. class SQLDateTimeCompiler(compiler.SQLDateTimeCompiler, SQLCompiler):
  28. pass