@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings 4.4.2-alpha.49.0 → 5.0.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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^4.0.0/components/context.jsonld",
4
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^4.0.0/components/context.jsonld",
5
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-rdf-join/^4.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^5.0.0/components/context.jsonld",
4
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^5.0.0/components/context.jsonld",
5
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-rdf-join/^5.0.0/components/context.jsonld"
6
6
  ],
7
7
  "@id": "npmd:@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings",
8
8
  "components": [
@@ -61,37 +61,37 @@
61
61
  "genericTypeInstances": [
62
62
  {
63
63
  "@type": "ParameterRangeGenericTypeReference",
64
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
64
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
65
65
  },
66
66
  {
67
67
  "@type": "ParameterRangeGenericTypeReference",
68
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
68
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
69
69
  },
70
70
  {
71
71
  "@type": "ParameterRangeGenericTypeReference",
72
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
72
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
73
73
  },
74
74
  {
75
75
  "@type": "ParameterRangeGenericTypeReference",
76
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
76
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
77
77
  }
78
78
  ]
79
79
  },
80
80
  {
81
81
  "@type": "ParameterRangeGenericTypeReference",
82
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
82
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
83
83
  },
84
84
  {
85
85
  "@type": "ParameterRangeGenericTypeReference",
86
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
86
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
87
87
  },
88
88
  {
89
89
  "@type": "ParameterRangeGenericTypeReference",
90
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
90
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
91
91
  },
92
92
  {
93
93
  "@type": "ParameterRangeGenericTypeReference",
94
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
94
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
95
95
  }
96
96
  ]
97
97
  },
@@ -128,19 +128,19 @@
128
128
  "genericTypeInstances": [
129
129
  {
130
130
  "@type": "ParameterRangeGenericTypeReference",
131
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
131
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
132
132
  },
133
133
  {
134
134
  "@type": "ParameterRangeGenericTypeReference",
135
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
135
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
136
136
  },
137
137
  {
138
138
  "@type": "ParameterRangeGenericTypeReference",
139
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
139
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
140
140
  },
141
141
  {
142
142
  "@type": "ParameterRangeGenericTypeReference",
143
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
143
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
144
144
  }
145
145
  ]
146
146
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^4.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^5.0.0/components/context.jsonld"
4
4
  ],
5
5
  "@id": "npmd:@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings",
6
6
  "@type": "Module",
@@ -3,7 +3,7 @@
3
3
  "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^6.0.0/components/context.jsonld",
