@stormzx/sqlbuilder
Version:
A simple sql builder.
67 lines (53 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isTable = isTable;
exports.table = table;
var _sqlstring = require("sqlstring");
var _raw = require("./raw");
var _lodash = require("lodash");
var _assign = require("./_assign");
var _caseConvert = require("./case-convert");
function table(table, as) {
return (0, _raw.isRaw)(table) ? table : proxyTable(table, as);
}
function isTable(table) {
return Object.prototype.toString.call(table) === '[object raw#table]';
}
function proxyTable(table, as) {
table = (0, _caseConvert.caseConvert)(table);
let primitive = as ? `${(0, _sqlstring.escapeId)(table)} AS ${as}` : table;
let proxy = (0, _assign.assignPrimitive)((0, _assign.assignToString)(() => {}, 'raw#table'), as ? `${(0, _sqlstring.escapeId)(table)} as ${(0, _sqlstring.escapeId)(as)}` : (0, _sqlstring.escapeId)(table));
return new Proxy(proxy, {
get(target, p, receiver) {
return (0, _lodash.isString)(p) ? proxyColumn(as ?? table, p) : target[p];
},
apply(target, thisArg, args) {
return args.map(c => (0, _lodash.isArray)(c) ? proxyColumn(as ?? table, c[0]).as(c[1]) : proxyColumn(as ?? table, c));
}
});
}
/**
*
* @param {string} as 表名或表别名
* @param {string} column 字段名
* @returns
*/
function proxyColumn(as, column) {
column = column === '*' ? column : (0, _caseConvert.caseConvert)(column);
let proxy = (0, _assign.assignPrimitive)((0, _assign.assignToString)(() => {}, 'raw#column'), `${(0, _sqlstring.escapeId)(as)}.${column === '*' ? '*' : (0, _sqlstring.escapeId)(column)}`);
return new Proxy(proxy, {
get(target, p, receiver) {
if ((0, _lodash.isString)(p)) {
if (p == 'as') {
return as => as ? (0, _raw.raw)(`${target} as ${(0, _sqlstring.escapeId)((0, _caseConvert.caseConvert)(as))}`) : (0, _raw.raw)(`${target}`);
} else if (p == 'asc' || p == 'desc') {
return (0, _raw.raw)(`${target} ${p}`);
}
} else {
return target[p];
}
}
});
}