[FIX] psycopg2: %d -> %s
[IMP] orm: use _symbol_f when updating database at initialization [IMP] misc.ustr: function returning the unicode string representation of a object bzr revid: christophe@tinyerp.com-20081209133540-zlb6wxs97cxa99nx
This commit is contained in:
parent
822da77ee6
commit
e09455ccd8
|
@ -86,7 +86,7 @@ class _column(object):
|
|||
pass
|
||||
|
||||
def set(self, cr, obj, id, name, value, user=None, context=None):
|
||||
cr.execute('update '+obj._table+' set '+name+'='+self._symbol_set[0]+' where id=%d', (self._symbol_set[1](value), id))
|
||||
cr.execute('update '+obj._table+' set '+name+'='+self._symbol_set[0]+' where id=%s', (self._symbol_set[1](value), id))
|
||||
|
||||
def set_memory(self, cr, obj, id, name, value, user=None, context=None):
|
||||
raise Exception(_('Not implemented set_memory method !'))
|
||||
|
@ -118,13 +118,13 @@ class boolean(_column):
|
|||
|
||||
class integer_big(_column):
|
||||
_type = 'integer_big'
|
||||
_symbol_c = '%d'
|
||||
_symbol_c = '%s'
|
||||
_symbol_f = lambda x: int(x or 0)
|
||||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
|
||||
class integer(_column):
|
||||
_type = 'integer'
|
||||
_symbol_c = '%d'
|
||||
_symbol_c = '%s'
|
||||
_symbol_f = lambda x: int(x or 0)
|
||||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
|
||||
|
@ -168,10 +168,9 @@ class text(_column):
|
|||
|
||||
import __builtin__
|
||||
|
||||
|
||||
class float(_column):
|
||||
_type = 'float'
|
||||
_symbol_c = '%f'
|
||||
_symbol_c = '%s'
|
||||
_symbol_f = lambda x: __builtin__.float(x or 0.0)
|
||||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
|
||||
|
@ -263,9 +262,9 @@ class one2one(_column):
|
|||
self._table = obj_src.pool.get(self._obj)._table
|
||||
if act[0] == 0:
|
||||
id_new = obj.create(cr, user, act[1])
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%d where id=%d', (id_new, id))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%s where id=%s', (id_new, id))
|
||||
else:
|
||||
cr.execute('select '+field+' from '+obj_src._table+' where id=%d', (act[0],))
|
||||
cr.execute('select '+field+' from '+obj_src._table+' where id=%s', (act[0],))
|
||||
id = cr.fetchone()[0]
|
||||
obj.write(cr, user, [id], act[1], context=context)
|
||||
|
||||
|
@ -331,20 +330,20 @@ class many2one(_column):
|
|||
for act in values:
|
||||
if act[0] == 0:
|
||||
id_new = obj.create(cr, act[2])
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%d where id=%d', (id_new, id))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%s where id=%s', (id_new, id))
|
||||
elif act[0] == 1:
|
||||
obj.write(cr, [act[1]], act[2], context=context)
|
||||
elif act[0] == 2:
|
||||
cr.execute('delete from '+self._table+' where id=%d', (act[1],))
|
||||
cr.execute('delete from '+self._table+' where id=%s', (act[1],))
|
||||
elif act[0] == 3 or act[0] == 5:
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=null where id=%d', (id,))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=null where id=%s', (id,))
|
||||
elif act[0] == 4:
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%d where id=%d', (act[1], id))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%s where id=%s', (act[1], id))
|
||||
else:
|
||||
if values:
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%d where id=%d', (values, id))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=%s where id=%s', (values, id))
|
||||
else:
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=null where id=%d', (id,))
|
||||
cr.execute('update '+obj_src._table+' set '+field+'=null where id=%s', (id,))
|
||||
|
||||
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None):
|
||||
return obj.pool.get(self._obj).search(cr, uid, args+self._domain+[('name', 'like', value)], offset, limit)
|
||||
|
@ -435,19 +434,19 @@ class one2many(_column):
|
|||
elif act[0] == 2:
|
||||
obj.unlink(cr, user, [act[1]], context=context)
|
||||
elif act[0] == 3:
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=null where id=%d', (act[1],))
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=null where id=%s', (act[1],))
|
||||
elif act[0] == 4:
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=%d where id=%d', (id, act[1]))
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=%s where id=%s', (id, act[1]))
|
||||
elif act[0] == 5:
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=null where '+self._fields_id+'=%d', (id,))
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=null where '+self._fields_id+'=%s', (id,))
|
||||
elif act[0] == 6:
|
||||
if not act[2]:
|
||||
ids2 = [0]
|
||||
else:
|
||||
ids2 = act[2]
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=NULL where '+self._fields_id+'=%d and id not in ('+','.join(map(str, ids2))+')', (id,))
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=NULL where '+self._fields_id+'=%s and id not in ('+','.join(map(str, ids2))+')', (id,))
|
||||
if act[2]:
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=%d where id in ('+','.join(map(str, act[2]))+')', (id,))
|
||||
cr.execute('update '+_table+' set '+self._fields_id+'=%s where id in ('+','.join(map(str, act[2]))+')', (id,))
|
||||
|
||||
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, operator='like'):
|
||||
return obj.pool.get(self._obj).name_search(cr, uid, value, self._domain, offset, limit)
|
||||
|
@ -500,7 +499,7 @@ class many2many(_column):
|
|||
FROM '+self._rel+' , '+obj._table+' \
|
||||
WHERE '+self._rel+'.'+self._id1+' in ('+ids_s+') \
|
||||
AND '+self._rel+'.'+self._id2+' = '+obj._table+'.id '+d1
|
||||
+limit_str+' order by '+obj._table+'.'+obj._order+' offset %d',
|
||||
+limit_str+' order by '+obj._table+'.'+obj._order+' offset %s',
|
||||
d2+[offset])
|
||||
for r in cr.fetchall():
|
||||
res[r[1]].append(r[0])
|
||||
|
@ -515,26 +514,26 @@ class many2many(_column):
|
|||
for act in values:
|
||||
if act[0] == 0:
|
||||
idnew = obj.create(cr, user, act[2])
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%d,%d)', (id, idnew))
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s,%s)', (id, idnew))
|
||||
elif act[0] == 1:
|
||||
obj.write(cr, user, [act[1]], act[2], context=context)
|
||||
elif act[0] == 2:
|
||||
obj.unlink(cr, user, [act[1]], context=context)
|
||||
elif act[0] == 3:
|
||||
cr.execute('delete from '+self._rel+' where ' + self._id1 + '=%d and '+ self._id2 + '=%d', (id, act[1]))
|
||||
cr.execute('delete from '+self._rel+' where ' + self._id1 + '=%s and '+ self._id2 + '=%s', (id, act[1]))
|
||||
elif act[0] == 4:
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%d,%d)', (id, act[1]))
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s,%s)', (id, act[1]))
|
||||
elif act[0] == 5:
|
||||
cr.execute('update '+self._rel+' set '+self._id2+'=null where '+self._id2+'=%d', (id,))
|
||||
cr.execute('update '+self._rel+' set '+self._id2+'=null where '+self._id2+'=%s', (id,))
|
||||
elif act[0] == 6:
|
||||
|
||||
d1, d2 = obj.pool.get('ir.rule').domain_get(cr, user, obj._name)
|
||||
if d1:
|
||||
d1 = ' and ' + d1
|
||||
cr.execute('delete from '+self._rel+' where '+self._id1+'=%d AND '+self._id2+' IN (SELECT '+self._rel+'.'+self._id2+' FROM '+self._rel+', '+obj._table+' WHERE '+self._rel+'.'+self._id1+'=%d AND '+self._rel+'.'+self._id2+' = '+obj._table+'.id '+ d1 +')', [id, id]+d2)
|
||||
cr.execute('delete from '+self._rel+' where '+self._id1+'=%s AND '+self._id2+' IN (SELECT '+self._rel+'.'+self._id2+' FROM '+self._rel+', '+obj._table+' WHERE '+self._rel+'.'+self._id1+'=%s AND '+self._rel+'.'+self._id2+' = '+obj._table+'.id '+ d1 +')', [id, id]+d2)
|
||||
|
||||
for act_nbr in act[2]:
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%d, %d)', (id, act_nbr))
|
||||
cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s, %s)', (id, act_nbr))
|
||||
|
||||
#
|
||||
# TODO: use a name_search
|
||||
|
@ -601,9 +600,9 @@ class function(_column):
|
|||
self._classic_read = True
|
||||
self._classic_write = True
|
||||
if type == 'float':
|
||||
self._symbol_c = '%f'
|
||||
self._symbol_f = lambda x: __builtin__.float(x or 0.0)
|
||||
self._symbol_set = (self._symbol_c, self._symbol_f)
|
||||
self._symbol_c = float._symbol_c
|
||||
self._symbol_f = float._symbol_f
|
||||
self._symbol_set = float._symbol_set
|
||||
|
||||
def search(self, cr, uid, obj, name, args):
|
||||
if not self._fnct_search:
|
||||
|
@ -680,7 +679,7 @@ class related(function):
|
|||
if field_detail[1] in ('date'):
|
||||
where += " %s.%s %s '%s' and" % (obj_child._table, self._arg[i], context[0][1], context[0][2])
|
||||
if field_detail[1] in ['integer', 'long', 'float','integer_big']:
|
||||
where += " %s.%s %s '%d' and" % (obj_child._table, self._arg[i], context[0][1], context[0][2])
|
||||
where += " %s.%s %s '%s' and" % (obj_child._table, self._arg[i], context[0][1], context[0][2])
|
||||
if len(where)>10:
|
||||
query += where.rstrip('and')
|
||||
cr.execute(query)
|
||||
|
@ -754,7 +753,7 @@ class property(function):
|
|||
nid = property.search(cr, uid, [('fields_id', '=', definition_id),
|
||||
('res_id', '=', obj._name+','+str(id))])
|
||||
while len(nid):
|
||||
cr.execute('DELETE FROM ir_property WHERE id=%d', (nid.pop(),))
|
||||
cr.execute('DELETE FROM ir_property WHERE id=%s', (nid.pop(),))
|
||||
|
||||
nid = property.search(cr, uid, [('fields_id', '=', definition_id),
|
||||
('res_id', '=', False)])
|
||||
|
|
165
bin/osv/orm.py
165
bin/osv/orm.py
|
@ -342,7 +342,7 @@ class orm_template(object):
|
|||
id, model_id, model, name, field_description, ttype,
|
||||
relation,view_load,state,select_level
|
||||
) VALUES (
|
||||
%d,%s,%s,%s,%s,%s,%s,%s,%s,%s
|
||||
%s,%s,%s,%s,%s,%s,%s,%s,%s,%s
|
||||
)""", (
|
||||
id, vals['model_id'], vals['model'], vals['name'], vals['field_description'], vals['ttype'],
|
||||
vals['relation'], bool(vals['view_load']), 'base',
|
||||
|
@ -995,7 +995,7 @@ class orm_template(object):
|
|||
while ok:
|
||||
if view_id:
|
||||
where = (model and (" and model='%s'" % (self._name,))) or ''
|
||||
cr.execute('SELECT arch,name,field_parent,id,type,inherit_id FROM ir_ui_view WHERE id=%d'+where, (view_id,))
|
||||
cr.execute('SELECT arch,name,field_parent,id,type,inherit_id FROM ir_ui_view WHERE id=%s'+where, (view_id,))
|
||||
else:
|
||||
cr.execute('''SELECT
|
||||
arch,name,field_parent,id,type,inherit_id
|
||||
|
@ -1021,7 +1021,7 @@ class orm_template(object):
|
|||
|
||||
def _inherit_apply_rec(result, inherit_id):
|
||||
# get all views which inherit from (ie modify) this view
|
||||
cr.execute('select arch,id from ir_ui_view where inherit_id=%d and model=%s order by priority', (inherit_id, self._name))
|
||||
cr.execute('select arch,id from ir_ui_view where inherit_id=%s and model=%s order by priority', (inherit_id, self._name))
|
||||
sql_inherit = cr.fetchall()
|
||||
for (inherit, id) in sql_inherit:
|
||||
result = _inherit_apply(result, inherit)
|
||||
|
@ -1368,7 +1368,7 @@ class orm(orm_template):
|
|||
childs = cr.fetchall()
|
||||
for id in childs:
|
||||
pos2 = browse_rec(id[0], pos2)
|
||||
cr.execute('update '+self._table+' set parent_left=%d, parent_right=%d where id=%d', (pos,pos2,root))
|
||||
cr.execute('update '+self._table+' set parent_left=%s, parent_right=%s where id=%s', (pos,pos2,root))
|
||||
return pos2+1
|
||||
browse_rec(None)
|
||||
return True
|
||||
|
@ -1396,8 +1396,8 @@ class orm(orm_template):
|
|||
logger.notifyChannel('init', netsvc.LOG_ERROR, 'create a column parent_right on object %s: fields.integer(\'Right Parent\', select=1)' % (self._table, ))
|
||||
if self._columns[self._parent_name].ondelete<>'cascade':
|
||||
logger.notifyChannel('init', netsvc.LOG_ERROR, "the columns %s on object must be set as ondelete='cascasde'" % (self._name, self._parent_name))
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" INTEGER" % (self._table, 'parent_left'))
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" INTEGER" % (self._table, 'parent_right'))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_left" INTEGER' % (self._table,))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_right" INTEGER' % (self._table,))
|
||||
cr.commit()
|
||||
store_compute = True
|
||||
|
||||
|
@ -1409,15 +1409,13 @@ class orm(orm_template):
|
|||
'write_date': 'TIMESTAMP'
|
||||
}
|
||||
for k in logs:
|
||||
cr.execute(
|
||||
"""
|
||||
cr.execute("""
|
||||
SELECT c.relname
|
||||
FROM pg_class c, pg_attribute a
|
||||
WHERE c.relname='%s' AND a.attname='%s' AND c.oid=a.attrelid
|
||||
""" % (self._table, k))
|
||||
FROM pg_class c, pg_attribute a
|
||||
WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid
|
||||
""", (self._table, k))
|
||||
if not cr.rowcount:
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" %s" %
|
||||
(self._table, k, logs[k]))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, logs[k]))
|
||||
cr.commit()
|
||||
|
||||
# iterate on the database columns to drop the NOT NULL constraints
|
||||
|
@ -1425,12 +1423,12 @@ class orm(orm_template):
|
|||
cr.execute(
|
||||
"SELECT a.attname, a.attnotnull "\
|
||||
"FROM pg_class c, pg_attribute a "\
|
||||
"WHERE c.oid=a.attrelid AND c.relname='%s'" % self._table)
|
||||
"WHERE c.oid=a.attrelid AND c.relname=%s", (self._table,))
|
||||
db_columns = cr.dictfetchall()
|
||||
for column in db_columns:
|
||||
if column['attname'] not in ('id', 'oid', 'tableoid', 'ctid', 'xmin', 'xmax', 'cmin', 'cmax'):
|
||||
if column['attnotnull'] and column['attname'] not in self._columns:
|
||||
cr.execute("ALTER TABLE \"%s\" ALTER COLUMN \"%s\" DROP NOT NULL" % (self._table, column['attname']))
|
||||
cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" DROP NOT NULL' % (self._table, column['attname']))
|
||||
|
||||
# iterate on the "object columns"
|
||||
todo_update_store = []
|
||||
|
@ -1443,10 +1441,10 @@ class orm(orm_template):
|
|||
if isinstance(f, fields.one2many):
|
||||
cr.execute("SELECT relname FROM pg_class WHERE relkind='r' AND relname=%s", (f._obj,))
|
||||
if cr.fetchone():
|
||||
cr.execute("SELECT count(*) as c FROM pg_class c,pg_attribute a WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid", (f._obj, f._fields_id))
|
||||
cr.execute("SELECT count(1) as c FROM pg_class c,pg_attribute a WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid", (f._obj, f._fields_id))
|
||||
res = cr.fetchone()[0]
|
||||
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))
|
||||
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,))
|
||||
if not cr.dictfetchall():
|
||||
|
@ -1455,9 +1453,9 @@ class orm(orm_template):
|
|||
ref = self.pool.get(f._obj)._table
|
||||
except AttributeError:
|
||||
ref = f._obj.replace('.', '_')
|
||||
cr.execute("CREATE TABLE \"%s\" (\"%s\" INTEGER NOT NULL REFERENCES \"%s\" ON DELETE CASCADE, \"%s\" INTEGER NOT NULL REFERENCES \"%s\" ON DELETE CASCADE) WITH OIDS"%(f._rel, f._id1, self._table, f._id2, ref))
|
||||
cr.execute("CREATE INDEX \"%s_%s_index\" ON \"%s\" (\"%s\")" % (f._rel, f._id1, f._rel, f._id1))
|
||||
cr.execute("CREATE INDEX \"%s_%s_index\" ON \"%s\" (\"%s\")" % (f._rel, f._id2, f._rel, f._id2))
|
||||
cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, "%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE) WITH OIDS' % (f._rel, f._id1, self._table, f._id2, ref))
|
||||
cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id1, f._rel, f._id1))
|
||||
cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id2, f._rel, f._id2))
|
||||
cr.commit()
|
||||
else:
|
||||
cr.execute("SELECT c.relname,a.attname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,t.typname,CASE WHEN a.attlen=-1 THEN a.atttypmod-4 ELSE a.attlen END as size FROM pg_class c,pg_attribute a,pg_type t WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid AND a.atttypid=t.oid", (self._table, k))
|
||||
|
@ -1466,15 +1464,14 @@ class orm(orm_template):
|
|||
if not isinstance(f, fields.function) or f.store:
|
||||
|
||||
# add the missing field
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" %s" % (self._table, k, get_pg_type(f)[1]))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, get_pg_type(f)[1]))
|
||||
|
||||
# initialize it
|
||||
if not create and k in self._defaults:
|
||||
default = self._defaults[k](self, cr, 1, {})
|
||||
if not default:
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"=NULL" % (self._table, k))
|
||||
else:
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"='%s'" % (self._table, k, default))
|
||||
ss = self._columns[k]._symbol_set
|
||||
query = 'UPDATE "%s" SET "%s"=%s' % (self._table, k, ss[0])
|
||||
cr.execute(query, (default is not None and ss[1](default) or None,))
|
||||
|
||||
if isinstance(f, fields.function):
|
||||
todo_update_store.append((f,k))
|
||||
|
@ -1488,13 +1485,13 @@ class orm(orm_template):
|
|||
ref = f._obj.replace('.', '_')
|
||||
# ir_actions is inherited so foreign key doesn't work on it
|
||||
if ref != 'ir_actions':
|
||||
cr.execute("ALTER TABLE \"%s\" ADD FOREIGN KEY (\"%s\") REFERENCES \"%s\" ON DELETE %s" % (self._table, k, ref, f.ondelete))
|
||||
cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY ("%s") REFERENCES "%s" ON DELETE %s' % (self._table, k, ref, f.ondelete))
|
||||
if f.select:
|
||||
cr.execute("CREATE INDEX \"%s_%s_index\" ON \"%s\" (\"%s\")" % (self._table, k, self._table, k))
|
||||
cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (self._table, k, self._table, k))
|
||||
if f.required:
|
||||
cr.commit()
|
||||
try:
|
||||
cr.execute("ALTER TABLE \"%s\" ALTER COLUMN \"%s\" SET NOT NULL" % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (self._table, k))
|
||||
except:
|
||||
logger.notifyChannel('init', netsvc.LOG_WARNING, 'WARNING: unable to set column %s of table %s not null !\nTry to re-run: openerp-server.py --update=module\nIf it doesn\'t work, update records and execute manually:\nALTER TABLE %s ALTER COLUMN %s SET NOT NULL' % (k, self._table, self._table, k))
|
||||
cr.commit()
|
||||
|
@ -1521,61 +1518,64 @@ class orm(orm_template):
|
|||
# We update varchar size, otherwise, we keep DB size
|
||||
# to avoid truncated string...
|
||||
if f_pg_size < f.size:
|
||||
cr.execute("ALTER TABLE \"%s\" RENAME COLUMN \"%s\" TO temp_change_size" % (self._table, k))
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" VARCHAR(%d)" % (self._table, k, f.size))
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"=temp_change_size::VARCHAR(%d)" % (self._table, k, f.size))
|
||||
cr.execute("ALTER TABLE \"%s\" DROP COLUMN temp_change_size" % (self._table,))
|
||||
cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" VARCHAR(%d)' % (self._table, k, f.size))
|
||||
cr.execute('UPDATE "%s" SET "%s"=temp_change_size::VARCHAR(%d)' % (self._table, k, f.size))
|
||||
cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size' % (self._table,))
|
||||
cr.commit()
|
||||
if f_pg_type == 'date' and f._type == 'datetime':
|
||||
cr.execute("ALTER TABLE \"%s\" RENAME COLUMN \"%s\" TO temp_change_type" % (self._table, k))
|
||||
cr.execute("ALTER TABLE \"%s\" ADD COLUMN \"%s\" TIMESTAMP " % (self._table, k))
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"=temp_change_type::TIMESTAMP" % (self._table, k))
|
||||
cr.execute("ALTER TABLE \"%s\" DROP COLUMN temp_change_type" % (self._table,))
|
||||
cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_type' % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" TIMESTAMP' % (self._table, k))
|
||||
cr.execute('UPDATE "%s" SET "%s"=temp_change_type::TIMESTAMP' % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_type' % (self._table,))
|
||||
cr.commit()
|
||||
# if the field is required and hasn't got a NOT NULL constraint
|
||||
if f.required and f_pg_notnull == 0:
|
||||
# set the field to the default value if any
|
||||
if k in self._defaults:
|
||||
default = self._defaults[k](self, cr, 1, {})
|
||||
if not (default is False):
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"='%s' WHERE %s is NULL" % (self._table, k, default, k))
|
||||
if (default is not None):
|
||||
ss = self._columns[k]._symbol_set
|
||||
query = 'UPDATE "%s" SET "%s"=%s WHERE %s is NULL' % (self._table, k, ss[0], k)
|
||||
cr.execute(query, (ss[1](default),))
|
||||
cr.commit()
|
||||
# add the NOT NULL constraint
|
||||
try:
|
||||
cr.execute("ALTER TABLE \"%s\" ALTER COLUMN \"%s\" SET NOT NULL" % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (self._table, k))
|
||||
cr.commit()
|
||||
except:
|
||||
logger.notifyChannel('init', netsvc.LOG_WARNING, 'unable to set a NOT NULL constraint on column %s of the %s table !\nIf you want to have it, you should update the records and execute manually:\nALTER TABLE %s ALTER COLUMN %s SET NOT NULL' % (k, self._table, self._table, k))
|
||||
cr.commit()
|
||||
elif not f.required and f_pg_notnull == 1:
|
||||
cr.execute("ALTER TABLE \"%s\" ALTER COLUMN \"%s\" DROP NOT NULL" % (self._table, k))
|
||||
cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" DROP NOT NULL' % (self._table, k))
|
||||
cr.commit()
|
||||
cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = '%s_%s_index' and tablename = '%s'" % (self._table, k, self._table))
|
||||
indexname = '%s_%s_index' % (self._table, k)
|
||||
cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = %s and tablename = %s", (indexname, self._table))
|
||||
res = cr.dictfetchall()
|
||||
if not res and f.select:
|
||||
cr.execute("CREATE INDEX \"%s_%s_index\" ON \"%s\" (\"%s\")" % (self._table, k, self._table, k))
|
||||
cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (self._table, k, self._table, k))
|
||||
cr.commit()
|
||||
if res and not f.select:
|
||||
cr.execute("DROP INDEX \"%s_%s_index\"" % (self._table, k))
|
||||
cr.execute('DROP INDEX "%s_%s_index"' % (self._table, k))
|
||||
cr.commit()
|
||||
if isinstance(f, fields.many2one):
|
||||
ref = self.pool.get(f._obj)._table
|
||||
if ref != 'ir_actions':
|
||||
cr.execute('SELECT confdeltype, conname FROM pg_constraint as con, pg_class as cl1, pg_class as cl2, ' \
|
||||
'pg_attribute as att1, pg_attribute as att2 ' \
|
||||
'WHERE con.conrelid = cl1.oid ' \
|
||||
'AND cl1.relname = %s ' \
|
||||
'AND con.confrelid = cl2.oid ' \
|
||||
'AND cl2.relname = %s ' \
|
||||
'AND array_lower(con.conkey, 1) = 1 ' \
|
||||
'AND con.conkey[1] = att1.attnum ' \
|
||||
'AND att1.attrelid = cl1.oid ' \
|
||||
'AND att1.attname = %s ' \
|
||||
'AND array_lower(con.confkey, 1) = 1 ' \
|
||||
'AND con.confkey[1] = att2.attnum ' \
|
||||
'AND att2.attrelid = cl2.oid ' \
|
||||
'AND att2.attname = %s ' \
|
||||
'AND con.contype = \'f\'', (self._table, ref, k, 'id'))
|
||||
cr.execute('SELECT confdeltype, conname FROM pg_constraint as con, pg_class as cl1, pg_class as cl2, '
|
||||
'pg_attribute as att1, pg_attribute as att2 '
|
||||
'WHERE con.conrelid = cl1.oid '
|
||||
'AND cl1.relname = %s '
|
||||
'AND con.confrelid = cl2.oid '
|
||||
'AND cl2.relname = %s '
|
||||
'AND array_lower(con.conkey, 1) = 1 '
|
||||
'AND con.conkey[1] = att1.attnum '
|
||||
'AND att1.attrelid = cl1.oid '
|
||||
'AND att1.attname = %s '
|
||||
'AND array_lower(con.confkey, 1) = 1 '
|
||||
'AND con.confkey[1] = att2.attnum '
|
||||
'AND att2.attrelid = cl2.oid '
|
||||
'AND att2.attname = %s '
|
||||
"AND con.contype = 'f'", (self._table, ref, k, 'id'))
|
||||
res = cr.dictfetchall()
|
||||
if res:
|
||||
confdeltype = {
|
||||
|
@ -1592,6 +1592,8 @@ class orm(orm_template):
|
|||
else:
|
||||
print "ERROR"
|
||||
for f,k in todo_update_store:
|
||||
ss = self._columns[k]._symbol_set
|
||||
update_query = 'UPDATE "%s" SET "%s"=%s WHERE id=%%s' % (self._table, k, ss[0])
|
||||
cr.execute('select id from '+self._table)
|
||||
ids_lst = map(lambda x: x[0], cr.fetchall())
|
||||
while ids_lst:
|
||||
|
@ -1602,19 +1604,21 @@ class orm(orm_template):
|
|||
if f._multi:
|
||||
val = val[k]
|
||||
if (val<>False) or (type(val)<>bool):
|
||||
cr.execute("UPDATE \"%s\" SET \"%s\"='%s' where id=%d"% (self._table, k, val, key))
|
||||
#cr.execute("UPDATE \"%s\" SET \"%s\"='%s' where id=%d"% (self._table, k, val, key))
|
||||
cr.execute(update_query, (ss[1](val), key))
|
||||
#else:
|
||||
# cr.execute("UPDATE \"%s\" SET \"%s\"=NULL where id=%d"% (self._table, k, key))
|
||||
|
||||
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())
|
||||
|
||||
for (key, con, _) in self._sql_constraints:
|
||||
cr.execute("SELECT conname FROM pg_constraint where conname='%s_%s'" % (self._table, key))
|
||||
conname = '%s_%s' % (self._table, key)
|
||||
cr.execute("SELECT conname FROM pg_constraint where conname=%s", (conname,))
|
||||
if not cr.dictfetchall():
|
||||
try:
|
||||
cr.execute('alter table \"%s\" add constraint \"%s_%s\" %s' % (self._table, self._table, key, con,))
|
||||
cr.execute('alter table "%s" add constraint "%s_%s" %s' % (self._table, self._table, key, con,))
|
||||
cr.commit()
|
||||
except:
|
||||
logger.notifyChannel('init', netsvc.LOG_WARNING, 'unable to add \'%s\' constraint on table %s !\n If you want to have it, you should update the records and execute manually:\nALTER table %s ADD CONSTRAINT %s_%s %s' % (con, self._table, self._table, self._table, key, con,))
|
||||
|
@ -1836,7 +1840,6 @@ class orm(orm_template):
|
|||
if isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
|
||||
return "length(%s) as %s" % (f,f)
|
||||
return '"%s"' % (f,)
|
||||
#fields_pre2 = map(lambda x: (x in ('create_date', 'write_date')) and ('date_trunc(\'second\', '+x+') as '+x) or '"'+x+'"', fields_pre)
|
||||
fields_pre2 = map(convert_field, fields_pre)
|
||||
for i in range(0, len(ids), cr.IN_MAX):
|
||||
sub_ids = ids[i:i+cr.IN_MAX]
|
||||
|
@ -1888,7 +1891,7 @@ class orm(orm_template):
|
|||
# to get the _symbol_get in each occurence
|
||||
for r in res:
|
||||
for f in fields_post:
|
||||
r[f] = self.columns[f]._symbol_get(r[f])
|
||||
r[f] = self._columns[f]._symbol_get(r[f])
|
||||
ids = map(lambda x: x['id'], res)
|
||||
|
||||
# all non inherited fields for which the attribute whose name is in load is False
|
||||
|
@ -2022,7 +2025,7 @@ class orm(orm_template):
|
|||
|
||||
for i in range(0, len(ids), cr.IN_MAX):
|
||||
sub_ids = ids[i:i+cr.IN_MAX]
|
||||
str_d = string.join(('%d',)*len(sub_ids), ',')
|
||||
str_d = string.join(('%s',)*len(sub_ids), ',')
|
||||
if d1:
|
||||
cr.execute('SELECT id FROM "'+self._table+'" ' \
|
||||
'WHERE id IN ('+str_d+')'+d1, sub_ids+d2)
|
||||
|
@ -2139,7 +2142,7 @@ class orm(orm_template):
|
|||
% (vals[field], field))
|
||||
|
||||
if self._log_access:
|
||||
upd0.append('write_uid=%d')
|
||||
upd0.append('write_uid=%s')
|
||||
upd0.append('write_date=now()')
|
||||
upd1.append(user)
|
||||
|
||||
|
@ -2205,14 +2208,14 @@ class orm(orm_template):
|
|||
if self.pool._init:
|
||||
self.pool._init_parent[self._name]=True
|
||||
else:
|
||||
cr.execute('select parent_left,parent_right from '+self._table+' where id=%d', (vals[self._parent_name],))
|
||||
cr.execute('select parent_left,parent_right from '+self._table+' where id=%s', (vals[self._parent_name],))
|
||||
res = cr.fetchone()
|
||||
if res:
|
||||
pleft,pright = res
|
||||
else:
|
||||
cr.execute('select max(parent_right),max(parent_right)+1 from '+self._table)
|
||||
pleft,pright = cr.fetchone()
|
||||
cr.execute('select parent_left,parent_right,id from '+self._table+' where id in ('+','.join(map(lambda x:'%d',ids))+')', ids)
|
||||
cr.execute('select parent_left,parent_right,id from '+self._table+' where id in ('+','.join(map(lambda x:'%s',ids))+')', ids)
|
||||
dest = pleft + 1
|
||||
for cleft,cright,cid in cr.fetchall():
|
||||
if cleft > pleft:
|
||||
|
@ -2232,17 +2235,17 @@ class orm(orm_template):
|
|||
cr.execute('UPDATE '+self._table+'''
|
||||
SET
|
||||
parent_left = CASE
|
||||
WHEN parent_left BETWEEN %d AND %d THEN parent_left + %d
|
||||
WHEN parent_left BETWEEN %d AND %d THEN parent_left + %d
|
||||
WHEN parent_left BETWEEN %s AND %s THEN parent_left + %s
|
||||
WHEN parent_left BETWEEN %s AND %s THEN parent_left + %s
|
||||
ELSE parent_left
|
||||
END,
|
||||
parent_right = CASE
|
||||
WHEN parent_right BETWEEN %d AND %d THEN parent_right + %d
|
||||
WHEN parent_right BETWEEN %d AND %d THEN parent_right + %d
|
||||
WHEN parent_right BETWEEN %s AND %s THEN parent_right + %s
|
||||
WHEN parent_right BETWEEN %s AND %s THEN parent_right + %s
|
||||
ELSE parent_right
|
||||
END
|
||||
WHERE
|
||||
parent_left<%d OR parent_right>%d;
|
||||
parent_left<%s OR parent_right>%s;
|
||||
''', (leftbound,rightbound,cwidth,cleft,cright,treeshift,leftbound,rightbound,
|
||||
cwidth,cleft,cright,treeshift,leftrange,rightrange))
|
||||
|
||||
|
@ -2313,7 +2316,7 @@ class orm(orm_template):
|
|||
for table in tocreate:
|
||||
id = self.pool.get(table).create(cr, user, tocreate[table])
|
||||
upd0 += ','+self._inherits[table]
|
||||
upd1 += ',%d'
|
||||
upd1 += ',%s'
|
||||
upd2.append(id)
|
||||
|
||||
for field in vals:
|
||||
|
@ -2343,7 +2346,7 @@ class orm(orm_template):
|
|||
% (vals[field], field))
|
||||
if self._log_access:
|
||||
upd0 += ',create_uid,create_date'
|
||||
upd1 += ',%d,now()'
|
||||
upd1 += ',%s,now()'
|
||||
upd2.append(user)
|
||||
cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2))
|
||||
upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority)
|
||||
|
@ -2358,14 +2361,14 @@ class orm(orm_template):
|
|||
else:
|
||||
parent = vals.get(self._parent_name, False)
|
||||
if parent:
|
||||
cr.execute('select parent_left from '+self._table+' where id=%d', (parent,))
|
||||
cr.execute('select parent_left from '+self._table+' where id=%s', (parent,))
|
||||
pleft = cr.fetchone()[0]
|
||||
else:
|
||||
cr.execute('select max(parent_right) from '+self._table)
|
||||
pleft = cr.fetchone()[0] or 0
|
||||
cr.execute('update '+self._table+' set parent_left=parent_left+2 where parent_left>%d', (pleft,))
|
||||
cr.execute('update '+self._table+' set parent_right=parent_right+2 where parent_right>%d', (pleft,))
|
||||
cr.execute('update '+self._table+' set parent_left=%d,parent_right=%d where id=%d', (pleft+1,pleft+2,id_new))
|
||||
cr.execute('update '+self._table+' set parent_left=parent_left+2 where parent_left>%s', (pleft,))
|
||||
cr.execute('update '+self._table+' set parent_right=parent_right+2 where parent_right>%s', (pleft,))
|
||||
cr.execute('update '+self._table+' set parent_left=%s,parent_right=%s where id=%s', (pleft+1,pleft+2,id_new))
|
||||
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_create(user, self._name, id_new, cr)
|
||||
|
@ -2394,7 +2397,7 @@ class orm(orm_template):
|
|||
upd1.append(self._columns[field]._symbol_set[1](value))
|
||||
upd1.append(id)
|
||||
cr.execute('update "' + self._table + '" set ' + \
|
||||
string.join(upd0, ',') + ' where id = %d', upd1)
|
||||
string.join(upd0, ',') + ' where id = %s', upd1)
|
||||
return True
|
||||
|
||||
#
|
||||
|
@ -2492,7 +2495,7 @@ class orm(orm_template):
|
|||
return []
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
return [(r['id'], str(r[self._rec_name])) for r in self.read(cr, user, ids,
|
||||
return [(r['id'], tools.ustr(r[self._rec_name])) for r in self.read(cr, user, ids,
|
||||
[self._rec_name], context, load='_classic_write')]
|
||||
|
||||
def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=None):
|
||||
|
|
|
@ -474,7 +474,7 @@ form: module.record_id""" % (xml_id,)
|
|||
pid = False
|
||||
for idx, menu_elem in enumerate(m_l):
|
||||
if pid:
|
||||
cr.execute('select id from ir_ui_menu where parent_id=%d and name=%s', (pid, menu_elem))
|
||||
cr.execute('select id from ir_ui_menu where parent_id=%s and name=%s', (pid, menu_elem))
|
||||
else:
|
||||
cr.execute('select id from ir_ui_menu where parent_id is null and name=%s', (menu_elem,))
|
||||
res = cr.fetchone()
|
||||
|
@ -513,15 +513,15 @@ form: module.record_id""" % (xml_id,)
|
|||
values['icon'] = icons.get(a_type,'STOCK_NEW')
|
||||
if a_type=='act_window':
|
||||
a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action)
|
||||
cr.execute('select view_type,view_mode,name,view_id,target from ir_act_window where id=%d', (int(a_id),))
|
||||
cr.execute('select view_type,view_mode,name,view_id,target from ir_act_window where id=%s', (int(a_id),))
|
||||
rrres = cr.fetchone()
|
||||
assert rrres, "No window action defined for this id %s !\n" \
|
||||
"Verify that this is a window action or add a type argument." % (a_action,)
|
||||
action_type,action_mode,action_name,view_id,target = rrres
|
||||
if view_id:
|
||||
cr.execute('SELECT type FROM ir_ui_view WHERE id=%d', (int(view_id),))
|
||||
cr.execute('SELECT type FROM ir_ui_view WHERE id=%s', (int(view_id),))
|
||||
action_mode, = cr.fetchone()
|
||||
cr.execute('SELECT view_mode FROM ir_act_window_view WHERE act_window_id=%d ORDER BY sequence LIMIT 1', (int(a_id),))
|
||||
cr.execute('SELECT view_mode FROM ir_act_window_view WHERE act_window_id=%s ORDER BY sequence LIMIT 1', (int(a_id),))
|
||||
if cr.rowcount:
|
||||
action_mode, = cr.fetchone()
|
||||
if action_type=='tree':
|
||||
|
@ -538,7 +538,7 @@ form: module.record_id""" % (xml_id,)
|
|||
values['name'] = action_name
|
||||
elif a_type=='wizard':
|
||||
a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action)
|
||||
cr.execute('select name from ir_act_wizard where id=%d', (int(a_id),))
|
||||
cr.execute('select name from ir_act_wizard where id=%s', (int(a_id),))
|
||||
resw = cr.fetchone()
|
||||
if (not values.get('name', False)) and resw:
|
||||
values['name'] = resw[0]
|
||||
|
@ -819,7 +819,7 @@ def convert_csv_import(cr, module, fname, csvcontent, idref=None, mode='init',
|
|||
if (not line) or not reduce(lambda x,y: x or y, line) :
|
||||
continue
|
||||
try:
|
||||
datas.append( map(lambda x:x.decode('utf8').encode('utf8'), line))
|
||||
datas.append(map(lambda x: misc.ustr(x), line))
|
||||
except:
|
||||
print "ERROR while importing the line: ", line
|
||||
pool.get(model).import_data(cr, uid, fields, datas,mode, module,noupdate,filename=fname_partial)
|
||||
|
|
|
@ -68,7 +68,7 @@ def init_db(cr):
|
|||
if p_id is not None:
|
||||
cr.execute('select id \
|
||||
from ir_module_category \
|
||||
where name=%s and parent_id=%d', (categs[0], p_id))
|
||||
where name=%s and parent_id=%s', (categs[0], p_id))
|
||||
else:
|
||||
cr.execute('select id \
|
||||
from ir_module_category \
|
||||
|
@ -79,7 +79,7 @@ def init_db(cr):
|
|||
c_id = cr.fetchone()[0]
|
||||
cr.execute('insert into ir_module_category \
|
||||
(id, name, parent_id) \
|
||||
values (%d, %s, %d)', (c_id, categs[0], p_id))
|
||||
values (%s, %s, %s)', (c_id, categs[0], p_id))
|
||||
else:
|
||||
c_id = c_id[0]
|
||||
p_id = c_id
|
||||
|
@ -99,7 +99,7 @@ def init_db(cr):
|
|||
cr.execute('insert into ir_module_module \
|
||||
(id, author, latest_version, website, name, shortdesc, description, \
|
||||
category_id, state) \
|
||||
values (%d, %s, %s, %s, %s, %s, %s, %d, %s)', (
|
||||
values (%s, %s, %s, %s, %s, %s, %s, %s, %s)', (
|
||||
id, info.get('author', ''),
|
||||
release.major_version + '.' + info.get('version', ''),
|
||||
info.get('website', ''), i, info.get('name', False),
|
||||
|
@ -580,6 +580,28 @@ class cache(object):
|
|||
def to_xml(s):
|
||||
return s.replace('&','&').replace('<','<').replace('>','>')
|
||||
|
||||
def ustr(value):
|
||||
"""This method is similar to the builtin `str` method, except
|
||||
it will return Unicode string.
|
||||
|
||||
@param value: the value to convert
|
||||
|
||||
@rtype: unicode
|
||||
@return: unicode string
|
||||
"""
|
||||
|
||||
if isinstance(value, unicode):
|
||||
return value
|
||||
|
||||
if hasattr(value, '__unicode__'):
|
||||
return unicode(value)
|
||||
|
||||
if not isinstance(value, str):
|
||||
value = str(value)
|
||||
|
||||
return unicode(value, 'utf-8')
|
||||
|
||||
|
||||
def get_languages():
|
||||
languages={
|
||||
'bg_BG': u'Bulgarian / български',
|
||||
|
@ -630,7 +652,7 @@ def get_user_companies(cr, user):
|
|||
res=[x[0] for x in cr.fetchall()]
|
||||
res.extend(_get_company_children(cr, res))
|
||||
return res
|
||||
cr.execute('SELECT comp.id FROM res_company AS comp, res_users AS u WHERE u.id = %d AND comp.id = u.company_id' % (user,))
|
||||
cr.execute('SELECT comp.id FROM res_company AS comp, res_users AS u WHERE u.id = %s AND comp.id = u.company_id' % (user,))
|
||||
compids=[cr.fetchone()[0]]
|
||||
compids.extend(_get_company_children(cr, compids))
|
||||
return compids
|
||||
|
|
Loading…
Reference in New Issue