azurite
Version:
An open source Azure Storage API compatible server
79 lines • 2.77 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const StorageErrorFactory_1 = tslib_1.__importDefault(require("../errors/StorageErrorFactory"));
const QueryParser_1 = tslib_1.__importDefault(require("./QueryInterpreter/QueryParser"));
const QueryInterpreter_1 = tslib_1.__importDefault(require("./QueryInterpreter/QueryInterpreter"));
const QueryValidator_1 = require("./QueryInterpreter/QueryValidator");
/**
* Handles Query Logic For LokiJs Table Implementation
*
* @export
* @class LokiTableStoreQueryGenerator
*/
class LokiTableStoreQueryGenerator {
/**
* Will throw an exception on invalid query syntax
*
* @param queryOptions
* @param context
* @returns (entity: Entity) => boolean
*/
static generateQueryForPersistenceLayer(queryOptions, context) {
let queryWhere;
try {
queryWhere =
LokiTableStoreQueryGenerator.generateQueryEntityWhereFunction(queryOptions.filter);
}
catch (e) {
throw StorageErrorFactory_1.default.getQueryConditionInvalid(context);
}
return queryWhere;
}
/**
* Generates the table query function
*
* @static
* @param {(string | undefined)} query
* @return {*} {(entity: Table) => boolean}
* @memberof LokiTableStoreQueryGenerator
*/
static generateQueryTableWhereFunction(query) {
if (query === undefined) {
return () => true;
}
const queryTree = (0, QueryParser_1.default)(query);
(0, QueryValidator_1.validateQueryTree)(queryTree);
return (entity) => (0, QueryInterpreter_1.default)(entity, queryTree);
}
/**
* generates a table query for the Loki Js table store
*
* @static
* @param {string} query
* @return {*} {string}
* @memberof LokiTableStoreQueryGenerator
*/
static transformTableQuery(query) {
const queryTree = (0, QueryParser_1.default)(query);
return queryTree.toString();
}
/**
* generates an entity query for the Loki Js table store
*
* @static
* @param {(string | undefined)} query
* @return {*} {(entity: Entity) => boolean}
* @memberof LokiTableStoreQueryGenerator
*/
static generateQueryEntityWhereFunction(query) {
if (query === undefined || query === "") {
return () => true;
}
const queryTree = (0, QueryParser_1.default)(query);
(0, QueryValidator_1.validateQueryTree)(queryTree);
return (entity) => (0, QueryInterpreter_1.default)(entity, queryTree);
}
}
exports.default = LokiTableStoreQueryGenerator;
//# sourceMappingURL=LokiTableStoreQueryGenerator.js.map
;