#12717 closed (fixed)
query.as_sql crashes with multi-db and master/slave routing
Reported by: | Jeff Balogh | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.2-alpha |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
To trigger this, you need a "default" and an "other" database setup, and they both can't be sqlite.
When you call str on a QuerySet.Query object, it doesn't know about QuerySet.db so it falls back to the default database. But the subquery knows what database to use (other), so the subquery compiles against a different database than the parent.
Attaching a failing test. The fix is probably to push using
down to the Query, but I'm not sure.
The easy workaround is to call Query.get_compiler().as_sql with the correct using parameter.
Attachments (1)
Change History (4)
by , 15 years ago
Attachment: | as_sql.diff added |
---|
comment:1 by , 15 years ago
milestone: | → 1.2 |
---|---|
Triage Stage: | Unreviewed → Accepted |
The specific use case you mention is definitely a problem, but I think there is might be something slightly deeper going on here - cross-database joins should be using the allow_relation check; if a relation isn't allowed, then the inner query should be rolled out to a result set, rather than trying to do an inner query in SQL.
comment:2 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Failing test for as_sql with multi-db and master/slave