Upgrade: Fix `value` for added `option_value` entries in various places
authorOlaf Buddenhagen <antrik@digitalcourage.de>
Thu, 9 Apr 2015 22:16:54 +0000 (00:16 +0200)
committerOlaf Buddenhagen <antrik@digitalcourage.de>
Fri, 10 Apr 2015 21:16:44 +0000 (23:16 +0200)
In several places, the highest existing option value for a group was
being determined using max(value), which breaks as soon as there are
values above 9, because `value` is defined as a varchar rather than
integer for lulz. In most instances, this is taken care of by using
max(round(value)) instead -- but not everwhere. Fix the wrong ones.

(BTW, convert(value, decimal) would be more obvious than round()
IMHO...)

Note that while this patch is against master, it should be backported to
all maintained branches.

PS. Database normalisation is only for wimps who can't handle the
anomalies, right?...

CRM/Upgrade/Incremental/sql/3.4.alpha1.mysql.tpl
CRM/Upgrade/Incremental/sql/4.3.alpha1.mysql.tpl
CRM/Upgrade/Incremental/sql/4.4.5.mysql.tpl
CRM/Upgrade/Incremental/sql/4.5.alpha1.mysql.tpl
CRM/Upgrade/Incremental/sql/4.6.alpha1.mysql.tpl

index 4ac3f735b51bdb9a59d9256f170130c286ff7253..0338f30dd574af4a69a7e0c479505dfbad1e60af 100644 (file)
@@ -75,7 +75,7 @@ ON cml.membership_id=cm.id SET cml.membership_type_id=cm.membership_type_id;
 -- CRM-7445 add client to case
 SELECT @option_group_id_act            := max(id) from civicrm_option_group where name = 'activity_type';
 SELECT @weight                 := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_act;
-SELECT @value                 := MAX(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id_act;
+SELECT @value                 := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_act;
 SELECT @caseCompId       := max(id) FROM civicrm_component where name = 'CiviCase';
 INSERT INTO civicrm_option_value
   (option_group_id,         {localize field='label'}label{/localize},                   value,                        name,                                        weight,                 {localize field='description'}description{/localize}, is_active, component_id) VALUES
index d12b119bb06acb15feaeb364857499458adcf021..5fe6f42fc2c448b95ece7c53941494ec18b555ef 100644 (file)
@@ -601,7 +601,7 @@ SELECT 'civicrm_payment_processor', id, @option_value_rel_id_as, @financial_acco
 -- CRM-9923 and CRM-11037
 SELECT @option_group_id_batch_status   := max(id) from civicrm_option_group where name = 'batch_status';
 
-SELECT @weight                 := MAX(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_status;
+SELECT @weight                 := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_status;
 
 INSERT INTO
    `civicrm_option_value` (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`)
index a81e2a8a5bb58aa52b4715902b824f4a49b09c80..99441185a89127f2c1ac616509f57a6be542aca6 100644 (file)
@@ -1,7 +1,7 @@
 {* file to handle db changes in 4.4.5 during upgrade *}
 -- CRM-14191
 SELECT @option_group_id_batch_status   := max(id) from civicrm_option_group where name = 'batch_status';
-SELECT @weight := MAX(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_status;
+SELECT @weight := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_status;
 
 UPDATE civicrm_option_value
 SET value = (Select @weight := @weight +1),
@@ -9,7 +9,7 @@ weight = @weight
 WHERE option_group_id = @option_group_id_batch_status AND name IN ('Data Entry', 'Reopened', 'Exported') AND value = 0 ORDER BY id;
 
 SELECT @option_group_id_batch_modes := max(id) from civicrm_option_group where name = 'batch_mode';
-SELECT @weights := MAX(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_modes;
+SELECT @weights := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_batch_modes;
 
 UPDATE civicrm_option_value
 SET value = (Select @weights := @weights +1),
index 0fe807a9bb84eb0babc98811b0086a93f278c5dc..14339e7ff29b0b3355d693ab17363b5c1bd46745 100644 (file)
@@ -164,7 +164,7 @@ ALTER TABLE civicrm_pledge DROP honor_type_id;
 -- CRM-13964 and CRM-13965
 SELECT @option_group_id_cs   := max(id) from civicrm_option_group where name = 'contribution_status';
 SELECT @option_val_id_cs_wt  := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cs;
-SELECT @option_val_id_cs_val := MAX(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cs;
+SELECT @option_val_id_cs_val := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cs;
 
 INSERT INTO
    `civicrm_option_value` (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`)
index 864a61afb922eff56b6466c6f4763279a46404a8..b5b305e1c52e3c15a43c9ffffe5c68c5c87c3a46 100755 (executable)
@@ -105,7 +105,7 @@ CREATE TABLE IF NOT EXISTS `civicrm_recurring_entity` (
 -- add batch type for pledge payments
 SELECT @option_group_id := id FROM civicrm_option_group WHERE name = 'batch_type';
 
-SELECT @max_option_value:= max(value) FROM civicrm_option_value WHERE option_group_id = @option_group_id;
+SELECT @max_option_value:= max(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id;
 
 INSERT INTO civicrm_option_value(option_group_id, {localize field='label'}`label`{/localize}, value, name,weight)
 VALUES (@option_group_id, {localize}'{ts escape="sql"}Pledge Payment{/ts}'{/localize}, @max_option_value+1, 'Pledge Payment','3');