app/soc/logic/models/base.py
changeset 1179 427d2ec42823
parent 1165 4db62684ce13
child 1183 03db1f6d222a
--- a/app/soc/logic/models/base.py	Mon Feb 02 14:19:22 2009 +0000
+++ b/app/soc/logic/models/base.py	Mon Feb 02 14:47:09 2009 +0000
@@ -289,12 +289,30 @@
     if unique:
       limit = 1
 
-    q = db.Query(self._model)
+    format_eq = '%(key)s = :%(num)d'
+    format_in = '%(key)s IN (%(values)s)'
+
+    n = 1
+    conditionals = []
+    args = []
 
-    for key, values in filter.iteritems():
-      for value in (values if isinstance(values, list) else [values]):
-        q.filter(key, value)
+    for key, value in filter.iteritems():
+      if isinstance(value, list):
+        count = len(value)
+        args.extend(value)
+        values = ', '.join([':%d' % i for i in range(n, n + count)])
+        sub = format_in % {'key': key, 'values': values}
+        n = n + count
+      else:
+        sub = format_eq % {'key': key, 'num': n}
+        args.append(value)
+        n = n + 1
+      conditionals.append(sub)
 
+    joined_pairs = ' AND '.join(conditionals)
+    condition = 'WHERE ' + joined_pairs
+
+    q = self._model.gql(condition, *args)
     result = q.fetch(limit, offset)
 
     if unique: