@azure/cosmos 4.4.1-alpha.20250707.2 → 4.4.1-alpha.20250708.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/browser/queryIterator.d.ts.map +1 -1
- package/dist/browser/queryIterator.js +1 -1
- package/dist/browser/queryIterator.js.map +1 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/commonjs/queryIterator.d.ts.map +1 -1
- package/dist/commonjs/queryIterator.js +1 -1
- package/dist/commonjs/queryIterator.js.map +1 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/esm/queryIterator.d.ts.map +1 -1
- package/dist/esm/queryIterator.js +1 -1
- package/dist/esm/queryIterator.js.map +1 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/react-native/queryIterator.d.ts.map +1 -1
- package/dist/react-native/queryIterator.js +1 -1
- package/dist/react-native/queryIterator.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ import type { ClientContext } from "../ClientContext.js";
|
|
|
2
2
|
import type { DiagnosticNodeInternal } from "../diagnostics/DiagnosticNodeInternal.js";
|
|
3
3
|
import type { FeedOptions, PartitionedQueryExecutionInfo, QueryRange, Response } from "../request/index.js";
|
|
4
4
|
import type { ExecutionContext } from "./ExecutionContext.js";
|
|
5
|
+
import { SqlQuerySpec } from "./SqlQuerySpec.js";
|
|
5
6
|
/** @hidden */
|
|
6
7
|
export declare enum HybridQueryExecutionContextBaseStates {
|
|
7
8
|
uninitialized = "uninitialized",
|
|
@@ -12,6 +13,7 @@ export declare enum HybridQueryExecutionContextBaseStates {
|
|
|
12
13
|
export declare class HybridQueryExecutionContext implements ExecutionContext {
|
|
13
14
|
private clientContext;
|
|
14
15
|
private collectionLink;
|
|
16
|
+
private query;
|
|
15
17
|
private options;
|
|
16
18
|
private partitionedQueryExecutionInfo;
|
|
17
19
|
private correlatedActivityId;
|
|
@@ -32,7 +34,7 @@ export declare class HybridQueryExecutionContext implements ExecutionContext {
|
|
|
32
34
|
private hybridSearchResult;
|
|
33
35
|
private uniqueItems;
|
|
34
36
|
private isSingleComponent;
|
|
35
|
-
constructor(clientContext: ClientContext, collectionLink: string, options: FeedOptions, partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo, correlatedActivityId: string, allPartitionsRanges: QueryRange[]);
|
|
37
|
+
constructor(clientContext: ClientContext, collectionLink: string, query: string | SqlQuerySpec, options: FeedOptions, partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo, correlatedActivityId: string, allPartitionsRanges: QueryRange[]);
|
|
36
38
|
nextItem(diagnosticNode: DiagnosticNodeInternal): Promise<Response<any>>;
|
|
37
39
|
hasMoreResults(): boolean;
|
|
38
40
|
fetchMore(diagnosticNode?: DiagnosticNodeInternal): Promise<Response<any>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridQueryExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EACV,WAAW,EAEX,6BAA6B,EAE7B,UAAU,EACV,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"hybridQueryExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EACV,WAAW,EAEX,6BAA6B,EAE7B,UAAU,EACV,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,cAAc;AACd,oBAAY,qCAAqC;IAC/C,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AACD,qBAAa,2BAA4B,YAAW,gBAAgB;IAoBhE,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,mBAAmB;IAzB7B,OAAO,CAAC,gCAAgC,CAAmB;IAC3D,OAAO,CAAC,0BAA0B,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,0BAA0B,CAA6B;IAC/D,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,4BAA4B,CAA4D;IAChG,OAAO,CAAC,4BAA4B,CAA4D;IAChG,OAAO,CAAC,gCAAgC,CACuB;IAC/D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,MAAM,CAAkE;IAChF,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,iBAAiB,CAAkB;gBAGjC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GAAG,YAAY,EAC5B,OAAO,EAAE,WAAW,EACpB,6BAA6B,EAAE,6BAA6B,EAC5D,oBAAoB,EAAE,MAAM,EAC5B,mBAAmB,EAAE,UAAU,EAAE;IAsC9B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAiB9E,cAAc,IAAI,OAAO;IAenB,SAAS,CAAC,cAAc,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAKzE,iBAAiB;YA2BjB,UAAU;YA4BV,uBAAuB;IAyDrC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,wBAAwB;YAUlB,KAAK;YAqBL,QAAQ;IAoBtB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,gCAAgC;YAiD1B,oBAAoB;IAoDlC,OAAO,CAAC,gCAAgC;IAqCxC,OAAO,CAAC,uBAAuB;IAmD/B,OAAO,CAAC,4BAA4B;IAmCpC,OAAO,CAAC,eAAe,CAerB;IAEF,OAAO,CAAC,uBAAuB;CAmChC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C"}
|
|
@@ -15,9 +15,10 @@ export var HybridQueryExecutionContextBaseStates;
|
|
|
15
15
|
HybridQueryExecutionContextBaseStates["done"] = "done";
|
|
16
16
|
})(HybridQueryExecutionContextBaseStates || (HybridQueryExecutionContextBaseStates = {}));
|
|
17
17
|
export class HybridQueryExecutionContext {
|
|
18
|
-
constructor(clientContext, collectionLink, options, partitionedQueryExecutionInfo, correlatedActivityId, allPartitionsRanges) {
|
|
18
|
+
constructor(clientContext, collectionLink, query, options, partitionedQueryExecutionInfo, correlatedActivityId, allPartitionsRanges) {
|
|
19
19
|
this.clientContext = clientContext;
|
|
20
20
|
this.collectionLink = collectionLink;
|
|
21
|
+
this.query = query;
|
|
21
22
|
this.options = options;
|
|
22
23
|
this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo;
|
|
23
24
|
this.correlatedActivityId = correlatedActivityId;
|
|
@@ -364,6 +365,7 @@ export class HybridQueryExecutionContext {
|
|
|
364
365
|
}
|
|
365
366
|
}
|
|
366
367
|
createComponentExecutionContexts() {
|
|
368
|
+
var _a, _b;
|
|
367
369
|
// rewrite queries based on global statistics
|
|
368
370
|
let queryInfos = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos;
|
|
369
371
|
if (this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {
|
|
@@ -376,7 +378,13 @@ export class HybridQueryExecutionContext {
|
|
|
376
378
|
queryInfo: componentQueryInfo,
|
|
377
379
|
queryRanges: this.partitionedQueryExecutionInfo.queryRanges,
|
|
378
380
|
};
|
|
379
|
-
const
|
|
381
|
+
const rewrittenSqlQuerySpec = typeof this.query === "string"
|
|
382
|
+
? componentQueryInfo.rewrittenQuery
|
|
383
|
+
: {
|
|
384
|
+
query: componentQueryInfo.rewrittenQuery,
|
|
385
|
+
parameters: (_b = (_a = this.query) === null || _a === void 0 ? void 0 : _a.parameters) !== null && _b !== void 0 ? _b : [],
|
|
386
|
+
};
|
|
387
|
+
const executionContext = new PipelinedQueryExecutionContext(this.clientContext, this.collectionLink, rewrittenSqlQuerySpec, this.options, componentPartitionExecutionInfo, this.correlatedActivityId, this.emitRawOrderByPayload);
|
|
380
388
|
this.componentsExecutionContext.push(executionContext);
|
|
381
389
|
}
|
|
382
390
|
this.isSingleComponent = this.componentsExecutionContext.length === 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridQueryExecutionContext.js","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAWnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAGzF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,cAAc;AACd,MAAM,CAAN,IAAY,qCAKX;AALD,WAAY,qCAAqC;IAC/C,wEAA+B,CAAA;IAC/B,oEAA2B,CAAA;IAC3B,8DAAqB,CAAA;IACrB,sDAAa,CAAA;AACf,CAAC,EALW,qCAAqC,KAArC,qCAAqC,QAKhD;AACD,MAAM,OAAO,2BAA2B;IAmBtC,YACU,aAA4B,EAC5B,cAAsB,EACtB,OAAoB,EACpB,6BAA4D,EAC5D,oBAA4B,EAC5B,mBAAiC;QALjC,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAQ;QACtB,YAAO,GAAP,OAAO,CAAa;QACpB,kCAA6B,GAA7B,6BAA6B,CAA+B;QAC5D,yBAAoB,GAApB,oBAAoB,CAAQ;QAC5B,wBAAmB,GAAnB,mBAAmB,CAAc;QAvBnC,+BAA0B,GAAuB,EAAE,CAAC;QAIpD,0BAAqB,GAAY,IAAI,CAAC;QACtC,WAAM,GAA8B,EAAE,CAAC;QACvC,sBAAiB,GAAG,EAAE,CAAC;QACvB,iCAA4B,GAAG,wDAAwD,CAAC;QACxF,iCAA4B,GAAG,wDAAwD,CAAC;QACxF,qCAAgC,GACtC,4DAA4D,CAAC;QACvD,iBAAY,GAAG,EAAE,CAAC,CAAC,qCAAqC;QACxD,WAAM,GAAgB,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;QACxE,uBAAkB,GAA8B,EAAE,CAAC;QACnD,gBAAW,GAAG,IAAI,GAAG,EAAmC,CAAC;QACzD,sBAAiB,GAAY,KAAK,CAAC;QA4enC,oBAAe,GAAG,CACxB,KAAe,EACf,CAAS,EACT,gBAAmC,EAC3B,EAAE;YACV,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC1C,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QAjfA,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,aAAa,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACzC,CAAC;QACD,IAAI,6BAA6B,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,CAAC;YACjF,MAAM,yBAAyB,GAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/E,IAAI,CAAC,0BAA0B,GAAG,IAAI,0BAA0B,EAAE,CAAC;YAEnE,MAAM,qBAAqB,GACzB,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC,qBAAqB,CAAC;YACjF,MAAM,kCAAkC,GAAkC;gBACxE,oCAAoC,EAAE,CAAC;gBACvC,SAAS,EAAE;oBACT,YAAY,EAAE,MAAM;oBACpB,cAAc,EAAE,KAAK;oBACrB,2BAA2B,EAAE,EAAE;oBAC/B,cAAc,EAAE,qBAAqB;oBACrC,sBAAsB,EAAE,KAAK;iBAC9B;gBACD,WAAW,EAAE,IAAI,CAAC,mBAAmB;aACtC,CAAC;YAEF,IAAI,CAAC,gCAAgC,GAAG,IAAI,6BAA6B,CACvE,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kCAAkC,EAClC,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gCAAgC,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,WAAW,CAAC;QACjE,CAAC;IACH,CAAC;IACM,KAAK,CAAC,QAAQ,CAAC,cAAsC;QAC1D,MAAM,mBAAmB,GAAG,gBAAgB,EAAE,CAAC;QAC/C,OACE,CAAC,IAAI,CAAC,KAAK,KAAK,qCAAqC,CAAC,aAAa;YACjE,IAAI,CAAC,KAAK,KAAK,qCAAqC,CAAC,WAAW,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EACxB,CAAC;YACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,qCAAqC,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5F,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,qCAAqC,CAAC,aAAa;gBACtD,OAAO,IAAI,CAAC;YACd,KAAK,qCAAqC,CAAC,WAAW;gBACpD,OAAO,IAAI,CAAC;YACd,KAAK,qCAAqC,CAAC,QAAQ;gBACjD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,KAAK,qCAAqC,CAAC,IAAI;gBAC7C,OAAO,KAAK,CAAC;YACf;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,cAAuC;QAC5D,MAAM,oBAAoB,GAAG,gBAAgB,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,cAAsC,EACtC,OAAsB;QAEtB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,qCAAqC,CAAC,aAAa;gBACtD,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC/C,OAAO;oBACL,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,OAAO;iBACjB,CAAC;YAEJ,KAAK,qCAAqC,CAAC,WAAW;gBACpD,MAAM,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC5D,OAAO;oBACL,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,KAAK,qCAAqC,CAAC,QAAQ;gBACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,KAAK,qCAAqC,CAAC,IAAI;gBAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B;gBACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,cAAsC,EACtC,oBAAmC;QAEnC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,gCAAgC,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBACrF,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBACjC,MAAM,gBAAgB,GAAqB,IAAI,CAAC;wBAChD,IAAI,gBAAgB,EAAE,CAAC;4BACrB,wEAAwE;4BACxE,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;wBAC9D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,WAAW,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,cAAsC,EACtC,oBAAmC;QAEnC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBACpC,sFAAsF;gBACtF,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,CAAC;oBACxE,IAAI,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;wBAC/C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;wBAC/B,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;wBACnD,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gCAC7B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gCACxD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oCAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gCACnD,CAAC;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,IAAI,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;4BAC/C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAClE,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,yBAAyB,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBACxE,OAAO,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;wBAClD,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;wBAC/B,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;wBACnD,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gCAC7B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gCACxD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oCAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gCACnD,CAAC;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjF,oDAAoD;YACpD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,QAAQ,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,sDAAsD;QACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACxD,MAAM,wBAAwB,GAAG,IAAI,CAAC,gCAAgC,CACpE,IAAI,CAAC,kBAAkB,EACvB,gBAAgB,CACjB,CAAC;QACF,6BAA6B;QAC7B,gEAAgE;QAChE,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,QAAQ,CAAC;IAC9D,CAAC;IAEO,wBAAwB;QAC9B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC;QAChF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,oBAAmC;QACrD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;gBACxD,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,oBAAoB;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,mBAAkC;QACvD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;gBACxD,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,mBAAmB;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,oBAAmC;QAC9C,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,oBAAoB;SAC9B,CAAC;IACJ,CAAC;IAEO,gCAAgC,CACtC,kBAA6C,EAC7C,gBAAmC;QAEnC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,UAAU,GAAuC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvF,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SACtD,CAAC,CAAC,CAAC;QACJ,yCAAyC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,yCAAyC;YACzC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/B,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC;YAEF,eAAe;YACf,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,IACE,CAAC,GAAG,CAAC;oBACL,kBAAkB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EACzF,CAAC;oBACD,EAAE,IAAI,CAAC;gBACT,CAAC;gBACD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CACpC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CACzD,CAAC;gBACF,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe;YACxD,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;SAChF,CAAC,CAAC,CAAC;QAEJ,2BAA2B;QAC3B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClD,mDAAmD;QACnD,MAAM,wBAAwB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC3D,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAC9D,CAAC;QACF,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,QAAgC,EAChC,oBAAmC;QAEnC,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBACpC,MAAM,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC/C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC/B,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnD,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;4BAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBACrE,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;oBAChD,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,QAAQ,CAAC;oBAC5D,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACvE,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAChC,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,QAAQ,CAAC;gBAC9D,CAAC;gBACD,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,kBAAkB,GAA8B,EAAE,CAAC;gBACzD,qCAAqC;gBACrC,OAAO,yBAAyB,CAAC,cAAc,EAAE,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC/B,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnD,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;4BAC7B,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAChE,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,QAAQ,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,gCAAgC;QACtC,6CAA6C;QAC7C,IAAI,UAAU,GACZ,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC,mBAAmB,CAAC;QAC/E,IAAI,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,CAAC;YACtF,UAAU,GAAG,IAAI,CAAC,uBAAuB,CACvC,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC,mBAAmB,EAC5E,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,CAC5C,CAAC;QACJ,CAAC;QACD,sCAAsC;QACtC,KAAK,MAAM,kBAAkB,IAAI,UAAU,EAAE,CAAC;YAC5C,MAAM,+BAA+B,GAAkC;gBACrE,oCAAoC,EAAE,CAAC;gBACvC,SAAS,EAAE,kBAAkB;gBAC7B,WAAW,EAAE,IAAI,CAAC,6BAA6B,CAAC,WAAW;aAC5D,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,8BAA8B,CACzD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,kBAAkB,CAAC,cAAc,EACjC,IAAI,CAAC,OAAO,EACZ,+BAA+B,EAC/B,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;YACF,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,KAAK,CAAC,CAAC;IACxE,CAAC;IACO,uBAAuB,CAC7B,mBAAgC,EAChC,WAA6B;QAE7B,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC3C,IAAI,2BAA2B,GAAG,SAAS,CAAC,kBAAkB,CAAC;YAC/D,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBACpF,CAAC;gBACD,2BAA2B,GAAG,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtE,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,CACjF,CAAC;YACJ,CAAC;YACD,uCACK,SAAS,KACZ,cAAc,EAAE,IAAI,CAAC,4BAA4B,CAC/C,SAAS,CAAC,cAAc,EACxB,WAAW,EACX,mBAAmB,CAAC,MAAM,CAC3B,EACD,kBAAkB,EAAE,2BAA2B,IAC/C;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,4EAA4E;IAC5E,4EAA4E;IAC5E,sFAAsF;IACtF,oCAAoC;IACpC,2BAA2B;IAC3B,qEAAqE;IACrE,4CAA4C;IAC5C,OAAO;IAEP,wEAAwE;IACxE,+DAA+D;IAC/D,mCAAmC;IACnC,6BAA6B;IAC7B,4EAA4E;IAC5E,yCAAyC;IACzC,SAAS;IACT,4BAA4B;IAC5B,6BAA6B;IAC7B,4EAA4E;IAC5E,0CAA0C;IAC1C,SAAS;IACT,QAAQ;IAER,kBAAkB;IAClB,IAAI;IAEI,4BAA4B,CAClC,KAAa,EACb,WAA6B,EAC7B,cAAsB;QAEtB,IACE,CAAC,WAAW;YACZ,CAAC,WAAW,CAAC,aAAa;YAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAC9C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,+BAA+B;QAC/B,KAAK,GAAG,KAAK,CAAC,OAAO,CACnB,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,gCAAgC,GAAG,EAAE,GAAG,CAAC,EAC7D,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CACrC,CAAC;QACF,IAAI,eAAe,GAAW,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,mEAAmE;YACnE,MAAM,oBAAoB,GAAG,IAAI,IAAI,CAAC,4BAA4B,IAAI,CAAC,GAAG,CAAC;YAC3E,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,4BAA4B,IAAI,CAAC,GAAG,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC1C,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YAC9D,4BAA4B;YAC5B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9F,qBAAqB;YACrB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9F,eAAe,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAmBO,uBAAuB;QAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC,6BAA6B,CAAC,qBAAqB,CAAC;QACvF,MAAM,yBAAyB,GAC7B,CAAC,qBAAqB,CAAC,gBAAgB;YACvC,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC;QAEtD,MAAM,MAAM,GAGN,EAAE,CAAC;QAET,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;YACtF,MAAM,SAAS,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAEnE,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC9E,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,MAAM,eAAe,GAAG,yBAAyB;gBAC/C,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,UAAU,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport type { ClientContext } from \"../ClientContext.js\";\nimport type { DiagnosticNodeInternal } from \"../diagnostics/DiagnosticNodeInternal.js\";\nimport type {\n FeedOptions,\n GlobalStatistics,\n PartitionedQueryExecutionInfo,\n QueryInfo,\n QueryRange,\n Response,\n} from \"../request/index.js\";\nimport { HybridSearchQueryResult } from \"../request/hybridSearchQueryResult.js\";\nimport { GlobalStatisticsAggregator } from \"./Aggregators/GlobalStatisticsAggregator.js\";\nimport type { CosmosHeaders } from \"./CosmosHeaders.js\";\nimport type { ExecutionContext } from \"./ExecutionContext.js\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils.js\";\nimport { ParallelQueryExecutionContext } from \"./parallelQueryExecutionContext.js\";\nimport { PipelinedQueryExecutionContext } from \"./pipelinedQueryExecutionContext.js\";\n\n/** @hidden */\nexport enum HybridQueryExecutionContextBaseStates {\n uninitialized = \"uninitialized\",\n initialized = \"initialized\",\n draining = \"draining\",\n done = \"done\",\n}\nexport class HybridQueryExecutionContext implements ExecutionContext {\n private globalStatisticsExecutionContext: ExecutionContext;\n private componentsExecutionContext: ExecutionContext[] = [];\n private pageSize: number;\n private state: HybridQueryExecutionContextBaseStates;\n private globalStatisticsAggregator: GlobalStatisticsAggregator;\n private emitRawOrderByPayload: boolean = true;\n private buffer: HybridSearchQueryResult[] = [];\n private DEFAULT_PAGE_SIZE = 10;\n private TOTAL_WORD_COUNT_PLACEHOLDER = \"documentdb-formattablehybridsearchquery-totalwordcount\";\n private HIT_COUNTS_ARRAY_PLACEHOLDER = \"documentdb-formattablehybridsearchquery-hitcountsarray\";\n private TOTAL_DOCUMENT_COUNT_PLACEHOLDER =\n \"documentdb-formattablehybridsearchquery-totaldocumentcount\";\n private RRF_CONSTANT = 60; // Constant for RRF score calculation\n private logger: AzureLogger = createClientLogger(\"HybridQueryExecutionContext\");\n private hybridSearchResult: HybridSearchQueryResult[] = [];\n private uniqueItems = new Map<string, HybridSearchQueryResult>();\n private isSingleComponent: boolean = false;\n\n constructor(\n private clientContext: ClientContext,\n private collectionLink: string,\n private options: FeedOptions,\n private partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo,\n private correlatedActivityId: string,\n private allPartitionsRanges: QueryRange[],\n ) {\n this.state = HybridQueryExecutionContextBaseStates.uninitialized;\n this.pageSize = this.options.maxItemCount;\n if (this.pageSize === undefined) {\n this.pageSize = this.DEFAULT_PAGE_SIZE;\n }\n if (partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {\n const globalStaticsQueryOptions: FeedOptions = { maxItemCount: this.pageSize };\n this.globalStatisticsAggregator = new GlobalStatisticsAggregator();\n\n const globalStatisticsQuery =\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.globalStatisticsQuery;\n const globalStatisticsQueryExecutionInfo: PartitionedQueryExecutionInfo = {\n partitionedQueryExecutionInfoVersion: 1,\n queryInfo: {\n distinctType: \"None\",\n hasSelectValue: false,\n groupByAliasToAggregateType: {},\n rewrittenQuery: globalStatisticsQuery,\n hasNonStreamingOrderBy: false,\n },\n queryRanges: this.allPartitionsRanges,\n };\n\n this.globalStatisticsExecutionContext = new ParallelQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n globalStatisticsQuery,\n globalStaticsQueryOptions,\n globalStatisticsQueryExecutionInfo,\n this.correlatedActivityId,\n );\n } else {\n this.createComponentExecutionContexts();\n this.state = HybridQueryExecutionContextBaseStates.initialized;\n }\n }\n public async nextItem(diagnosticNode: DiagnosticNodeInternal): Promise<Response<any>> {\n const nextItemRespHeaders = getInitialHeader();\n while (\n (this.state === HybridQueryExecutionContextBaseStates.uninitialized ||\n this.state === HybridQueryExecutionContextBaseStates.initialized) &&\n this.buffer.length === 0\n ) {\n await this.fetchMoreInternal(diagnosticNode, nextItemRespHeaders);\n }\n\n if (this.state === HybridQueryExecutionContextBaseStates.draining && this.buffer.length > 0) {\n return this.drainOne(nextItemRespHeaders);\n } else {\n return this.done(nextItemRespHeaders);\n }\n }\n\n public hasMoreResults(): boolean {\n switch (this.state) {\n case HybridQueryExecutionContextBaseStates.uninitialized:\n return true;\n case HybridQueryExecutionContextBaseStates.initialized:\n return true;\n case HybridQueryExecutionContextBaseStates.draining:\n return this.buffer.length > 0;\n case HybridQueryExecutionContextBaseStates.done:\n return false;\n default:\n return false;\n }\n }\n\n public async fetchMore(diagnosticNode?: DiagnosticNodeInternal): Promise<Response<any>> {\n const fetchMoreRespHeaders = getInitialHeader();\n return this.fetchMoreInternal(diagnosticNode, fetchMoreRespHeaders);\n }\n\n private async fetchMoreInternal(\n diagnosticNode: DiagnosticNodeInternal,\n headers: CosmosHeaders,\n ): Promise<Response<any>> {\n switch (this.state) {\n case HybridQueryExecutionContextBaseStates.uninitialized:\n await this.initialize(diagnosticNode, headers);\n return {\n result: [],\n headers: headers,\n };\n\n case HybridQueryExecutionContextBaseStates.initialized:\n await this.executeComponentQueries(diagnosticNode, headers);\n return {\n result: [],\n headers: headers,\n };\n case HybridQueryExecutionContextBaseStates.draining:\n return this.drain(headers);\n case HybridQueryExecutionContextBaseStates.done:\n return this.done(headers);\n default:\n throw new Error(`Invalid state: ${this.state}`);\n }\n }\n\n private async initialize(\n diagnosticNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n try {\n while (this.globalStatisticsExecutionContext.hasMoreResults()) {\n const result = await this.globalStatisticsExecutionContext.fetchMore(diagnosticNode);\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (result && result.result) {\n for (const item of result.result) {\n const globalStatistics: GlobalStatistics = item;\n if (globalStatistics) {\n // iterate over the components update placeholders from globalStatistics\n this.globalStatisticsAggregator.aggregate(globalStatistics);\n }\n }\n }\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n\n // create component execution contexts for each component query\n this.createComponentExecutionContexts();\n this.state = HybridQueryExecutionContextBaseStates.initialized;\n }\n\n private async executeComponentQueries(\n diagnosticNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n if (this.isSingleComponent) {\n await this.drainSingleComponent(diagnosticNode, fetchMoreRespHeaders);\n return;\n }\n try {\n if (this.options.enableQueryControl) {\n // track componentExecutionContexts with remaining results and call them in LIFO order\n if (this.componentsExecutionContext.length > 0) {\n const componentExecutionContext = this.componentsExecutionContext.pop();\n if (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagnosticNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n const hybridItem = HybridSearchQueryResult.create(item);\n if (!this.uniqueItems.has(hybridItem.rid)) {\n this.uniqueItems.set(hybridItem.rid, hybridItem);\n }\n });\n }\n if (componentExecutionContext.hasMoreResults()) {\n this.componentsExecutionContext.push(componentExecutionContext);\n }\n }\n }\n if (this.componentsExecutionContext.length === 0) {\n this.processUniqueItems();\n }\n } else {\n for (const componentExecutionContext of this.componentsExecutionContext) {\n while (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagnosticNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n const hybridItem = HybridSearchQueryResult.create(item);\n if (!this.uniqueItems.has(hybridItem.rid)) {\n this.uniqueItems.set(hybridItem.rid, hybridItem);\n }\n });\n }\n }\n }\n this.processUniqueItems();\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private processUniqueItems(): void {\n this.uniqueItems.forEach((item) => this.hybridSearchResult.push(item));\n if (this.hybridSearchResult.length === 0 || this.hybridSearchResult.length === 1) {\n // return the result as no or one element is present\n this.hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.state = HybridQueryExecutionContextBaseStates.draining;\n return;\n }\n\n // Initialize an array to hold ranks for each document\n const componentWeights = this.extractComponentWeights();\n const sortedHybridSearchResult = this.sortHybridSearchResultByRRFScore(\n this.hybridSearchResult,\n componentWeights,\n );\n // store the result to buffer\n // add only data from the sortedHybridSearchResult in the buffer\n sortedHybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n\n private applySkipAndTakeToBuffer(): void {\n const { skip, take } = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo;\n if (skip) {\n this.buffer = skip >= this.buffer.length ? [] : this.buffer.slice(skip);\n }\n if (take) {\n this.buffer = take <= 0 ? [] : this.buffer.slice(0, take);\n }\n }\n\n private async drain(fetchMoreRespHeaders: CosmosHeaders): Promise<Response<any>> {\n try {\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n return this.done(fetchMoreRespHeaders);\n }\n const result = this.buffer.slice(0, this.pageSize);\n this.buffer = this.buffer.slice(this.pageSize);\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n }\n return {\n result: result,\n headers: fetchMoreRespHeaders,\n };\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private async drainOne(nextItemRespHeaders: CosmosHeaders): Promise<Response<any>> {\n try {\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n return this.done(nextItemRespHeaders);\n }\n const result = this.buffer.shift();\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n }\n return {\n result: result,\n headers: nextItemRespHeaders,\n };\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private done(fetchMoreRespHeaders: CosmosHeaders): Response<any> {\n return {\n result: undefined,\n headers: fetchMoreRespHeaders,\n };\n }\n\n private sortHybridSearchResultByRRFScore(\n hybridSearchResult: HybridSearchQueryResult[],\n componentWeights: ComponentWeight[],\n ): HybridSearchQueryResult[] {\n if (hybridSearchResult.length === 0) {\n return [];\n }\n const ranksArray: { rid: string; ranks: number[] }[] = hybridSearchResult.map((item) => ({\n rid: item.rid,\n ranks: new Array(item.componentScores.length).fill(0),\n }));\n // Compute ranks for each component score\n for (let i = 0; i < hybridSearchResult[0].componentScores.length; i++) {\n // Sort based on the i-th component score\n hybridSearchResult.sort((a, b) =>\n componentWeights[i].comparator(a.componentScores[i], b.componentScores[i]),\n );\n\n // Assign ranks\n let rank = 1;\n for (let j = 0; j < hybridSearchResult.length; j++) {\n if (\n j > 0 &&\n hybridSearchResult[j].componentScores[i] !== hybridSearchResult[j - 1].componentScores[i]\n ) {\n ++rank;\n }\n const rankIndex = ranksArray.findIndex(\n (rankItem) => rankItem.rid === hybridSearchResult[j].rid,\n );\n ranksArray[rankIndex].ranks[i] = rank; // 1-based rank\n }\n }\n\n // Compute RRF scores and sort based on them\n const rrfScores = ranksArray.map((item) => ({\n rid: item.rid,\n rrfScore: this.computeRRFScore(item.ranks, this.RRF_CONSTANT, componentWeights),\n }));\n\n // Sort based on RRF scores\n rrfScores.sort((a, b) => b.rrfScore - a.rrfScore);\n // Map sorted RRF scores back to hybridSearchResult\n const sortedHybridSearchResult = rrfScores.map((scoreItem) =>\n hybridSearchResult.find((item) => item.rid === scoreItem.rid),\n );\n return sortedHybridSearchResult;\n }\n\n private async drainSingleComponent(\n diagNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n if (this.componentsExecutionContext && this.componentsExecutionContext.length !== 1) {\n this.logger.error(\"drainSingleComponent called on multiple components\");\n return;\n }\n try {\n if (this.options.enableQueryControl) {\n const componentExecutionContext = this.componentsExecutionContext[0];\n if (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n this.hybridSearchResult.push(HybridSearchQueryResult.create(item));\n });\n }\n }\n if (!componentExecutionContext.hasMoreResults()) {\n this.state = HybridQueryExecutionContextBaseStates.draining;\n this.hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n return;\n } else {\n const componentExecutionContext = this.componentsExecutionContext[0];\n const hybridSearchResult: HybridSearchQueryResult[] = [];\n // add check for enable query control\n while (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n hybridSearchResult.push(HybridSearchQueryResult.create(item));\n });\n }\n }\n hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private createComponentExecutionContexts(): void {\n // rewrite queries based on global statistics\n let queryInfos: QueryInfo[] =\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos;\n if (this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {\n queryInfos = this.processComponentQueries(\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos,\n this.globalStatisticsAggregator.getResult(),\n );\n }\n // create component execution contexts\n for (const componentQueryInfo of queryInfos) {\n const componentPartitionExecutionInfo: PartitionedQueryExecutionInfo = {\n partitionedQueryExecutionInfoVersion: 1,\n queryInfo: componentQueryInfo,\n queryRanges: this.partitionedQueryExecutionInfo.queryRanges,\n };\n const executionContext = new PipelinedQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n componentQueryInfo.rewrittenQuery,\n this.options,\n componentPartitionExecutionInfo,\n this.correlatedActivityId,\n this.emitRawOrderByPayload,\n );\n this.componentsExecutionContext.push(executionContext);\n }\n this.isSingleComponent = this.componentsExecutionContext.length === 1;\n }\n private processComponentQueries(\n componentQueryInfos: QueryInfo[],\n globalStats: GlobalStatistics,\n ): QueryInfo[] {\n return componentQueryInfos.map((queryInfo) => {\n let rewrittenOrderByExpressions = queryInfo.orderByExpressions;\n if (queryInfo.orderBy && queryInfo.orderBy.length > 0) {\n if (!queryInfo.hasNonStreamingOrderBy) {\n throw new Error(\"The component query must have a non-streaming order by clause.\");\n }\n rewrittenOrderByExpressions = queryInfo.orderByExpressions.map((expr) =>\n this.replacePlaceholdersWorkaroud(expr, globalStats, componentQueryInfos.length),\n );\n }\n return {\n ...queryInfo,\n rewrittenQuery: this.replacePlaceholdersWorkaroud(\n queryInfo.rewrittenQuery,\n globalStats,\n componentQueryInfos.length,\n ),\n orderByExpressions: rewrittenOrderByExpressions,\n };\n });\n }\n // This method is commented currently, but we will switch back to using this\n // once the gateway has been redeployed with the fix for placeholder indexes\n // private replacePlaceholders(query: string, globalStats: GlobalStatistics): string {\n // // Replace total document count\n // query = query.replace(\n // new RegExp(`{${this.TOTAL_DOCUMENT_COUNT_PLACEHOLDER}}`, \"g\"),\n // globalStats.documentCount.toString(),\n // );\n\n // // Replace total word counts and hit counts from fullTextStatistics\n // globalStats.fullTextStatistics.forEach((stats, index) => {\n // // Replace total word counts\n // query = query.replace(\n // new RegExp(`{${this.TOTAL_WORD_COUNT_PLACEHOLDER}-${index}}`, \"g\"),\n // stats.totalWordCount.toString(),\n // );\n // // Replace hit counts\n // query = query.replace(\n // new RegExp(`{${this.HIT_COUNTS_ARRAY_PLACEHOLDER}-${index}}`, \"g\"),\n // `[${stats.hitCounts.join(\",\")}]`,\n // );\n // });\n\n // return query;\n // }\n\n private replacePlaceholdersWorkaroud(\n query: string,\n globalStats: GlobalStatistics,\n componentCount: number,\n ): string {\n if (\n !globalStats ||\n !globalStats.documentCount ||\n !Array.isArray(globalStats.fullTextStatistics)\n ) {\n throw new Error(\"GlobalStats validation failed\");\n }\n // Replace total document count\n query = query.replace(\n new RegExp(`{${this.TOTAL_DOCUMENT_COUNT_PLACEHOLDER}}`, \"g\"),\n globalStats.documentCount.toString(),\n );\n let statisticsIndex: number = 0;\n for (let i = 0; i < componentCount; i++) {\n // Replace total word counts and hit counts from fullTextStatistics\n const wordCountPlaceholder = `{${this.TOTAL_WORD_COUNT_PLACEHOLDER}-${i}}`;\n const hitCountPlaceholder = `{${this.HIT_COUNTS_ARRAY_PLACEHOLDER}-${i}}`;\n if (!query.includes(wordCountPlaceholder)) {\n continue;\n }\n const stats = globalStats.fullTextStatistics[statisticsIndex];\n // Replace total word counts\n query = query.replace(new RegExp(wordCountPlaceholder, \"g\"), stats.totalWordCount.toString());\n // Replace hit counts\n query = query.replace(new RegExp(hitCountPlaceholder, \"g\"), `[${stats.hitCounts.join(\",\")}]`);\n statisticsIndex++;\n }\n return query;\n }\n\n private computeRRFScore = (\n ranks: number[],\n k: number,\n componentWeights: ComponentWeight[],\n ): number => {\n if (ranks.length !== componentWeights.length) {\n throw new Error(\"Ranks and component weights length mismatch\");\n }\n let rrfScore = 0;\n for (let i = 0; i < ranks.length; i++) {\n const rank = ranks[i];\n const weight = componentWeights[i].weight;\n rrfScore += weight * (1 / (k + rank));\n }\n return rrfScore;\n };\n\n private extractComponentWeights(): ComponentWeight[] {\n const hybridSearchQueryInfo = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo;\n const useDefaultComponentWeight =\n !hybridSearchQueryInfo.componentWeights ||\n hybridSearchQueryInfo.componentWeights.length === 0;\n\n const result: {\n weight: number;\n comparator: (x: number, y: number) => number;\n }[] = [];\n\n for (let index = 0; index < hybridSearchQueryInfo.componentQueryInfos.length; ++index) {\n const queryInfo = hybridSearchQueryInfo.componentQueryInfos[index];\n\n if (queryInfo.orderBy && queryInfo.orderBy.length > 0) {\n if (!queryInfo.hasNonStreamingOrderBy) {\n throw new Error(\"The component query should have a non streaming order by\");\n }\n\n if (!queryInfo.orderByExpressions || queryInfo.orderByExpressions.length !== 1) {\n throw new Error(\"The component query should have exactly one order by expression\");\n }\n }\n const componentWeight = useDefaultComponentWeight\n ? 1\n : hybridSearchQueryInfo.componentWeights[index];\n const hasOrderBy = queryInfo.orderBy && queryInfo.orderBy.length > 0;\n const sortOrder = hasOrderBy && queryInfo.orderBy[0].includes(\"Ascending\") ? 1 : -1;\n result.push({\n weight: componentWeight,\n comparator: (x: number, y: number) => sortOrder * (x - y),\n });\n }\n return result;\n }\n}\n\nexport interface ComponentWeight {\n weight: number;\n comparator: (x: number, y: number) => number;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"hybridQueryExecutionContext.js","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport type { ClientContext } from \"../ClientContext.js\";\nimport type { DiagnosticNodeInternal } from \"../diagnostics/DiagnosticNodeInternal.js\";\nimport type {\n FeedOptions,\n GlobalStatistics,\n PartitionedQueryExecutionInfo,\n QueryInfo,\n QueryRange,\n Response,\n} from \"../request/index.js\";\nimport { HybridSearchQueryResult } from \"../request/hybridSearchQueryResult.js\";\nimport { GlobalStatisticsAggregator } from \"./Aggregators/GlobalStatisticsAggregator.js\";\nimport type { CosmosHeaders } from \"./CosmosHeaders.js\";\nimport type { ExecutionContext } from \"./ExecutionContext.js\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils.js\";\nimport { ParallelQueryExecutionContext } from \"./parallelQueryExecutionContext.js\";\nimport { PipelinedQueryExecutionContext } from \"./pipelinedQueryExecutionContext.js\";\nimport { SqlQuerySpec } from \"./SqlQuerySpec.js\";\n\n/** @hidden */\nexport enum HybridQueryExecutionContextBaseStates {\n uninitialized = \"uninitialized\",\n initialized = \"initialized\",\n draining = \"draining\",\n done = \"done\",\n}\nexport class HybridQueryExecutionContext implements ExecutionContext {\n private globalStatisticsExecutionContext: ExecutionContext;\n private componentsExecutionContext: ExecutionContext[] = [];\n private pageSize: number;\n private state: HybridQueryExecutionContextBaseStates;\n private globalStatisticsAggregator: GlobalStatisticsAggregator;\n private emitRawOrderByPayload: boolean = true;\n private buffer: HybridSearchQueryResult[] = [];\n private DEFAULT_PAGE_SIZE = 10;\n private TOTAL_WORD_COUNT_PLACEHOLDER = \"documentdb-formattablehybridsearchquery-totalwordcount\";\n private HIT_COUNTS_ARRAY_PLACEHOLDER = \"documentdb-formattablehybridsearchquery-hitcountsarray\";\n private TOTAL_DOCUMENT_COUNT_PLACEHOLDER =\n \"documentdb-formattablehybridsearchquery-totaldocumentcount\";\n private RRF_CONSTANT = 60; // Constant for RRF score calculation\n private logger: AzureLogger = createClientLogger(\"HybridQueryExecutionContext\");\n private hybridSearchResult: HybridSearchQueryResult[] = [];\n private uniqueItems = new Map<string, HybridSearchQueryResult>();\n private isSingleComponent: boolean = false;\n\n constructor(\n private clientContext: ClientContext,\n private collectionLink: string,\n private query: string | SqlQuerySpec,\n private options: FeedOptions,\n private partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo,\n private correlatedActivityId: string,\n private allPartitionsRanges: QueryRange[],\n ) {\n this.state = HybridQueryExecutionContextBaseStates.uninitialized;\n this.pageSize = this.options.maxItemCount;\n if (this.pageSize === undefined) {\n this.pageSize = this.DEFAULT_PAGE_SIZE;\n }\n if (partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {\n const globalStaticsQueryOptions: FeedOptions = { maxItemCount: this.pageSize };\n this.globalStatisticsAggregator = new GlobalStatisticsAggregator();\n\n const globalStatisticsQuery =\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.globalStatisticsQuery;\n const globalStatisticsQueryExecutionInfo: PartitionedQueryExecutionInfo = {\n partitionedQueryExecutionInfoVersion: 1,\n queryInfo: {\n distinctType: \"None\",\n hasSelectValue: false,\n groupByAliasToAggregateType: {},\n rewrittenQuery: globalStatisticsQuery,\n hasNonStreamingOrderBy: false,\n },\n queryRanges: this.allPartitionsRanges,\n };\n\n this.globalStatisticsExecutionContext = new ParallelQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n globalStatisticsQuery,\n globalStaticsQueryOptions,\n globalStatisticsQueryExecutionInfo,\n this.correlatedActivityId,\n );\n } else {\n this.createComponentExecutionContexts();\n this.state = HybridQueryExecutionContextBaseStates.initialized;\n }\n }\n public async nextItem(diagnosticNode: DiagnosticNodeInternal): Promise<Response<any>> {\n const nextItemRespHeaders = getInitialHeader();\n while (\n (this.state === HybridQueryExecutionContextBaseStates.uninitialized ||\n this.state === HybridQueryExecutionContextBaseStates.initialized) &&\n this.buffer.length === 0\n ) {\n await this.fetchMoreInternal(diagnosticNode, nextItemRespHeaders);\n }\n\n if (this.state === HybridQueryExecutionContextBaseStates.draining && this.buffer.length > 0) {\n return this.drainOne(nextItemRespHeaders);\n } else {\n return this.done(nextItemRespHeaders);\n }\n }\n\n public hasMoreResults(): boolean {\n switch (this.state) {\n case HybridQueryExecutionContextBaseStates.uninitialized:\n return true;\n case HybridQueryExecutionContextBaseStates.initialized:\n return true;\n case HybridQueryExecutionContextBaseStates.draining:\n return this.buffer.length > 0;\n case HybridQueryExecutionContextBaseStates.done:\n return false;\n default:\n return false;\n }\n }\n\n public async fetchMore(diagnosticNode?: DiagnosticNodeInternal): Promise<Response<any>> {\n const fetchMoreRespHeaders = getInitialHeader();\n return this.fetchMoreInternal(diagnosticNode, fetchMoreRespHeaders);\n }\n\n private async fetchMoreInternal(\n diagnosticNode: DiagnosticNodeInternal,\n headers: CosmosHeaders,\n ): Promise<Response<any>> {\n switch (this.state) {\n case HybridQueryExecutionContextBaseStates.uninitialized:\n await this.initialize(diagnosticNode, headers);\n return {\n result: [],\n headers: headers,\n };\n\n case HybridQueryExecutionContextBaseStates.initialized:\n await this.executeComponentQueries(diagnosticNode, headers);\n return {\n result: [],\n headers: headers,\n };\n case HybridQueryExecutionContextBaseStates.draining:\n return this.drain(headers);\n case HybridQueryExecutionContextBaseStates.done:\n return this.done(headers);\n default:\n throw new Error(`Invalid state: ${this.state}`);\n }\n }\n\n private async initialize(\n diagnosticNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n try {\n while (this.globalStatisticsExecutionContext.hasMoreResults()) {\n const result = await this.globalStatisticsExecutionContext.fetchMore(diagnosticNode);\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (result && result.result) {\n for (const item of result.result) {\n const globalStatistics: GlobalStatistics = item;\n if (globalStatistics) {\n // iterate over the components update placeholders from globalStatistics\n this.globalStatisticsAggregator.aggregate(globalStatistics);\n }\n }\n }\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n\n // create component execution contexts for each component query\n this.createComponentExecutionContexts();\n this.state = HybridQueryExecutionContextBaseStates.initialized;\n }\n\n private async executeComponentQueries(\n diagnosticNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n if (this.isSingleComponent) {\n await this.drainSingleComponent(diagnosticNode, fetchMoreRespHeaders);\n return;\n }\n try {\n if (this.options.enableQueryControl) {\n // track componentExecutionContexts with remaining results and call them in LIFO order\n if (this.componentsExecutionContext.length > 0) {\n const componentExecutionContext = this.componentsExecutionContext.pop();\n if (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagnosticNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n const hybridItem = HybridSearchQueryResult.create(item);\n if (!this.uniqueItems.has(hybridItem.rid)) {\n this.uniqueItems.set(hybridItem.rid, hybridItem);\n }\n });\n }\n if (componentExecutionContext.hasMoreResults()) {\n this.componentsExecutionContext.push(componentExecutionContext);\n }\n }\n }\n if (this.componentsExecutionContext.length === 0) {\n this.processUniqueItems();\n }\n } else {\n for (const componentExecutionContext of this.componentsExecutionContext) {\n while (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagnosticNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n const hybridItem = HybridSearchQueryResult.create(item);\n if (!this.uniqueItems.has(hybridItem.rid)) {\n this.uniqueItems.set(hybridItem.rid, hybridItem);\n }\n });\n }\n }\n }\n this.processUniqueItems();\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private processUniqueItems(): void {\n this.uniqueItems.forEach((item) => this.hybridSearchResult.push(item));\n if (this.hybridSearchResult.length === 0 || this.hybridSearchResult.length === 1) {\n // return the result as no or one element is present\n this.hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.state = HybridQueryExecutionContextBaseStates.draining;\n return;\n }\n\n // Initialize an array to hold ranks for each document\n const componentWeights = this.extractComponentWeights();\n const sortedHybridSearchResult = this.sortHybridSearchResultByRRFScore(\n this.hybridSearchResult,\n componentWeights,\n );\n // store the result to buffer\n // add only data from the sortedHybridSearchResult in the buffer\n sortedHybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n\n private applySkipAndTakeToBuffer(): void {\n const { skip, take } = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo;\n if (skip) {\n this.buffer = skip >= this.buffer.length ? [] : this.buffer.slice(skip);\n }\n if (take) {\n this.buffer = take <= 0 ? [] : this.buffer.slice(0, take);\n }\n }\n\n private async drain(fetchMoreRespHeaders: CosmosHeaders): Promise<Response<any>> {\n try {\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n return this.done(fetchMoreRespHeaders);\n }\n const result = this.buffer.slice(0, this.pageSize);\n this.buffer = this.buffer.slice(this.pageSize);\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n }\n return {\n result: result,\n headers: fetchMoreRespHeaders,\n };\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private async drainOne(nextItemRespHeaders: CosmosHeaders): Promise<Response<any>> {\n try {\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n return this.done(nextItemRespHeaders);\n }\n const result = this.buffer.shift();\n if (this.buffer.length === 0) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n }\n return {\n result: result,\n headers: nextItemRespHeaders,\n };\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private done(fetchMoreRespHeaders: CosmosHeaders): Response<any> {\n return {\n result: undefined,\n headers: fetchMoreRespHeaders,\n };\n }\n\n private sortHybridSearchResultByRRFScore(\n hybridSearchResult: HybridSearchQueryResult[],\n componentWeights: ComponentWeight[],\n ): HybridSearchQueryResult[] {\n if (hybridSearchResult.length === 0) {\n return [];\n }\n const ranksArray: { rid: string; ranks: number[] }[] = hybridSearchResult.map((item) => ({\n rid: item.rid,\n ranks: new Array(item.componentScores.length).fill(0),\n }));\n // Compute ranks for each component score\n for (let i = 0; i < hybridSearchResult[0].componentScores.length; i++) {\n // Sort based on the i-th component score\n hybridSearchResult.sort((a, b) =>\n componentWeights[i].comparator(a.componentScores[i], b.componentScores[i]),\n );\n\n // Assign ranks\n let rank = 1;\n for (let j = 0; j < hybridSearchResult.length; j++) {\n if (\n j > 0 &&\n hybridSearchResult[j].componentScores[i] !== hybridSearchResult[j - 1].componentScores[i]\n ) {\n ++rank;\n }\n const rankIndex = ranksArray.findIndex(\n (rankItem) => rankItem.rid === hybridSearchResult[j].rid,\n );\n ranksArray[rankIndex].ranks[i] = rank; // 1-based rank\n }\n }\n\n // Compute RRF scores and sort based on them\n const rrfScores = ranksArray.map((item) => ({\n rid: item.rid,\n rrfScore: this.computeRRFScore(item.ranks, this.RRF_CONSTANT, componentWeights),\n }));\n\n // Sort based on RRF scores\n rrfScores.sort((a, b) => b.rrfScore - a.rrfScore);\n // Map sorted RRF scores back to hybridSearchResult\n const sortedHybridSearchResult = rrfScores.map((scoreItem) =>\n hybridSearchResult.find((item) => item.rid === scoreItem.rid),\n );\n return sortedHybridSearchResult;\n }\n\n private async drainSingleComponent(\n diagNode: DiagnosticNodeInternal,\n fetchMoreRespHeaders: CosmosHeaders,\n ): Promise<void> {\n if (this.componentsExecutionContext && this.componentsExecutionContext.length !== 1) {\n this.logger.error(\"drainSingleComponent called on multiple components\");\n return;\n }\n try {\n if (this.options.enableQueryControl) {\n const componentExecutionContext = this.componentsExecutionContext[0];\n if (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n this.hybridSearchResult.push(HybridSearchQueryResult.create(item));\n });\n }\n }\n if (!componentExecutionContext.hasMoreResults()) {\n this.state = HybridQueryExecutionContextBaseStates.draining;\n this.hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n return;\n } else {\n const componentExecutionContext = this.componentsExecutionContext[0];\n const hybridSearchResult: HybridSearchQueryResult[] = [];\n // add check for enable query control\n while (componentExecutionContext.hasMoreResults()) {\n const result = await componentExecutionContext.fetchMore(diagNode);\n const response = result.result;\n mergeHeaders(fetchMoreRespHeaders, result.headers);\n if (response) {\n response.forEach((item: any) => {\n hybridSearchResult.push(HybridSearchQueryResult.create(item));\n });\n }\n }\n hybridSearchResult.forEach((item) => this.buffer.push(item.data));\n this.applySkipAndTakeToBuffer();\n this.state = HybridQueryExecutionContextBaseStates.draining;\n }\n } catch (error) {\n this.state = HybridQueryExecutionContextBaseStates.done;\n throw error;\n }\n }\n\n private createComponentExecutionContexts(): void {\n // rewrite queries based on global statistics\n let queryInfos: QueryInfo[] =\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos;\n if (this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {\n queryInfos = this.processComponentQueries(\n this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos,\n this.globalStatisticsAggregator.getResult(),\n );\n }\n // create component execution contexts\n for (const componentQueryInfo of queryInfos) {\n const componentPartitionExecutionInfo: PartitionedQueryExecutionInfo = {\n partitionedQueryExecutionInfoVersion: 1,\n queryInfo: componentQueryInfo,\n queryRanges: this.partitionedQueryExecutionInfo.queryRanges,\n };\n const rewrittenSqlQuerySpec: string | SqlQuerySpec =\n typeof this.query === \"string\"\n ? componentQueryInfo.rewrittenQuery\n : {\n query: componentQueryInfo.rewrittenQuery,\n parameters: this.query?.parameters ?? [],\n };\n const executionContext = new PipelinedQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n rewrittenSqlQuerySpec,\n this.options,\n componentPartitionExecutionInfo,\n this.correlatedActivityId,\n this.emitRawOrderByPayload,\n );\n this.componentsExecutionContext.push(executionContext);\n }\n this.isSingleComponent = this.componentsExecutionContext.length === 1;\n }\n private processComponentQueries(\n componentQueryInfos: QueryInfo[],\n globalStats: GlobalStatistics,\n ): QueryInfo[] {\n return componentQueryInfos.map((queryInfo) => {\n let rewrittenOrderByExpressions = queryInfo.orderByExpressions;\n if (queryInfo.orderBy && queryInfo.orderBy.length > 0) {\n if (!queryInfo.hasNonStreamingOrderBy) {\n throw new Error(\"The component query must have a non-streaming order by clause.\");\n }\n rewrittenOrderByExpressions = queryInfo.orderByExpressions.map((expr) =>\n this.replacePlaceholdersWorkaroud(expr, globalStats, componentQueryInfos.length),\n );\n }\n return {\n ...queryInfo,\n rewrittenQuery: this.replacePlaceholdersWorkaroud(\n queryInfo.rewrittenQuery,\n globalStats,\n componentQueryInfos.length,\n ),\n orderByExpressions: rewrittenOrderByExpressions,\n };\n });\n }\n // This method is commented currently, but we will switch back to using this\n // once the gateway has been redeployed with the fix for placeholder indexes\n // private replacePlaceholders(query: string, globalStats: GlobalStatistics): string {\n // // Replace total document count\n // query = query.replace(\n // new RegExp(`{${this.TOTAL_DOCUMENT_COUNT_PLACEHOLDER}}`, \"g\"),\n // globalStats.documentCount.toString(),\n // );\n\n // // Replace total word counts and hit counts from fullTextStatistics\n // globalStats.fullTextStatistics.forEach((stats, index) => {\n // // Replace total word counts\n // query = query.replace(\n // new RegExp(`{${this.TOTAL_WORD_COUNT_PLACEHOLDER}-${index}}`, \"g\"),\n // stats.totalWordCount.toString(),\n // );\n // // Replace hit counts\n // query = query.replace(\n // new RegExp(`{${this.HIT_COUNTS_ARRAY_PLACEHOLDER}-${index}}`, \"g\"),\n // `[${stats.hitCounts.join(\",\")}]`,\n // );\n // });\n\n // return query;\n // }\n\n private replacePlaceholdersWorkaroud(\n query: string,\n globalStats: GlobalStatistics,\n componentCount: number,\n ): string {\n if (\n !globalStats ||\n !globalStats.documentCount ||\n !Array.isArray(globalStats.fullTextStatistics)\n ) {\n throw new Error(\"GlobalStats validation failed\");\n }\n // Replace total document count\n query = query.replace(\n new RegExp(`{${this.TOTAL_DOCUMENT_COUNT_PLACEHOLDER}}`, \"g\"),\n globalStats.documentCount.toString(),\n );\n let statisticsIndex: number = 0;\n for (let i = 0; i < componentCount; i++) {\n // Replace total word counts and hit counts from fullTextStatistics\n const wordCountPlaceholder = `{${this.TOTAL_WORD_COUNT_PLACEHOLDER}-${i}}`;\n const hitCountPlaceholder = `{${this.HIT_COUNTS_ARRAY_PLACEHOLDER}-${i}}`;\n if (!query.includes(wordCountPlaceholder)) {\n continue;\n }\n const stats = globalStats.fullTextStatistics[statisticsIndex];\n // Replace total word counts\n query = query.replace(new RegExp(wordCountPlaceholder, \"g\"), stats.totalWordCount.toString());\n // Replace hit counts\n query = query.replace(new RegExp(hitCountPlaceholder, \"g\"), `[${stats.hitCounts.join(\",\")}]`);\n statisticsIndex++;\n }\n return query;\n }\n\n private computeRRFScore = (\n ranks: number[],\n k: number,\n componentWeights: ComponentWeight[],\n ): number => {\n if (ranks.length !== componentWeights.length) {\n throw new Error(\"Ranks and component weights length mismatch\");\n }\n let rrfScore = 0;\n for (let i = 0; i < ranks.length; i++) {\n const rank = ranks[i];\n const weight = componentWeights[i].weight;\n rrfScore += weight * (1 / (k + rank));\n }\n return rrfScore;\n };\n\n private extractComponentWeights(): ComponentWeight[] {\n const hybridSearchQueryInfo = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo;\n const useDefaultComponentWeight =\n !hybridSearchQueryInfo.componentWeights ||\n hybridSearchQueryInfo.componentWeights.length === 0;\n\n const result: {\n weight: number;\n comparator: (x: number, y: number) => number;\n }[] = [];\n\n for (let index = 0; index < hybridSearchQueryInfo.componentQueryInfos.length; ++index) {\n const queryInfo = hybridSearchQueryInfo.componentQueryInfos[index];\n\n if (queryInfo.orderBy && queryInfo.orderBy.length > 0) {\n if (!queryInfo.hasNonStreamingOrderBy) {\n throw new Error(\"The component query should have a non streaming order by\");\n }\n\n if (!queryInfo.orderByExpressions || queryInfo.orderByExpressions.length !== 1) {\n throw new Error(\"The component query should have exactly one order by expression\");\n }\n }\n const componentWeight = useDefaultComponentWeight\n ? 1\n : hybridSearchQueryInfo.componentWeights[index];\n const hasOrderBy = queryInfo.orderBy && queryInfo.orderBy.length > 0;\n const sortOrder = hasOrderBy && queryInfo.orderBy[0].includes(\"Ascending\") ? 1 : -1;\n result.push({\n weight: componentWeight,\n comparator: (x: number, y: number) => sortOrder * (x - y),\n });\n }\n return result;\n }\n}\n\nexport interface ComponentWeight {\n weight: number;\n comparator: (x: number, y: number) => number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryIterator.d.ts","sourceRoot":"","sources":["../../src/queryIterator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,sBAAsB,EAEvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAmB,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAGV,qBAAqB,EACrB,YAAY,EACb,MAAM,kCAAkC,CAAC;AAa1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAWzD;;;;GAIG;AACH,qBAAa,aAAa,CAAC,CAAC;IAYxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IAhBvB,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,sBAAsB,CAAgB;IAC9C,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,sBAAsB,CAAyB;IACvD;;OAEG;gBAEO,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,GAAG,MAAM,EAC5B,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,EAC/D,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,YAAY;IAYrC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACW,gBAAgB,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAkDhE;;;;OAIG;IACI,cAAc,IAAI,OAAO;IAIhC;;;;;;;;;;;;;;;;;;OAkBG;IAEU,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAMjD;;OAEG;IACU,gBAAgB,CAAC,cAAc,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAW/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACU,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IA0ClD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,KAAK,IAAI,IAAI;YAYN,qBAAqB;YAyCrB,sBAAsB;YAgBtB,iCAAiC;
|
|
1
|
+
{"version":3,"file":"queryIterator.d.ts","sourceRoot":"","sources":["../../src/queryIterator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,sBAAsB,EAEvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAmB,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAGV,qBAAqB,EACrB,YAAY,EACb,MAAM,kCAAkC,CAAC;AAa1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAWzD;;;;GAIG;AACH,qBAAa,aAAa,CAAC,CAAC;IAYxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IAhBvB,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,sBAAsB,CAAgB;IAC9C,OAAO,CAAC,qBAAqB,CAAmB;IAChD,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,sBAAsB,CAAyB;IACvD;;OAEG;gBAEO,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,GAAG,MAAM,EAC5B,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,EAC/D,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,YAAY;IAYrC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACW,gBAAgB,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAkDhE;;;;OAIG;IACI,cAAc,IAAI,OAAO;IAIhC;;;;;;;;;;;;;;;;;;OAkBG;IAEU,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAMjD;;OAEG;IACU,gBAAgB,CAAC,cAAc,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAW/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACU,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IA0ClD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,KAAK,IAAI,IAAI;YAYN,qBAAqB;YAyCrB,sBAAsB;YAgBtB,iCAAiC;YA6BjC,+BAA+B;YAiB/B,cAAc;IAiB5B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW,CAAgB;YAarB,KAAK;IAOnB,OAAO,CAAC,gBAAgB;CAYzB"}
|
|
@@ -304,7 +304,7 @@ export class QueryIterator {
|
|
|
304
304
|
isMaxInclusive: false,
|
|
305
305
|
};
|
|
306
306
|
});
|
|
307
|
-
this.queryExecutionContext = new HybridQueryExecutionContext(this.clientContext, this.resourceLink, this.options, queryPlan, this.correlatedActivityId, queryRanges);
|
|
307
|
+
this.queryExecutionContext = new HybridQueryExecutionContext(this.clientContext, this.resourceLink, this.query, this.options, queryPlan, this.correlatedActivityId, queryRanges);
|
|
308
308
|
}
|
|
309
309
|
async createPipelinedExecutionContext(queryPlan) {
|
|
310
310
|
const queryInfo = queryPlan.queryInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryIterator.js","sourceRoot":"","sources":["../../src/queryIterator.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/// <reference lib=\"esnext.asynciterable\" />\nimport type { ClientContext } from \"./ClientContext.js\";\nimport {\n DiagnosticNodeInternal,\n DiagnosticNodeType,\n} from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { getPathFromLink, ResourceType, StatusCodes } from \"./common/index.js\";\nimport type {\n CosmosHeaders,\n ExecutionContext,\n FetchFunctionCallback,\n SqlQuerySpec,\n} from \"./queryExecutionContext/index.js\";\nimport {\n DefaultQueryExecutionContext,\n getInitialHeader,\n mergeHeaders,\n PipelinedQueryExecutionContext,\n} from \"./queryExecutionContext/index.js\";\nimport type { Response } from \"./request/index.js\";\nimport type {\n ErrorResponse,\n PartitionedQueryExecutionInfo,\n QueryRange,\n} from \"./request/ErrorResponse.js\";\nimport type { FeedOptions } from \"./request/FeedOptions.js\";\nimport { FeedResponse } from \"./request/FeedResponse.js\";\nimport {\n getEmptyCosmosDiagnostics,\n withDiagnostics,\n withMetadataDiagnostics,\n} from \"./utils/diagnostics.js\";\nimport { MetadataLookUpType } from \"./CosmosDiagnostics.js\";\nimport { randomUUID } from \"@azure/core-util\";\nimport { HybridQueryExecutionContext } from \"./queryExecutionContext/hybridQueryExecutionContext.js\";\nimport { PartitionKeyRangeCache } from \"./routing/index.js\";\n\n/**\n * Represents a QueryIterator Object, an implementation of feed or query response that enables\n * traversal and iterating over the response\n * in the Azure Cosmos DB database service.\n */\nexport class QueryIterator<T> {\n private fetchAllTempResources: T[]; // TODO\n private fetchAllLastResHeaders: CosmosHeaders;\n private queryExecutionContext: ExecutionContext;\n private queryPlanPromise: Promise<Response<PartitionedQueryExecutionInfo>>;\n private isInitialized: boolean;\n private correlatedActivityId: string;\n private partitionKeyRangeCache: PartitionKeyRangeCache;\n /**\n * @hidden\n */\n constructor(\n private clientContext: ClientContext,\n private query: SqlQuerySpec | string,\n private options: FeedOptions,\n private fetchFunctions: FetchFunctionCallback | FetchFunctionCallback[],\n private resourceLink?: string,\n private resourceType?: ResourceType,\n ) {\n this.query = query;\n this.fetchFunctions = fetchFunctions;\n this.options = options || {};\n this.resourceLink = resourceLink;\n this.fetchAllLastResHeaders = getInitialHeader();\n this.reset();\n this.isInitialized = false;\n this.partitionKeyRangeCache = new PartitionKeyRangeCache(this.clientContext);\n }\n\n /**\n * Gets an async iterator that will yield results until completion.\n *\n * NOTE: AsyncIterators are a very new feature and you might need to\n * use polyfils/etc. in order to use them in your code.\n *\n * If you're using TypeScript, you can use the following polyfill as long\n * as you target ES6 or higher and are running on Node 6 or higher.\n *\n * ```ts snippet:ignore\n * if (!Symbol || !Symbol.asyncIterator) {\n * (Symbol as any).asyncIterator = Symbol.for(\"Symbol.asyncIterator\");\n * }\n * ```\n *\n * @example Iterate over all databases\n * ```ts snippet:QueryIteratorIterateDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * for await (const { resources: db } of client.databases.readAll().getAsyncIterator()) {\n * console.log(`Got ${db} from AsyncIterator`);\n * }\n * ```\n */\n public async *getAsyncIterator(): AsyncIterable<FeedResponse<T>> {\n const diagnosticNode = new DiagnosticNodeInternal(\n this.clientContext.diagnosticLevel,\n DiagnosticNodeType.CLIENT_REQUEST_NODE,\n null,\n );\n yield* this.getAsyncIteratorInternal(diagnosticNode);\n }\n /**\n * @internal\n */\n public async *getAsyncIteratorInternal(\n diagnosticNode: DiagnosticNodeInternal,\n ): AsyncIterable<FeedResponse<T>> {\n this.reset();\n this.queryPlanPromise = this.fetchQueryPlan(diagnosticNode);\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n\n const feedResponse = new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults(),\n diagnosticNode.toDiagnostic(this.clientContext.getClientConfig()),\n );\n diagnosticNode = new DiagnosticNodeInternal(\n this.clientContext.diagnosticLevel,\n DiagnosticNodeType.CLIENT_REQUEST_NODE,\n null,\n );\n if (response.result !== undefined) {\n yield feedResponse;\n }\n }\n }\n\n /**\n * Determine if there are still remaining resources to process based on the value of the continuation token or the\n * elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the QueryIterator.\n */\n public hasMoreResults(): boolean {\n return this.queryExecutionContext.hasMoreResults();\n }\n\n /**\n * Fetch all pages for the query and return a single FeedResponse.\n * @example\n * ```ts snippet:ReadmeSampleQueryDatabase\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n *\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const { resources } = await container.items\n * .query(\"SELECT * from c WHERE c.isCapitol = true\")\n * .fetchAll();\n * ```\n */\n\n public async fetchAll(): Promise<FeedResponse<T>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.fetchAllInternal(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async fetchAllInternal(diagnosticNode: DiagnosticNodeInternal): Promise<FeedResponse<T>> {\n this.reset();\n let response: FeedResponse<T>;\n try {\n response = await this.toArrayImplementation(diagnosticNode);\n } catch (error: any) {\n this.handleSplitError(error);\n }\n return response;\n }\n\n /**\n * Retrieve the next batch from the feed.\n *\n * This may or may not fetch more pages from the backend depending on your settings\n * and the type of query. Aggregate queries will generally fetch all backend pages\n * before returning the first batch of responses.\n *\n * @example\n * ```ts snippet:ReadmeSampleNonStreamableCrossPartitionQuery\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n *\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const querySpec = {\n * query: \"SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status\",\n * };\n * const queryOptions = {\n * maxItemCount: 10, // maximum number of items to return per page\n * enableCrossPartitionQuery: true,\n * };\n * const queryIterator = container.items.query(querySpec, queryOptions);\n * while (queryIterator.hasMoreResults()) {\n * const { resources: result } = await queryIterator.fetchNext();\n * // process results\n * }\n * ```\n */\n public async fetchNext(): Promise<FeedResponse<T>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.fetchNextInternal(diagnosticNode);\n }, this.clientContext);\n }\n /**\n * @internal\n */\n public async fetchNextInternal(diagnosticNode: DiagnosticNodeInternal): Promise<FeedResponse<T>> {\n this.queryPlanPromise = withMetadataDiagnostics(\n async (metadataNode: DiagnosticNodeInternal) => {\n return this.fetchQueryPlan(metadataNode);\n },\n diagnosticNode,\n MetadataLookUpType.QueryPlanLookUp,\n );\n if (!this.isInitialized) {\n await this.init(diagnosticNode);\n }\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n return new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults(),\n getEmptyCosmosDiagnostics(),\n );\n }\n\n /**\n * Reset the QueryIterator to the beginning and clear all the resources inside it\n * @example\n * ```ts snippet:QueryIteratorReset\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const querySpec = {\n * query: \"SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status\",\n * };\n * const queryIterator = container.items.query(querySpec);\n * while (queryIterator.hasMoreResults()) {\n * const { resources: result } = await queryIterator.fetchNext();\n * // process results\n * }\n * queryIterator.reset();\n * ```\n *\n */\n public reset(): void {\n this.correlatedActivityId = randomUUID();\n this.queryPlanPromise = undefined;\n this.fetchAllLastResHeaders = getInitialHeader();\n this.fetchAllTempResources = [];\n this.queryExecutionContext = new DefaultQueryExecutionContext(\n this.options,\n this.fetchFunctions,\n this.correlatedActivityId,\n );\n }\n\n private async toArrayImplementation(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<FeedResponse<T>> {\n this.queryPlanPromise = withMetadataDiagnostics(\n async (metadataNode: DiagnosticNodeInternal) => {\n return this.fetchQueryPlan(metadataNode);\n },\n diagnosticNode,\n MetadataLookUpType.QueryPlanLookUp,\n );\n // this.queryPlanPromise = this.fetchQueryPlan(diagnosticNode);\n if (!this.isInitialized) {\n await this.init(diagnosticNode);\n }\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } else {\n throw error;\n }\n }\n const { result, headers } = response;\n // concatenate the results and fetch more\n mergeHeaders(this.fetchAllLastResHeaders, headers);\n if (result) {\n this.fetchAllTempResources.push(...result);\n }\n }\n return new FeedResponse(\n this.fetchAllTempResources,\n this.fetchAllLastResHeaders,\n this.queryExecutionContext.hasMoreResults(),\n getEmptyCosmosDiagnostics(),\n );\n }\n\n private async createExecutionContext(diagnosticNode?: DiagnosticNodeInternal): Promise<void> {\n const queryPlanResponse = await this.queryPlanPromise;\n\n // We always coerce queryPlanPromise to resolved. So if it errored, we need to manually inspect the resolved value\n if (queryPlanResponse instanceof Error) {\n throw queryPlanResponse;\n }\n\n const queryPlan: PartitionedQueryExecutionInfo = queryPlanResponse.result;\n if (queryPlan.hybridSearchQueryInfo && queryPlan.hybridSearchQueryInfo !== null) {\n await this.createHybridQueryExecutionContext(queryPlan, diagnosticNode);\n } else {\n await this.createPipelinedExecutionContext(queryPlan);\n }\n }\n\n private async createHybridQueryExecutionContext(\n queryPlan: PartitionedQueryExecutionInfo,\n diagnosticNode?: DiagnosticNodeInternal,\n ): Promise<void> {\n const allPartitionKeyRanges = (\n await this.partitionKeyRangeCache.onCollectionRoutingMap(this.resourceLink, diagnosticNode)\n ).getOrderedParitionKeyRanges();\n\n // convert allPartitionKeyRanges to QueryRanges\n const queryRanges: QueryRange[] = allPartitionKeyRanges.map((partitionKeyRange) => {\n return {\n min: partitionKeyRange.minInclusive,\n max: partitionKeyRange.maxExclusive,\n isMinInclusive: true,\n isMaxInclusive: false,\n };\n });\n\n this.queryExecutionContext = new HybridQueryExecutionContext(\n this.clientContext,\n this.resourceLink,\n this.options,\n queryPlan,\n this.correlatedActivityId,\n queryRanges,\n );\n }\n\n private async createPipelinedExecutionContext(\n queryPlan: PartitionedQueryExecutionInfo,\n ): Promise<void> {\n const queryInfo = queryPlan.queryInfo;\n if (queryInfo.aggregates.length > 0 && queryInfo.hasSelectValue === false) {\n throw new Error(\"Aggregate queries must use the VALUE keyword\");\n }\n this.queryExecutionContext = new PipelinedQueryExecutionContext(\n this.clientContext,\n this.resourceLink,\n this.query,\n this.options,\n queryPlan,\n this.correlatedActivityId,\n );\n }\n\n private async fetchQueryPlan(diagnosticNode: DiagnosticNodeInternal): Promise<any> {\n if (!this.queryPlanPromise && this.resourceType === ResourceType.item) {\n return this.clientContext\n .getQueryPlan(\n getPathFromLink(this.resourceLink) + \"/docs\",\n ResourceType.item,\n this.resourceLink,\n this.query,\n this.options,\n diagnosticNode,\n this.correlatedActivityId,\n )\n .catch((error: any) => error); // Without this catch, node reports an unhandled rejection. So we stash the promise as resolved even if it errored.\n }\n return this.queryPlanPromise;\n }\n\n private needsQueryPlan(error: ErrorResponse): error is ErrorResponse {\n if (\n error.body?.additionalErrorInfo ||\n error.message.includes(\"Cross partition query only supports\")\n ) {\n return error.code === StatusCodes.BadRequest && this.resourceType === ResourceType.item;\n } else {\n throw error;\n }\n }\n\n private initPromise: Promise<void>;\n /**\n * @internal\n */\n public async init(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.isInitialized === true) {\n return;\n }\n if (this.initPromise === undefined) {\n this.initPromise = this._init(diagnosticNode);\n }\n return this.initPromise;\n }\n private async _init(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.options.forceQueryPlan === true && this.resourceType === ResourceType.item) {\n await this.createExecutionContext(diagnosticNode);\n }\n this.isInitialized = true;\n }\n\n private handleSplitError(err: any): void {\n if (err.code === 410) {\n const error = new Error(\n \"Encountered partition split and could not recover. This request is retryable\",\n ) as any;\n error.code = 503;\n error.originalError = err;\n throw error;\n } else {\n throw err;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"queryIterator.js","sourceRoot":"","sources":["../../src/queryIterator.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/// <reference lib=\"esnext.asynciterable\" />\nimport type { ClientContext } from \"./ClientContext.js\";\nimport {\n DiagnosticNodeInternal,\n DiagnosticNodeType,\n} from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { getPathFromLink, ResourceType, StatusCodes } from \"./common/index.js\";\nimport type {\n CosmosHeaders,\n ExecutionContext,\n FetchFunctionCallback,\n SqlQuerySpec,\n} from \"./queryExecutionContext/index.js\";\nimport {\n DefaultQueryExecutionContext,\n getInitialHeader,\n mergeHeaders,\n PipelinedQueryExecutionContext,\n} from \"./queryExecutionContext/index.js\";\nimport type { Response } from \"./request/index.js\";\nimport type {\n ErrorResponse,\n PartitionedQueryExecutionInfo,\n QueryRange,\n} from \"./request/ErrorResponse.js\";\nimport type { FeedOptions } from \"./request/FeedOptions.js\";\nimport { FeedResponse } from \"./request/FeedResponse.js\";\nimport {\n getEmptyCosmosDiagnostics,\n withDiagnostics,\n withMetadataDiagnostics,\n} from \"./utils/diagnostics.js\";\nimport { MetadataLookUpType } from \"./CosmosDiagnostics.js\";\nimport { randomUUID } from \"@azure/core-util\";\nimport { HybridQueryExecutionContext } from \"./queryExecutionContext/hybridQueryExecutionContext.js\";\nimport { PartitionKeyRangeCache } from \"./routing/index.js\";\n\n/**\n * Represents a QueryIterator Object, an implementation of feed or query response that enables\n * traversal and iterating over the response\n * in the Azure Cosmos DB database service.\n */\nexport class QueryIterator<T> {\n private fetchAllTempResources: T[]; // TODO\n private fetchAllLastResHeaders: CosmosHeaders;\n private queryExecutionContext: ExecutionContext;\n private queryPlanPromise: Promise<Response<PartitionedQueryExecutionInfo>>;\n private isInitialized: boolean;\n private correlatedActivityId: string;\n private partitionKeyRangeCache: PartitionKeyRangeCache;\n /**\n * @hidden\n */\n constructor(\n private clientContext: ClientContext,\n private query: SqlQuerySpec | string,\n private options: FeedOptions,\n private fetchFunctions: FetchFunctionCallback | FetchFunctionCallback[],\n private resourceLink?: string,\n private resourceType?: ResourceType,\n ) {\n this.query = query;\n this.fetchFunctions = fetchFunctions;\n this.options = options || {};\n this.resourceLink = resourceLink;\n this.fetchAllLastResHeaders = getInitialHeader();\n this.reset();\n this.isInitialized = false;\n this.partitionKeyRangeCache = new PartitionKeyRangeCache(this.clientContext);\n }\n\n /**\n * Gets an async iterator that will yield results until completion.\n *\n * NOTE: AsyncIterators are a very new feature and you might need to\n * use polyfils/etc. in order to use them in your code.\n *\n * If you're using TypeScript, you can use the following polyfill as long\n * as you target ES6 or higher and are running on Node 6 or higher.\n *\n * ```ts snippet:ignore\n * if (!Symbol || !Symbol.asyncIterator) {\n * (Symbol as any).asyncIterator = Symbol.for(\"Symbol.asyncIterator\");\n * }\n * ```\n *\n * @example Iterate over all databases\n * ```ts snippet:QueryIteratorIterateDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * for await (const { resources: db } of client.databases.readAll().getAsyncIterator()) {\n * console.log(`Got ${db} from AsyncIterator`);\n * }\n * ```\n */\n public async *getAsyncIterator(): AsyncIterable<FeedResponse<T>> {\n const diagnosticNode = new DiagnosticNodeInternal(\n this.clientContext.diagnosticLevel,\n DiagnosticNodeType.CLIENT_REQUEST_NODE,\n null,\n );\n yield* this.getAsyncIteratorInternal(diagnosticNode);\n }\n /**\n * @internal\n */\n public async *getAsyncIteratorInternal(\n diagnosticNode: DiagnosticNodeInternal,\n ): AsyncIterable<FeedResponse<T>> {\n this.reset();\n this.queryPlanPromise = this.fetchQueryPlan(diagnosticNode);\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n\n const feedResponse = new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults(),\n diagnosticNode.toDiagnostic(this.clientContext.getClientConfig()),\n );\n diagnosticNode = new DiagnosticNodeInternal(\n this.clientContext.diagnosticLevel,\n DiagnosticNodeType.CLIENT_REQUEST_NODE,\n null,\n );\n if (response.result !== undefined) {\n yield feedResponse;\n }\n }\n }\n\n /**\n * Determine if there are still remaining resources to process based on the value of the continuation token or the\n * elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the QueryIterator.\n */\n public hasMoreResults(): boolean {\n return this.queryExecutionContext.hasMoreResults();\n }\n\n /**\n * Fetch all pages for the query and return a single FeedResponse.\n * @example\n * ```ts snippet:ReadmeSampleQueryDatabase\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n *\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const { resources } = await container.items\n * .query(\"SELECT * from c WHERE c.isCapitol = true\")\n * .fetchAll();\n * ```\n */\n\n public async fetchAll(): Promise<FeedResponse<T>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.fetchAllInternal(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async fetchAllInternal(diagnosticNode: DiagnosticNodeInternal): Promise<FeedResponse<T>> {\n this.reset();\n let response: FeedResponse<T>;\n try {\n response = await this.toArrayImplementation(diagnosticNode);\n } catch (error: any) {\n this.handleSplitError(error);\n }\n return response;\n }\n\n /**\n * Retrieve the next batch from the feed.\n *\n * This may or may not fetch more pages from the backend depending on your settings\n * and the type of query. Aggregate queries will generally fetch all backend pages\n * before returning the first batch of responses.\n *\n * @example\n * ```ts snippet:ReadmeSampleNonStreamableCrossPartitionQuery\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n *\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n *\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const querySpec = {\n * query: \"SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status\",\n * };\n * const queryOptions = {\n * maxItemCount: 10, // maximum number of items to return per page\n * enableCrossPartitionQuery: true,\n * };\n * const queryIterator = container.items.query(querySpec, queryOptions);\n * while (queryIterator.hasMoreResults()) {\n * const { resources: result } = await queryIterator.fetchNext();\n * // process results\n * }\n * ```\n */\n public async fetchNext(): Promise<FeedResponse<T>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.fetchNextInternal(diagnosticNode);\n }, this.clientContext);\n }\n /**\n * @internal\n */\n public async fetchNextInternal(diagnosticNode: DiagnosticNodeInternal): Promise<FeedResponse<T>> {\n this.queryPlanPromise = withMetadataDiagnostics(\n async (metadataNode: DiagnosticNodeInternal) => {\n return this.fetchQueryPlan(metadataNode);\n },\n diagnosticNode,\n MetadataLookUpType.QueryPlanLookUp,\n );\n if (!this.isInitialized) {\n await this.init(diagnosticNode);\n }\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n return new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults(),\n getEmptyCosmosDiagnostics(),\n );\n }\n\n /**\n * Reset the QueryIterator to the beginning and clear all the resources inside it\n * @example\n * ```ts snippet:QueryIteratorReset\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { database } = await client.databases.createIfNotExists({ id: \"Test Database\" });\n * const { container } = await database.containers.createIfNotExists({ id: \"Test Container\" });\n *\n * const querySpec = {\n * query: \"SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status\",\n * };\n * const queryIterator = container.items.query(querySpec);\n * while (queryIterator.hasMoreResults()) {\n * const { resources: result } = await queryIterator.fetchNext();\n * // process results\n * }\n * queryIterator.reset();\n * ```\n *\n */\n public reset(): void {\n this.correlatedActivityId = randomUUID();\n this.queryPlanPromise = undefined;\n this.fetchAllLastResHeaders = getInitialHeader();\n this.fetchAllTempResources = [];\n this.queryExecutionContext = new DefaultQueryExecutionContext(\n this.options,\n this.fetchFunctions,\n this.correlatedActivityId,\n );\n }\n\n private async toArrayImplementation(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<FeedResponse<T>> {\n this.queryPlanPromise = withMetadataDiagnostics(\n async (metadataNode: DiagnosticNodeInternal) => {\n return this.fetchQueryPlan(metadataNode);\n },\n diagnosticNode,\n MetadataLookUpType.QueryPlanLookUp,\n );\n // this.queryPlanPromise = this.fetchQueryPlan(diagnosticNode);\n if (!this.isInitialized) {\n await this.init(diagnosticNode);\n }\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createExecutionContext(diagnosticNode);\n response = await this.queryExecutionContext.fetchMore(diagnosticNode);\n } else {\n throw error;\n }\n }\n const { result, headers } = response;\n // concatenate the results and fetch more\n mergeHeaders(this.fetchAllLastResHeaders, headers);\n if (result) {\n this.fetchAllTempResources.push(...result);\n }\n }\n return new FeedResponse(\n this.fetchAllTempResources,\n this.fetchAllLastResHeaders,\n this.queryExecutionContext.hasMoreResults(),\n getEmptyCosmosDiagnostics(),\n );\n }\n\n private async createExecutionContext(diagnosticNode?: DiagnosticNodeInternal): Promise<void> {\n const queryPlanResponse = await this.queryPlanPromise;\n\n // We always coerce queryPlanPromise to resolved. So if it errored, we need to manually inspect the resolved value\n if (queryPlanResponse instanceof Error) {\n throw queryPlanResponse;\n }\n\n const queryPlan: PartitionedQueryExecutionInfo = queryPlanResponse.result;\n if (queryPlan.hybridSearchQueryInfo && queryPlan.hybridSearchQueryInfo !== null) {\n await this.createHybridQueryExecutionContext(queryPlan, diagnosticNode);\n } else {\n await this.createPipelinedExecutionContext(queryPlan);\n }\n }\n\n private async createHybridQueryExecutionContext(\n queryPlan: PartitionedQueryExecutionInfo,\n diagnosticNode?: DiagnosticNodeInternal,\n ): Promise<void> {\n const allPartitionKeyRanges = (\n await this.partitionKeyRangeCache.onCollectionRoutingMap(this.resourceLink, diagnosticNode)\n ).getOrderedParitionKeyRanges();\n\n // convert allPartitionKeyRanges to QueryRanges\n const queryRanges: QueryRange[] = allPartitionKeyRanges.map((partitionKeyRange) => {\n return {\n min: partitionKeyRange.minInclusive,\n max: partitionKeyRange.maxExclusive,\n isMinInclusive: true,\n isMaxInclusive: false,\n };\n });\n\n this.queryExecutionContext = new HybridQueryExecutionContext(\n this.clientContext,\n this.resourceLink,\n this.query,\n this.options,\n queryPlan,\n this.correlatedActivityId,\n queryRanges,\n );\n }\n\n private async createPipelinedExecutionContext(\n queryPlan: PartitionedQueryExecutionInfo,\n ): Promise<void> {\n const queryInfo = queryPlan.queryInfo;\n if (queryInfo.aggregates.length > 0 && queryInfo.hasSelectValue === false) {\n throw new Error(\"Aggregate queries must use the VALUE keyword\");\n }\n this.queryExecutionContext = new PipelinedQueryExecutionContext(\n this.clientContext,\n this.resourceLink,\n this.query,\n this.options,\n queryPlan,\n this.correlatedActivityId,\n );\n }\n\n private async fetchQueryPlan(diagnosticNode: DiagnosticNodeInternal): Promise<any> {\n if (!this.queryPlanPromise && this.resourceType === ResourceType.item) {\n return this.clientContext\n .getQueryPlan(\n getPathFromLink(this.resourceLink) + \"/docs\",\n ResourceType.item,\n this.resourceLink,\n this.query,\n this.options,\n diagnosticNode,\n this.correlatedActivityId,\n )\n .catch((error: any) => error); // Without this catch, node reports an unhandled rejection. So we stash the promise as resolved even if it errored.\n }\n return this.queryPlanPromise;\n }\n\n private needsQueryPlan(error: ErrorResponse): error is ErrorResponse {\n if (\n error.body?.additionalErrorInfo ||\n error.message.includes(\"Cross partition query only supports\")\n ) {\n return error.code === StatusCodes.BadRequest && this.resourceType === ResourceType.item;\n } else {\n throw error;\n }\n }\n\n private initPromise: Promise<void>;\n /**\n * @internal\n */\n public async init(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.isInitialized === true) {\n return;\n }\n if (this.initPromise === undefined) {\n this.initPromise = this._init(diagnosticNode);\n }\n return this.initPromise;\n }\n private async _init(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.options.forceQueryPlan === true && this.resourceType === ResourceType.item) {\n await this.createExecutionContext(diagnosticNode);\n }\n this.isInitialized = true;\n }\n\n private handleSplitError(err: any): void {\n if (err.code === 410) {\n const error = new Error(\n \"Encountered partition split and could not recover. This request is retryable\",\n ) as any;\n error.code = 503;\n error.originalError = err;\n throw error;\n } else {\n throw err;\n }\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type { ClientContext } from "../ClientContext.js";
|
|
|
2
2
|
import type { DiagnosticNodeInternal } from "../diagnostics/DiagnosticNodeInternal.js";
|
|
3
3
|
import type { FeedOptions, PartitionedQueryExecutionInfo, QueryRange, Response } from "../request/index.js";
|
|
4
4
|
import type { ExecutionContext } from "./ExecutionContext.js";
|
|
5
|
+
import { SqlQuerySpec } from "./SqlQuerySpec.js";
|
|
5
6
|
/** @hidden */
|
|
6
7
|
export declare enum HybridQueryExecutionContextBaseStates {
|
|
7
8
|
uninitialized = "uninitialized",
|
|
@@ -12,6 +13,7 @@ export declare enum HybridQueryExecutionContextBaseStates {
|
|
|
12
13
|
export declare class HybridQueryExecutionContext implements ExecutionContext {
|
|
13
14
|
private clientContext;
|
|
14
15
|
private collectionLink;
|
|
16
|
+
private query;
|
|
15
17
|
private options;
|
|
16
18
|
private partitionedQueryExecutionInfo;
|
|
17
19
|
private correlatedActivityId;
|
|
@@ -32,7 +34,7 @@ export declare class HybridQueryExecutionContext implements ExecutionContext {
|
|
|
32
34
|
private hybridSearchResult;
|
|
33
35
|
private uniqueItems;
|
|
34
36
|
private isSingleComponent;
|
|
35
|
-
constructor(clientContext: ClientContext, collectionLink: string, options: FeedOptions, partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo, correlatedActivityId: string, allPartitionsRanges: QueryRange[]);
|
|
37
|
+
constructor(clientContext: ClientContext, collectionLink: string, query: string | SqlQuerySpec, options: FeedOptions, partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo, correlatedActivityId: string, allPartitionsRanges: QueryRange[]);
|
|
36
38
|
nextItem(diagnosticNode: DiagnosticNodeInternal): Promise<Response<any>>;
|
|
37
39
|
hasMoreResults(): boolean;
|
|
38
40
|
fetchMore(diagnosticNode?: DiagnosticNodeInternal): Promise<Response<any>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridQueryExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EACV,WAAW,EAEX,6BAA6B,EAE7B,UAAU,EACV,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"hybridQueryExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/hybridQueryExecutionContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EACV,WAAW,EAEX,6BAA6B,EAE7B,UAAU,EACV,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,cAAc;AACd,oBAAY,qCAAqC;IAC/C,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AACD,qBAAa,2BAA4B,YAAW,gBAAgB;IAoBhE,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,mBAAmB;IAzB7B,OAAO,CAAC,gCAAgC,CAAmB;IAC3D,OAAO,CAAC,0BAA0B,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,0BAA0B,CAA6B;IAC/D,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,4BAA4B,CAA4D;IAChG,OAAO,CAAC,4BAA4B,CAA4D;IAChG,OAAO,CAAC,gCAAgC,CACuB;IAC/D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,MAAM,CAAkE;IAChF,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,iBAAiB,CAAkB;gBAGjC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GAAG,YAAY,EAC5B,OAAO,EAAE,WAAW,EACpB,6BAA6B,EAAE,6BAA6B,EAC5D,oBAAoB,EAAE,MAAM,EAC5B,mBAAmB,EAAE,UAAU,EAAE;IAsC9B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAiB9E,cAAc,IAAI,OAAO;IAenB,SAAS,CAAC,cAAc,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAKzE,iBAAiB;YA2BjB,UAAU;YA4BV,uBAAuB;IAyDrC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,wBAAwB;YAUlB,KAAK;YAqBL,QAAQ;IAoBtB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,gCAAgC;YAiD1B,oBAAoB;IAoDlC,OAAO,CAAC,gCAAgC;IAqCxC,OAAO,CAAC,uBAAuB;IAmD/B,OAAO,CAAC,4BAA4B;IAmCpC,OAAO,CAAC,eAAe,CAerB;IAEF,OAAO,CAAC,uBAAuB;CAmChC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C"}
|
|
@@ -18,9 +18,10 @@ var HybridQueryExecutionContextBaseStates;
|
|
|
18
18
|
HybridQueryExecutionContextBaseStates["done"] = "done";
|
|
19
19
|
})(HybridQueryExecutionContextBaseStates || (exports.HybridQueryExecutionContextBaseStates = HybridQueryExecutionContextBaseStates = {}));
|
|
20
20
|
class HybridQueryExecutionContext {
|
|
21
|
-
constructor(clientContext, collectionLink, options, partitionedQueryExecutionInfo, correlatedActivityId, allPartitionsRanges) {
|
|
21
|
+
constructor(clientContext, collectionLink, query, options, partitionedQueryExecutionInfo, correlatedActivityId, allPartitionsRanges) {
|
|
22
22
|
this.clientContext = clientContext;
|
|
23
23
|
this.collectionLink = collectionLink;
|
|
24
|
+
this.query = query;
|
|
24
25
|
this.options = options;
|
|
25
26
|
this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo;
|
|
26
27
|
this.correlatedActivityId = correlatedActivityId;
|
|
@@ -367,6 +368,7 @@ class HybridQueryExecutionContext {
|
|
|
367
368
|
}
|
|
368
369
|
}
|
|
369
370
|
createComponentExecutionContexts() {
|
|
371
|
+
var _a, _b;
|
|
370
372
|
// rewrite queries based on global statistics
|
|
371
373
|
let queryInfos = this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.componentQueryInfos;
|
|
372
374
|
if (this.partitionedQueryExecutionInfo.hybridSearchQueryInfo.requiresGlobalStatistics) {
|
|
@@ -379,7 +381,13 @@ class HybridQueryExecutionContext {
|
|
|
379
381
|
queryInfo: componentQueryInfo,
|
|
380
382
|
queryRanges: this.partitionedQueryExecutionInfo.queryRanges,
|
|
381
383
|
};
|
|
382
|
-
const
|
|
384
|
+
const rewrittenSqlQuerySpec = typeof this.query === "string"
|
|
385
|
+
? componentQueryInfo.rewrittenQuery
|
|
386
|
+
: {
|
|
387
|
+
query: componentQueryInfo.rewrittenQuery,
|
|
388
|
+
parameters: (_b = (_a = this.query) === null || _a === void 0 ? void 0 : _a.parameters) !== null && _b !== void 0 ? _b : [],
|
|
389
|
+
};
|
|
390
|
+
const executionContext = new pipelinedQueryExecutionContext_js_1.PipelinedQueryExecutionContext(this.clientContext, this.collectionLink, rewrittenSqlQuerySpec, this.options, componentPartitionExecutionInfo, this.correlatedActivityId, this.emitRawOrderByPayload);
|
|
383
391
|
this.componentsExecutionContext.push(executionContext);
|
|
384
392
|
}
|
|
385
393
|
this.isSingleComponent = this.componentsExecutionContext.length === 1;
|