@comunica/actor-query-operation-union 2.6.8 → 2.6.11-alpha.40.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.
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActorQueryOperationUnion = void 0;
4
4
  const bus_query_operation_1 = require("@comunica/bus-query-operation");
5
+ const metadata_1 = require("@comunica/metadata");
5
6
  const asynciterator_1 = require("asynciterator");
6
7
  const rdf_terms_1 = require("rdf-terms");
7
8
  /**
@@ -45,9 +46,15 @@ class ActorQueryOperationUnion extends bus_query_operation_1.ActorQueryOperation
45
46
  }
46
47
  }
47
48
  const metadataBase = {
49
+ state: new metadata_1.MetadataValidationState(),
48
50
  cardinality,
49
51
  canContainUndefs: metadatas.some(metadata => metadata.canContainUndefs),
50
52
  };
53
+ // Propagate metadata invalidations
54
+ const invalidateListener = () => metadataBase.state.invalidate();
55
+ for (const metadata of metadatas) {
56
+ metadata.state.addInvalidateListener(invalidateListener);
57
+ }
51
58
  // Union variables
52
59
  if (bindings) {
53
60
  metadataBase.variables = ActorQueryOperationUnion.unionVariables(metadatas.map(metadata => metadata.variables));
@@ -1 +1 @@
1
- {"version":3,"file":"ActorQueryOperationUnion.js","sourceRoot":"","sources":["ActorQueryOperationUnion.ts"],"names":[],"mappings":";;;AACA,uEAGuC;AAQvC,iDAA8C;AAC9C,yCAAsC;AAGtC;;GAEG;AACH,MAAa,wBAAyB,SAAQ,sDAA+C;IAC3F,YAAmB,IAA2C;QAC5D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,cAAc,CAAC,SAA2B;QACtD,OAAO,IAAA,qBAAS,EAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,aAAa,CAGzB,SAAc,EAAE,QAAkB;QAClC,oBAAoB;QACpB,MAAM,WAAW,GAA+B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC5E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC7E,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,EAAE;gBAClC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;oBAC5C,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;iBAC/B;gBACD,WAAW,CAAC,KAAK,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;aACjD;iBAAM;gBACL,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;gBAC9B,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBAC7C,MAAM;aACP;SACF;QAED,MAAM,YAAY,GAAkB;YAClC,WAAW;YACX,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxE,CAAC;QAEF,kBAAkB;QAClB,IAAI,QAAQ,EAAE;YACZ,YAAY,CAAC,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAChH,OAAW,YAAY,CAAC;SACzB;QACD,OAAW,YAAY,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,SAAwB,EAAE,OAAuB;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,SAAwB,EAAE,OAAuB;QAEzE,MAAM,OAAO,GAAoC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;aAChF,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;aAChG,GAAG,CAAC,yCAAmB,CAAC,eAAe,CAAC,CAAC;QAE5C,MAAM,cAAc,GAAmB,IAAI,6BAAa,CAAC,OAAO,CAAC,GAAG,CAClE,CAAC,MAAqC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CACjE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzB,MAAM,QAAQ,GAAoC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC1G,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IACxD,CAAC;CACF;AAzED,4DAyEC","sourcesContent":["import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperation,\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport type { IActorTest } from '@comunica/core';\nimport type { BindingsStream,\n IQueryOperationResultBindings,\n IActionContext,\n IQueryOperationResult,\n MetadataBindings, MetadataQuads } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { UnionIterator } from 'asynciterator';\nimport { uniqTerms } from 'rdf-terms';\nimport type { Algebra } from 'sparqlalgebrajs';\n\n/**\n * A comunica Union Query Operation Actor.\n */\nexport class ActorQueryOperationUnion extends ActorQueryOperationTypedMediated<Algebra.Union> {\n public constructor(args: IActorQueryOperationTypedMediatedArgs) {\n super(args, 'union');\n }\n\n /**\n * Takes the union of the given double array variables.\n * Uniqueness is guaranteed.\n * @param {string[][]} variables Double array of variables to take the union of.\n * @return {string[]} The union of the given variables.\n */\n public static unionVariables(variables: RDF.Variable[][]): RDF.Variable[] {\n return uniqTerms(variables.flat());\n }\n\n /**\n * Takes the union of the given metadata array.\n * It will ensure that the cardinality metadata value is properly calculated.\n * @param {{[p: string]: any}[]} metadatas Array of metadata.\n * @param bindings If the union of the variables field should also be taken.\n * @return {{[p: string]: any}} Union of the metadata.\n */\n public static unionMetadata<\n Bindings extends boolean,\n M extends (Bindings extends true ? MetadataBindings : MetadataQuads)\n >(metadatas: M[], bindings: Bindings): M {\n // Union cardinality\n const cardinality: RDF.QueryResultCardinality = { type: 'exact', value: 0 };\n for (const metadata of metadatas) {\n if ((metadata.cardinality.value && Number.isFinite(metadata.cardinality.value)) ||\n metadata.cardinality.value === 0) {\n if (metadata.cardinality.type === 'estimate') {\n cardinality.type = 'estimate';\n }\n cardinality.value += metadata.cardinality.value;\n } else {\n cardinality.type = 'estimate';\n cardinality.value = Number.POSITIVE_INFINITY;\n break;\n }\n }\n\n const metadataBase: MetadataQuads = {\n cardinality,\n canContainUndefs: metadatas.some(metadata => metadata.canContainUndefs),\n };\n\n // Union variables\n if (bindings) {\n metadataBase.variables = ActorQueryOperationUnion.unionVariables(metadatas.map(metadata => metadata.variables));\n return <M> metadataBase;\n }\n return <M> metadataBase;\n }\n\n public async testOperation(operation: Algebra.Union, context: IActionContext): Promise<IActorTest> {\n return true;\n }\n\n public async runOperation(operation: Algebra.Union, context: IActionContext):\n Promise<IQueryOperationResult> {\n const outputs: IQueryOperationResultBindings[] = (await Promise.all(operation.input\n .map(subOperation => this.mediatorQueryOperation.mediate({ operation: subOperation, context }))))\n .map(ActorQueryOperation.getSafeBindings);\n\n const bindingsStream: BindingsStream = new UnionIterator(outputs.map(\n (output: IQueryOperationResultBindings) => output.bindingsStream,\n ), { autoStart: false });\n\n const metadata: () => Promise<MetadataBindings> = () => Promise.all(outputs.map(output => output.metadata()))\n .then(subMeta => ActorQueryOperationUnion.unionMetadata(subMeta, true));\n return { type: 'bindings', bindingsStream, metadata };\n }\n}\n"]}
1
+ {"version":3,"file":"ActorQueryOperationUnion.js","sourceRoot":"","sources":["ActorQueryOperationUnion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperation,\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport type { IActorTest } from '@comunica/core';\nimport { MetadataValidationState } from '@comunica/metadata';\nimport type { BindingsStream,\n IQueryOperationResultBindings,\n IActionContext,\n IQueryOperationResult,\n MetadataBindings, MetadataQuads } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { UnionIterator } from 'asynciterator';\nimport { uniqTerms } from 'rdf-terms';\nimport type { Algebra } from 'sparqlalgebrajs';\n\n/**\n * A comunica Union Query Operation Actor.\n */\nexport class ActorQueryOperationUnion extends ActorQueryOperationTypedMediated<Algebra.Union> {\n public constructor(args: IActorQueryOperationTypedMediatedArgs) {\n super(args, 'union');\n }\n\n /**\n * Takes the union of the given double array variables.\n * Uniqueness is guaranteed.\n * @param {string[][]} variables Double array of variables to take the union of.\n * @return {string[]} The union of the given variables.\n */\n public static unionVariables(variables: RDF.Variable[][]): RDF.Variable[] {\n return uniqTerms(variables.flat());\n }\n\n /**\n * Takes the union of the given metadata array.\n * It will ensure that the cardinality metadata value is properly calculated.\n * @param {{[p: string]: any}[]} metadatas Array of metadata.\n * @param bindings If the union of the variables field should also be taken.\n * @return {{[p: string]: any}} Union of the metadata.\n */\n public static unionMetadata<\n Bindings extends boolean,\n M extends (Bindings extends true ? MetadataBindings : MetadataQuads)\n >(metadatas: M[], bindings: Bindings): M {\n // Union cardinality\n const cardinality: RDF.QueryResultCardinality = { type: 'exact', value: 0 };\n for (const metadata of metadatas) {\n if ((metadata.cardinality.value && Number.isFinite(metadata.cardinality.value)) ||\n metadata.cardinality.value === 0) {\n if (metadata.cardinality.type === 'estimate') {\n cardinality.type = 'estimate';\n }\n cardinality.value += metadata.cardinality.value;\n } else {\n cardinality.type = 'estimate';\n cardinality.value = Number.POSITIVE_INFINITY;\n break;\n }\n }\n\n const metadataBase: MetadataQuads = {\n state: new MetadataValidationState(),\n cardinality,\n canContainUndefs: metadatas.some(metadata => metadata.canContainUndefs),\n };\n\n // Propagate metadata invalidations\n const invalidateListener = (): void => metadataBase.state.invalidate();\n for (const metadata of metadatas) {\n metadata.state.addInvalidateListener(invalidateListener);\n }\n\n // Union variables\n if (bindings) {\n metadataBase.variables = ActorQueryOperationUnion.unionVariables(metadatas.map(metadata => metadata.variables));\n return <M> metadataBase;\n }\n return <M> metadataBase;\n }\n\n public async testOperation(operation: Algebra.Union, context: IActionContext): Promise<IActorTest> {\n return true;\n }\n\n public async runOperation(operation: Algebra.Union, context: IActionContext):\n Promise<IQueryOperationResult> {\n const outputs: IQueryOperationResultBindings[] = (await Promise.all(operation.input\n .map(subOperation => this.mediatorQueryOperation.mediate({ operation: subOperation, context }))))\n .map(ActorQueryOperation.getSafeBindings);\n\n const bindingsStream: BindingsStream = new UnionIterator(outputs.map(\n (output: IQueryOperationResultBindings) => output.bindingsStream,\n ), { autoStart: false });\n\n const metadata: () => Promise<MetadataBindings> = () => Promise.all(outputs.map(output => output.metadata()))\n .then(subMeta => ActorQueryOperationUnion.unionMetadata(subMeta, true));\n return { type: 'bindings', bindingsStream, metadata };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-query-operation-union",
3
- "version": "2.6.8",
3
+ "version": "2.6.11-alpha.40.0",
4
4
  "description": "A union query-operation actor",
5
5
  "lsd:module": true,
6
6
  "main": "lib/index.js",
@@ -32,9 +32,10 @@
32
32
  "lib/**/*.js.map"
33
33
  ],
34
34
  "dependencies": {
35
- "@comunica/bus-query-operation": "^2.6.8",
36
- "@comunica/core": "^2.6.8",
37
- "@comunica/types": "^2.6.8",
35
+ "@comunica/bus-query-operation": "2.6.11-alpha.40.0",
36
+ "@comunica/core": "2.6.11-alpha.40.0",
37
+ "@comunica/metadata": "2.6.11-alpha.40.0",
38
+ "@comunica/types": "2.6.11-alpha.40.0",
38
39
  "@rdfjs/types": "*",
39
40
  "asynciterator": "^3.8.0",
40
41
  "rdf-terms": "^1.9.1",
@@ -45,5 +46,5 @@
45
46
  "build:ts": "node \"../../node_modules/typescript/bin/tsc\"",
46
47
  "build:components": "componentsjs-generator"
47
48
  },
48
- "gitHead": "2fa7b3327a7be26a69a89a006f04e057ae930d03"
49
+ "gitHead": "b4e12e9d015d4bdb6b2668f3065826eb8aea3dc4"
49
50
  }