Merge pull request #1843 from xtuple/4_6_x
[xtuple] / scripts / lib / util / unregister.js
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 */
3 /*global _:true */
4
5 (function () {
6   "use strict";
7
8   var async = require("async"),
9     path = require('path'),
10     winston = require('winston'),
11     dataSource = require('../../../node-datasource/lib/ext/datasource').dataSource;
12
13   //
14   // Unregister the extension
15   //
16   var unregister = function (specs, creds, masterCallback) {
17     var extension = path.basename(specs[0].extensions[0]),
18       unregisterSql = ["delete from xt.usrext where usrext_id in " +
19         "(select usrext_id from xt.usrext inner join xt.ext on usrext_ext_id = ext_id where ext_name = $1);",
20
21         "delete from xt.grpext where grpext_id in " +
22         "(select grpext_id from xt.grpext inner join xt.ext on grpext_ext_id = ext_id where ext_name = $1);",
23
24         "delete from xt.clientcode where clientcode_id in " +
25         "(select clientcode_id from xt.clientcode inner join xt.ext on clientcode_ext_id = ext_id where ext_name = $1);",
26
27         "delete from xt.dict where dict_id in " +
28         "(select dict_id from xt.dict inner join xt.ext on dict_ext_id = ext_id where ext_name = $1);",
29
30         "delete from xt.extdep where extdep_id in " +
31         "(select extdep_id from xt.extdep inner join xt.ext " +
32         "on extdep_from_ext_id = ext_id or extdep_to_ext_id = ext_id where ext_name = $1);",
33
34         "delete from xt.ext where ext_name = $1;"];
35
36     if (extension.charAt(extension.length - 1) === "/") {
37       // remove trailing slash if present
38       extension = extension.substring(0, extension.length - 1);
39     }
40     winston.info("Unregistering extension:", extension);
41     var unregisterEach = function (spec, callback) {
42       var options = JSON.parse(JSON.stringify(creds));
43       options.database = spec.database;
44       options.parameters = [extension];
45       var queryEach = function (sql, sqlCallback) {
46         dataSource.query(sql, options, sqlCallback);
47       };
48       async.eachSeries(unregisterSql, queryEach, callback);
49     };
50     async.each(specs, unregisterEach, masterCallback);
51   };
52
53   exports.unregister = unregister;
54 }());
55