UNPKG

dtable-utils

Version:

dtable common utils

202 lines (188 loc) 9.04 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var dayjs = require('dayjs'); var utc = require('dayjs/plugin/utc'); require('../../constants/column.js'); var index = require('../../constants/filter/index.js'); require('../../constants/formula.js'); require('../../constants/sort.js'); require('../../constants/group.js'); var filterCondition = require('../sql-generator/filter-condition.js'); var core$1 = require('../../sort/core.js'); require('../../cell-value-get/cell-value.js'); var filter = require('../../validate/filter.js'); var core = require('../../view/core.js'); require('@babel/runtime/helpers/typeof'); require('../../date.js'); require('@babel/runtime/helpers/defineProperty'); require('@babel/runtime/helpers/toConsumableArray'); require('@babel/runtime/helpers/slicedToArray'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs); var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } dayjs__default["default"].extend(utc__default["default"]); var generatorSearchSQL = function generatorSearchSQL(table, view, start, limit, username, userId, userDepartmentIdsMap) { // MAIN var table_name = table.name; var searchingColumnsString = generateViewSearchColumnsString(table, view); var sql = "SELECT ".concat(searchingColumnsString, " FROM `").concat(table_name, "`"); // WHERE CLAUSE var filterClause = filterCondition.filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap); // ORDER BY CLAUSE var sortSqlClause = sort2SqlCondition(table, view); // LIMIT CLAUSE var reg1 = /^[1-9]d*|0$/; // non-negative integer var reg2 = /^[1-9]\d*$/; // positive integer var limitClause = ''; var isValidStart = reg1.test(start); var isValidLimit = reg2.test(limit); if (isValidStart && isValidLimit) { limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";"); } return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause); }; var generatorCustomSearchSQL = function generatorCustomSearchSQL(table, start, limit, conditions) { // MAIN var table_name = table.name; var sql = "SELECT * FROM `".concat(table_name, "`"); // WHERE CLAUSE var filterClause = customFilter2SqlCondition(table, conditions); // ORDER BY CLAUSE var sortSqlClause = customSort2SqlCondition(table, conditions); // LIMIT CLAUSE var reg1 = /^[1-9]d*|0$/; // non-negative integer var reg2 = /^[1-9]\d*$/; // positive integer var limitClause = ''; var isValidStart = reg1.test(start); var isValidLimit = reg2.test(limit); if (isValidStart && isValidLimit) { limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";"); } return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause); }; var generateSearchColumnsString = function generateSearchColumnsString(columns) { var columnsNames = columns ? columns.map(function (column) { return "`".concat(column.name, "`"); }) : []; columnsNames.push('`_id`', '`_archived`', '`_locked`'); return columnsNames.join(', '); }; var generateViewSearchColumnsString = function generateViewSearchColumnsString(table, view) { var visibleColumns = table ? core.getViewShownColumns(view, table.columns) : []; return generateSearchColumnsString(visibleColumns); }; var sort2SqlCondition = function sort2SqlCondition(table, view) { var columns = table.columns; var sorts = core$1.getValidSorts(view.sorts, columns); if (!sorts || sorts.length === 0) { return ''; } var orderHeader = 'ORDER BY '; var clauses = sorts.map(function (sort) { var column_key = sort.column_key, sort_type = sort.sort_type; var column = columns.find(function (item) { return item.key === column_key; }); if (!column) return ''; var type = sort_type === 'up' ? 'ASC' : 'DESC'; return "`".concat(column.name, "` ").concat(type); }); clauses = clauses.filter(function (item) { return item && item !== ''; }); if (clauses.length === 0) return ''; return orderHeader + clauses.join(', '); }; var customSort2SqlCondition = function customSort2SqlCondition(table, sort_conditions) { var columns = table.columns; var condition_sorts = sort_conditions && sort_conditions.sorts || []; if (!condition_sorts || condition_sorts.length === 0) { return ''; } var orderHeader = 'ORDER BY '; var clauses = condition_sorts.map(function (sort) { var column_key = sort.column_key, sort_type = sort.sort_type; var column = columns.find(function (item) { return item.key === column_key; }); var type = sort_type === 'up' ? 'ASC' : 'DESC'; if (!column) { if (['_ctime', '_mtime'].indexOf(column_key) !== -1) { return "`".concat(column_key, "` ").concat(type); } return ''; } return "`".concat(column.name, "` ").concat(type); }); clauses = clauses.filter(function (item) { return item && item !== ''; }); if (clauses.length === 0) return ''; return orderHeader + clauses.join(', '); }; var customFilter2SqlCondition = function customFilter2SqlCondition(table, filter_conditions) { var columns = table.columns; var filter_groups = filter_conditions.filter_groups, group_conjunction = filter_conditions.group_conjunction; if (!filter_groups || filter_groups.length === 0) { return ''; } var filterHeader = 'WHERE '; var groupStringList = []; // eslint-disable-next-line no-restricted-syntax var _iterator = _createForOfIteratorHelper(filter_groups), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var filterGroup = _step.value; var filters = filterGroup.filters, filter_conjunction = filterGroup.filter_conjunction; var stringList = filters.map(function (filterItem) { var _ValidateFilter$valid = filter.ValidateFilter.validate(filterItem, columns), error_message = _ValidateFilter$valid.error_message; if (error_message) { if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) { return ''; } throw new Error(error_message); } var column_key = filterItem.column_key; var column = columns.find(function (item) { return item.key === column_key; }); return filterCondition.getSqlConditionByFilter(column, filterItem); }); stringList = stringList.filter(function (item) { return item && item.length > 0; }); if (stringList.length !== 0) { var filterContent = stringList[0]; if (stringList.length > 1) { for (var i = 1; i < stringList.length; i++) { filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")"); } } // eslint-disable-next-line prefer-template filterContent = '(' + filterContent + ')'; groupStringList.push(filterContent); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return filterHeader + groupStringList.join(" ".concat(group_conjunction, " ")); }; exports.customFilter2SqlCondition = customFilter2SqlCondition; exports.customSort2SqlCondition = customSort2SqlCondition; exports.generateSearchColumnsString = generateSearchColumnsString; exports.generateViewSearchColumnsString = generateViewSearchColumnsString; exports.generatorCustomSearchSQL = generatorCustomSearchSQL; exports.generatorSearchSQL = generatorSearchSQL; exports.sort2SqlCondition = sort2SqlCondition;