mecano
Version:
Common functions for system deployment.
95 lines (90 loc) • 3.47 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var misc,
slice = [].slice,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
module.exports.escape = function(sql) {
return sql.replace(/[\\"]/g, "\\$&");
};
module.exports.cmd = function() {
var cmd, i, j, k, len, opt, options, opts, properties, v;
opts = 2 <= arguments.length ? slice.call(arguments, 0, i = arguments.length - 1) : (i = 0, []), cmd = arguments[i++];
if (cmd == null) {
cmd = null;
}
properties = ['engine', 'admin_username', 'admin_password', 'username', 'password', 'host', 'database', 'silent'];
options = {};
for (j = 0, len = opts.length; j < len; j++) {
opt = opts[j];
for (k in opt) {
v = opt[k];
if (indexOf.call(properties, k) < 0) {
continue;
}
options[k] = v;
}
}
options.engine = options.engine.toLowerCase();
if (!options.admin_username) {
options.admin_password = null;
}
if (options.silent == null) {
options.silent = true;
}
switch (options.engine) {
case 'mysql':
if (options.path == null) {
options.path = 'mysql';
}
if (options.port == null) {
options.port = '3306';
}
return ["mysql", "-h" + options.host, "-P" + options.port, "-u" + (options.admin_username || options.username), "-p" + (options.admin_password || options.password), options.database ? "-D" + options.database : void 0, options.mysql_options ? "" + options.mysql_options : void 0, options.silent ? "-N -s -r" : void 0, cmd ? "-e \"" + (module.exports.escape(cmd)) + "\"" : void 0].join(' ');
case 'postgres':
if (options.path == null) {
options.path = 'psql';
}
if (options.port == null) {
options.port = '5432';
}
return ["PGPASSWORD=" + (options.admin_password || options.password), "psql", "-h " + options.host, "-p " + options.port, "-U " + (options.admin_username || options.username), options.database ? "-d " + options.database : void 0, options.postgres_options ? "" + options.postgres_options : void 0, "-tAq", cmd ? "-c \"" + cmd + "\"" : void 0].join(' ');
default:
throw Error("Unsupported engine: " + (JSON.stringify(options.engine)));
}
};
module.exports.jdbc = function(jdbc) {
var _, addresses, database, engine, ref, ref1;
if (/^jdbc:mysql:/.test(jdbc)) {
ref = /^jdbc:(.*?):\/+(.*?)\/(.*?)(\?(.*)|$)/.exec(jdbc), _ = ref[0], engine = ref[1], addresses = ref[2], database = ref[3];
addresses = addresses.split(',').map(function(address) {
var host, port, ref1;
ref1 = address.split(':'), host = ref1[0], port = ref1[1];
return {
host: host,
port: port || 3306
};
});
return {
engine: 'mysql',
addresses: addresses,
database: database
};
} else if (/^jdbc:postgresql:/.test(jdbc)) {
ref1 = /^jdbc:(.*?):\/+(.*?)\/(.*?)(\?(.*)|$)/.exec(jdbc), _ = ref1[0], engine = ref1[1], addresses = ref1[2], database = ref1[3];
addresses = addresses.split(',').map(function(address) {
var host, port, ref2;
ref2 = address.split(':'), host = ref2[0], port = ref2[1];
return {
host: host,
port: port || 5432
};
});
return {
engine: 'postgres',
addresses: addresses,
database: database
};
} else {
throw Error('Invalid JDBC URL');
}
};
misc = require('.');