@comunica/actor-rdf-join-entries-sort-selectivity
Version:
A selectivity rdf-join-entries-sort actor
39 lines • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActorRdfJoinEntriesSortSelectivity = void 0;
const bus_rdf_join_entries_sort_1 = require("@comunica/bus-rdf-join-entries-sort");
const core_1 = require("@comunica/core");
/**
* A comunica Selectivity RDF Join Entries Sort Actor.
*/
class ActorRdfJoinEntriesSortSelectivity extends bus_rdf_join_entries_sort_1.ActorRdfJoinEntriesSort {
constructor(args) {
super(args);
}
async test(_action) {
return (0, core_1.passTest)({ accuracy: 0.501 });
}
async run(action) {
const remainingEntries = [...action.entries];
const finalEntries = [];
while (remainingEntries.length > 0) {
let minSelectivity = Number.MAX_VALUE;
let minEntryIndex = -1;
for (const [remainingEntryIndex, remainingEntry] of remainingEntries.entries()) {
const { selectivity } = await this.mediatorJoinSelectivity.mediate({
entries: [remainingEntry, ...finalEntries],
context: action.context,
});
if (selectivity < minSelectivity) {
minSelectivity = selectivity;
minEntryIndex = remainingEntryIndex;
}
}
finalEntries.push(remainingEntries[minEntryIndex]);
remainingEntries.splice(minEntryIndex, 1);
}
return { entries: finalEntries };
}
}
exports.ActorRdfJoinEntriesSortSelectivity = ActorRdfJoinEntriesSortSelectivity;
//# sourceMappingURL=ActorRdfJoinEntriesSortSelectivity.js.map