From e0d94956c1da3d5a64eb91b3a947bd5dde01c424 Mon Sep 17 00:00:00 2001 From: "Anup (OpenERP)" Date: Fri, 18 Jun 2010 15:46:41 +0530 Subject: [PATCH] [IMP] SQL injection Refactored bzr revid: ach@tinyerp.com-20100618101641-84cdea9n1pzx36v2 --- bin/addons/__init__.py | 14 +++++------ bin/addons/base/ir/ir_actions.py | 4 ++-- bin/addons/base/ir/ir_attachment.py | 2 +- bin/addons/base/ir/ir_model.py | 4 ++-- bin/addons/base/ir/ir_translation.py | 4 ++-- bin/addons/base/ir/ir_values.py | 4 +--- bin/addons/base/ir/workflow/print_instance.py | 2 +- bin/addons/base/res/partner/partner.py | 4 ++-- bin/addons/base/res/res_company.py | 2 +- bin/osv/expression.py | 2 +- bin/osv/orm.py | 24 +++++++++---------- bin/tools/translate.py | 2 +- bin/workflow/instance.py | 6 ++--- bin/workflow/workitem.py | 6 ++--- doc/migrate/3.3.0-3.4.0/post.py | 14 +++++------ doc/migrate/3.4.0-4.0.0/post.py | 14 +++++------ doc/migrate/3.4.0-4.0.0/pre.py | 16 ++++++------- 17 files changed, 61 insertions(+), 63 deletions(-) diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index 1f0e8355f21..f4bd7c1e1e3 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -88,7 +88,7 @@ class Graph(dict): ## Then we get the values from the database cr.execute('SELECT name, id, state, demo AS dbdemo, latest_version AS installed_version' ' FROM ir_module_module' - ' WHERE name in %s',(tuple(additional_data),) + ' WHERE name IN %s',(tuple(additional_data),) ) ## and we update the default values with values from the database @@ -728,10 +728,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs): load_demo_xml(cr, m, idref, mode) load_demo(cr, m, idref, mode) cr.execute('update ir_module_module set demo=%s where id=%s', (True, mid)) - + # launch tests only in demo mode, as most tests will depend # on demo data. Other tests can be added into the regular - # 'data' section, but should probably not alter the data, + # 'data' section, but should probably not alter the data, # as there is no rollback. load_test(cr, m, idref, mode) @@ -824,7 +824,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): loop_guardrail += 1 if loop_guardrail > 100: raise ProgrammingError() - cr.execute("SELECT name from ir_module_module WHERE state in %s" ,(tuple(STATES_TO_LOAD),)) + cr.execute("SELECT name from ir_module_module WHERE state IN %s" ,(tuple(STATES_TO_LOAD),)) module_list = [name for (name,) in cr.fetchall() if name not in graph] if not module_list: @@ -877,11 +877,11 @@ def load_modules(db, force_demo=False, status=None, update_module=False): cr.execute('''delete from ir_ui_menu where - (id not in (select parent_id from ir_ui_menu where parent_id is not null)) + (id not IN (select parent_id from ir_ui_menu where parent_id is not null)) and - (id not in (select res_id from ir_values where model='ir.ui.menu')) + (id not IN (select res_id from ir_values where model='ir.ui.menu')) and - (id not in (select res_id from ir_model_data where model='ir.ui.menu'))''') + (id not IN (select res_id from ir_model_data where model='ir.ui.menu'))''') cr.commit() if not cr.rowcount: break diff --git a/bin/addons/base/ir/ir_actions.py b/bin/addons/base/ir/ir_actions.py index c3e9945df96..4523899116f 100644 --- a/bin/addons/base/ir/ir_actions.py +++ b/bin/addons/base/ir/ir_actions.py @@ -160,7 +160,7 @@ class act_window(osv.osv): ] def get_filters(self, cr, uid, model): - cr.execute('SELECT id FROM ir_act_window a WHERE a.id not in (SELECT act_id FROM ir_act_window_user_rel) AND a.res_model=\''+model+'\' and a.filter=\'1\';') + cr.execute('SELECT id FROM ir_act_window a WHERE a.id not IN (SELECT act_id FROM ir_act_window_user_rel) AND a.res_model=\''+model+'\' and a.filter=\'1\';') all_ids = cr.fetchall() filter_ids = map(lambda x:x[0],all_ids) act_ids = self.search(cr,uid,[('res_model','=',model),('filter','=',1),('default_user_ids','in',(','.join(map(str,[uid,])),))]) @@ -380,7 +380,7 @@ class actions_server(osv.osv): def _select_signals(self, cr, uid, context={}): cr.execute("SELECT distinct w.osv, t.signal FROM wkf w, wkf_activity a, wkf_transition t \ WHERE w.id = a.wkf_id AND t.act_from = a.id OR t.act_to = a.id AND t.signal!='' \ - AND t.signal not in (null, NULL)") + AND t.signal not IN (null, NULL)") result = cr.fetchall() or [] res = [] for rs in result: diff --git a/bin/addons/base/ir/ir_attachment.py b/bin/addons/base/ir/ir_attachment.py index cac1beea029..981c6091ceb 100644 --- a/bin/addons/base/ir/ir_attachment.py +++ b/bin/addons/base/ir/ir_attachment.py @@ -30,7 +30,7 @@ class ir_attachment(osv.osv): ima = self.pool.get('ir.model.access') if isinstance(ids, (int, long)): ids = [ids] - cr.execute('select distinct res_model from ir_attachment where id in %s', (tuple(ids),)) + cr.execute('select distinct res_model from ir_attachment where id IN %s', (tuple(ids),)) for obj in cr.fetchall(): if obj[0]: ima.check(cr, uid, obj[0], mode, context=context) diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index f13d8e188fe..9accb03ea7c 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -605,13 +605,13 @@ class ir_model_data(osv.osv): return True modules = list(modules) module_in = ",".join(["%s"] * len(modules)) - cr.execute('select id,name,model,res_id,module from ir_model_data where module in (' + module_in + ') and noupdate=%s', modules + [False]) + cr.execute('select id,name,model,res_id,module from ir_model_data where module IN (' + module_in + ') and noupdate=%s', modules + [False]) wkf_todo = [] for (id, name, model, res_id,module) in cr.fetchall(): if (module,name) not in self.loads: self.unlink_mark[(model,res_id)] = id if model=='workflow.activity': - cr.execute('select res_type,res_id from wkf_instance where id in (select inst_id from wkf_workitem where act_id=%s)', (res_id,)) + cr.execute('select res_type,res_id from wkf_instance where id IN (select inst_id from wkf_workitem where act_id=%s)', (res_id,)) wkf_todo.extend(cr.fetchall()) cr.execute("update wkf_transition set condition='True', role_id=NULL, signal=NULL,act_to=act_from,act_from=%s where act_to=%s", (res_id,res_id)) cr.execute("delete from wkf_transition where act_to=%s", (res_id,)) diff --git a/bin/addons/base/ir/ir_translation.py b/bin/addons/base/ir/ir_translation.py index 1a363285dde..7c476606632 100644 --- a/bin/addons/base/ir/ir_translation.py +++ b/bin/addons/base/ir/ir_translation.py @@ -88,7 +88,7 @@ class ir_translation(osv.osv): 'where lang=%s ' \ 'and type=%s ' \ 'and name=%s ' \ - 'and res_id in %s', + 'and res_id IN %s', (lang,tt,name,tuple(ids))) for res_id, value in cr.fetchall(): translations[res_id] = value @@ -107,7 +107,7 @@ class ir_translation(osv.osv): 'where lang=%s ' \ 'and type=%s ' \ 'and name=%s ' \ - 'and res_id in ('+','.join(map(str, ids))+')', + 'and res_id IN ('+','.join(map(str, ids))+')', (lang,tt,name)) cr.commit() for id in ids: diff --git a/bin/addons/base/ir/ir_values.py b/bin/addons/base/ir/ir_values.py index c33aba007fc..13bfee9d192 100644 --- a/bin/addons/base/ir/ir_values.py +++ b/bin/addons/base/ir/ir_values.py @@ -231,9 +231,7 @@ class ir_values(osv.osv): if type(r[2])==type({}) and 'type' in r[2]: groups = r[2].get('groups_id') if groups: - cr.execute('SELECT COUNT(1) FROM res_groups_users_rel WHERE gid IN %s AND uid=%s', - (tuple(groups), uid) - ) + cr.execute('SELECT COUNT(1) FROM res_groups_users_rel WHERE gid IN %s AND uid=%s',(tuple(groups), uid)) cnt = cr.fetchone()[0] if cnt: res2.remove(r) diff --git a/bin/addons/base/ir/workflow/print_instance.py b/bin/addons/base/ir/workflow/print_instance.py index f34bb71b86a..16a560b2457 100644 --- a/bin/addons/base/ir/workflow/print_instance.py +++ b/bin/addons/base/ir/workflow/print_instance.py @@ -57,7 +57,7 @@ def graph_get(cr, graph, wkf_id, nested=False, workitem={}): actfrom[n['id']] = (n['id'],{}) actto[n['id']] = (n['id'],{}) node_ids = tuple(map(itemgetter('id'), nodes)) - cr.execute('select * from wkf_transition where act_from in %s', (node_ids,)) + cr.execute('select * from wkf_transition where act_from IN %s', (node_ids,)) transitions = cr.dictfetchall() for t in transitions: args = {} diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index bb186d378f4..98f13d9ee6c 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -55,7 +55,7 @@ class res_partner_category(osv.osv): def _check_recursion(self, cr, uid, ids): level = 100 while len(ids): - cr.execute('select distinct parent_id from res_partner_category where id in %s',(tuple(ids),)) + cr.execute('select distinct parent_id from res_partner_category where id IN %s',(tuple(ids),)) ids = filter(None, map(lambda x:x[0], cr.fetchall())) if not level: return False @@ -226,7 +226,7 @@ class res_partner(osv.osv): return True def address_get(self, cr, uid, ids, adr_pref=['default']): - cr.execute('select type,id from res_partner_address where partner_id in %s',(tuple(ids),)) + cr.execute('select type,id from res_partner_address where partner_id IN %s',(tuple(ids),)) res = cr.fetchall() adr = dict(res) # get the id of the (first) default address if there is one, diff --git a/bin/addons/base/res/res_company.py b/bin/addons/base/res/res_company.py index 67f3b54b08c..e2e4d18637f 100644 --- a/bin/addons/base/res/res_company.py +++ b/bin/addons/base/res/res_company.py @@ -179,7 +179,7 @@ class res_company(osv.osv): def _check_recursion(self, cr, uid, ids): level = 100 while len(ids): - cr.execute('select distinct parent_id from res_company where id in %s',(tuple(ids),)) + cr.execute('select distinct parent_id from res_company where id IN %s',(tuple(ids),)) ids = filter(None, map(lambda x:x[0], cr.fetchall())) if not level: return False diff --git a/bin/osv/expression.py b/bin/osv/expression.py index 16f34c7a2f8..5fbdd84abcd 100644 --- a/bin/osv/expression.py +++ b/bin/osv/expression.py @@ -57,7 +57,7 @@ class expression(object): subids = ids[i:i+cr.IN_MAX] cr.execute('SELECT "%s"' \ ' FROM "%s"' \ - ' WHERE "%s" in %%s' % (s, f, w),(tuple(subids),)) + ' WHERE "%s" IN %%s' % (s, f, w),(tuple(subids),)) res.extend([r[0] for r in cr.fetchall()]) else: cr.execute('SELECT distinct("%s")' \ diff --git a/bin/osv/orm.py b/bin/osv/orm.py index a61da33b4c7..61c0abee308 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1985,7 +1985,7 @@ class orm_memory(orm_template): if id in self.datas: del self.datas[id] if len(ids): - cr.execute('delete from wkf_instance where res_type=%s and res_id in %s', (self._name, tuple(ids))) + cr.execute('delete from wkf_instance where res_type=%s and res_id IN %s', (self._name, tuple(ids))) return True def perm_read(self, cr, user, ids, context=None, details=True): @@ -2216,7 +2216,7 @@ class orm(orm_template): todo_end = [] self._field_create(cr, context=context) if getattr(self, '_auto', True): - cr.execute("SELECT relname FROM pg_class WHERE relkind in ('r','v') AND relname=%s" ,( self._table,)) + cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s" ,( self._table,)) if not cr.rowcount: cr.execute('CREATE TABLE "%s" (id SERIAL NOT NULL, PRIMARY KEY(id)) WITHOUT OIDS' % (self._table,)) cr.execute("COMMENT ON TABLE \"%s\" IS '%s'" % (self._table, self._description.replace("'","''"))) @@ -2284,7 +2284,7 @@ class orm(orm_template): if not res: cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY (%s) REFERENCES "%s" ON DELETE SET NULL' % (self._obj, f._fields_id, f._table)) elif isinstance(f, fields.many2many): - cr.execute("SELECT relname FROM pg_class WHERE relkind in ('r','v') AND relname=%s", (f._rel,)) + cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (f._rel,)) if not cr.dictfetchall(): if not self.pool.get(f._obj): raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,)) @@ -2476,7 +2476,7 @@ class orm(orm_template): todo_end.append((order, self._update_store, (f, k))) else: - cr.execute("SELECT relname FROM pg_class WHERE relkind in ('r','v') AND relname=%s", (self._table,)) + cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (self._table,)) create = not bool(cr.fetchone()) cr.commit() # start a new transaction @@ -2830,7 +2830,7 @@ class orm(orm_template): fields_pre2 = map(convert_field, fields_pre) order_by = self._parent_order or self._order select_fields = ','.join(fields_pre2 + ['id']) - query = 'SELECT %s FROM "%s" WHERE id in %%s' % (select_fields, self._table) + query = 'SELECT %s FROM "%s" WHERE id IN %%s' % (select_fields, self._table) if d1: query += " AND " + d1 query += " ORDER BY " + order_by @@ -2980,7 +2980,7 @@ class orm(orm_template): fields = 'id' if self._log_access: fields += ', create_uid, create_date, write_uid, write_date' - query = 'SELECT %s FROM "%s" WHERE id in %%s' % (fields, self._table) + query = 'SELECT %s FROM "%s" WHERE id IN %%s' % (fields, self._table) cr.execute(query, (tuple(ids),)) res = cr.dictfetchall() for r in res: @@ -3074,7 +3074,7 @@ class orm(orm_template): for order, object, store_ids, fields in result_store: if object != self._name: obj = self.pool.get(object) - cr.execute('select id from '+obj._table+' where id in %s',(tuple(store_ids),)) + cr.execute('select id from '+obj._table+' where id IN %s',(tuple(store_ids),)) rids = map(lambda x: x[0], cr.fetchall()) if rids: obj._store_set_values(cr, uid, rids, fields, context) @@ -3102,7 +3102,7 @@ class orm(orm_template): vals format for relational field type. - + many2many field : + + many2many field : For write operation on a many2many fields a list of tuple is expected. The folowing tuples are accepted: @@ -3140,7 +3140,7 @@ class orm(orm_template): for group in groups: module = group.split(".")[0] grp = group.split(".")[1] - cr.execute("select count(*) from res_groups_users_rel where gid in (select res_id from ir_model_data where name=%s and module=%s and model=%s) and uid=%s" \ + cr.execute("select count(*) from res_groups_users_rel where gid IN (select res_id from ir_model_data where name=%s and module=%s and model=%s) and uid=%s" \ (grp, module, 'res.groups', user)) readonly = cr.fetchall() if readonly[0][0] >= 1: @@ -3262,7 +3262,7 @@ class orm(orm_template): nids = [] for sub_ids in cr.split_for_in_conditions(ids): cr.execute('select distinct "'+col+'" from "'+self._table+'" ' \ - 'where id in %s', (sub_ids,)) + 'where id IN %s', (sub_ids,)) nids.extend([x[0] for x in cr.fetchall()]) v = {} @@ -3458,7 +3458,7 @@ class orm(orm_template): for group in groups: module = group.split(".")[0] grp = group.split(".")[1] - cr.execute("select count(*) from res_groups_users_rel where gid in (select res_id from ir_model_data where name='%s' and module='%s' and model='%s') and uid=%s" % \ + cr.execute("select count(*) from res_groups_users_rel where gid IN (select res_id from ir_model_data where name='%s' and module='%s' and model='%s') and uid=%s" % \ (grp, module, 'res.groups', user)) readonly = cr.fetchall() if readonly[0][0] >= 1: @@ -3603,7 +3603,7 @@ class orm(orm_template): field_flag = False field_dict = {} if self._log_access: - cr.execute('select id,write_date from '+self._table+' where id in ('+','.join(map(str, ids))+')') + cr.execute('select id,write_date from '+self._table+' where id IN ('+','.join(map(str, ids))+')') res = cr.fetchall() for r in res: if r[1]: diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 8874b8b166b..d85ee20422f 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -148,7 +148,7 @@ class GettextAlias(object): except: return source - cr.execute('select value from ir_translation where lang=%s and type in (%s,%s) and src=%s', (lang, 'code','sql_constraint', source)) + cr.execute('select value from ir_translation where lang=%s and type IN (%s,%s) and src=%s', (lang, 'code','sql_constraint', source)) res_trans = cr.fetchone() return res_trans and res_trans[0] or source _ = GettextAlias() diff --git a/bin/workflow/instance.py b/bin/workflow/instance.py index e1407fd1455..e530d56dcd2 100644 --- a/bin/workflow/instance.py +++ b/bin/workflow/instance.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -71,7 +71,7 @@ def _update_end(cr, inst_id, ident): act_names = cr.fetchall() cr.execute("update wkf_instance set state='complete' where id=%s", (inst_id,)) cr.execute("update wkf_workitem set state='complete' where subflow_id=%s", (inst_id,)) - cr.execute("select i.id,w.osv,i.res_id from wkf_instance i left join wkf w on (i.wkf_id=w.id) where i.id in (select inst_id from wkf_workitem where subflow_id=%s)", (inst_id,)) + cr.execute("select i.id,w.osv,i.res_id from wkf_instance i left join wkf w on (i.wkf_id=w.id) where i.id IN (select inst_id from wkf_workitem where subflow_id=%s)", (inst_id,)) for i in cr.fetchall(): for act_name in act_names: validate(cr, i[0], (ident[0],i[1],i[2]), 'subflow.'+act_name[0]) diff --git a/bin/workflow/workitem.py b/bin/workflow/workitem.py index 4576f8c5278..bd98e8f67a1 100644 --- a/bin/workflow/workitem.py +++ b/bin/workflow/workitem.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -89,7 +89,7 @@ def _execute(cr, workitem, activity, ident, stack): # signal_todo = [] if (workitem['state']=='active') and activity['signal_send']: - cr.execute("select i.id,w.osv,i.res_id from wkf_instance i left join wkf w on (i.wkf_id=w.id) where i.id in (select inst_id from wkf_workitem where subflow_id=%s)", (workitem['inst_id'],)) + cr.execute("select i.id,w.osv,i.res_id from wkf_instance i left join wkf w on (i.wkf_id=w.id) where i.id IN (select inst_id from wkf_workitem where subflow_id=%s)", (workitem['inst_id'],)) for i in cr.fetchall(): signal_todo.append((i[0], (ident[0],i[1],i[2]), activity['signal_send'])) diff --git a/doc/migrate/3.3.0-3.4.0/post.py b/doc/migrate/3.3.0-3.4.0/post.py index bdbd719116b..dadab1a38d8 100644 --- a/doc/migrate/3.3.0-3.4.0/post.py +++ b/doc/migrate/3.3.0-3.4.0/post.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -33,11 +33,11 @@ parser = optparse.OptionParser(version="Tiny ERP server migration script " + __v parser.add_option("-c", "--config", dest="config", help="specify path to Tiny ERP config file") group = optparse.OptionGroup(parser, "Database related options") -group.add_option("--db_host", dest="db_host", help="specify the database host") -group.add_option("--db_port", dest="db_port", help="specify the database port") +group.add_option("--db_host", dest="db_host", help="specify the database host") +group.add_option("--db_port", dest="db_port", help="specify the database port") group.add_option("-d", "--database", dest="db_name", help="specify the database name") group.add_option("-r", "--db_user", dest="db_user", help="specify the database user name") -group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") +group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") parser.add_option_group(group) options = optparse.Values() @@ -94,7 +94,7 @@ for partner in partners: res_id = 'res.partner,%d' % partner['id'] cr.execute( "insert into ir_property(name, value, res_id, company_id, fields_id) "\ - "values(%s, %s, %s, %d, %d)", + "values(%s, %s, %s, %d, %d)", ('property_payment_term', value, res_id, company_id, fields_id)) # remove the field @@ -116,7 +116,7 @@ registered_reports = cr.fetchall() reg_reports_ids = ','.join([str(id) for (id,) in registered_reports]) for report in reports_wh_duplicates: - cr.execute("select id from ir_act_report_xml where model=%s and report_name=%s and id not in ("+reg_reports_ids+")", (report['model'], report['report_name'])) + cr.execute("select id from ir_act_report_xml where model=%s and report_name=%s and id not IN ("+reg_reports_ids+")", (report['model'], report['report_name'])) (id,) = cr.fetchone() cr.execute("delete from ir_act_report_xml where id=%d", (id,)) cr.execute("delete from ir_values where value='ir.actions.report.xml,%d'", (id,)) diff --git a/doc/migrate/3.4.0-4.0.0/post.py b/doc/migrate/3.4.0-4.0.0/post.py index 2abb06dd6f9..ba32be7d79d 100644 --- a/doc/migrate/3.4.0-4.0.0/post.py +++ b/doc/migrate/3.4.0-4.0.0/post.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -33,11 +33,11 @@ parser = optparse.OptionParser(version="Tiny ERP server migration script " + __v parser.add_option("-c", "--config", dest="config", help="specify path to Tiny ERP config file") group = optparse.OptionGroup(parser, "Database related options") -group.add_option("--db_host", dest="db_host", help="specify the database host") -group.add_option("--db_port", dest="db_port", help="specify the database port") +group.add_option("--db_host", dest="db_host", help="specify the database host") +group.add_option("--db_port", dest="db_port", help="specify the database port") group.add_option("-d", "--database", dest="db_name", help="specify the database name") group.add_option("-r", "--db_user", dest="db_user", help="specify the database user name") -group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") +group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") parser.add_option_group(group) options = optparse.Values() @@ -78,10 +78,10 @@ cr.commit() # --------------- # while True: - cr.execute("select id from ir_ui_menu where (id not in (select parent_id from ir_ui_menu where parent_id is not null)) and (id not in (select res_id from ir_values where model='ir.ui.menu'))") + cr.execute("select id from ir_ui_menu where (id not IN (select parent_id from ir_ui_menu where parent_id is not null)) and (id not IN (select res_id from ir_values where model='ir.ui.menu'))") if not cr.rowcount: break - cr.execute("delete from ir_ui_menu where (id not in (select parent_id from ir_ui_menu where parent_id is not null)) and (id not in (select res_id from ir_values where model='ir.ui.menu'))") + cr.execute("delete from ir_ui_menu where (id not IN (select parent_id from ir_ui_menu where parent_id is not null)) and (id not IN (select res_id from ir_values where model='ir.ui.menu'))") cr.commit() # ----------------------------------------- # diff --git a/doc/migrate/3.4.0-4.0.0/pre.py b/doc/migrate/3.4.0-4.0.0/pre.py index 3e9f2bbf2d4..d3025f247a6 100644 --- a/doc/migrate/3.4.0-4.0.0/pre.py +++ b/doc/migrate/3.4.0-4.0.0/pre.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -33,11 +33,11 @@ parser = optparse.OptionParser(version="Tiny ERP server migration script " + __v parser.add_option("-c", "--config", dest="config", help="specify path to Tiny ERP config file") group = optparse.OptionGroup(parser, "Database related options") -group.add_option("--db_host", dest="db_host", help="specify the database host") -group.add_option("--db_port", dest="db_port", help="specify the database port") +group.add_option("--db_host", dest="db_host", help="specify the database host") +group.add_option("--db_port", dest="db_port", help="specify the database port") group.add_option("-d", "--database", dest="db_name", help="specify the database name") group.add_option("-r", "--db_user", dest="db_user", help="specify the database user name") -group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") +group.add_option("-w", "--db_password", dest="db_password", help="specify the database password") parser.add_option_group(group) options = optparse.Values() @@ -78,7 +78,7 @@ def change_column(cr, table, column, new_type, copy): ] if copy: commands.insert( - 2, + 2, "UPDATE %s SET %s=temp_column::%s" % (table, column, new_type)) for command in commands: @@ -102,10 +102,10 @@ if not cr.rowcount: # --------------- # while True: - cr.execute("select id from ir_ui_menu where id not in (select parent_id from ir_ui_menu where parent_id is not null) and id not in (select res_id from ir_model_data where model='ir.ui.menu')") + cr.execute("select id from ir_ui_menu where id not IN (select parent_id from ir_ui_menu where parent_id is not null) and id not IN (select res_id from ir_model_data where model='ir.ui.menu')") if not cr.rowcount: break - cr.execute("delete from ir_ui_menu where id not in (select parent_id from ir_ui_menu where parent_id is not null) and id not in (select res_id from ir_model_data where model='ir.ui.menu')") + cr.execute("delete from ir_ui_menu where id not IN (select parent_id from ir_ui_menu where parent_id is not null) and id not IN (select res_id from ir_model_data where model='ir.ui.menu')") cr.commit() # ----------------------------------------------------- #