@jahed/sparql-engine
Version:
SPARQL query engine for servers and web browsers.
29 lines (26 loc) • 919 B
text/typescript
// SPDX-License-Identifier: MIT
import StageBuilder from "./stage-builder.ts";
import type { GroupPattern } from "sparqljs";
import { Pipeline } from "../../engine/pipeline/pipeline.ts";
import minus from "../../operators/minus.ts";
import { BindingBase, Bindings } from "../../rdf/bindings.ts";
import ExecutionContext from "../context/execution-context.ts";
import type { PipelineStage } from "../pipeline/pipeline-engine.ts";
/**
* A MinusStageBuilder evaluates MINUS clauses
*/
export default class MinusStageBuilder extends StageBuilder {
async execute(
source: PipelineStage<Bindings>,
node: GroupPattern,
context: ExecutionContext
): Promise<PipelineStage<Bindings>> {
const engine = Pipeline.getInstance();
const rightSource = await this.builder!._buildWhere(
engine.of(new BindingBase()),
node.patterns,
context
);
return minus(source, rightSource);
}
}