1 /*jshint node:true, indent:2, curly:false, eqeqeq:true, immed:true, latedef:true, newcap:true, noarg:true,
2 regexp:true, undef:true, strict:true, trailing:true, white:true */
8 var path = require('path');
10 var convertFromMetasql = function (content, filename, defaultSchema) {
11 var lines = content.split("\n"),
12 schema = defaultSchema ? "'" + defaultSchema + "'" : "NULL",
21 if (lines[0].indexOf("-- Group: ") !== 0 ||
22 lines[1].indexOf("-- Name: ") !== 0 ||
23 lines[2].indexOf("-- Notes:") !== 0) {
24 throw new Error("Improperly formatted metasql: " + filename);
26 group = lines[0].substring("-- Group: ".length).trim();
27 name = lines[1].substring("-- Name: ".length).trim();
28 while (lines[i].indexOf("--") === 0) {
29 notes = notes + lines[i].substring(2) + "\n";
32 notes = notes.substring(" Notes:".length);
33 if (notes.indexOf("must be grade 10") >= 0) {
37 insertSql = "select saveMetasql (" +
40 "$$" + notes + "$$," +
41 "$$" + content + "$$," +
42 "true, " + schema + ", " + grade + ");";
47 var convertFromReport = function (content, filename, defaultSchema) {
48 var lines = content.split("\n"),
51 tableName = defaultSchema ? defaultSchema + ".pkgreport" : "report",
58 if (lines[3].indexOf(" <name>") !== 0 ||
59 lines[4].indexOf(" <description>") !== 0) {
60 throw new Error("Improperly formatted report");
62 name = lines[3].substring(" <name>".length).trim();
63 name = name.substring(0, name.indexOf("<"));
64 description = lines[4].substring(" <description>".length).trim();
65 description = description.substring(0, description.indexOf("<"));
66 if (lines[5].indexOf("grade") >= 0) {
67 grade = lines[5].substring(" <grade>".length).trim();
68 grade = grade.substring(0, grade.indexOf("<"));
71 disableSql = "ALTER TABLE " + tableName + " DISABLE TRIGGER ALL;";
73 insertSql = "insert into " + tableName + " (report_name, report_descrip, " +
74 "report_source, report_loaddate, report_grade) select " +
76 "$$" + description + "$$," +
77 "$$" + content + "$$," +
79 " where not exists (select c.report_id from " + tableName + " c " +
80 "where report_name = '" + name +
81 "' and report_grade = " + grade + ");";
83 updateSql = "update " + tableName + " set " +
84 " report_descrip = $$" + description +
85 "$$, report_source = $$" + content +
86 "$$, report_loaddate = now() " +
87 "where report_name = '" + name +
88 "' and report_grade = " + grade + ";";
90 enableSql = "ALTER TABLE " + tableName + " ENABLE TRIGGER ALL;";
92 return disableSql + insertSql + updateSql + enableSql;
95 var convertFromScript = function (content, filename, defaultSchema) {
96 var name = path.basename(filename, '.js'),
97 tableName = defaultSchema ? defaultSchema + ".pkgscript" : "unknown",
98 notes = "", //"xtMfg package",
104 disableSql = "ALTER TABLE " + tableName + " DISABLE TRIGGER ALL;";
106 insertSql = "insert into " + tableName + " (script_name, script_order, script_enabled, " +
107 "script_source, script_notes) select " +
108 "'" + name + "', 0, TRUE, " +
109 "$$" + content + "$$," +
111 " where not exists (select c.script_id from " + tableName + " c " +
112 "where script_name = '" + name + "');";
114 updateSql = "update " + tableName + " set " +
115 "script_name = '" + name + "', script_order = 0, script_enabled = TRUE, " +
116 "script_source = $$" + content +
117 "$$, script_notes = '" + notes + "' " +
118 "where script_name = '" + name + "';";
120 enableSql = "ALTER TABLE " + tableName + " ENABLE TRIGGER ALL;";
122 return disableSql + insertSql + updateSql + enableSql;
125 var convertFromUiform = function (content, filename, defaultSchema) {
126 var name = path.basename(filename, '.ui'),
127 tableName = defaultSchema ? defaultSchema + ".pkguiform" : "unknown",
128 notes = "", //"xtMfg package",
134 disableSql = "ALTER TABLE " + tableName + " DISABLE TRIGGER ALL;";
136 insertSql = "insert into " + tableName + " (uiform_name, uiform_order, uiform_enabled, " +
137 "uiform_source, uiform_notes) select " +
138 "'" + name + "', 0, TRUE, " +
139 "$$" + content + "$$," +
141 " where not exists (select c.uiform_id from " + tableName + " c " +
142 "where uiform_name = '" + name + "');";
144 updateSql = "update " + tableName + " set uiform_name = '" +
145 name + "', uiform_order = 0, uiform_enabled = TRUE, " +
146 "uiform_source = $$" + content + "$$, uiform_notes = '" + notes + "' " +
147 "where uiform_name = '" + name + "';";
149 enableSql = "ALTER TABLE " + tableName + " ENABLE TRIGGER ALL;";
151 return disableSql + insertSql + updateSql + enableSql;
154 exports.conversionMap = {
155 mql: convertFromMetasql,
156 xml: convertFromReport,
157 js: convertFromScript,
158 ui: convertFromUiform,
159 sql: function (content) {