@react-awesome-query-builder/sql
Version:
User-friendly query builder for React. SQL support
113 lines (111 loc) • 4.64 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.unsupportedOps = exports.manuallyImportedOps = exports.buildConv = exports.SqlPrimitiveTypes = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _core = require("@react-awesome-query-builder/core");
/* 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 manuallyImportedOps = exports.manuallyImportedOps = [];
var unsupportedOps = exports.unsupportedOps = ["some", "all", "none"];
// sql type => raqb type
var SqlPrimitiveTypes = exports.SqlPrimitiveTypes = {
single_quote_string: "text",
double_quote_string: "text",
backticks_quote_string: "text",
var_string: "text",
natural_string: "text",
hex_string: "text",
full_hex_string: "text",
bit_string: "text",
string: "text",
regex_string: "text",
// ?
number: "number",
"null": "null",
bool: "boolean",
"boolean": "boolean"
};
var buildConv = exports.buildConv = function buildConv(config, meta) {
var operators = {};
var opFuncs = {};
var valueFuncs = {
datetime: [sqlImportDate],
date: [sqlImportDate],
time: [sqlImportDate]
};
var _loop = function _loop(opKey) {
var opConfig = config.operators[opKey];
// const isGroupOp = config.settings.groupOperators?.includes(opKey);
var sqlOps = opConfig.sqlOps ? opConfig.sqlOps : opConfig.sqlOp ? [opConfig.sqlOp] : undefined;
if (opConfig.sqlImport) {
if (!opFuncs[opKey]) opFuncs[opKey] = [];
opFuncs[opKey].push(opConfig.sqlImport);
}
if (sqlOps) {
// examples of 2+: "==", "eq", ".contains", "matches" (can be used for starts_with, ends_with)
sqlOps === null || sqlOps === void 0 || sqlOps.forEach(function (sqlOp) {
if (!operators[sqlOp]) operators[sqlOp] = [];
operators[sqlOp].push(opKey);
});
} else {
var _config$operators;
var revOpConfig = (_config$operators = config.operators) === null || _config$operators === void 0 ? void 0 : _config$operators[opConfig.reversedOp];
var canUseRev = (revOpConfig === null || revOpConfig === void 0 ? void 0 : revOpConfig.sqlOp) || (revOpConfig === null || revOpConfig === void 0 ? void 0 : revOpConfig.sqlOps) || (revOpConfig === null || revOpConfig === void 0 ? void 0 : revOpConfig.sqlImport);
var canIgnore = canUseRev || opConfig.sqlImport || manuallyImportedOps.includes(opKey) || manuallyImportedOps.includes(opConfig.reversedOp) || unsupportedOps.includes(opKey);
if (!canIgnore) {
logger.warn("[sql] No sqlOp/sqlImport for operator ".concat(opKey));
}
}
};
for (var opKey in config.operators) {
_loop(opKey);
}
var conjunctions = {};
for (var conjKey in config.conjunctions) {
var conjunctionDefinition = config.conjunctions[conjKey];
var ck = conjunctionDefinition.sqlConj || conjKey.toLowerCase();
conjunctions[ck] = conjKey;
}
for (var w in config.widgets) {
var widgetDef = config.widgets[w];
var sqlImport = widgetDef.sqlImport;
if (sqlImport) {
if (!valueFuncs[w]) valueFuncs[w] = [];
valueFuncs[w].push(sqlImport);
}
}
return {
operators: operators,
conjunctions: conjunctions,
opFuncs: opFuncs,
valueFuncs: valueFuncs
};
};
var sqlImportDate = function sqlImportDate(sqlObj, wgtDef, sqlDialect) {
if (sqlObj !== null && sqlObj !== void 0 && sqlObj.children && ["TO_DATE", "TO_TIMESTAMP", "TO_TIMESTAMP_TZ", "TO_UTC_TIMESTAMP_TZ"].includes(sqlObj.func) && sqlObj.children.length >= 1) {
var _valArg$valueType;
var _ref = sqlObj.children,
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
valArg = _ref2[0],
_patternArg = _ref2[1];
if (valArg !== null && valArg !== void 0 && (_valArg$valueType = valArg.valueType) !== null && _valArg$valueType !== void 0 && _valArg$valueType.endsWith("_quote_string")) {
var dateWidgetDef = wgtDef;
// tip: moment doesn't support SQL date format, so ignore patternArg
var dateVal = this.utils.moment(valArg.value);
if (dateVal.isValid()) {
return {
value: dateVal.format(dateWidgetDef === null || dateWidgetDef === void 0 ? void 0 : dateWidgetDef.valueFormat)
};
} else {
return {
value: null,
error: "Invalid date"
};
}
}
}
return undefined;
};