diff --git a/db_scripts/diff/15394.down b/db_scripts/diff/15394.down new file mode 100644 index 00000000..0d2482e8 --- /dev/null +++ b/db_scripts/diff/15394.down @@ -0,0 +1,3 @@ +use billing; + +alter table contracts drop column product_id; diff --git a/db_scripts/diff/15394.up b/db_scripts/diff/15394.up new file mode 100644 index 00000000..d2a9cc01 --- /dev/null +++ b/db_scripts/diff/15394.up @@ -0,0 +1,31 @@ +use billing; + +alter table contracts add column product_id int(11) unsigned default null; + +update + contracts c +join ( + select + bm1.contract_id, + max(bm1.id) as id + from + billing.billing_mappings bm1 + join ( + select + bm2.contract_id, + max(bm2.start_date) as start_date + from + billing.billing_mappings bm2 + where ( + bm2.end_date >= now() or bm2.end_date is null) + and (bm2.start_date <= now() or bm2.start_date is null + ) group by bm2.contract_id + ) as mx on bm1.contract_id = mx.contract_id and bm1.start_date <=> mx.start_date + group by bm1.contract_id +) as bm_actual on bm_actual.contract_id = c.id +join + billing.billing_mappings bm on bm.id = bm_actual.id +set c.product_id = bm.product_id; + +alter table contracts modify column product_id int(11) unsigned not null, add constraint c_productid_ref foreign key (product_id) references products (id) on update cascade; +