@react-awesome-query-builder/sql
Version:
User-friendly query builder for React. SQL support
68 lines (64 loc) • 2.6 kB
JavaScript
/* eslint-disable @typescript-eslint/no-redundant-type-constituents, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */
import { Utils } from "@react-awesome-query-builder/core";
import { Parser as NodeSqlParser } from "node-sql-parser";
import { processAst } from "./ast";
import { buildConv } from "./conv";
import { convertToTree } from "./convert";
var logger = Utils.OtherUtils.logger;
export var loadFromSql = function loadFromSql(sqlStr, config, options) {
var _options;
var meta = {
errors: [],
// mutable
warnings: [] // mutable
};
var extendedConfig = Utils.ConfigUtils.extendConfig(config, undefined, false);
var conv = buildConv(extendedConfig, meta);
var jsTree;
var sqlAst;
var convertedObj;
// Normalize
if (!options) {
options = {};
}
if (!((_options = options) !== null && _options !== void 0 && _options.database)) {
// todo
options.database = "Postgresql";
}
if (!sqlStr.startsWith("SELECT ")) {
sqlStr = "SELECT * FROM t WHERE " + sqlStr;
}
var sqlParser = new NodeSqlParser();
try {
sqlAst = sqlParser.astify(sqlStr, options);
logger.debug("sqlAst:", sqlAst);
} catch (exc) {
var e = exc;
meta.errors.push(e.message);
}
if (sqlAst) {
var _convertedObj$where, _convertedObj, _convertedObj2;
convertedObj = processAst(sqlAst, meta);
logger.debug("convertedObj:", convertedObj, meta);
meta.convertedObj = convertedObj;
jsTree = convertToTree((_convertedObj$where = (_convertedObj = convertedObj) === null || _convertedObj === void 0 ? void 0 : _convertedObj.where) !== null && _convertedObj$where !== void 0 ? _convertedObj$where : (_convertedObj2 = convertedObj) === null || _convertedObj2 === void 0 ? void 0 : _convertedObj2.select, conv, extendedConfig, meta, undefined, true);
logger.debug("jsTree:", jsTree);
}
var immTree = jsTree ? Utils.Import.loadTree(jsTree) : undefined;
return {
tree: immTree,
errors: meta.errors,
warnings: meta.warnings
};
};
// export const _loadFromSqlAndPrintErrors = (sqlStr: string, config: Config): ImmutableTree => {
// const {tree, errors} = loadFromSql(sqlStr, config);
// if (errors.length)
// console.warn("Errors while importing from SQL:", errors);
// return tree;
// };
// todo:
// funcs: LENGTH("sql"), LCASE(""), CONCAT("1", "2"), CONCAT_WS(",", "1", "2"), SUBSTRING("", 1, 1), SUBSTR(), ADDDATE/DATEADD
// json funcs: JSON_VALUE(a, "$.info.address.town")
// CASE mode: https://www.w3schools.com/sql/sql_case.asp
//