source: trunk/grails-app/conf/DatabaseUpgrade.groovy @ 1248

Last change on this file since 1248 was 1248, checked in by work@…, 10 years ago
  • testing database upgrade on ci
File size: 2.3 KB
Line 
1import groovy.sql.Sql
2import dbnp.studycapturing.Study
3
4/**
5 * A script to automatically perform database changes
6 *
7 * @Author      Jeroen Wesbeek
8 * @Since       20101209
9 *
10 * Revision information:
11 * $Rev$
12 * $Author$
13 * $Date$
14 */
15class DatabaseUpgrade {
16        /**
17         * handle database upgrades
18         *
19         * @param dataSource
20         */
21        public static void handleUpgrades(dataSource) {
22                // gromming debug message
23                "handeling database upgrades".grom()
24
25                // get a sql instance
26                groovy.sql.Sql sql = new groovy.sql.Sql(dataSource)
27
28                // check for study description change from template
29                // to required domain field (r1245 and r1246)
30                changeStudyDescription(sql)
31        }
32
33        /**
34         * execute database change r1245 / r1246 if required
35         * @param sql
36         */
37        public static void changeStudyDescription(sql) {
38                // check if we need to perform this upgrade
39                if (sql.firstRow("SELECT count(*) as total FROM template_field WHERE templatefieldentity='dbnp.studycapturing.Study' AND templatefieldname='Description'").total > 0) {
40                        // grom that we are performing the upgrade
41                        "performing database upgrade: study description".grom()
42
43                        // database upgrade required
44                        try {
45                                println "PERFORMING DATABASE UPGRADE!!!"
46                                // get the template field id
47                                def id = sql.firstRow("SELECT id FROM template_field WHERE templatefieldentity='dbnp.studycapturing.Study' AND templatefieldname='Description'").id
48
49                                // iterate through all obsolete study descriptions
50                                sql.eachRow("SELECT study_id, template_text_fields_elt as description FROM study_template_text_fields WHERE template_text_fields_idx='Description'") { row ->
51                                        // migrate the template description to the study object itself
52                                        // so we don't have to bother with sql injections, etc
53                                        def study = Study.findById( row.study_id )
54                                        study.setFieldValue('description', row.description)
55                                        if (!(study.validate() && study.save())) {
56                                                throw new Exception("could not save study with id ${row.study_id}")
57                                        }
58                                }
59
60                                // delete all obsolete descriptions
61                                //sql.execute("DELETE FROM study_template_text_fields WHERE template_text_fields_idx='Description'")
62
63                                // and delete the obsolete template field
64                                //sql.execute("DELETE FROM template_field WHERE id=${id}")
65                        } catch (Exception e) {
66                                "changeStudyDescription database upgrade failed: " + e.getMessage()
67                        }
68                }
69        }
70}
Note: See TracBrowser for help on using the repository browser.