lite-ui-sql-parser
Version:
simple node sql parser
68 lines (61 loc) • 1.72 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "./expr", "./util", "./over"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("./expr"), require("./util"), require("./over"));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.expr, global.util, global.over);
global.func = mod.exports;
}
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _expr, _util, _over) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.castToSQL = castToSQL;
_exports.funcToSQL = funcToSQL;
function castToSQL(expr) {
const {
target,
expr: expression,
symbol
} = expr;
const {
length,
dataType,
parentheses,
scale
} = target;
let str = '';
if (length) {
str = scale ? `${length}, ${scale}` : length;
}
if (parentheses) str = `(${str})`;
let prefix = (0, _expr.exprToSQL)(expression);
let symbolChar = '::';
let suffix = '';
if (symbol === 'as') {
prefix = `CAST(${prefix}`;
suffix = ')';
symbolChar = ` ${symbol.toUpperCase()} `;
}
return `${prefix}${symbolChar}${dataType}${str}${suffix}`;
}
function funcToSQL(expr) {
const {
args,
name
} = expr;
if (!args) return name;
const {
parentheses,
over
} = expr;
const str = `${name}(${(0, _expr.exprToSQL)(args).join(', ')})`;
const overStr = (0, _over.overToSQL)(over);
return [parentheses ? `(${str})` : str, overStr].filter(_util.hasVal).join(' ');
}
});