restrict selected fields
[matthijs/upstream/django-ldapdb.git] / ldapdb / models / query.py
index 8999c17a4622d16654ad2bf25da77a9ddcc90111..e55c1610a2f2f46043d63f34ea74f505d90627f9 100644 (file)
@@ -71,7 +71,12 @@ class Compiler(object):
 
     def results_iter(self):
         query = self.query
-        attrlist = [ x.db_column for x in query.model._meta.local_fields if x.db_column ]
+        if self.query.select_fields:
+            fields = self.query.select_fields
+        else:
+            fields = self.query.model._meta.fields
+
+        attrlist = [ x.db_column for x in fields if x.db_column ]
 
         try:
             vals = self.connection.search_s(
@@ -113,9 +118,17 @@ class Compiler(object):
         vals = sorted(vals, cmp=cmpvals)
 
         # process results
+        pos = 0
         for dn, attrs in vals:
+            # FIXME : This is not optimal, we retrieve more results than we need
+            # but there is probably no other options as we can't perform ordering
+            # server side.
+            if (self.query.low_mark and pos < self.query.low_mark) or \
+               (self.query.high_mark is not None and pos >= self.query.high_mark):
+                pos += 1
+                continue
             row = []
-            for field in iter(query.model._meta.fields):
+            for field in iter(fields):
                 if field.attname == 'dn':
                     row.append(dn)
                 elif hasattr(field, 'from_ldap'):
@@ -123,6 +136,7 @@ class Compiler(object):
                 else:
                     row.append(None)
             yield row
+            pos += 1
 
 
 class WhereNode(BaseWhereNode):