4
4
  {
5
5
  "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
6
- "carjimsfb": "npmd:@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^4.0.0/",
6
+ "carjimsfb": "npmd:@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings/^5.0.0/",
7
7
  "ActorRdfJoinMultiSmallestFilterBindings": {
8
8
  "@id": "carjimsfb:components/ActorRdfJoinMultiSmallestFilterBindings.jsonld#ActorRdfJoinMultiSmallestFilterBindings",
9
9
  "@prefix": true,
@@ -13,6 +13,10 @@ const asynciterator_1 = require("asynciterator");
13
13
  * A comunica Inner Multi Smallest Filter Bindings RDF Join Actor.
14
14
  */
15
15
  class ActorRdfJoinMultiSmallestFilterBindings extends bus_rdf_join_1.ActorRdfJoin {
16
+ selectivityModifier;
17
+ blockSize;
18
+ mediatorJoinEntriesSort;
19
+ mediatorJoin;
16
20
  constructor(args) {
17
21
  super(args, {
18
22
  logicalType: 'inner',
@@ -21,6 +25,10 @@ class ActorRdfJoinMultiSmallestFilterBindings extends bus_rdf_join_1.ActorRdfJoi
21
25
  limitEntriesMin: true,
22
26
  isLeaf: false,
23
27
  });
28
+ this.selectivityModifier = args.selectivityModifier;
29
+ this.blockSize = args.blockSize;
30
+ this.mediatorJoinEntriesSort = args.mediatorJoinEntriesSort;
31
+ this.mediatorJoin = args.mediatorJoin;
24
32
  }
25
33
  /**
26
34
  * Order the given join entries using the join-entries-sort bus.
@@ -1 +1 @@
1
- {"version":3,"file":"ActorRdfJoinMultiSmallestFilterBindings.js","sourceRoot":"","sources":["ActorRdfJoinMultiSmallestFilterBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IActionRdfJoin,\n IActorRdfJoinArgs,\n MediatorRdfJoin,\n IActorRdfJoinOutputInner,\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, KeysRdfJoin } from '@comunica/context-entries';\nimport type { TestResult } from '@comunica/core';\nimport { passTestWithSideData, failTest, passTest } from '@comunica/core';\nimport type { IMediatorTypeJoinCoefficients } from '@comunica/mediatortype-join-coefficients';\nimport type {\n BindingsStream,\n ComunicaDataFactory,\n IActionContext,\n IJoinEntry,\n IJoinEntryWithMetadata,\n IQuerySourceWrapper,\n} from '@comunica/types';\nimport { AlgebraFactory } from '@comunica/utils-algebra';\nimport { bindingsToString } from '@comunica/utils-bindings-factory';\nimport { ChunkedIterator } from '@comunica/utils-iterator';\nimport { doesShapeAcceptOperation, getOperationSource, getSafeBindings } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { UnionIterator } from 'asynciterator';\n\n/**\n * A comunica Inner Multi Smallest Filter Bindings RDF Join Actor.\n */\nexport class ActorRdfJoinMultiSmallestFilterBindings extends ActorRdfJoin {\n public readonly selectivityModifier: number;\n public readonly blockSize: number;\n public readonly mediatorJoinEntriesSort: MediatorRdfJoinEntriesSort;\n public readonly mediatorJoin: MediatorRdfJoin;\n\n public constructor(args: IActorRdfJoinMultiSmallestFilterBindingsArgs) {\n super(args, {\n logicalType: 'inner',\n physicalName: 'multi-smallest-filter-bindings',\n limitEntries: 2,\n limitEntriesMin: true,\n isLeaf: false,\n });\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<TestResult<{\n first: IJoinEntryWithMetadata;\n second: IJoinEntryWithMetadata;\n remaining: IJoinEntryWithMetadata[];\n }>> {\n let { entries: entriesSorted } = await this.mediatorJoinEntriesSort.mediate({ entries, context });\n\n // Prioritize entries with modified operations, so these are not re-executed\n entriesSorted = entriesSorted.sort((entryLeft, entryRight) => {\n if (entryLeft.operationModified && !entryRight.operationModified) {\n return -1;\n }\n return 0;\n });\n\n const first = entriesSorted.splice(0, 1)[0];\n\n // Let second entry first be prioritized for sharing as many variables with first as possible,\n // then having the fewest variables,\n // and then having the lowest cardinality.\n let second: IJoinEntryWithMetadata | undefined;\n let secondIndex = -1;\n let secondSharedVariables = 0;\n for (const [ i, entry ] of entriesSorted.entries()) {\n const sharedVariables = first.metadata.variables\n .filter(variableFirst => entry.metadata.variables\n .some(variableSecond => variableFirst.variable.equals(variableSecond.variable))).length;\n if (!second || (sharedVariables > secondSharedVariables ||\n (sharedVariables === secondSharedVariables &&\n (entry.metadata.variables.length < second.metadata.variables.length ||\n (entry.metadata.variables.length === second.metadata.variables.length &&\n entry.metadata.cardinality.value < second.metadata.cardinality.value))))) {\n second = entry;\n secondIndex = i;\n secondSharedVariables = sharedVariables;\n }\n }\n\n if (secondSharedVariables === 0) {\n return failTest(`Actor ${this.name} can only join with common variables`);\n }\n\n const remaining = entriesSorted;\n remaining.splice(secondIndex, 1);\n return passTest({ first, second: second!, remaining });\n }\n\n public async getOutput(action: IActionRdfJoin): Promise<IActorRdfJoinOutputInner> {\n const dataFactory: ComunicaDataFactory = action.context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new AlgebraFactory(dataFactory);\n\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const entriesUnsorted = await ActorRdfJoin.getEntriesWithMetadatas([ ...action.entries ]);\n const { first, second: secondIn, remaining: remainingIn } = (await this.sortJoinEntries(\n entriesUnsorted,\n action.context,\n )).getOrThrow();\n\n // Clone first stream, because we will use it twice\n const smallestStream1 = first.output.bindingsStream;\n first.output.bindingsStream = smallestStream1.clone();\n\n // Project the first stream on common variables, and filter out duplicates\n // The common variables array is guaranteed to be non-empty, due to the way the test of this actor is implemented.\n const commonVariables = first.metadata.variables\n .filter(variableFirst => secondIn.metadata.variables\n .some(variableSecond => variableFirst.variable.equals(variableSecond.variable)));\n const hashes: Record<string, boolean> = {};\n const smallestStream1Projected: BindingsStream = smallestStream1.clone()\n .map(binding => binding.filter((value, key) =>\n commonVariables.some(commonVariable => commonVariable.variable.equals(key))))\n .filter((binding) => {\n const hash: string = bindingsToString(binding);\n return !(hash in hashes) && (hashes[hash] = true);\n });\n\n // Slice the first stream into chunks according to the block size, so we avoid blocking too long.\n const chunkedStreams: AsyncIterator<AsyncIterator<RDF.Bindings>> = new ChunkedIterator(\n smallestStream1Projected,\n this.blockSize,\n { autoStart: false },\n );\n\n // Push down bindings of first stream when querying for second stream\n const sourceWrapper = <IQuerySourceWrapper> getOperationSource(secondIn.operation);\n const secondStream = new UnionIterator(chunkedStreams.map(chunk => sourceWrapper.source.queryBindings(\n secondIn.operation,\n sourceWrapper.context ? action.context.merge(sourceWrapper.context) : action.context,\n { filterBindings: { bindings: chunk, metadata: first.metadata }},\n )));\n const second: IJoinEntry = {\n output: {\n type: 'bindings',\n bindingsStream: secondStream,\n metadata: secondIn.output.metadata,\n },\n operation: secondIn.operation,\n operationModified: true,\n };\n\n // Destroy the unused original second stream\n secondIn.output.bindingsStream.destroy();\n\n // Join the two selected streams\n const joinedEntry: IJoinEntry = {\n output: getSafeBindings(await this.mediatorJoin\n .mediate({\n type: action.type,\n entries: [ first, second ],\n context: action.context.set(KeysRdfJoin.lastPhysicalJoin, this.physicalName),\n })),\n operation: algebraFactory.createJoin([ first.operation, second.operation ], false),\n operationModified: true,\n };\n\n // And then join the result with the remaining streams\n const remaining: IJoinEntry[] = remainingIn;\n remaining.unshift(joinedEntry);\n\n return {\n result: await this.mediatorJoin.mediate({\n type: action.type,\n entries: remaining,\n context: action.context,\n }),\n physicalPlanMetadata: {\n firstIndex: entriesUnsorted.indexOf(first),\n secondIndex: entriesUnsorted.indexOf(secondIn),\n },\n };\n }\n\n public async getJoinCoefficients(\n action: IActionRdfJoin,\n sideData: IActorRdfJoinTestSideData,\n ): Promise<TestResult<IMediatorTypeJoinCoefficients, IActorRdfJoinTestSideData>> {\n let { metadatas } = sideData;\n\n // Avoid infinite recursion\n if (action.context.get(KeysRdfJoin.lastPhysicalJoin) === this.physicalName) {\n return failTest(`Actor ${this.name} can not be called recursively`);\n }\n\n metadatas = [ ...metadatas ];\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const sortedResult = await this.sortJoinEntries(action.entries\n .map((entry, i) => ({ ...entry, metadata: metadatas[i] })), action.context);\n if (sortedResult.isFailed()) {\n return sortedResult;\n }\n const { first, second, remaining } = sortedResult.get();\n\n // Only pass if the second entry accepts filterBindings\n const sourceWrapper: IQuerySourceWrapper | undefined = getOperationSource(second.operation);\n if (!sourceWrapper) {\n return failTest(`Actor ${this.name} can only process if entries[1] has a source`);\n }\n const testingOperation = second.operation;\n const selectorShape = await sourceWrapper.source.getSelectorShape(action.context);\n const wildcardAcceptAllExtensionFunctions = action.context.get(KeysInitQuery.extensionFunctionsAlwaysPushdown);\n if (!doesShapeAcceptOperation(selectorShape, testingOperation, {\n filterBindings: true,\n wildcardAcceptAllExtensionFunctions,\n })) {\n return failTest(`Actor ${this.name} can only process if entries[1] accept filterBindings`);\n }\n\n // Determine cost coefficients\n metadatas = [ first.metadata, second.metadata, ...remaining.map(remain => remain.metadata) ];\n const requestInitialTimes = ActorRdfJoin.getRequestInitialTimes(metadatas);\n const requestItemTimes = ActorRdfJoin.getRequestItemTimes(metadatas);\n const { selectivity } = await this.mediatorJoinSelectivity.mediate({\n entries: [ first, second ],\n context: action.context,\n });\n const cardinalityRemaining = remaining\n .reduce((mul, remain) => mul * remain.metadata.cardinality.value * this.selectivityModifier, 1);\n\n return passTestWithSideData({\n iterations: selectivity * this.selectivityModifier *\n second.metadata.cardinality.value * cardinalityRemaining,\n persistedItems: first.metadata.cardinality.value,\n blockingItems: first.metadata.cardinality.value,\n requestTime: requestInitialTimes[0] + metadatas[0].cardinality.value * requestItemTimes[0] +\n requestInitialTimes[1] + cardinalityRemaining * requestItemTimes[1],\n }, sideData);\n }\n}\n\nexport interface IActorRdfJoinMultiSmallestFilterBindingsArgs extends IActorRdfJoinArgs {\n /**\n * Multiplier for selectivity values\n * @range {double}\n * @default {0.0001}\n */\n selectivityModifier: number;\n /**\n * The maximum amount of bindings to send to the source per block.\n * @default {64}\n */\n blockSize: number;\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"]}
1
+ {"version":3,"file":"ActorRdfJoinMultiSmallestFilterBindings.js","sourceRoot":"","sources":["ActorRdfJoinMultiSmallestFilterBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IActionRdfJoin,\n IActorRdfJoinArgs,\n MediatorRdfJoin,\n IActorRdfJoinOutputInner,\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, KeysRdfJoin } from '@comunica/context-entries';\nimport type { TestResult } from '@comunica/core';\nimport { passTestWithSideData, failTest, passTest } from '@comunica/core';\nimport type { IMediatorTypeJoinCoefficients } from '@comunica/mediatortype-join-coefficients';\nimport type {\n BindingsStream,\n ComunicaDataFactory,\n IActionContext,\n IJoinEntry,\n IJoinEntryWithMetadata,\n IQuerySourceWrapper,\n} from '@comunica/types';\nimport { AlgebraFactory } from '@comunica/utils-algebra';\nimport { bindingsToString } from '@comunica/utils-bindings-factory';\nimport { ChunkedIterator } from '@comunica/utils-iterator';\nimport { doesShapeAcceptOperation, getOperationSource, getSafeBindings } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { UnionIterator } from 'asynciterator';\n\n/**\n * A comunica Inner Multi Smallest Filter Bindings RDF Join Actor.\n */\nexport class ActorRdfJoinMultiSmallestFilterBindings extends ActorRdfJoin {\n public readonly selectivityModifier: number;\n public readonly blockSize: number;\n public readonly mediatorJoinEntriesSort: MediatorRdfJoinEntriesSort;\n public readonly mediatorJoin: MediatorRdfJoin;\n\n public constructor(args: IActorRdfJoinMultiSmallestFilterBindingsArgs) {\n super(args, {\n logicalType: 'inner',\n physicalName: 'multi-smallest-filter-bindings',\n limitEntries: 2,\n limitEntriesMin: true,\n isLeaf: false,\n });\n this.selectivityModifier = args.selectivityModifier;\n this.blockSize = args.blockSize;\n this.mediatorJoinEntriesSort = args.mediatorJoinEntriesSort;\n this.mediatorJoin = args.mediatorJoin;\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<TestResult<{\n first: IJoinEntryWithMetadata;\n second: IJoinEntryWithMetadata;\n remaining: IJoinEntryWithMetadata[];\n }>> {\n let { entries: entriesSorted } = await this.mediatorJoinEntriesSort.mediate({ entries, context });\n\n // Prioritize entries with modified operations, so these are not re-executed\n entriesSorted = entriesSorted.sort((entryLeft, entryRight) => {\n if (entryLeft.operationModified && !entryRight.operationModified) {\n return -1;\n }\n return 0;\n });\n\n const first = entriesSorted.splice(0, 1)[0];\n\n // Let second entry first be prioritized for sharing as many variables with first as possible,\n // then having the fewest variables,\n // and then having the lowest cardinality.\n let second: IJoinEntryWithMetadata | undefined;\n let secondIndex = -1;\n let secondSharedVariables = 0;\n for (const [ i, entry ] of entriesSorted.entries()) {\n const sharedVariables = first.metadata.variables\n .filter(variableFirst => entry.metadata.variables\n .some(variableSecond => variableFirst.variable.equals(variableSecond.variable))).length;\n if (!second || (sharedVariables > secondSharedVariables ||\n (sharedVariables === secondSharedVariables &&\n (entry.metadata.variables.length < second.metadata.variables.length ||\n (entry.metadata.variables.length === second.metadata.variables.length &&\n entry.metadata.cardinality.value < second.metadata.cardinality.value))))) {\n second = entry;\n secondIndex = i;\n secondSharedVariables = sharedVariables;\n }\n }\n\n if (secondSharedVariables === 0) {\n return failTest(`Actor ${this.name} can only join with common variables`);\n }\n\n const remaining = entriesSorted;\n remaining.splice(secondIndex, 1);\n return passTest({ first, second: second!, remaining });\n }\n\n public async getOutput(action: IActionRdfJoin): Promise<IActorRdfJoinOutputInner> {\n const dataFactory: ComunicaDataFactory = action.context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new AlgebraFactory(dataFactory);\n\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const entriesUnsorted = await ActorRdfJoin.getEntriesWithMetadatas([ ...action.entries ]);\n const { first, second: secondIn, remaining: remainingIn } = (await this.sortJoinEntries(\n entriesUnsorted,\n action.context,\n )).getOrThrow();\n\n // Clone first stream, because we will use it twice\n const smallestStream1 = first.output.bindingsStream;\n first.output.bindingsStream = smallestStream1.clone();\n\n // Project the first stream on common variables, and filter out duplicates\n // The common variables array is guaranteed to be non-empty, due to the way the test of this actor is implemented.\n const commonVariables = first.metadata.variables\n .filter(variableFirst => secondIn.metadata.variables\n .some(variableSecond => variableFirst.variable.equals(variableSecond.variable)));\n const hashes: Record<string, boolean> = {};\n const smallestStream1Projected: BindingsStream = smallestStream1.clone()\n .map(binding => binding.filter((value, key) =>\n commonVariables.some(commonVariable => commonVariable.variable.equals(key))))\n .filter((binding) => {\n const hash: string = bindingsToString(binding);\n return !(hash in hashes) && (hashes[hash] = true);\n });\n\n // Slice the first stream into chunks according to the block size, so we avoid blocking too long.\n const chunkedStreams: AsyncIterator<AsyncIterator<RDF.Bindings>> = new ChunkedIterator(\n smallestStream1Projected,\n this.blockSize,\n { autoStart: false },\n );\n\n // Push down bindings of first stream when querying for second stream\n const sourceWrapper = <IQuerySourceWrapper> getOperationSource(secondIn.operation);\n const secondStream = new UnionIterator(chunkedStreams.map(chunk => sourceWrapper.source.queryBindings(\n secondIn.operation,\n sourceWrapper.context ? action.context.merge(sourceWrapper.context) : action.context,\n { filterBindings: { bindings: chunk, metadata: first.metadata }},\n )));\n const second: IJoinEntry = {\n output: {\n type: 'bindings',\n bindingsStream: secondStream,\n metadata: secondIn.output.metadata,\n },\n operation: secondIn.operation,\n operationModified: true,\n };\n\n // Destroy the unused original second stream\n secondIn.output.bindingsStream.destroy();\n\n // Join the two selected streams\n const joinedEntry: IJoinEntry = {\n output: getSafeBindings(await this.mediatorJoin\n .mediate({\n type: action.type,\n entries: [ first, second ],\n context: action.context.set(KeysRdfJoin.lastPhysicalJoin, this.physicalName),\n })),\n operation: algebraFactory.createJoin([ first.operation, second.operation ], false),\n operationModified: true,\n };\n\n // And then join the result with the remaining streams\n const remaining: IJoinEntry[] = remainingIn;\n remaining.unshift(joinedEntry);\n\n return {\n result: await this.mediatorJoin.mediate({\n type: action.type,\n entries: remaining,\n context: action.context,\n }),\n physicalPlanMetadata: {\n firstIndex: entriesUnsorted.indexOf(first),\n secondIndex: entriesUnsorted.indexOf(secondIn),\n },\n };\n }\n\n public async getJoinCoefficients(\n action: IActionRdfJoin,\n sideData: IActorRdfJoinTestSideData,\n ): Promise<TestResult<IMediatorTypeJoinCoefficients, IActorRdfJoinTestSideData>> {\n let { metadatas } = sideData;\n\n // Avoid infinite recursion\n if (action.context.get(KeysRdfJoin.lastPhysicalJoin) === this.physicalName) {\n return failTest(`Actor ${this.name} can not be called recursively`);\n }\n\n metadatas = [ ...metadatas ];\n // Determine the two smallest streams by sorting (e.g. via cardinality)\n const sortedResult = await this.sortJoinEntries(action.entries\n .map((entry, i) => ({ ...entry, metadata: metadatas[i] })), action.context);\n if (sortedResult.isFailed()) {\n return sortedResult;\n }\n const { first, second, remaining } = sortedResult.get();\n\n // Only pass if the second entry accepts filterBindings\n const sourceWrapper: IQuerySourceWrapper | undefined = getOperationSource(second.operation);\n if (!sourceWrapper) {\n return failTest(`Actor ${this.name} can only process if entries[1] has a source`);\n }\n const testingOperation = second.operation;\n const selectorShape = await sourceWrapper.source.getSelectorShape(action.context);\n const wildcardAcceptAllExtensionFunctions = action.context.get(KeysInitQuery.extensionFunctionsAlwaysPushdown);\n if (!doesShapeAcceptOperation(selectorShape, testingOperation, {\n filterBindings: true,\n wildcardAcceptAllExtensionFunctions,\n })) {\n return failTest(`Actor ${this.name} can only process if entries[1] accept filterBindings`);\n }\n\n // Determine cost coefficients\n metadatas = [ first.metadata, second.metadata, ...remaining.map(remain => remain.metadata) ];\n const requestInitialTimes = ActorRdfJoin.getRequestInitialTimes(metadatas);\n const requestItemTimes = ActorRdfJoin.getRequestItemTimes(metadatas);\n const { selectivity } = await this.mediatorJoinSelectivity.mediate({\n entries: [ first, second ],\n context: action.context,\n });\n const cardinalityRemaining = remaining\n .reduce((mul, remain) => mul * remain.metadata.cardinality.value * this.selectivityModifier, 1);\n\n return passTestWithSideData({\n iterations: selectivity * this.selectivityModifier *\n second.metadata.cardinality.value * cardinalityRemaining,\n persistedItems: first.metadata.cardinality.value,\n blockingItems: first.metadata.cardinality.value,\n requestTime: requestInitialTimes[0] + metadatas[0].cardinality.value * requestItemTimes[0] +\n requestInitialTimes[1] + cardinalityRemaining * requestItemTimes[1],\n }, sideData);\n }\n}\n\nexport interface IActorRdfJoinMultiSmallestFilterBindingsArgs extends IActorRdfJoinArgs {\n /**\n * Multiplier for selectivity values\n * @range {double}\n * @default {0.0001}\n */\n selectivityModifier: number;\n /**\n * The maximum amount of bindings to send to the source per block.\n * @default {64}\n */\n blockSize: number;\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings",
3
- "version": "4.4.2-alpha.49.0",
3
+ "version": "5.0.0",
4
4
  "description": "A inner-multi-smallest-filter-bindings rdf-join actor",
5
5
  "lsd:module": true,
6
6
  "license": "MIT",
@@ -41,17 +41,17 @@
41
41
  "build:components": "componentsjs-generator"
42
42
  },
43
43
  "dependencies": {
44
- "@comunica/bus-rdf-join": "4.4.2-alpha.49.0",
45
- "@comunica/bus-rdf-join-entries-sort": "4.4.2-alpha.49.0",
46
- "@comunica/context-entries": "4.4.2-alpha.49.0",
47
- "@comunica/core": "4.4.2-alpha.49.0",
48
- "@comunica/mediatortype-join-coefficients": "4.4.2-alpha.49.0",
49
- "@comunica/types": "4.4.2-alpha.49.0",
50
- "@comunica/utils-algebra": "4.4.2-alpha.49.0",
51
- "@comunica/utils-bindings-factory": "4.4.2-alpha.49.0",
52
- "@comunica/utils-iterator": "4.4.2-alpha.49.0",
53
- "@comunica/utils-query-operation": "4.4.2-alpha.49.0",
44
+ "@comunica/bus-rdf-join": "^5.0.0",
45
+ "@comunica/bus-rdf-join-entries-sort": "^5.0.0",
46
+ "@comunica/context-entries": "^5.0.0",
47
+ "@comunica/core": "^5.0.0",
48
+ "@comunica/mediatortype-join-coefficients": "^5.0.0",
49
+ "@comunica/types": "^5.0.0",
50
+ "@comunica/utils-algebra": "^5.0.0",
51
+ "@comunica/utils-bindings-factory": "^5.0.0",
52
+ "@comunica/utils-iterator": "^5.0.0",
53
+ "@comunica/utils-query-operation": "^5.0.0",
54
54
  "asynciterator": "^3.10.0"
55
55
  },
56
- "gitHead": "ef6f96cfd8faf7c37955bb7e0fe9f6fc6a994bdf"
56
+ "gitHead": "0b1756fdb9bef014133432489627c1bd71779bd0"
57
57
  }