@react-awesome-query-builder/sql
Version:
User-friendly query builder for React. SQL support
74 lines (69 loc) • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadFromSql = void 0;
var _core = require("@react-awesome-query-builder/core");
var _nodeSqlParser = require("node-sql-parser");
var _ast = require("./ast");
var _conv = require("./conv");
var _convert = require("./convert");
/* eslint-disable @typescript-eslint/no-redundant-type-constituents, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */
var logger = _core.Utils.OtherUtils.logger;
var loadFromSql = exports.loadFromSql = function loadFromSql(sqlStr, config, options) {
var _options;
var meta = {
errors: [],
// mutable
warnings: [] // mutable
};
var extendedConfig = _core.Utils.ConfigUtils.extendConfig(config, undefined, false);
var conv = (0, _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.Parser();
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 = (0, _ast.processAst)(sqlAst, meta);
logger.debug("convertedObj:", convertedObj, meta);
meta.convertedObj = convertedObj;
jsTree = (0, _convert.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 ? _core.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
//