- def as_sql(self):
- bits = []
- for item in self.children:
- if isinstance(item, WhereNode):
- bits.append(item.as_sql())
- continue
-
- constraint, lookup_type, y, values = item
- comp = get_lookup_operator(lookup_type)
- if hasattr(constraint, "col"):
- # django 1.2
- column = constraint.col
- if lookup_type == 'in':
- equal_bits = [ "(%s%s%s)" % (column, comp, value) for value in values ]
- clause = '(|%s)' % ''.join(equal_bits)
- else:
- clause = "(%s%s%s)" % (constraint.col, comp, values)
- else:
- # django 1.1
- (table, column, db_type) = constraint
- equal_bits = [ "(%s%s%s)" % (column, comp, value) for value in values ]
- if len(equal_bits) == 1:
- clause = equal_bits[0]
- else:
- clause = '(|%s)' % ''.join(equal_bits)
-
- 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)
- else:
- raise Exception("Unhandled WHERE connector: %s" % self.connector)
-
-class Query(BaseQuery):
- def results_iter(self):
- # FIXME: use all object classes
- filterstr = '(objectClass=%s)' % self.model.object_classes[0]
- filterstr += self.where.as_sql()
- filterstr = '(&%s)' % filterstr
- attrlist = [ x.db_column for x in self.model._meta.local_fields if x.db_column ]
+class QuerySet(BaseQuerySet):
+ def __init__(self, model=None, query=None, using=None):
+ if not query:
+ query = Query(model, WhereNode)
+ super(QuerySet, self).__init__(model=model, query=query, using=using)