UNPKG

@stormzx/sqlbuilder

Version:

A simple sql builder.

67 lines (53 loc) 2.06 kB
"use strict"; 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]; } } }); }