Fix pool get for not initialized object for issue198
And remove old test on ir_actions
This commit is contained in:
1 parent
dca42001cb
commit
41956ffcbc
1 file changed
+46
-46
+46
-46
@@ -669,53 +669,53 @@ class ORM(object):
|
||||
cursor.execute("DROP INDEX \"%s_%s_index\"" % \
|
||||
(self._table, k))
|
||||
if isinstance(field, fields.Many2One):
|
||||
ref_obj = self.pool.get(field._obj)
|
||||
if ref_obj:
|
||||
ref = ref_obj._table
|
||||
# for some fields in ir are linked to res objects
|
||||
# that are not yet in the pooler
|
||||
if field._obj in ('res.user', 'res.group'):
|
||||
ref = field._obj.replace('.','_')
|
||||
else:
|
||||
ref = field._obj.replace('.', '_')
|
||||
if ref != 'ir_actions':
|
||||
cursor.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 = cursor.dictfetchall()
|
||||
if res:
|
||||
confdeltype = {
|
||||
'RESTRICT': 'r',
|
||||
'NO ACTION': 'a',
|
||||
'CASCADE': 'c',
|
||||
'SET NULL': 'n',
|
||||
'SET DEFAULT': 'd',
|
||||
}
|
||||
if res[0]['confdeltype'] != \
|
||||
confdeltype.get(
|
||||
field.ondelete.upper(),
|
||||
'a'):
|
||||
cursor.execute('ALTER TABLE "' + \
|
||||
self._table + '" ' \
|
||||
'DROP CONSTRAINT "' + \
|
||||
res[0]['conname'] + '"')
|
||||
cursor.execute('ALTER TABLE "' + \
|
||||
self._table + '" ' \
|
||||
'ADD FOREIGN KEY ' \
|
||||
'("' + k + '") ' \
|
||||
'REFERENCES "' + ref + \
|
||||
'" ON DELETE ' + field.ondelete)
|
||||
ref = self.pool.get(field._obj)._table
|
||||
cursor.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 = cursor.dictfetchall()
|
||||
if res:
|
||||
confdeltype = {
|
||||
'RESTRICT': 'r',
|
||||
'NO ACTION': 'a',
|
||||
'CASCADE': 'c',
|
||||
'SET NULL': 'n',
|
||||
'SET DEFAULT': 'd',
|
||||
}
|
||||
if res[0]['confdeltype'] != \
|
||||
confdeltype.get(
|
||||
field.ondelete.upper(),
|
||||
'a'):
|
||||
cursor.execute('ALTER TABLE "' + \
|
||||
self._table + '" ' \
|
||||
'DROP CONSTRAINT "' + \
|
||||
res[0]['conname'] + '"')
|
||||
cursor.execute('ALTER TABLE "' + \
|
||||
self._table + '" ' \
|
||||
'ADD FOREIGN KEY ' \
|
||||
'("' + k + '") ' \
|
||||
'REFERENCES "' + ref + \
|
||||
'" ON DELETE ' + field.ondelete)
|
||||
else:
|
||||
# TODO add error message
|
||||
logger.notify_channel('init', LOG_ERROR, '')
|
||||
|
||||
Reference in new issue
Block a user