# Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models class IrLogging(models.Model): _name = 'ir.logging' _description = 'Logging' _order = 'id DESC' _allow_sudo_commands = False # The _log_access fields are defined manually for the following reasons: # # - The entries in ir_logging are filled in with sql queries bypassing the orm. As the --log-db # cli option allows to insert ir_logging entries into a remote database, the one2many *_uid # fields make no sense in the first place but we will keep it for backward compatibility. # # - Also, when an ir_logging entry is triggered by the orm (when using --log-db) at the moment # it is making changes to the res.users model, the ALTER TABLE will aquire an exclusive lock # on res_users, preventing the ir_logging INSERT to be processed, hence the ongoing module # install/update will hang forever as the orm is blocked by the ir_logging query that will # never occur. create_uid = fields.Integer(string='Created by', readonly=True) create_date = fields.Datetime(string='Created on', readonly=True) write_uid = fields.Integer(string='Last Updated by', readonly=True) write_date = fields.Datetime(string='Last Updated on', readonly=True) name = fields.Char(required=True) type = fields.Selection([('client', 'Client'), ('server', 'Server')], required=True, index=True) dbname = fields.Char(string='Database Name', index=True) level = fields.Char(index=True) message = fields.Text(required=True) path = fields.Char(required=True) func = fields.Char(string='Function', required=True) line = fields.Char(required=True) def init(self): super(IrLogging, self).init() self._cr.execute("select 1 from information_schema.constraint_column_usage where table_name = 'ir_logging' and constraint_name = 'ir_logging_write_uid_fkey'") if self._cr.rowcount: # DROP CONSTRAINT unconditionally takes an ACCESS EXCLUSIVE lock # on the table, even "IF EXISTS" is set and not matching; disabling # the relevant trigger instead acquires SHARE ROW EXCLUSIVE, which # still conflicts with the ROW EXCLUSIVE needed for an insert self._cr.execute("ALTER TABLE ir_logging DROP CONSTRAINT ir_logging_write_uid_fkey")