@jahed/sparql-engine
Version:
SPARQL query engine for servers and web browsers.
36 lines • 1.14 kB
JavaScript
import PlanVisitor from "./plan-visitor.js";
import UnionMerge from "./visitors/union-merge.js";
/**
* An Optimizer applies a set of optimization rules, implemented using subclasses of {@link PlanVisitor}.
*/
export default class Optimizer {
_visitors;
constructor() {
this._visitors = [];
}
/**
* Get an optimizer configured with the default optimization rules
* @return A new Optimizer pre-configured with default rules
*/
static getDefault() {
const opt = new Optimizer();
opt.addVisitor(new UnionMerge());
return opt;
}
/**
* Register a new visitor, which implements an optimization rule.
* @param visitor - Visitor
*/
addVisitor(visitor) {
this._visitors.push(visitor);
}
/**
* Optimize a SPARQL query expression tree, by applying the set of rules.
* @param plan - SPARQL query expression tree to iptimize
* @return Optimized SPARQL query expression tree
*/
optimize(plan) {
return this._visitors.reduce((current, v) => v.visit(current), plan);
}
}
//# sourceMappingURL=optimizer.js.map