Skip to content

Instantly share code, notes, and snippets.

@alpercitak
Created November 8, 2017 23:07
Show Gist options
  • Save alpercitak/2169ed74d81e28440aabdb4c2ebb0d29 to your computer and use it in GitHub Desktop.
Save alpercitak/2169ed74d81e28440aabdb4c2ebb0d29 to your computer and use it in GitHub Desktop.
var db = require('./db'),
util = require('util'),
max = 2;
var ormify = function (o, base) {
if (!o) return {};
var r = {};
var traverse = function (t, arr) {
if (arr.length == 1) return;
var s = arr[0];
if (arr.length == 2) {
t[s] = arr[1];
} else if (arr.length == 3) {
var f = arr[1], v = arr[2];
if (!t[s]) t[s] = {};
t[s][f] = v;
} else {
arr.splice(0, 1);
traverse(t[s], arr);
}
};
Object.keys(o).forEach(function (k) {
var arr = k.split('|');
arr.push(o[k]);
traverse(r, arr);
});
var arr = base ? base.split('|') : [];
arr.forEach(function (a) {
if (r[a]) r = r[a];
});
return r;
};
var mock1 = function () {
var q = '';
for (var i = 0; i <= max; i++) {
q += "SELECT * FROM (SELECT 1) t\r\n";
for (var j = 0; j <= 2; j++) {
var level = util.format('l%s', j);
q += util.format("INNER JOIN (SELECT '%s_%s' AS '%s|id', 'name_%s_%s' AS '%s|name') l%s ON 1=1\r\n", i, j, level, i, j, level, j);
}
if (i < max) q += 'UNION ALL\r\n';
}
/*console.log(q);*/
return db.raw(q).map(function (r) {
return ormify(r, 'l0');
}).then(function (r) {
console.log('----- mock1 -----\r\n\r\n' + util.inspect(r, false, null) + '\r\n\r\n----- mock1 -----\r\n');
});
};
var mock2 = function () {
var q = '';
for (var i = 0; i <= max; i++) {
q += "SELECT * FROM (SELECT 1) t\r\n";
for (var j = 0; j <= 2; j++) {
var level = '';
for (var x = 0; x <= j; x++) {
level += util.format('l%s', x);
if (x < j) level += '|';
}
q += util.format("INNER JOIN (SELECT '%s_%s' AS '%s|id', 'name_%s_%s' AS '%s|name') l%s ON 1=1\r\n", i, j, level, i, j, level, j);
}
if (i < max) q += 'UNION ALL\r\n';
}
/*console.log(q);*/
return db.raw(q).map(function (r) {
return ormify(r, 'l0');
}).then(function (r) {
console.log('----- mock2 -----\r\n\r\n' + util.inspect(r, false, null) + '\r\n\r\n----- mock2 -----\r\n');
});
};
mock1();
mock2();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment