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 async = require("async"),
9 path = require('path'),
10 winston = require('winston'),
11 dataSource = require('../../../node-datasource/lib/ext/datasource').dataSource;
14 // Unregister the extension
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);",
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);",
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);",
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);",
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);",
34 "delete from xt.ext where ext_name = $1;"];
36 if (extension.charAt(extension.length - 1) === "/") {
37 // remove trailing slash if present
38 extension = extension.substring(0, extension.length - 1);
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);
48 async.eachSeries(unregisterSql, queryEach, callback);
50 async.each(specs, unregisterEach, masterCallback);
53 exports.unregister = unregister;