@comunica/actor-rdf-join-inner-multi-smallest 4.4.2-alpha.49.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ActorRdfJoinMultiSmallest.jsonld +0 -0
- package/components/components.jsonld +0 -0
- package/components/context.jsonld +0 -0
- package/lib/ActorRdfJoinMultiSmallest.d.ts +0 -0
- package/lib/ActorRdfJoinMultiSmallest.js +2 -2
- package/lib/ActorRdfJoinMultiSmallest.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +0 -0
- package/package.json +10 -10
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -4,8 +4,8 @@ exports.ActorRdfJoinMultiSmallest = void 0;
|
|
|
4
4
|
const bus_rdf_join_1 = require("@comunica/bus-rdf-join");
|
|
5
5
|
const context_entries_1 = require("@comunica/context-entries");
|
|
6
6
|
const core_1 = require("@comunica/core");
|
|
7
|
-
const utils_algebra_1 = require("@comunica/utils-algebra");
|
|
8
7
|
const utils_query_operation_1 = require("@comunica/utils-query-operation");
|
|
8
|
+
const sparqlalgebrajs_1 = require("sparqlalgebrajs");
|
|
9
9
|
/**
|
|
10
10
|
* A Multi Smallest RDF Join Actor.
|
|
11
11
|
* It accepts 3 or more streams, joins the smallest two, and joins the result with the remaining streams.
|
|
@@ -54,7 +54,7 @@ class ActorRdfJoinMultiSmallest extends bus_rdf_join_1.ActorRdfJoin {
|
|
|
54
54
|
}
|
|
55
55
|
async getOutput(action, sideData) {
|
|
56
56
|
const dataFactory = action.context.getSafe(context_entries_1.KeysInitQuery.dataFactory);
|
|
57
|
-
const algebraFactory = new
|
|
57
|
+
const algebraFactory = new sparqlalgebrajs_1.Factory(dataFactory);
|
|
58
58
|
// Determine the two smallest streams by sorting (e.g. via cardinality)
|
|
59
59
|
const entries = sideData.sortedEntries;
|
|
60
60
|
const entriesMetaData = await bus_rdf_join_1.ActorRdfJoin.getEntriesWithMetadatas(entries);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorRdfJoinMultiSmallest.js","sourceRoot":"","sources":["ActorRdfJoinMultiSmallest.ts"],"names":[],"mappings":";;;AAOA,yDAAsD;AAEtD,+DAA0D;AAE1D,yCAAsD;AAQtD,
|
|
1
|
+
{"version":3,"file":"ActorRdfJoinMultiSmallest.js","sourceRoot":"","sources":["ActorRdfJoinMultiSmallest.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IActionRdfJoin,\n IActorRdfJoinOutputInner,\n IActorRdfJoinArgs,\n MediatorRdfJoin,\n IActorRdfJoinTestSideData,\n} from '@comunica/bus-rdf-join';\nimport { ActorRdfJoin } from '@comunica/bus-rdf-join';\nimport type { MediatorRdfJoinEntriesSort } from '@comunica/bus-rdf-join-entries-sort';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type { TestResult } from '@comunica/core';\nimport { passTestWithSideData } from '@comunica/core';\nimport type { IMediatorTypeJoinCoefficients } from '@comunica/mediatortype-join-coefficients';\nimport type {\n IJoinEntry,\n IActionContext,\n IJoinEntryWithMetadata,\n ComunicaDataFactory,\n} from '@comunica/types';\nimport { getSafeBindings } from '@comunica/utils-query-operation';\nimport { Factory } from 'sparqlalgebrajs';\n\n/**\n * A Multi Smallest RDF Join Actor.\n * It accepts 3 or more streams, joins the smallest two, and joins the result with the remaining streams.\n */\nexport class ActorRdfJoinMultiSmallest extends ActorRdfJoin<IActorRdfJoinMultiSmallestTestSideData> {\n public readonly mediatorJoinEntriesSort: MediatorRdfJoinEntriesSort;\n public readonly mediatorJoin: MediatorRdfJoin;\n\n public constructor(args: IActorRdfJoinMultiSmallestArgs) {\n super(args, {\n logicalType: 'inner',\n physicalName: 'multi-smallest',\n limitEntries: 3,\n limitEntriesMin: true,\n canHandleUndefs: true,\n isLeaf: false,\n });\n }\n\n /**\n * Finds join indexes of lowest cardinality result sets, with priority on result sets that have common variables\n * @param entries A sorted array of entries, sorted on cardinality\n */\n public getJoinIndexes(entries: IJoinEntryWithMetadata[]): [number, number] {\n // Iterate over all combinations of join indexes,\n // return the first combination that does not lead to a cartesian product\n for (let i = 0; i < entries.length; i++) {\n for (let j = i + 1; j < entries.length; j++) {\n if (this.hasCommonVariables(entries[i], entries[j])) {\n return [ i, j ];\n }\n }\n }\n // If all result sets are disjoint we just want the sets with lowest cardinality\n return [ 0, 1 ];\n }\n\n public hasCommonVariables(entry1: IJoinEntryWithMetadata, entry2: IJoinEntryWithMetadata): boolean {\n const variableNames1 = entry1.metadata.variables.map(x => x.variable.value);\n const variableNames2 = new Set(entry2.metadata.variables.map(x => x.variable.value));\n return variableNames1.some(v => variableNames2.has(v));\n }\n\n /**\n * Order the given join entries using the join-entries-sort bus.\n * @param {IJoinEntryWithMetadata[]} entries An array of join entries.\n * @param context The action context.\n * @return {IJoinEntryWithMetadata[]} The sorted join entries.\n */\n public async sortJoinEntries(\n entries: IJoinEntryWithMetadata[],\n context: IActionContext,\n ): Promise<IJoinEntryWithMetadata[]> {\n return (await this.mediatorJoinEntriesSort.mediate({ entries, context })).entries;\n }\n\n protected async getOutput(\n action: IActionRdfJoin,\n sideData: IActorRdfJoinMultiSmallestTestSideData,\n ): Promise<IActorRdfJoinOutputInner> {\n const dataFactory: ComunicaDataFactory = action.context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new Factory(dataFactory);\n\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const entries: IJoinEntry[] = sideData.sortedEntries;\n const entriesMetaData = await ActorRdfJoin.getEntriesWithMetadatas(entries);\n const bestJoinIndexes: number[] = this.getJoinIndexes(entriesMetaData);\n\n const smallestEntry1 = entries[bestJoinIndexes[0]];\n const smallestEntry2 = entries[bestJoinIndexes[1]];\n entries.splice(bestJoinIndexes[1], 1);\n entries.splice(bestJoinIndexes[0], 1);\n\n // Join the two selected streams, and then join the result with the remaining streams\n const firstEntry: IJoinEntry = {\n output: getSafeBindings(await this.mediatorJoin\n .mediate({ type: action.type, entries: [ smallestEntry1, smallestEntry2 ], context: action.context })),\n operation: algebraFactory\n .createJoin([ smallestEntry1.operation, smallestEntry2.operation ], false),\n };\n entries.push(firstEntry);\n return {\n result: await this.mediatorJoin.mediate({\n type: action.type,\n entries,\n context: action.context,\n }),\n };\n }\n\n protected async getJoinCoefficients(\n action: IActionRdfJoin,\n sideData: IActorRdfJoinTestSideData,\n ): Promise<TestResult<IMediatorTypeJoinCoefficients, IActorRdfJoinMultiSmallestTestSideData>> {\n let { metadatas } = sideData;\n metadatas = [ ...metadatas ];\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const sortedEntries = await this.sortJoinEntries(action.entries\n .map((entry, i) => ({ ...entry, metadata: metadatas[i] })), action.context);\n metadatas = sortedEntries.map(entry => entry.metadata);\n const requestInitialTimes = ActorRdfJoin.getRequestInitialTimes(metadatas);\n const requestItemTimes = ActorRdfJoin.getRequestItemTimes(metadatas);\n\n return passTestWithSideData({\n iterations: metadatas.reduce((acc, metadata) => acc * metadata.cardinality.value, 1),\n persistedItems: 0,\n blockingItems: 0,\n requestTime: metadatas.reduce((sum, metadata, i) => sum + requestInitialTimes[i] +\n metadata.cardinality.value * requestItemTimes[i], 0),\n }, { ...sideData, sortedEntries });\n }\n}\n\nexport interface IActorRdfJoinMultiSmallestArgs extends IActorRdfJoinArgs<IActorRdfJoinMultiSmallestTestSideData> {\n /**\n * The join entries sort mediator\n */\n mediatorJoinEntriesSort: MediatorRdfJoinEntriesSort;\n /**\n * A mediator for joining Bindings streams\n */\n mediatorJoin: MediatorRdfJoin;\n}\n\nexport interface IActorRdfJoinMultiSmallestTestSideData extends IActorRdfJoinTestSideData {\n sortedEntries: IJoinEntryWithMetadata[];\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
File without changes
|
package/lib/index.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-rdf-join-inner-multi-smallest",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "A multi-smallest rdf-join actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,14 +41,14 @@
|
|
|
41
41
|
"build:components": "componentsjs-generator"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@comunica/bus-rdf-join": "4.
|
|
45
|
-
"@comunica/bus-rdf-join-entries-sort": "4.
|
|
46
|
-
"@comunica/context-entries": "4.
|
|
47
|
-
"@comunica/core": "4.
|
|
48
|
-
"@comunica/mediatortype-join-coefficients": "4.
|
|
49
|
-
"@comunica/types": "4.
|
|
50
|
-
"@comunica/utils-
|
|
51
|
-
"
|
|
44
|
+
"@comunica/bus-rdf-join": "^4.5.0",
|
|
45
|
+
"@comunica/bus-rdf-join-entries-sort": "^4.5.0",
|
|
46
|
+
"@comunica/context-entries": "^4.5.0",
|
|
47
|
+
"@comunica/core": "^4.5.0",
|
|
48
|
+
"@comunica/mediatortype-join-coefficients": "^4.5.0",
|
|
49
|
+
"@comunica/types": "^4.5.0",
|
|
50
|
+
"@comunica/utils-query-operation": "^4.5.0",
|
|
51
|
+
"sparqlalgebrajs": "^5.0.2"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "2bcd98c387a021fc5c08d375793c205ca3d1bf0d"
|
|
54
54
|
}
|