From 9f77d2e2f4b580e2fb07bc044c875dfd30008f44 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 17 Dec 2012 22:46:45 +0100 Subject: [FIX] orm,registry: properly check m2o FKs during model update + fix some models `auto_init`ed multiple times The case where no constraint existed at all was not working, and after fixing it, the ORM started to re-create the same constraints multiple times for some modules. This was for models that are split within a module (such as res.users in base, which is made of several small classes): all the partial models were going through _auto_init instead of only the final one - doing useless extra work. Unfortunately establishing the FK happens before the XML data files are loaded, so a number of FK and NOT NULL constraints failed to apply due to missing tables/records. base.sql had to be extended a bit to cover these cases in a minimalist fashion bzr revid: odo@openerp.com-20121217214645-av9n003yzterhujw --- openerp/addons/base/base.sql | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'openerp/addons/base/base.sql') diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index 3fa847ce23c..b1ddb2eec70 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -149,7 +149,6 @@ CREATE TABLE res_users ( active boolean default True, login varchar(64) NOT NULL UNIQUE, password varchar(64) default null, - lang varchar(64) default '', -- No FK references below, will be added later by ORM -- (when the destination rows exist) company_id int, @@ -316,13 +315,29 @@ CREATE TABLE ir_module_module_dependency ( primary key(id) ); -CREATE TABLE res_company ( +CREATE TABLE res_partner ( id serial NOT NULL, - name character varying(64) not null, - parent_id integer references res_company on delete set null, + name character varying(128), + lang varchar(64), + company_id int, primary key(id) ); + +CREATE TABLE res_currency ( + id serial PRIMARY KEY, + name VARCHAR(32) NOT NULL +); + +CREATE TABLE res_company ( + id serial PRIMARY KEY, + name character varying(128) not null, + parent_id integer references res_company on delete set null, + partner_id integer not null references res_partner, + currency_id integer not null references res_currency + +); + CREATE TABLE res_lang ( id serial PRIMARY KEY, name VARCHAR(64) NOT NULL UNIQUE, @@ -375,16 +390,24 @@ CREATE TABLE ir_model_relation ( module integer NOT NULL references ir_module_module on delete restrict, model integer NOT NULL references ir_model on delete restrict, name character varying(128) NOT NULL -); +); --------------------------------- -- Users --------------------------------- +insert into res_users (id,login,password,active,company_id,partner_id) VALUES (1,'admin','admin',true,1,1); +insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('user_root','base','res.users',true,1); + +insert into res_partner (id, name, lang, company_id) VALUES (1, 'Your Company', 'en_US', 1); +insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('main_partner','base','res.partner',true,1); -insert into res_users (id,login,password,active,company_id,partner_id,lang) values (1,'admin','admin',True,1,1,'en_US'); -insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_root','base','res.users',True,1); +insert into res_currency (id, name) VALUES (1, 'EUR'); +insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('EUR','base','res.currency',true,1); --- Compatibility purpose, to remove V6.0 -insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_admin','base','res.users',True,1); +insert into res_company (id, name, partner_id, currency_id) VALUES (1, 'Your Company', 1, 1); +insert into ir_model_data (name,module,model,noupdate,res_id) VALUES ('main_company','base','res.company',true,1); +select setval('res_company_id_seq', 2); select setval('res_users_id_seq', 2); +select setval('res_partner_id_seq', 2); +select setval('res_currency_id_seq', 2); \ No newline at end of file -- cgit v1.2.3