dtable-utils
Version:
dtable common utils
202 lines (188 loc) • 9.04 kB
JavaScript
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;
;