UNPKG

@react-awesome-query-builder/sql

Version:
68 lines (64 loc) 2.6 kB
/* 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 //