UNPKG

backendless-console-sdk

Version:

Backendless Console SDK for Node.js and browser

153 lines (149 loc) 5.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.tableRecordsReq = exports.tableRecordsCountReq = exports.composeRequestParams = exports.buildRecordsSearch = void 0; exports.wrapQueryColumnName = wrapQueryColumnName; var _data = require("../constants/data"); var _sqlBuilder = _interopRequireDefault(require("./sql-builder")); var _cacheTags = require("./cache-tags"); /* eslint-disable max-len */ var sqlLike = function sqlLike(part) { return "like '%".concat(part, "%'"); }; var DATETIME_PATTERN = /[\w]?/; var TIME_PATTERN = /^((([01]?[0-9]{1}|[2]{1}[0-3]{1})?)?(:([0-5]?[0-9])?)?(:([0-5]?[0-9])))?[ ]?(G|GM|GMT|GMT\+|GMT\+[0-9]+[ ]?)?$/; var BOOLEAN_SQL_VALUES = { 'true': '= true', 'false': '= false', 'null': 'IS NULL' }; var composeRequestParams = function composeRequestParams(table, query) { var _query$pageSize = query.pageSize, pageSize = _query$pageSize === void 0 ? 15 : _query$pageSize, _query$offset = query.offset, offset = _query$offset === void 0 ? 0 : _query$offset, sqlSearch = query.sqlSearch, where = query.where, sortField = query.sortField, sortDir = query.sortDir, filterString = query.filterString; var property = query.property, groupBy = query.groupBy, having = query.having, distinct = query.distinct, loadRelations = query.loadRelations, sortBy = query.sortBy, props = query.props; var params = { pageSize: pageSize, offset: offset }; var search = buildRecordsSearch(table, sqlSearch, where, filterString); if (search) { params.where = search; } if (sortBy) { params.sortBy = sortBy; } else if (sortField && sortDir) { params.sortBy = "".concat(sortField, " ").concat(sortDir); } if (property) { params.property = property; } if (props) { params.props = props; } if (groupBy) { params.groupBy = groupBy; } if (having) { params.having = having; } if (distinct) { params.distinct = distinct; } if (loadRelations) { params.loadRelations = loadRelations; } return params; }; exports.composeRequestParams = composeRequestParams; var tableRecordsReq = function tableRecordsReq(req, url, table) { var query = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var resetCache = arguments.length > 4 ? arguments[4] : undefined; var params = composeRequestParams(table, query); return req.post(url, params).cacheTags((0, _cacheTags.TABLE_DATA)(table.tableId)).resetCache(resetCache); }; exports.tableRecordsReq = tableRecordsReq; var tableRecordsCountReq = function tableRecordsCountReq(req, url, table) { var query = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var resetCache = arguments.length > 4 ? arguments[4] : undefined; var params = composeRequestParams(table, query); return req.post(url, params).cacheTags((0, _cacheTags.TABLE_DATA)(table.tableId)).resetCache(resetCache); }; exports.tableRecordsCountReq = tableRecordsCountReq; var buildRecordsSearch = function buildRecordsSearch(table, sql, searchString, filterString) { searchString = searchString ? searchString.trim() : ''; var searchSQL = sql || !searchString ? searchString : searchStringToSQLFormat(table, searchString); return _sqlBuilder["default"].and(filterString, searchSQL); }; exports.buildRecordsSearch = buildRecordsSearch; var searchStringToSQLFormat = function searchStringToSQLFormat(table, searchValue) { var ignoreColumns = table.name === _data.USERS_TABLE ? _data.NON_SEARCHABLE_USERS_COLUMNS : _data.NON_SEARCHABLE_COLUMNS; var sqlParts = []; table.columns.forEach(function (column) { if (!ignoreColumns.includes(column.name)) { var sqlFragment = getSQLQueryForColumn(searchValue, column.dataType); if (sqlFragment) { sqlParts.push("".concat(wrapQueryColumnName(column.name), " ").concat(sqlFragment)); } } }); return sqlParts.join(' or '); }; var getSQLQueryForColumn = function getSQLQueryForColumn(searchString, columnType) { if (_data.PRIMITIVES.includes(columnType)) { return sqlLike(searchString); } if (_data.DataTypes.BOOLEAN === columnType) { return BOOLEAN_SQL_VALUES[searchString.toLowerCase()]; } if (_data.DataTypes.DATETIME === columnType) { if (TIME_PATTERN.test(searchString)) { var timeQuery = searchString.replace(/^(\d{1,2}):(\d{1,2})(:(\d{1,4}))?/, function (match, hh, mm, ssW, ss) { var hours = hh.length === 1 ? '0' + hh : hh; var minutes = mm.length === 1 ? '0' + mm : mm; var seconds = ss && ss.length === 1 ? '0' + ss : ss; //with seconds => 14:47:29 //without seconds => 14:47 return "".concat(hours, ":").concat(minutes).concat(seconds ? ':' + seconds : ''); }); return sqlLike(timeQuery); } if (DATETIME_PATTERN.test(searchString)) { var dateTimeQuery = searchString.replace(/^(\d{1,2})[-\/](\d{1,2})[-\/](\d{1,4})/, function (match, m, d, year) { var month = m.length === 1 ? '0' + m : m; var day = d.length === 1 ? '0' + d : d; //1990-04-28 return "".concat(year, "-").concat(month, "-").concat(day); }); return sqlLike(dateTimeQuery); } } }; function shouldWrap(path) { if (path && path.startsWith('`') && path.endsWith('`')) { return false; } if (path.includes('[') && path.includes(']')) { return false; } return true; } function wrapQueryColumnName(columnName) { return columnName.split('.').map(function (path) { return shouldWrap(path) ? "`".concat(path, "`") : path; }).join('.'); }