|
5 | 5 |
|
6 | 6 |
|
7 | 7 | class BitQueryLookupWrapper(Exact): # NOQA
|
8 |
| - def process_lhs(self, qn, connection, lhs=None): |
9 |
| - lhs_sql, params = super(BitQueryLookupWrapper, self).process_lhs( |
10 |
| - qn, connection, lhs) |
11 |
| - if self.rhs: |
12 |
| - lhs_sql = lhs_sql + ' & %s' |
13 |
| - else: |
14 |
| - lhs_sql = lhs_sql + ' | %s' |
15 |
| - params.extend(self.get_db_prep_lookup(self.rhs, connection)[1]) |
16 |
| - return lhs_sql, params |
| 8 | + def process_lhs(self, compiler, connection, lhs=None): |
| 9 | + lhs_sql, lhs_params = super(BitQueryLookupWrapper, self).process_lhs( |
| 10 | + compiler, connection, lhs) |
| 11 | + |
| 12 | + if not isinstance(self.rhs, (BitHandler, Bit)): |
| 13 | + return lhs_sql, lhs_params |
| 14 | + |
| 15 | + op = ' & ' if self.rhs else ' | ' |
| 16 | + rhs_sql, rhs_params = self.process_rhs(compiler, connection) |
| 17 | + params = list(lhs_params) |
| 18 | + params.extend(rhs_params) |
| 19 | + |
| 20 | + return op.join((lhs_sql, rhs_sql)), params |
17 | 21 |
|
18 | 22 | def get_db_prep_lookup(self, value, connection):
|
19 | 23 | v = value.mask if isinstance(value, (BitHandler, Bit)) else value
|
20 | 24 | return super(BitQueryLookupWrapper, self).get_db_prep_lookup(v, connection)
|
21 | 25 |
|
22 | 26 | def get_prep_lookup(self):
|
23 |
| - return self.rhs |
| 27 | + if isinstance(self.rhs, (BitHandler, Bit)): |
| 28 | + return self.rhs # resolve at later stage, in get_db_prep_lookup |
| 29 | + return super(BitQueryLookupWrapper, self).get_prep_lookup() |
24 | 30 |
|
25 | 31 |
|
26 | 32 | class BitQuerySaveWrapper(BitQueryLookupWrapper):
|
|
0 commit comments