| 1266 | |
| 1267 | |
| 1268 | class RawSQL(Expression): |
| 1269 | allowed_default = True |
| 1270 | |
| 1271 | def __init__(self, sql, params, output_field=None): |
| 1272 | if output_field is None: |
| 1273 | output_field = fields.Field() |
| 1274 | self.sql, self.params = sql, params |
| 1275 | super().__init__(output_field=output_field) |
| 1276 | |
| 1277 | def __repr__(self): |
| 1278 | return "{}({}, {})".format(self.__class__.__name__, self.sql, self.params) |
| 1279 | |
| 1280 | def as_sql(self, compiler, connection): |
| 1281 | return "(%s)" % self.sql, self.params |
| 1282 | |
| 1283 | def get_group_by_cols(self): |
| 1284 | return [self] |
| 1285 | |
| 1286 | def resolve_expression( |
| 1287 | self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False |
| 1288 | ): |
| 1289 | # Resolve parents fields used in raw SQL. |
| 1290 | if query.model: |
| 1291 | for parent in query.model._meta.all_parents: |
| 1292 | for parent_field in parent._meta.local_fields: |
| 1293 | if parent_field.column.lower() in self.sql.lower(): |
| 1294 | query.resolve_ref( |
| 1295 | parent_field.name, allow_joins, reuse, summarize |
| 1296 | ) |
| 1297 | break |
| 1298 | return super().resolve_expression( |
| 1299 | query, allow_joins, reuse, summarize, for_save |
| 1300 | ) |
| 1301 | |
| 1302 | |
| 1303 | class Star(Expression): |
no outgoing calls