@comunica/actor-init-query 2.5.3-alpha.37.0 → 2.5.3-alpha.39.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.
@@ -154,6 +154,7 @@
154
154
  "readOnly": "@comunica/bus-query-operation:readOnly",
155
155
  "extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
156
156
  "extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
157
+ "functionArgumentsCache": "@comunica/actor-init-query:functionArgumentsCache",
157
158
  "explain": "@comunica/actor-init-query:explain",
158
159
  "unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
159
160
  "localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
@@ -155,6 +155,7 @@
155
155
  "readOnly": "@comunica/bus-query-operation:readOnly",
156
156
  "extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
157
157
  "extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
158
+ "functionArgumentsCache": "@comunica/actor-init-query:functionArgumentsCache",
158
159
  "explain": "@comunica/actor-init-query:explain",
159
160
  "unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
160
161
  "localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
@@ -36,6 +36,10 @@
36
36
  "@id": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase__member_actorInitQuery",
37
37
  "memberFieldName": "actorInitQuery"
38
38
  },
39
+ {
40
+ "@id": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase__member_defaultFunctionArgumentsCache",
41
+ "memberFieldName": "defaultFunctionArgumentsCache"
42
+ },
39
43
  {
40
44
  "@id": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase__member_constructor",
41
45
  "memberFieldName": "constructor"
@@ -116,6 +116,7 @@ export interface IActorInitQueryBaseArgs<QueryContext extends IQueryContextCommo
116
116
  * "readOnly": "@comunica/bus-query-operation:readOnly",
117
117
  * "extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
118
118
  * "extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
119
+ * "functionArgumentsCache": "@comunica/actor-init-query:functionArgumentsCache",
119
120
  * "explain": "@comunica/actor-init-query:explain",
120
121
  * "unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
121
122
  * "localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
@@ -1 +1 @@
1
- {"version":3,"file":"ActorInitQueryBase.js","sourceRoot":"","sources":["ActorInitQueryBase.ts"],"names":[],"mappings":";;;AAGA,iDAA+C;AAU/C;;GAEG;AACH,MAAa,kBACX,SAAQ,oBAAS;IAmBjB;;;;;;OAMG;IACH,YAAmB,IAA6B;QAC9C,sCAAsC;QACtC,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YAC/D,oFAAoF;YACpF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACpG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;aACvF;YACD,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,kBAAkB,EAAE,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAmB;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,MAAmB;QAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;CACF;AA9CD,gDA8CC","sourcesContent":["import type { MediatorContextPreprocess } from '@comunica/bus-context-preprocess';\nimport type { MediatorHttpInvalidate } from '@comunica/bus-http-invalidate';\nimport type { IActionInit, IActorInitArgs, IActorOutputInit } from '@comunica/bus-init';\nimport { ActorInit } from '@comunica/bus-init';\nimport type { MediatorOptimizeQueryOperation } from '@comunica/bus-optimize-query-operation';\nimport type { MediatorQueryOperation } from '@comunica/bus-query-operation';\nimport type { MediatorQueryParse } from '@comunica/bus-query-parse';\nimport type { MediatorQueryResultSerializeHandle,\n MediatorQueryResultSerializeMediaTypes,\n MediatorQueryResultSerializeMediaTypeFormats } from '@comunica/bus-query-result-serialize';\nimport type { IActorTest } from '@comunica/core';\nimport type { IQueryContextCommon, Logger } from '@comunica/types';\n\n/**\n * A browser-safe comunica Query Init Actor.\n */\nexport class ActorInitQueryBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends ActorInit implements IActorInitQueryBaseArgs<QueryContext> {\n public readonly mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n public readonly mediatorQueryOperation: MediatorQueryOperation;\n public readonly mediatorQueryParse: MediatorQueryParse;\n public readonly mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n public readonly mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n public readonly mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n public readonly mediatorContextPreprocess: MediatorContextPreprocess;\n public readonly mediatorHttpInvalidate: MediatorHttpInvalidate;\n\n public readonly logger: Logger;\n public readonly queryString?: string;\n public readonly defaultQueryInputFormat?: string;\n public readonly context?: string;\n public readonly contextKeyShortcuts: Record<string, string> & Partial<Record<keyof QueryContext, string>>;\n /** Array of `contextKeyShortcuts` appended to `contextKeyShortcuts` during construction. */\n public readonly contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n\n /**\n * Create new ActorInitQueryBase object.\n * @param args.contextKeyShortcutsExtensions Array of `contextKeyShortcuts` that are merged\n * with the `contextKeyShortcuts` field. This allows adding shortcuts to the defaults.\n * @throws When duplicate keys are present in `args.contextKeyShortcuts`\n * and `args.contextKeyShortcutsExtensions`.\n */\n public constructor(args: IActorInitQueryBaseArgs) {\n // Add additional contextKeyShortcuts.\n args.contextKeyShortcutsExtensions?.forEach(extensionShortcuts => {\n // Throw, if there are duplicate keys that are to be added to `contextKeyShortcuts`.\n if (Object.keys(args.contextKeyShortcuts).some(key => Object.keys(extensionShortcuts).includes(key))) {\n throw new Error('Duplicate keys found while adding `contextKeyShortcutsExtensions`.');\n }\n args.contextKeyShortcuts = { ...args.contextKeyShortcuts, ...extensionShortcuts };\n });\n super(args);\n }\n\n public async test(action: IActionInit): Promise<IActorTest> {\n return true;\n }\n\n public async run(action: IActionInit): Promise<IActorOutputInit> {\n throw new Error('ActorInitSparql#run is not supported in the browser.');\n }\n}\n\nexport interface IActorInitQueryBaseArgs<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends IActorInitArgs {\n /**\n * The query operation optimize mediator\n */\n mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n /**\n * The query operation mediator\n */\n mediatorQueryOperation: MediatorQueryOperation;\n /**\n * The query parse mediator\n */\n mediatorQueryParse: MediatorQueryParse;\n /**\n * The query serialize mediator\n */\n mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n /**\n * The query serialize media type combinator\n */\n mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n /**\n * The query serialize media type format combinator\n */\n mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n /**\n * The context processing combinator\n */\n mediatorContextPreprocess: MediatorContextPreprocess;\n /**\n * The HTTP cache invalidation mediator\n */\n mediatorHttpInvalidate: MediatorHttpInvalidate;\n /**\n * The logger of this actor\n * @default {a <npmd:@comunica/logger-void/^2.0.0/components/LoggerVoid.jsonld#LoggerVoid>}\n */\n logger: Logger;\n /**\n * A SPARQL query string\n */\n queryString?: string;\n /**\n * The default query input format\n * @default {sparql}\n */\n defaultQueryInputFormat?: string;\n /**\n * A JSON string of a query operation context\n */\n context?: string;\n /**\n * A record of context shortcuts to full context keys (as defined in @comunica/context-entries).\n * @range {json}\n * @default {{\n * \"source\": \"@comunica/bus-rdf-resolve-quad-pattern:source\",\n * \"sources\": \"@comunica/bus-rdf-resolve-quad-pattern:sources\",\n * \"destination\": \"@comunica/bus-rdf-update-quads:destination\",\n * \"initialBindings\": \"@comunica/actor-init-query:initialBindings\",\n * \"queryFormat\": \"@comunica/actor-init-query:queryFormat\",\n * \"baseIRI\": \"@comunica/actor-init-query:baseIRI\",\n * \"log\": \"@comunica/core:log\",\n * \"datetime\": \"@comunica/actor-http-memento:datetime\",\n * \"queryTimestamp\": \"@comunica/actor-init-query:queryTimestamp\",\n * \"httpProxyHandler\": \"@comunica/actor-http-proxy:httpProxyHandler\",\n * \"lenient\": \"@comunica/actor-init-query:lenient\",\n * \"httpIncludeCredentials\": \"@comunica/bus-http:include-credentials\",\n * \"httpAuth\": \"@comunica/bus-http:auth\",\n * \"httpTimeout\": \"@comunica/bus-http:http-timeout\",\n * \"httpBodyTimeout\": \"@comunica/bus-http:http-body-timeout\",\n * \"httpRetryCount\": \"@comunica/bus-http:http-retry-count\",\n * \"httpRetryDelay\": \"@comunica/bus-http:http-retry-delay\",\n * \"httpRetryOnServerError\": \"@comunica/bus-http:http-retry-on-server-error\",\n * \"fetch\": \"@comunica/bus-http:fetch\",\n * \"recoverBrokenLinks\": \"@comunica/bus-http-wayback:recover-broken-links\",\n * \"readOnly\": \"@comunica/bus-query-operation:readOnly\",\n * \"extensionFunctions\": \"@comunica/actor-init-query:extensionFunctions\",\n * \"extensionFunctionCreator\": \"@comunica/actor-init-query:extensionFunctionCreator\",\n * \"explain\": \"@comunica/actor-init-query:explain\",\n * \"unionDefaultGraph\": \"@comunica/bus-query-operation:unionDefaultGraph\",\n * \"localizeBlankNodes\": \"@comunica/actor-query-operation:localizeBlankNodes\"\n * }}\n */\n contextKeyShortcuts: Record<string, string> | Partial<Record<keyof QueryContext, string>>;\n /**\n * An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts`\n * (which are by default injected by component.js).\n *\n * The appending happens in the constructor call. Conflicting keys will cause an error.\n * If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows:\n * ```\n * public constructor(args: IActorInitQueryBaseArgs<QueryContext>) {\n * if (!args.contextKeyShortcutsExtensions) {\n * args.contextKeyShortcutsExtensions = [];\n * }\n * args.contextKeyShortcutsExtensions.push(addedShortcuts);\n *\n * super(args);\n * }\n * ```\n */\n contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n}\n"]}
1
+ {"version":3,"file":"ActorInitQueryBase.js","sourceRoot":"","sources":["ActorInitQueryBase.ts"],"names":[],"mappings":";;;AAGA,iDAA+C;AAU/C;;GAEG;AACH,MAAa,kBACX,SAAQ,oBAAS;IAmBjB;;;;;;OAMG;IACH,YAAmB,IAA6B;QAC9C,sCAAsC;QACtC,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YAC/D,oFAAoF;YACpF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACpG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;aACvF;YACD,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,kBAAkB,EAAE,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAmB;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,MAAmB;QAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;CACF;AA9CD,gDA8CC","sourcesContent":["import type { MediatorContextPreprocess } from '@comunica/bus-context-preprocess';\nimport type { MediatorHttpInvalidate } from '@comunica/bus-http-invalidate';\nimport type { IActionInit, IActorInitArgs, IActorOutputInit } from '@comunica/bus-init';\nimport { ActorInit } from '@comunica/bus-init';\nimport type { MediatorOptimizeQueryOperation } from '@comunica/bus-optimize-query-operation';\nimport type { MediatorQueryOperation } from '@comunica/bus-query-operation';\nimport type { MediatorQueryParse } from '@comunica/bus-query-parse';\nimport type { MediatorQueryResultSerializeHandle,\n MediatorQueryResultSerializeMediaTypes,\n MediatorQueryResultSerializeMediaTypeFormats } from '@comunica/bus-query-result-serialize';\nimport type { IActorTest } from '@comunica/core';\nimport type { IQueryContextCommon, Logger } from '@comunica/types';\n\n/**\n * A browser-safe comunica Query Init Actor.\n */\nexport class ActorInitQueryBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends ActorInit implements IActorInitQueryBaseArgs<QueryContext> {\n public readonly mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n public readonly mediatorQueryOperation: MediatorQueryOperation;\n public readonly mediatorQueryParse: MediatorQueryParse;\n public readonly mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n public readonly mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n public readonly mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n public readonly mediatorContextPreprocess: MediatorContextPreprocess;\n public readonly mediatorHttpInvalidate: MediatorHttpInvalidate;\n\n public readonly logger: Logger;\n public readonly queryString?: string;\n public readonly defaultQueryInputFormat?: string;\n public readonly context?: string;\n public readonly contextKeyShortcuts: Record<string, string> & Partial<Record<keyof QueryContext, string>>;\n /** Array of `contextKeyShortcuts` appended to `contextKeyShortcuts` during construction. */\n public readonly contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n\n /**\n * Create new ActorInitQueryBase object.\n * @param args.contextKeyShortcutsExtensions Array of `contextKeyShortcuts` that are merged\n * with the `contextKeyShortcuts` field. This allows adding shortcuts to the defaults.\n * @throws When duplicate keys are present in `args.contextKeyShortcuts`\n * and `args.contextKeyShortcutsExtensions`.\n */\n public constructor(args: IActorInitQueryBaseArgs) {\n // Add additional contextKeyShortcuts.\n args.contextKeyShortcutsExtensions?.forEach(extensionShortcuts => {\n // Throw, if there are duplicate keys that are to be added to `contextKeyShortcuts`.\n if (Object.keys(args.contextKeyShortcuts).some(key => Object.keys(extensionShortcuts).includes(key))) {\n throw new Error('Duplicate keys found while adding `contextKeyShortcutsExtensions`.');\n }\n args.contextKeyShortcuts = { ...args.contextKeyShortcuts, ...extensionShortcuts };\n });\n super(args);\n }\n\n public async test(action: IActionInit): Promise<IActorTest> {\n return true;\n }\n\n public async run(action: IActionInit): Promise<IActorOutputInit> {\n throw new Error('ActorInitSparql#run is not supported in the browser.');\n }\n}\n\nexport interface IActorInitQueryBaseArgs<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends IActorInitArgs {\n /**\n * The query operation optimize mediator\n */\n mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n /**\n * The query operation mediator\n */\n mediatorQueryOperation: MediatorQueryOperation;\n /**\n * The query parse mediator\n */\n mediatorQueryParse: MediatorQueryParse;\n /**\n * The query serialize mediator\n */\n mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n /**\n * The query serialize media type combinator\n */\n mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n /**\n * The query serialize media type format combinator\n */\n mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n /**\n * The context processing combinator\n */\n mediatorContextPreprocess: MediatorContextPreprocess;\n /**\n * The HTTP cache invalidation mediator\n */\n mediatorHttpInvalidate: MediatorHttpInvalidate;\n /**\n * The logger of this actor\n * @default {a <npmd:@comunica/logger-void/^2.0.0/components/LoggerVoid.jsonld#LoggerVoid>}\n */\n logger: Logger;\n /**\n * A SPARQL query string\n */\n queryString?: string;\n /**\n * The default query input format\n * @default {sparql}\n */\n defaultQueryInputFormat?: string;\n /**\n * A JSON string of a query operation context\n */\n context?: string;\n /**\n * A record of context shortcuts to full context keys (as defined in @comunica/context-entries).\n * @range {json}\n * @default {{\n * \"source\": \"@comunica/bus-rdf-resolve-quad-pattern:source\",\n * \"sources\": \"@comunica/bus-rdf-resolve-quad-pattern:sources\",\n * \"destination\": \"@comunica/bus-rdf-update-quads:destination\",\n * \"initialBindings\": \"@comunica/actor-init-query:initialBindings\",\n * \"queryFormat\": \"@comunica/actor-init-query:queryFormat\",\n * \"baseIRI\": \"@comunica/actor-init-query:baseIRI\",\n * \"log\": \"@comunica/core:log\",\n * \"datetime\": \"@comunica/actor-http-memento:datetime\",\n * \"queryTimestamp\": \"@comunica/actor-init-query:queryTimestamp\",\n * \"httpProxyHandler\": \"@comunica/actor-http-proxy:httpProxyHandler\",\n * \"lenient\": \"@comunica/actor-init-query:lenient\",\n * \"httpIncludeCredentials\": \"@comunica/bus-http:include-credentials\",\n * \"httpAuth\": \"@comunica/bus-http:auth\",\n * \"httpTimeout\": \"@comunica/bus-http:http-timeout\",\n * \"httpBodyTimeout\": \"@comunica/bus-http:http-body-timeout\",\n * \"httpRetryCount\": \"@comunica/bus-http:http-retry-count\",\n * \"httpRetryDelay\": \"@comunica/bus-http:http-retry-delay\",\n * \"httpRetryOnServerError\": \"@comunica/bus-http:http-retry-on-server-error\",\n * \"fetch\": \"@comunica/bus-http:fetch\",\n * \"recoverBrokenLinks\": \"@comunica/bus-http-wayback:recover-broken-links\",\n * \"readOnly\": \"@comunica/bus-query-operation:readOnly\",\n * \"extensionFunctions\": \"@comunica/actor-init-query:extensionFunctions\",\n * \"extensionFunctionCreator\": \"@comunica/actor-init-query:extensionFunctionCreator\",\n * \"functionArgumentsCache\": \"@comunica/actor-init-query:functionArgumentsCache\",\n * \"explain\": \"@comunica/actor-init-query:explain\",\n * \"unionDefaultGraph\": \"@comunica/bus-query-operation:unionDefaultGraph\",\n * \"localizeBlankNodes\": \"@comunica/actor-query-operation:localizeBlankNodes\"\n * }}\n */\n contextKeyShortcuts: Record<string, string> | Partial<Record<keyof QueryContext, string>>;\n /**\n * An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts`\n * (which are by default injected by component.js).\n *\n * The appending happens in the constructor call. Conflicting keys will cause an error.\n * If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows:\n * ```\n * public constructor(args: IActorInitQueryBaseArgs<QueryContext>) {\n * if (!args.contextKeyShortcutsExtensions) {\n * args.contextKeyShortcutsExtensions = [];\n * }\n * args.contextKeyShortcutsExtensions.push(addedShortcuts);\n *\n * super(args);\n * }\n * ```\n */\n contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n}\n"]}
@@ -8,6 +8,7 @@ import type { ActorInitQueryBase } from './ActorInitQueryBase';
8
8
  */
9
9
  export declare class QueryEngineBase<QueryContext extends IQueryContextCommon = IQueryContextCommon> implements IQueryEngine<QueryContext> {
10
10
  private readonly actorInitQuery;
11
+ private readonly defaultFunctionArgumentsCache;
11
12
  constructor(actorInitQuery: ActorInitQueryBase<QueryContext>);
12
13
  queryBindings<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<BindingsStream>;
13
14
  queryQuads<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>>;
@@ -11,6 +11,7 @@ const MemoryPhysicalQueryPlanLogger_1 = require("./MemoryPhysicalQueryPlanLogger
11
11
  class QueryEngineBase {
12
12
  constructor(actorInitQuery) {
13
13
  this.actorInitQuery = actorInitQuery;
14
+ this.defaultFunctionArgumentsCache = {};
14
15
  }
15
16
  async queryBindings(query, context) {
16
17
  return this.queryOfType(query, context, 'bindings');
@@ -88,7 +89,8 @@ class QueryEngineBase {
88
89
  .setDefault(context_entries_1.KeysInitQuery.queryTimestamp, new Date())
89
90
  .setDefault(context_entries_1.KeysRdfResolveQuadPattern.sourceIds, new Map())
90
91
  // Set the default logger if none is provided
91
- .setDefault(context_entries_1.KeysCore.log, this.actorInitQuery.logger);
92
+ .setDefault(context_entries_1.KeysCore.log, this.actorInitQuery.logger)
93
+ .setDefault(context_entries_1.KeysInitQuery.functionArgumentsCache, this.defaultFunctionArgumentsCache);
92
94
  // Pre-processing the context
93
95
  actionContext = (await this.actorInitQuery.mediatorContextPreprocess.mediate({ context: actionContext })).context;
94
96
  // Determine explain mode
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEngineBase.js","sourceRoot":"","sources":["QueryEngineBase.ts"],"names":[],"mappings":"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","sourcesContent":["import { materializeOperation } from '@comunica/bus-query-operation';\nimport type { IActionSparqlSerialize, IActorQueryResultSerializeOutput } from '@comunica/bus-query-result-serialize';\nimport { KeysCore, KeysInitQuery, KeysRdfResolveQuadPattern } from '@comunica/context-entries';\nimport { ActionContext } from '@comunica/core';\nimport type { IActionContext, IPhysicalQueryPlanLogger,\n IQueryOperationResult,\n IQueryEngine, IQueryExplained,\n QueryFormatType,\n QueryType, QueryExplainMode, BindingsStream,\n QueryAlgebraContext, QueryStringContext, IQueryBindingsEnhanced,\n IQueryQuadsEnhanced, QueryEnhanced, IQueryContextCommon } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport type { ActorInitQueryBase } from './ActorInitQueryBase';\nimport { MemoryPhysicalQueryPlanLogger } from './MemoryPhysicalQueryPlanLogger';\n\n/**\n * Base implementation of a Comunica query engine.\n */\nexport class QueryEngineBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\nimplements IQueryEngine<QueryContext> {\n private readonly actorInitQuery: ActorInitQueryBase;\n\n public constructor(actorInitQuery: ActorInitQueryBase<QueryContext>) {\n this.actorInitQuery = actorInitQuery;\n }\n\n public async queryBindings<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<BindingsStream> {\n return this.queryOfType<QueryFormatTypeInner, IQueryBindingsEnhanced>(query, context, 'bindings');\n }\n\n public async queryQuads<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>> {\n return this.queryOfType<QueryFormatTypeInner, IQueryQuadsEnhanced>(query, context, 'quads');\n }\n\n public async queryBoolean<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<boolean> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryBoolean>(query, context, 'boolean');\n }\n\n public async queryVoid<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<void> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryVoid>(query, context, 'void');\n }\n\n protected async queryOfType<QueryFormatTypeInner extends QueryFormatType, QueryTypeOut extends QueryEnhanced>(\n query: QueryFormatTypeInner,\n context: undefined | (QueryContext & QueryFormatTypeInner extends string ?\n QueryStringContext : QueryAlgebraContext),\n expectedType: QueryTypeOut['resultType'],\n ): Promise<ReturnType<QueryTypeOut['execute']>> {\n const result = await this.query<QueryFormatTypeInner>(query, context);\n if (result.resultType === expectedType) {\n return result.execute();\n }\n throw new Error(`Query result type '${expectedType}' was expected, while '${result.resultType}' was found.`);\n }\n\n /**\n * Evaluate the given query\n * @param query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType>} A promise that resolves to the query output.\n */\n public async query<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType> {\n const output = await this.queryOrExplain(query, context);\n if ('explain' in output) {\n throw new Error(`Tried to explain a query when in query-only mode`);\n }\n return output;\n }\n\n /**\n * Explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @param explainMode The explain mode.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async explain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n explainMode: QueryExplainMode,\n ): Promise<IQueryExplained> {\n context.explain = explainMode;\n const output = await this.queryOrExplain(query, context);\n return <IQueryExplained> output;\n }\n\n /**\n * Evaluate or explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async queryOrExplain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType | IQueryExplained> {\n context = context || <any>{};\n\n // Expand shortcuts\n for (const key in context) {\n if (this.actorInitQuery.contextKeyShortcuts[key]) {\n context[this.actorInitQuery.contextKeyShortcuts[key]] = context[key];\n delete context[key];\n }\n }\n\n // Prepare context\n let actionContext: IActionContext = new ActionContext(context);\n let queryFormat: RDF.QueryFormat = { language: 'sparql', version: '1.1' };\n if (actionContext.has(KeysInitQuery.queryFormat)) {\n queryFormat = actionContext.get(KeysInitQuery.queryFormat)!;\n actionContext = actionContext.delete(KeysInitQuery.queryFormat);\n if (queryFormat.language === 'graphql') {\n actionContext = actionContext.setDefault(KeysInitQuery.graphqlSingularizeVariables, {});\n }\n }\n const baseIRI: string | undefined = actionContext.get(KeysInitQuery.baseIRI);\n\n actionContext = actionContext\n .setDefault(KeysInitQuery.queryTimestamp, new Date())\n .setDefault(KeysRdfResolveQuadPattern.sourceIds, new Map())\n // Set the default logger if none is provided\n .setDefault(KeysCore.log, this.actorInitQuery.logger);\n\n // Pre-processing the context\n actionContext = (await this.actorInitQuery.mediatorContextPreprocess.mediate({ context: actionContext })).context;\n\n // Determine explain mode\n const explainMode: QueryExplainMode = actionContext.get(KeysInitQuery.explain)!;\n\n // Parse query\n let operation: Algebra.Operation;\n if (typeof query === 'string') {\n // Save the original query string in the context\n actionContext = actionContext.set(KeysInitQuery.queryString, query);\n\n const queryParseOutput = await this.actorInitQuery.mediatorQueryParse\n .mediate({ context: actionContext, query, queryFormat, baseIRI });\n operation = queryParseOutput.operation;\n // Update the baseIRI in the context if the query modified it.\n if (queryParseOutput.baseIRI) {\n actionContext = actionContext.set(KeysInitQuery.baseIRI, queryParseOutput.baseIRI);\n }\n } else {\n operation = query;\n }\n\n // Print parsed query\n if (explainMode === 'parsed') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Apply initial bindings in context\n if (actionContext.has(KeysInitQuery.initialBindings)) {\n operation = materializeOperation(operation, actionContext.get(KeysInitQuery.initialBindings)!);\n\n // Delete the query string from the context, since our initial query might have changed\n actionContext = actionContext.delete(KeysInitQuery.queryString);\n }\n\n // Optimize the query operation\n const mediatorResult = await this.actorInitQuery.mediatorOptimizeQueryOperation\n .mediate({ context: actionContext, operation });\n operation = mediatorResult.operation;\n actionContext = mediatorResult.context || actionContext;\n\n // Print logical query plan\n if (explainMode === 'logical') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Save original query in context\n actionContext = actionContext.set(KeysInitQuery.query, operation);\n\n // If we need a physical query plan, store a physical query plan logger in the context, and collect it after exec\n let physicalQueryPlanLogger: IPhysicalQueryPlanLogger | undefined;\n if (explainMode === 'physical') {\n physicalQueryPlanLogger = new MemoryPhysicalQueryPlanLogger();\n actionContext = actionContext.set(KeysInitQuery.physicalQueryPlanLogger, physicalQueryPlanLogger);\n }\n\n // Execute query\n const output = await this.actorInitQuery.mediatorQueryOperation.mediate({\n context: actionContext,\n operation,\n });\n output.context = actionContext;\n\n const finalOutput = QueryEngineBase.internalToFinalResult(output);\n\n // Output physical query plan after query exec if needed\n if (physicalQueryPlanLogger) {\n // Make sure the whole result is produced\n switch (finalOutput.resultType) {\n case 'bindings':\n await (await finalOutput.execute()).toArray();\n break;\n case 'quads':\n await (await finalOutput.execute()).toArray();\n break;\n case 'boolean':\n await finalOutput.execute();\n break;\n case 'void':\n await finalOutput.execute();\n break;\n }\n\n return {\n explain: true,\n type: explainMode,\n data: physicalQueryPlanLogger.toJson(),\n };\n }\n\n return finalOutput;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL (weighted) result media types.\n */\n public async getResultMediaTypes(context?: any): Promise<Record<string, number>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeCombiner\n .mediate({ context, mediaTypes: true })).mediaTypes;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL result media type formats.\n */\n public async getResultMediaTypeFormats(context?: any): Promise<Record<string, string>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeFormatCombiner\n .mediate({ context, mediaTypeFormats: true })).mediaTypeFormats;\n }\n\n /**\n * Convert a query result to a string stream based on a certain media type.\n * @param {IQueryOperationResult} queryResult A query result.\n * @param {string} mediaType A media type.\n * @param {ActionContext} context An optional context.\n * @return {Promise<IActorQueryResultSerializeOutput>} A text stream.\n */\n public async resultToString(queryResult: RDF.Query<any>, mediaType?: string, context?: any):\n Promise<IActorQueryResultSerializeOutput> {\n context = ActionContext.ensureActionContext(context);\n if (!mediaType) {\n switch (queryResult.resultType) {\n case 'bindings':\n mediaType = 'application/json';\n break;\n case 'quads':\n mediaType = 'application/trig';\n break;\n default:\n mediaType = 'simple';\n break;\n }\n }\n const handle: IActionSparqlSerialize = { ...await QueryEngineBase.finalToInternalResult(queryResult), context };\n return (await this.actorInitQuery.mediatorQueryResultSerialize\n .mediate({ context, handle, handleMediaType: mediaType })).handle;\n }\n\n /**\n * Invalidate all internal caches related to the given page URL.\n * If no page URL is given, then all pages will be invalidated.\n * @param {string} url The page URL to invalidate.\n * @param context An optional ActionContext to pass to the actors.\n * @return {Promise<any>} A promise resolving when the caches have been invalidated.\n */\n public invalidateHttpCache(url?: string, context?: any): Promise<any> {\n context = ActionContext.ensureActionContext(context);\n return this.actorInitQuery.mediatorHttpInvalidate.mediate({ url, context });\n }\n\n /**\n * Convert an internal query result to a final one.\n * @param internalResult An intermediary query result.\n */\n public static internalToFinalResult(internalResult: IQueryOperationResult): QueryType {\n switch (internalResult.type) {\n case 'bindings':\n return {\n resultType: 'bindings',\n execute: async() => internalResult.bindingsStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'quads':\n return {\n resultType: 'quads',\n execute: async() => internalResult.quadStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'boolean':\n return {\n resultType: 'boolean',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n case 'void':\n return {\n resultType: 'void',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n }\n }\n\n /**\n * Convert a final query result to an internal one.\n * @param finalResult A final query result.\n */\n public static async finalToInternalResult(finalResult: RDF.Query<any>): Promise<IQueryOperationResult> {\n switch (finalResult.resultType) {\n case 'bindings':\n return {\n type: 'bindings',\n bindingsStream: <BindingsStream> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'quads':\n return {\n type: 'quads',\n quadStream: <AsyncIterator<RDF.Quad>> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'boolean':\n return {\n type: 'boolean',\n execute: () => finalResult.execute(),\n };\n case 'void':\n return {\n type: 'void',\n execute: () => finalResult.execute(),\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"QueryEngineBase.js","sourceRoot":"","sources":["QueryEngineBase.ts"],"names":[],"mappings":"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","sourcesContent":["import { materializeOperation } from '@comunica/bus-query-operation';\nimport type { IActionSparqlSerialize, IActorQueryResultSerializeOutput } from '@comunica/bus-query-result-serialize';\nimport { KeysCore, KeysInitQuery, KeysRdfResolveQuadPattern } from '@comunica/context-entries';\nimport { ActionContext } from '@comunica/core';\nimport type {\n IActionContext, IPhysicalQueryPlanLogger,\n IQueryOperationResult,\n IQueryEngine, IQueryExplained,\n QueryFormatType,\n QueryType, QueryExplainMode, BindingsStream,\n QueryAlgebraContext, QueryStringContext, IQueryBindingsEnhanced,\n IQueryQuadsEnhanced, QueryEnhanced, IQueryContextCommon, FunctionArgumentsCache,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport type { ActorInitQueryBase } from './ActorInitQueryBase';\nimport { MemoryPhysicalQueryPlanLogger } from './MemoryPhysicalQueryPlanLogger';\n\n/**\n * Base implementation of a Comunica query engine.\n */\nexport class QueryEngineBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\nimplements IQueryEngine<QueryContext> {\n private readonly actorInitQuery: ActorInitQueryBase;\n private readonly defaultFunctionArgumentsCache: FunctionArgumentsCache;\n\n public constructor(actorInitQuery: ActorInitQueryBase<QueryContext>) {\n this.actorInitQuery = actorInitQuery;\n this.defaultFunctionArgumentsCache = {};\n }\n\n public async queryBindings<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<BindingsStream> {\n return this.queryOfType<QueryFormatTypeInner, IQueryBindingsEnhanced>(query, context, 'bindings');\n }\n\n public async queryQuads<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>> {\n return this.queryOfType<QueryFormatTypeInner, IQueryQuadsEnhanced>(query, context, 'quads');\n }\n\n public async queryBoolean<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<boolean> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryBoolean>(query, context, 'boolean');\n }\n\n public async queryVoid<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<void> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryVoid>(query, context, 'void');\n }\n\n protected async queryOfType<QueryFormatTypeInner extends QueryFormatType, QueryTypeOut extends QueryEnhanced>(\n query: QueryFormatTypeInner,\n context: undefined | (QueryContext & QueryFormatTypeInner extends string ?\n QueryStringContext : QueryAlgebraContext),\n expectedType: QueryTypeOut['resultType'],\n ): Promise<ReturnType<QueryTypeOut['execute']>> {\n const result = await this.query<QueryFormatTypeInner>(query, context);\n if (result.resultType === expectedType) {\n return result.execute();\n }\n throw new Error(`Query result type '${expectedType}' was expected, while '${result.resultType}' was found.`);\n }\n\n /**\n * Evaluate the given query\n * @param query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType>} A promise that resolves to the query output.\n */\n public async query<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType> {\n const output = await this.queryOrExplain(query, context);\n if ('explain' in output) {\n throw new Error(`Tried to explain a query when in query-only mode`);\n }\n return output;\n }\n\n /**\n * Explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @param explainMode The explain mode.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async explain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n explainMode: QueryExplainMode,\n ): Promise<IQueryExplained> {\n context.explain = explainMode;\n const output = await this.queryOrExplain(query, context);\n return <IQueryExplained> output;\n }\n\n /**\n * Evaluate or explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async queryOrExplain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType | IQueryExplained> {\n context = context || <any>{};\n\n // Expand shortcuts\n for (const key in context) {\n if (this.actorInitQuery.contextKeyShortcuts[key]) {\n context[this.actorInitQuery.contextKeyShortcuts[key]] = context[key];\n delete context[key];\n }\n }\n\n // Prepare context\n let actionContext: IActionContext = new ActionContext(context);\n let queryFormat: RDF.QueryFormat = { language: 'sparql', version: '1.1' };\n if (actionContext.has(KeysInitQuery.queryFormat)) {\n queryFormat = actionContext.get(KeysInitQuery.queryFormat)!;\n actionContext = actionContext.delete(KeysInitQuery.queryFormat);\n if (queryFormat.language === 'graphql') {\n actionContext = actionContext.setDefault(KeysInitQuery.graphqlSingularizeVariables, {});\n }\n }\n const baseIRI: string | undefined = actionContext.get(KeysInitQuery.baseIRI);\n\n actionContext = actionContext\n .setDefault(KeysInitQuery.queryTimestamp, new Date())\n .setDefault(KeysRdfResolveQuadPattern.sourceIds, new Map())\n // Set the default logger if none is provided\n .setDefault(KeysCore.log, this.actorInitQuery.logger)\n .setDefault(KeysInitQuery.functionArgumentsCache, this.defaultFunctionArgumentsCache);\n\n // Pre-processing the context\n actionContext = (await this.actorInitQuery.mediatorContextPreprocess.mediate({ context: actionContext })).context;\n\n // Determine explain mode\n const explainMode: QueryExplainMode = actionContext.get(KeysInitQuery.explain)!;\n\n // Parse query\n let operation: Algebra.Operation;\n if (typeof query === 'string') {\n // Save the original query string in the context\n actionContext = actionContext.set(KeysInitQuery.queryString, query);\n\n const queryParseOutput = await this.actorInitQuery.mediatorQueryParse\n .mediate({ context: actionContext, query, queryFormat, baseIRI });\n operation = queryParseOutput.operation;\n // Update the baseIRI in the context if the query modified it.\n if (queryParseOutput.baseIRI) {\n actionContext = actionContext.set(KeysInitQuery.baseIRI, queryParseOutput.baseIRI);\n }\n } else {\n operation = query;\n }\n\n // Print parsed query\n if (explainMode === 'parsed') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Apply initial bindings in context\n if (actionContext.has(KeysInitQuery.initialBindings)) {\n operation = materializeOperation(operation, actionContext.get(KeysInitQuery.initialBindings)!);\n\n // Delete the query string from the context, since our initial query might have changed\n actionContext = actionContext.delete(KeysInitQuery.queryString);\n }\n\n // Optimize the query operation\n const mediatorResult = await this.actorInitQuery.mediatorOptimizeQueryOperation\n .mediate({ context: actionContext, operation });\n operation = mediatorResult.operation;\n actionContext = mediatorResult.context || actionContext;\n\n // Print logical query plan\n if (explainMode === 'logical') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Save original query in context\n actionContext = actionContext.set(KeysInitQuery.query, operation);\n\n // If we need a physical query plan, store a physical query plan logger in the context, and collect it after exec\n let physicalQueryPlanLogger: IPhysicalQueryPlanLogger | undefined;\n if (explainMode === 'physical') {\n physicalQueryPlanLogger = new MemoryPhysicalQueryPlanLogger();\n actionContext = actionContext.set(KeysInitQuery.physicalQueryPlanLogger, physicalQueryPlanLogger);\n }\n\n // Execute query\n const output = await this.actorInitQuery.mediatorQueryOperation.mediate({\n context: actionContext,\n operation,\n });\n output.context = actionContext;\n\n const finalOutput = QueryEngineBase.internalToFinalResult(output);\n\n // Output physical query plan after query exec if needed\n if (physicalQueryPlanLogger) {\n // Make sure the whole result is produced\n switch (finalOutput.resultType) {\n case 'bindings':\n await (await finalOutput.execute()).toArray();\n break;\n case 'quads':\n await (await finalOutput.execute()).toArray();\n break;\n case 'boolean':\n await finalOutput.execute();\n break;\n case 'void':\n await finalOutput.execute();\n break;\n }\n\n return {\n explain: true,\n type: explainMode,\n data: physicalQueryPlanLogger.toJson(),\n };\n }\n\n return finalOutput;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL (weighted) result media types.\n */\n public async getResultMediaTypes(context?: any): Promise<Record<string, number>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeCombiner\n .mediate({ context, mediaTypes: true })).mediaTypes;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL result media type formats.\n */\n public async getResultMediaTypeFormats(context?: any): Promise<Record<string, string>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeFormatCombiner\n .mediate({ context, mediaTypeFormats: true })).mediaTypeFormats;\n }\n\n /**\n * Convert a query result to a string stream based on a certain media type.\n * @param {IQueryOperationResult} queryResult A query result.\n * @param {string} mediaType A media type.\n * @param {ActionContext} context An optional context.\n * @return {Promise<IActorQueryResultSerializeOutput>} A text stream.\n */\n public async resultToString(queryResult: RDF.Query<any>, mediaType?: string, context?: any):\n Promise<IActorQueryResultSerializeOutput> {\n context = ActionContext.ensureActionContext(context);\n if (!mediaType) {\n switch (queryResult.resultType) {\n case 'bindings':\n mediaType = 'application/json';\n break;\n case 'quads':\n mediaType = 'application/trig';\n break;\n default:\n mediaType = 'simple';\n break;\n }\n }\n const handle: IActionSparqlSerialize = { ...await QueryEngineBase.finalToInternalResult(queryResult), context };\n return (await this.actorInitQuery.mediatorQueryResultSerialize\n .mediate({ context, handle, handleMediaType: mediaType })).handle;\n }\n\n /**\n * Invalidate all internal caches related to the given page URL.\n * If no page URL is given, then all pages will be invalidated.\n * @param {string} url The page URL to invalidate.\n * @param context An optional ActionContext to pass to the actors.\n * @return {Promise<any>} A promise resolving when the caches have been invalidated.\n */\n public invalidateHttpCache(url?: string, context?: any): Promise<any> {\n context = ActionContext.ensureActionContext(context);\n return this.actorInitQuery.mediatorHttpInvalidate.mediate({ url, context });\n }\n\n /**\n * Convert an internal query result to a final one.\n * @param internalResult An intermediary query result.\n */\n public static internalToFinalResult(internalResult: IQueryOperationResult): QueryType {\n switch (internalResult.type) {\n case 'bindings':\n return {\n resultType: 'bindings',\n execute: async() => internalResult.bindingsStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'quads':\n return {\n resultType: 'quads',\n execute: async() => internalResult.quadStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'boolean':\n return {\n resultType: 'boolean',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n case 'void':\n return {\n resultType: 'void',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n }\n }\n\n /**\n * Convert a final query result to an internal one.\n * @param finalResult A final query result.\n */\n public static async finalToInternalResult(finalResult: RDF.Query<any>): Promise<IQueryOperationResult> {\n switch (finalResult.resultType) {\n case 'bindings':\n return {\n type: 'bindings',\n bindingsStream: <BindingsStream> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'quads':\n return {\n type: 'quads',\n quadStream: <AsyncIterator<RDF.Quad>> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'boolean':\n return {\n type: 'boolean',\n execute: () => finalResult.execute(),\n };\n case 'void':\n return {\n type: 'void',\n execute: () => finalResult.execute(),\n };\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-init-query",
3
- "version": "2.5.3-alpha.37.0",
3
+ "version": "2.5.3-alpha.39.0",
4
4
  "description": "A query init actor",
5
5
  "lsd:module": true,
6
6
  "main": "lib/index.js",
@@ -32,19 +32,19 @@
32
32
  "lib/**/*.js.map"
33
33
  ],
34
34
  "dependencies": {
35
- "@comunica/actor-http-proxy": "2.5.3-alpha.37.0",
36
- "@comunica/bus-context-preprocess": "2.5.3-alpha.37.0",
37
- "@comunica/bus-http-invalidate": "2.5.3-alpha.37.0",
38
- "@comunica/bus-init": "2.5.3-alpha.37.0",
39
- "@comunica/bus-optimize-query-operation": "2.5.3-alpha.37.0",
40
- "@comunica/bus-query-operation": "2.5.3-alpha.37.0",
41
- "@comunica/bus-query-parse": "2.5.3-alpha.37.0",
42
- "@comunica/bus-query-result-serialize": "2.5.3-alpha.37.0",
43
- "@comunica/context-entries": "2.5.3-alpha.37.0",
44
- "@comunica/core": "2.5.3-alpha.37.0",
45
- "@comunica/logger-pretty": "2.5.3-alpha.37.0",
46
- "@comunica/runner": "2.5.3-alpha.37.0",
47
- "@comunica/types": "2.5.3-alpha.37.0",
35
+ "@comunica/actor-http-proxy": "2.5.3-alpha.39.0",
36
+ "@comunica/bus-context-preprocess": "2.5.3-alpha.39.0",
37
+ "@comunica/bus-http-invalidate": "2.5.3-alpha.39.0",
38
+ "@comunica/bus-init": "2.5.3-alpha.39.0",
39
+ "@comunica/bus-optimize-query-operation": "2.5.3-alpha.39.0",
40
+ "@comunica/bus-query-operation": "2.5.3-alpha.39.0",
41
+ "@comunica/bus-query-parse": "2.5.3-alpha.39.0",
42
+ "@comunica/bus-query-result-serialize": "2.5.3-alpha.39.0",
43
+ "@comunica/context-entries": "2.5.3-alpha.39.0",
44
+ "@comunica/core": "2.5.3-alpha.39.0",
45
+ "@comunica/logger-pretty": "2.5.3-alpha.39.0",
46
+ "@comunica/runner": "2.5.3-alpha.39.0",
47
+ "@comunica/types": "2.5.3-alpha.39.0",
48
48
  "@rdfjs/types": "*",
49
49
  "@types/yargs": "^17.0.13",
50
50
  "asynciterator": "^3.8.0",
@@ -66,5 +66,5 @@
66
66
  "browser": {
67
67
  "./lib/index.js": "./lib/index-browser.js"
68
68
  },
69
- "gitHead": "e3b938940fa30b10bf2aa68a5f6ac3086399873a"
69
+ "gitHead": "dfad5aba52972f5e85debb3452f663c927e7bec5"
70
70
  }