backendless-console-sdk
Version:
Backendless Console SDK for Node.js and browser
149 lines (145 loc) • 5.62 kB
JavaScript
;
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 = exports.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;
};
var tableRecordsReq = exports.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);
};
var tableRecordsCountReq = exports.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);
};
var buildRecordsSearch = exports.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);
};
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('.');
}