Both updates now rely on 'suspension_chargeperiod' as the source of truth
for existence of a rule. Spot checking some existing production databases this
seems to be acceptable.
This alters the update to only add rules where a 'suspension_chargeperiod' rule exists
and a value for the rule is not already set.
NOTE: While the table has a unique key:
UNIQUE KEY `branchcode` (`branchcode`,`categorycode`,`itemtype`,`rule_name`),
This key doesn't prevent duplicates on NULLs, i.e.:
branchcode | categorycode | itemtype | rule_name | rule_value
NULL | NULL | BK | unseen_renewals_allowed | 1
NULL | NULL | BK | unseen_renewals_allowed | 2
NULL | NULL | BK | unseen_renewals_allowed | 3
So we need to both check that any rule is present and that the specific rule is not.
The 'INSERT IGNORE' won't IGNORE existing values except for the most specific rules
Test plan:
0 - Edit and save existing default rule in DB (sample data does not include suspension_chargeperiod)
1 - Set some rules for "Default checkout, hold and return policy" for "Standard rule" and some specific libraries
2 - cp installer/data/mysql/db_revs/220600024.pl installer/data/mysql/atomicupdate/
3 - SELECT * FROM circulation rules, note the number of rules that exist
4 - updatedatabase
5 - Check the DB again, you should now have rules as described in the bug
i.e. You will have 5 new rules per 'Default checkout, hold and return policy'
6 - apply 1st patch on bug
7 - rm installer/data/mysql/atomicupdate/220600024.pl (so we don't add again)
8 - updatedatabase
9 - Check DB, the extra rules have been deleted
10 - Apply 2nd patch
11 - cp installer/data/mysql/db_revs/220600024.pl installer/data/mysql/atomicupdate/
12 - rm installer/data/mysql/atomicupdate/bug_31727.pl (so we can confirm update isn't adding rules)
13 - updatedatabase
14 - Confirm no change in rules since step 9
15 - git reset --hard (get deleted update back)
16 - rm installer/data/mysql/atomicupdate/220600024.pl
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Bad data occurs. We are removing null hosts here and update
empty syntax or encoding, informing the user.
Test plan:
Remove the NOT NULL condition if needed.
Copy db_revs/220600056.pl to atomicupdate and test dbrev.
You might see something like:
Upgrade to 22.06.00.056 [11:48:22]: Bug 30571 - Table z3950servers: three cols NOT NULL
Found bad data in table z3950servers: removed 1 records with host undefined
Corrected empty syntax or encoding for the following hosts. Please check after upgrade.
Updated hosts: lx2.loc.gov,lx2.loc.gov
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
It seems that we cannot edit the column while it has a constraint.
If we remove it, update the oclumn, then re-add it, the update succeeds
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
As this has not been released yet, we can also fix the database
update to not introduce the wrong capitalization in the first
place.
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>