Reworked db structure changes in owners
Posted by mholmes on 05 Nov 2014 in Activity log
The previous change I made to own_desc was not very well thought-through; it resulted in a drop-down list in which owner ids came first, and records were sorted alphabetically by those integer ids.
I've now reworked the triggers so that they produce something more useful. Script is below; I ran it in four separate operations, tested on dev and then run on live.
/* This file rebuilds the existing triggers for the own_desc field. */ DELIMITER $$ /* First delete the existing triggers. */ DROP TRIGGER IF EXISTS `own_desc_insert`$$ DROP TRIGGER IF EXISTS `own_desc_update`$$ /* Now recreate the contents of the own_desc field. */ UPDATE `owners` SET `own_desc` = CASE WHEN (LENGTH(`own_surname`) > 0 AND LENGTH(`own_forenames`) > 0 AND LENGTH(`own_street_num`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(`own_surname`,_utf8', ',`own_forenames`,_utf8' : ',`own_street_num`,_utf8', ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_surname`) > 0 AND LENGTH(`own_forenames`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(`own_surname`,_utf8', ',`own_forenames`,_utf8' : ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_surname`) > 0 AND LENGTH(`own_forenames`) > 0) THEN concat(`own_surname`,_utf8', ',`own_forenames`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_surname`) > 0) THEN concat(`own_surname`,_utf8' (no forenames or address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_institution_name`) > 0 AND LENGTH(`own_street_num`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(`own_institution_name`,_utf8' : ',`own_street_num`,_utf8', ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_institution_name`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(`own_institution_name`,_utf8' : ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_institution_name`) > 0) THEN concat(`own_institution_name`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_street_num`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(_utf8' : (no name): ',`own_street_num`,_utf8', ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(`own_street_num`) > 0 AND LENGTH(`own_street`) > 0) THEN concat(_utf8' : (no name or street number): ',`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') ELSE concat(_utf8'(no name or address)') END; $$ /* Now recreate the triggers. */ CREATE TRIGGER `own_desc_insert` BEFORE INSERT ON `owners` FOR EACH ROW BEGIN SET NEW.`own_desc` = CASE WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0 AND LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0) THEN concat(NEW.`own_surname`,_utf8' (no forenames or address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0 AND LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(_utf8' : (no name): ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(_utf8' : (no name or street number): ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') ELSE concat(_utf8'(no name or address)',_utf8' (',NEW.`own_owner_id`,_utf8')') END; END; $$ CREATE TRIGGER `own_desc_update` BEFORE UPDATE ON `owners` FOR EACH ROW BEGIN SET NEW.`own_desc` = CASE WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0 AND LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0 AND LENGTH(NEW.`own_forenames`) > 0) THEN concat(NEW.`own_surname`,_utf8', ',NEW.`own_forenames`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_surname`) > 0) THEN concat(NEW.`own_surname`,_utf8' (no forenames or address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0 AND LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_institution_name`) > 0) THEN concat(NEW.`own_institution_name`,_utf8' : (no address)',_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(_utf8' : (no name): ',NEW.`own_street_num`,_utf8', ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') WHEN (LENGTH(NEW.`own_street_num`) > 0 AND LENGTH(NEW.`own_street`) > 0) THEN concat(_utf8' : (no name or street number): ',NEW.`own_street`,_utf8' (',NEW.`own_owner_id`,_utf8')') ELSE concat(_utf8'(no name or address)',_utf8' (',NEW.`own_owner_id`,_utf8')') END; END; $$ DELIMITER ;