summaryrefslogtreecommitdiff
path: root/bin/sql_db.py
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2010-03-30 19:26:03 +0200
committerOlivier Dony <odo@openerp.com>2010-03-30 19:26:03 +0200
commit01578fff22c482fbfd4c818b50fd364461be892f (patch)
tree4fc48a9f641abaf641ead1ab731ba9cad4b4ebb5 /bin/sql_db.py
parent0f51cf639b4970e0636fc79c0213faf749e75d00 (diff)
[ADD] utility methods to split large lists of ids for use in IN clauses
bzr revid: odo@openerp.com-20100330172603-ty878ds2i9oa33zq
Diffstat (limited to 'bin/sql_db.py')
-rw-r--r--bin/sql_db.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/bin/sql_db.py b/bin/sql_db.py
index 17bfa340653..94336cde69a 100644
--- a/bin/sql_db.py
+++ b/bin/sql_db.py
@@ -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