Use faster join implementation:

- use generator when possible
- use tuple __mul__
This commit is contained in:
Cédric Krier committed 2009-08-26 15:39:53 +02:00
1 parent 8061d6c204
commit 45914073bf
9 files changed
+24 -24

No files matched your search

+1 -1
View File
@@ -194,7 +194,7 @@ class TableHandler(TableHandlerInterface):
return
self.cursor.execute('CREATE INDEX "' + index_name + '" ' \
'ON "' + self.table_name + '" ( ' + \
','.join(['"' + x + '"' for x in column_name]) + \
','.join('"' + x + '"' for x in column_name) + \
')')
self._update_definitions()
elif action == 'remove':
+1 -1
View File
@@ -95,7 +95,7 @@ class ModelField(ModelSQL, ModelView):
model_ids.add(rec['model'])
model_ids = list(model_ids)
cursor.execute('SELECT id, model FROM ir_model WHERE id IN ' \
'(' + ','.join(['%s' for x in model_ids]) + ')', model_ids)
'(' + ','.join(('%s',) * len(model_ids)) + ')', model_ids)
id2model = dict(cursor.fetchall())
trans_args = []
+3 -3
View File
@@ -319,7 +319,7 @@ class Module(ModelSQL, ModelView):
if res:
self.raise_user_error(cursor, 'uninstall_dep',
error_description='\n'.join(
['\t%s: %s' % (x[0], x[1]) for x in res]),
'\t%s: %s' % (x[0], x[1]) for x in res),
context=context)
self.write(cursor, user, ids, {'state': 'to remove'})
return True
@@ -647,8 +647,8 @@ class ModuleInstallUpgrade(Wizard):
], context=context)
modules = module_obj.browse(cursor, user, module_ids, context=context)
return {
'module_info': '\n'.join([x.name + ': ' + x.state \
for x in modules]),
'module_info': '\n'.join(x.name + ': ' + x.state \
for x in modules),
}
def _upgrade_module(self, cursor, user, data, context):
+3 -3
View File
@@ -153,7 +153,7 @@ class Translation(ModelSQL, ModelView, Cacheable):
'AND value IS NOT NULL ' \
'AND fuzzy = %s ' \
'AND res_id in (' + \
','.join([str(x) for x in sub_to_fetch]) + ')',
','.join(map(str, sub_to_fetch)) + ')',
(lang, ttype, name, False))
for res_id, value in cursor.fetchall():
self.add(cursor, (lang, ttype, name, res_id), value)
@@ -319,7 +319,7 @@ class Translation(ModelSQL, ModelView, Cacheable):
sub_clause = clause[i:i + cursor.IN_MAX]
cursor.execute('SELECT lang, type, name, src, value ' \
'FROM ir_translation ' \
'WHERE ' + ' OR '.join([x[0] for x in sub_clause]),
'WHERE ' + ' OR '.join(x[0] for x in sub_clause),
reduce(lambda x, y: x + y, [x[1] for x in sub_clause]))
for lang, ttype, name, source, value in cursor.fetchall():
if (name, ttype, lang, source) not in args:
@@ -694,7 +694,7 @@ class ReportTranslationSet(Wizard):
'AND type = %s ' \
'AND module = %s ' \
'AND src NOT IN ' \
'(' + ','.join(['%s' for x in strings]) + ')',
'(' + ','.join(('%s',) * len(strings)) + ')',
(report.report_name, 'odt', report.module) + \
tuple(strings))
return {}
+1 -1
View File
@@ -140,7 +140,7 @@ class View(ModelSQL, ModelView):
'AND type = %s ' \
'AND module = %s ' \
'AND src NOT IN ' \
'(' + ','.join(['%s' for x in strings]) + ')',
'(' + ','.join(('%s',) * len(strings)) + ')',
(view.model, 'view', view.module) + tuple(strings))
return True
+1 -1
View File
@@ -161,7 +161,7 @@ class Property(Function):
def get_condition(sql_type, arg):
if arg[1] in ('in', 'not in'):
return ("(cast(split_part(value,',',2) as %s) %s ("+ \
",".join('%%s' for x in arg[2]) + ")) ") % (sql_type, arg[1])
",".join(('%%s',) * len(arg[2])) + ")) ") % (sql_type, arg[1])
else:
return "(cast(split_part(value,',',2) as %s) %s %%s) " % \
(sql_type, arg[1])
+1 -1
View File
@@ -224,7 +224,7 @@ class Model(object):
'WHERE lang = %s ' \
'AND type IN (%s, %s, %s) ' \
'AND name IN ' \
'(' + ','.join(['%s' for x in self._columns]) + ')',
'(' + ','.join(('%s',) * len(self._columns)) + ')',
('en_US', 'field', 'help', 'selection') + \
tuple([self._name + ',' + x \
for x in self._columns]))
+12 -12
View File
@@ -726,7 +726,7 @@ class ModelSQL(ModelStorage):
cursor.execute("SELECT id " \
'FROM "' + self._table + '" ' \
'WHERE ' + ' OR '.join(
[clause for x in range(len(args)/2)]), args)
(clause,) * (len(args)/2)), args)
if cursor.fetchone():
raise Exception('ConcurrencyException',
'Records were modified in the meanwhile')
@@ -969,7 +969,7 @@ class ModelSQL(ModelStorage):
cursor.execute("SELECT id " \
'FROM "' + self._table + '" ' \
'WHERE ' + ' OR '.join(
[clause for x in range(len(args)/2)]), args)
(clause,) * (len(args)/2)), args)
if cursor.fetchone():
raise Exception('ConcurrencyException',
'Records were modified in the meanwhile')
@@ -985,7 +985,7 @@ class ModelSQL(ModelStorage):
and field.left and field.right:
cursor.execute('SELECT id FROM "' + self._table + '" '\
'WHERE "' + k + '" IN (' \
+ ','.join(['%s' for x in ids]) + ')',
+ ','.join(('%s',) * len(ids)) + ')',
ids)
tree_ids[k] = [x[0] for x in cursor.fetchall()]
@@ -1363,7 +1363,7 @@ class ModelSQL(ModelStorage):
query1 = 'SELECT "' + field.field + '" ' \
'FROM ' + table_query + '"' + field_obj._table + '" ' \
'WHERE id IN (' + \
','.join(['%s' for x in ids2]) + ')'
','.join(('%s',) * len(ids2)) + ')'
query2 = table_args + ids2
domain[i] = ('id', 'inselect', (query1, query2))
else:
@@ -1417,7 +1417,7 @@ class ModelSQL(ModelStorage):
query1 = 'SELECT "' + field.origin + '" ' \
'FROM "' + relation_obj._table + '" ' \
'WHERE "' + field.target + '" IN (' + \
','.join(['%s' for x in ids2]) + ') ' \
','.join(('%s',) * len(ids2)) + ') ' \
'AND "' + field.origin + '" IS NOT NULL'
query2 = [str(x) for x in ids2]
if domain[i][1] == 'child_of':
@@ -1459,7 +1459,7 @@ class ModelSQL(ModelStorage):
query1 = 'SELECT "' + field.origin + '" ' \
'FROM "' + relation_obj._table + '" ' \
'WHERE "' + field.target + '" IN (' + \
','.join(['%s' for x in res_ids]) + ')'
','.join(('%s',) * len(res_ids)) + ')'
query2 = [str(x) for x in res_ids]
domain[i] = ('id', 'inselect', (query1, query2))
i += 1
@@ -1503,7 +1503,7 @@ class ModelSQL(ModelStorage):
'"' + field.right + '" ' + \
'FROM "' + self._table + '" ' + \
'WHERE id IN ' + \
'(' + ','.join(['%s' for x in ids2]) + ')',
'(' + ','.join(('%s',) * len(ids2)) + ')',
ids2)
clause = FIELDS['boolean'].sql_format(False) + ' '
for left, right in cursor.fetchall():
@@ -1625,7 +1625,7 @@ class ModelSQL(ModelStorage):
if len(arg2):
qu1.append(('("%s"."%s" ' + arg[1] + ' (%s))') % \
(table._table, arg[0], ','.join(
['%s'] * len(arg2))))
('%s',) * len(arg2))))
if todel:
if table._columns[arg[0]]._type == 'boolean':
if arg[1] == 'in':
@@ -1997,14 +1997,14 @@ class ModelSQL(ModelStorage):
# ids for left update
cursor.execute('SELECT id FROM "' + self._table + '" ' \
'WHERE "' + left + '" >= %s ' \
'AND id NOT IN (' + ','.join(['%s' for x in child_ids]) + ')',
'AND id NOT IN (' + ','.join(('%s',) * len(child_ids)) + ')',
[parent_right] + child_ids)
left_ids = [x[0] for x in cursor.fetchall()]
# ids for right update
cursor.execute('SELECT id FROM "' + self._table + '" ' \
'WHERE "' + right + '" >= %s ' \
'AND id NOT IN (' + ','.join(['%s' for x in child_ids]) + ')',
'AND id NOT IN (' + ','.join(('%s',) * len(child_ids)) + ')',
[parent_right] + child_ids)
right_ids = [x[0] for x in cursor.fetchall()]
@@ -2030,7 +2030,7 @@ class ModelSQL(ModelStorage):
+ str(parent_right - old_left) + ', ' \
'"' + right + '" = "' + right + '" + ' \
+ str(parent_right - old_left) + ' ' \
'WHERE id IN (' + ','.join(['%s' for x in child_ids]) + ')',
'WHERE id IN (' + ','.join(('%s',) * len(child_ids)) + ')',
child_ids)
# Use root user to by-pass rules
@@ -2062,7 +2062,7 @@ class ModelSQL(ModelStorage):
+ str(current_left - next_left) + ', ' \
'"' + right + '" = "' + right + '" - ' \
+ str(current_left - next_left) + ' ' \
'WHERE id in (' + ','.join(['%s' for x in child_ids]) + ')',
'WHERE id in (' + ','.join(('%s',) * len(child_ids)) + ')',
child_ids)
def _validate(self, cursor, user, ids, context=None):
+1 -1
View File
@@ -194,7 +194,7 @@ def load_module_graph(cursor, graph, pool, lang=None):
modules = [x.name for x in graph]
cursor.execute('SELECT name, state FROM ir_module_module ' \
'WHERE name in (' + ','.join(['%s' for x in modules]) + ')',
'WHERE name in (' + ','.join(('%s',) * len(modules)) + ')',
modules)
module2state = {}
for name, state in cursor.fetchall():