[ADD] utility methods to split large lists of ids for use in IN clauses
[odoo/odoo.git] / bin / sql_db.py
index 17bfa34..94336cd 100644 (file)
@@ -63,7 +63,7 @@ re_into = re.compile('.* into "?([a-zA-Z_0-9]+)"? .*$');
 sql_counter = 0
 
 class Cursor(object):
-    IN_MAX = 1000
+    IN_MAX = 1000 # decent limit on size of IN queries - guideline = Oracle limit
     __logger = logging.getLogger('db.cursor')
 
     def check(f):
@@ -142,6 +142,12 @@ class Cursor(object):
                 self.sql_into_log[res_into.group(1)][1] += delay
         return res
 
+
+    def split_for_in_conditions(self, ids):
+        """Split a list of identifiers into one or more smaller tuples
+           safe for IN conditions, after uniquifying them."""
+        return tools.misc.split_every(self.IN_MAX, set(ids))
+
     def print_log(self):
         global sql_counter
         sql_counter += self.sql_log_count