[IMP] SQL injection Refactored
bzr revid: ach@tinyerp.com-20100618101641-84cdea9n1pzx36v2
This commit is contained in:
parent
253c7786a3
commit
e0d94956c1
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,))
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 = {}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")' \
|
||||
|
|
|
@ -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]:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -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])
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -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']))
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -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,))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -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()
|
||||
|
||||
# ----------------------------------------- #
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -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()
|
||||
|
||||
# ----------------------------------------------------- #
|
||||
|
|
Loading…
Reference in New Issue