extensions/net.sf.basedb.reggie/trunk/dev/cleanup_dev_clone.sql

Code
Comments
Other
Rev Date Author Line
1829 08 Feb 13 nicklas 1 /*
1829 08 Feb 13 nicklas 2   Use this SQL file to remove sensitive personal information from
1829 08 Feb 13 nicklas 3   a development copy of the production server database. 
1829 08 Feb 13 nicklas 4   
1829 08 Feb 13 nicklas 5   !!!!! *********************************** !!!!!
1829 08 Feb 13 nicklas 6   !!!!! DO NOT USE ON THE PRODUCTION SERVER !!!!!
1829 08 Feb 13 nicklas 7   !!!!! *********************************** !!!!!
1829 08 Feb 13 nicklas 8   
1829 08 Feb 13 nicklas 9   For certain functions in Reggie, eg. generating statistics, it is
1829 08 Feb 13 nicklas 10   more or less required to use real data. It is not really possible 
1829 08 Feb 13 nicklas 11   to autogenerate the required amount of fake data that is needed and
1829 08 Feb 13 nicklas 12   the statistical functions also need to be compared for correctness 
1829 08 Feb 13 nicklas 13   against the current statistics produces by other means.
1829 08 Feb 13 nicklas 14   
2864 28 Oct 14 nicklas 15   This script works with MySQL and will:
1829 08 Feb 13 nicklas 16   
1829 08 Feb 13 nicklas 17   * Replace the ROOT account login and password with 'root'/'root'
1829 08 Feb 13 nicklas 18   * Replace the DateOfBirth with a random date for all patients
1955 24 Apr 13 nicklas 19   * Replace the PersonalNumber for all patients with a random based on the 'DateOfBith' annotation
1829 08 Feb 13 nicklas 20   * Replace the AllFirstNames and FamilyName with other values
2864 28 Oct 14 nicklas 21   * Replace PAD with 'PAD-' + hex value derived from internal id
1829 08 Feb 13 nicklas 22 */
1829 08 Feb 13 nicklas 23
1829 08 Feb 13 nicklas 24 /* Change ROOT login to 'root' */
1829 08 Feb 13 nicklas 25 update `Users` set login='root' where system_id='net.sf.basedb.core.User.ROOT';
1829 08 Feb 13 nicklas 26
1829 08 Feb 13 nicklas 27 /* Change ROOT password to 'root' */
1829 08 Feb 13 nicklas 28 update `Passwords` set crypted_password = '$2a$10$yBj1SdJy7K.998hx7XKGauME6fUpIC1yOqzp.TKvoBQmW7bm0ZlFW' 
1829 08 Feb 13 nicklas 29 where id = (select u.id from `Users` u where u.system_id='net.sf.basedb.core.User.ROOT');
1829 08 Feb 13 nicklas 30
1955 24 Apr 13 nicklas 31 /* Replace DateOfBirth with random values for all patients */
1955 24 Apr 13 nicklas 32 update `DateValues` set value=makedate(1900+floor(100*rand()), ceil(365*rand()))
1955 24 Apr 13 nicklas 33 where id in 
1955 24 Apr 13 nicklas 34   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
1955 24 Apr 13 nicklas 35    where at.name='DateOfBirth');
1955 24 Apr 13 nicklas 36
1829 08 Feb 13 nicklas 37 /* Replace PersonalNumber with '201212121212' for all patients */
1955 24 Apr 13 nicklas 38 /*
1829 08 Feb 13 nicklas 39 update `StringValues` set value='201212121212'
1830 08 Feb 13 nicklas 40 where id in 
1829 08 Feb 13 nicklas 41   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
1829 08 Feb 13 nicklas 42    where at.name='PersonalNumber');
1955 24 Apr 13 nicklas 43 */
1829 08 Feb 13 nicklas 44
1955 24 Apr 13 nicklas 45 /* Replace PersonalNumber with value generated from corresponding DateOfBirth
1955 24 Apr 13 nicklas 46  * padded with 'X' and a random 3-digit number. Patients with no BirthOfDate will
1955 24 Apr 13 nicklas 47  * get '201212121212' as PersonalNumber. If this query doesn't work, use the one
1955 24 Apr 13 nicklas 48  * above instead which set all PersonalNumber's to '201212121212'.
1955 24 Apr 13 nicklas 49  */
1955 24 Apr 13 nicklas 50 update `StringValues` pnr set pnr.value=coalesce(concat(date_format(
1955 24 Apr 13 nicklas 51   (
1955 24 Apr 13 nicklas 52     select dofb.value from `DateValues` dofb 
1955 24 Apr 13 nicklas 53     inner join `Annotations` a1 on dofb.id=a1.value_id 
1955 24 Apr 13 nicklas 54     inner join `AnnotationTypes` at1 on at1.id=a1.annotationtype_id and at1.name='DateOfBirth'
1955 24 Apr 13 nicklas 55     inner join `Annotations` a2 on a1.annotationset_id=a2.annotationset_id
1955 24 Apr 13 nicklas 56     inner join `AnnotationTypes` at2 on at2.id=a2.annotationtype_id and at2.name='PersonalNumber'
1955 24 Apr 13 nicklas 57     where a2.value_id=pnr.id
1955 24 Apr 13 nicklas 58   ), 
1955 24 Apr 13 nicklas 59   '%Y%m%d'), 100+floor(900*rand()), 'X'), '201212121212')
1955 24 Apr 13 nicklas 60 where pnr.id in 
1829 08 Feb 13 nicklas 61   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
1955 24 Apr 13 nicklas 62    where at.name='PersonalNumber');
1955 24 Apr 13 nicklas 63    
1829 08 Feb 13 nicklas 64 /* Replace AllFirstNames with 'Blue', 'Red', 'Green', 'Yellow' or 'White' for all patients */
1829 08 Feb 13 nicklas 65 update `StringValues` set value=
1829 08 Feb 13 nicklas 66     case id % 5 
1829 08 Feb 13 nicklas 67     when 0 then 'Blue'
1829 08 Feb 13 nicklas 68     when 1 then 'Red'
1829 08 Feb 13 nicklas 69     when 2 then 'Green'
1829 08 Feb 13 nicklas 70     when 3 then 'Yellow'
1829 08 Feb 13 nicklas 71     else 'White'
1829 08 Feb 13 nicklas 72     end
1830 08 Feb 13 nicklas 73 where id in 
1829 08 Feb 13 nicklas 74   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
1829 08 Feb 13 nicklas 75    where at.name='AllFirstNames');
1829 08 Feb 13 nicklas 76    
1829 08 Feb 13 nicklas 77 /* Replace FamilyName with 'Winter', 'Spring', 'Summer' or 'Autumn' for all patients */
1829 08 Feb 13 nicklas 78 update `StringValues` set value=
1829 08 Feb 13 nicklas 79     case id % 4 
1829 08 Feb 13 nicklas 80     when 0 then 'Winter'
1829 08 Feb 13 nicklas 81     when 1 then 'Spring'
1829 08 Feb 13 nicklas 82     when 2 then 'Summer'
1829 08 Feb 13 nicklas 83     else 'Autumn'
1829 08 Feb 13 nicklas 84     end
1830 08 Feb 13 nicklas 85 where id in 
1829 08 Feb 13 nicklas 86   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
2159 06 Dec 13 nicklas 87    where at.name='FamilyName');
2159 06 Dec 13 nicklas 88    
2159 06 Dec 13 nicklas 89    
2159 06 Dec 13 nicklas 90 /* Replace PAD with PAD-HEX(<id>) values for all specimen */
2159 06 Dec 13 nicklas 91 update `StringValues` set value=upper(concat('PAD-', hex(id)))
2159 06 Dec 13 nicklas 92 where id in 
2159 06 Dec 13 nicklas 93   (select a.value_id from `Annotations` a inner join `AnnotationTypes` at on at.id=a.annotationtype_id 
2159 06 Dec 13 nicklas 94    where at.name='PAD');