UNPKG

@comunica/actor-query-operation-leftjoin

Version:

A leftjoin query-operation actor

47 lines 2.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ActorQueryOperationLeftJoin = void 0; const bus_query_operation_1 = require("@comunica/bus-query-operation"); const context_entries_1 = require("@comunica/context-entries"); const core_1 = require("@comunica/core"); const utils_algebra_1 = require("@comunica/utils-algebra"); const utils_query_operation_1 = require("@comunica/utils-query-operation"); /** * A comunica LeftJoin Query Operation Actor. */ class ActorQueryOperationLeftJoin extends bus_query_operation_1.ActorQueryOperationTypedMediated { mediatorJoin; constructor(args) { super(args, utils_algebra_1.Algebra.Types.LEFT_JOIN); this.mediatorJoin = args.mediatorJoin; } async testOperation(_operation, _context) { return (0, core_1.passTestVoid)(); } async runOperation(operationOriginal, context) { const dataFactory = context.getSafe(context_entries_1.KeysInitQuery.dataFactory); const algebraFactory = new utils_algebra_1.AlgebraFactory(dataFactory); // Delegate to join bus const entries = (await Promise.all(operationOriginal.input .map(async (subOperation, index) => { const output = (0, utils_query_operation_1.getSafeBindings)(await this.mediatorQueryOperation.mediate({ operation: subOperation, context })); // If we have an expression in the left join, // we attach the expression to the right-hand operation, // and enforce a bind-join. if (operationOriginal.expression && index === 1) { return { output, operation: algebraFactory.createFilter(subOperation, operationOriginal.expression), operationRequired: true, }; } return { output, operation: subOperation, }; }))); return await this.mediatorJoin.mediate({ type: 'optional', entries, context }); } } exports.ActorQueryOperationLeftJoin = ActorQueryOperationLeftJoin; //# sourceMappingURL=ActorQueryOperationLeftJoin.js.map