(self, query, *args, **kwargs)
| 1257 | ) |
| 1258 | |
| 1259 | def resolve_expression(self, query, *args, **kwargs): |
| 1260 | clone = self.clone() |
| 1261 | # Subqueries need to use a different set of aliases than the outer |
| 1262 | # query. |
| 1263 | clone.bump_prefix(query) |
| 1264 | clone.subquery = True |
| 1265 | clone.where.resolve_expression(query, *args, **kwargs) |
| 1266 | # Resolve combined queries. |
| 1267 | if clone.combinator: |
| 1268 | clone.combined_queries = tuple( |
| 1269 | [ |
| 1270 | combined_query.resolve_expression(query, *args, **kwargs) |
| 1271 | for combined_query in clone.combined_queries |
| 1272 | ] |
| 1273 | ) |
| 1274 | for key, value in clone.annotations.items(): |
| 1275 | resolved = value.resolve_expression(query, *args, **kwargs) |
| 1276 | if hasattr(resolved, "external_aliases"): |
| 1277 | resolved.external_aliases.update(clone.external_aliases) |
| 1278 | clone.annotations[key] = resolved |
| 1279 | # Outer query's aliases are considered external. |
| 1280 | for alias, table in query.alias_map.items(): |
| 1281 | clone.external_aliases[alias] = ( |
| 1282 | isinstance(table, Join) |
| 1283 | and table.join_field.related_model._meta.db_table != alias |
| 1284 | ) or ( |
| 1285 | isinstance(table, BaseTable) and table.table_name != table.table_alias |
| 1286 | ) |
| 1287 | return clone |
| 1288 | |
| 1289 | def get_external_cols(self): |
| 1290 | exprs = chain(self.annotations.values(), self.where.children) |
no test coverage detected