-def compile(q):
- filterstr = ""
- for item in q.children:
- if isinstance(item, WhereNode):
- filterstr += compile(item)
- continue
- table, column, type, x, y, values = item
- if q.negated:
- filterstr += "(!(%s=%s))" % (column,values[0])
+class WhereNode(BaseWhereNode):
+ def as_sql(self):
+ bits = []
+ for item in self.children:
+ if isinstance(item, WhereNode):
+ bits.append(item.as_sql())
+ continue
+ if len(item) == 4:
+ # django 1.1
+ (table, column, type), x, y, values = item
+ else:
+ # django 1.0
+ table, column, type, x, y, values = item
+ equal_bits = [ "(%s=%s)" % (column, value) for value in values ]
+ if len(equal_bits) > 1:
+ clause = '(|%s)' % ''.join(equal_bits)
+ else:
+ clause = equal_bits[0]
+ if self.negated:
+ bits.append('(!%s)' % clause)
+ else:
+ bits.append(clause)
+ if len(bits) == 1:
+ return bits[0]
+ elif self.connector == AND:
+ return '(&%s)' % ''.join(bits)
+ elif self.connector == OR:
+ return '(|%s)' % ''.join(bits)