@azure/cosmos 4.4.1 → 4.5.0-alpha.20250718.3

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.
Files changed (489) hide show
  1. package/dist/browser/ClientContext.d.ts +19 -10
  2. package/dist/browser/ClientContext.d.ts.map +1 -1
  3. package/dist/browser/ClientContext.js +30 -11
  4. package/dist/browser/ClientContext.js.map +1 -1
  5. package/dist/browser/CosmosClient.d.ts.map +1 -1
  6. package/dist/browser/CosmosClient.js +13 -2
  7. package/dist/browser/CosmosClient.js.map +1 -1
  8. package/dist/browser/PartitionKeyRangeFailoverInfo.d.ts +49 -0
  9. package/dist/browser/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
  10. package/dist/browser/PartitionKeyRangeFailoverInfo.js +130 -0
  11. package/dist/browser/PartitionKeyRangeFailoverInfo.js.map +1 -0
  12. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  13. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.js +4 -0
  14. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  15. package/dist/browser/client/ClientUtils.d.ts +3 -1
  16. package/dist/browser/client/ClientUtils.d.ts.map +1 -1
  17. package/dist/browser/client/ClientUtils.js +10 -0
  18. package/dist/browser/client/ClientUtils.js.map +1 -1
  19. package/dist/browser/client/Item/Item.d.ts.map +1 -1
  20. package/dist/browser/client/Item/Item.js +13 -0
  21. package/dist/browser/client/Item/Item.js.map +1 -1
  22. package/dist/browser/client/Item/Items.d.ts +1 -0
  23. package/dist/browser/client/Item/Items.d.ts.map +1 -1
  24. package/dist/browser/client/Item/Items.js +29 -3
  25. package/dist/browser/client/Item/Items.js.map +1 -1
  26. package/dist/browser/common/constants.d.ts +20 -0
  27. package/dist/browser/common/constants.d.ts.map +1 -1
  28. package/dist/browser/common/constants.js +23 -1
  29. package/dist/browser/common/constants.js.map +1 -1
  30. package/dist/browser/common/platform.d.ts +6 -1
  31. package/dist/browser/common/platform.d.ts.map +1 -1
  32. package/dist/browser/common/platform.js +23 -4
  33. package/dist/browser/common/platform.js.map +1 -1
  34. package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  35. package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  36. package/dist/browser/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  37. package/dist/browser/documents/ConnectionPolicy.d.ts +6 -0
  38. package/dist/browser/documents/ConnectionPolicy.d.ts.map +1 -1
  39. package/dist/browser/documents/ConnectionPolicy.js +2 -0
  40. package/dist/browser/documents/ConnectionPolicy.js.map +1 -1
  41. package/dist/browser/documents/DatabaseAccount.d.ts.map +1 -1
  42. package/dist/browser/documents/DatabaseAccount.js +3 -0
  43. package/dist/browser/documents/DatabaseAccount.js.map +1 -1
  44. package/dist/browser/documents/PartitionKeyDefinition.d.ts +1 -1
  45. package/dist/browser/documents/PartitionKeyDefinition.js.map +1 -1
  46. package/dist/browser/encryption/EncryptionKeyStoreProvider.d.ts.map +1 -1
  47. package/dist/browser/encryption/EncryptionKeyStoreProvider.js +2 -1
  48. package/dist/browser/encryption/EncryptionKeyStoreProvider.js.map +1 -1
  49. package/dist/browser/extractPartitionKey.d.ts.map +1 -1
  50. package/dist/browser/extractPartitionKey.js +33 -20
  51. package/dist/browser/extractPartitionKey.js.map +1 -1
  52. package/dist/browser/globalEndpointManager.d.ts +6 -0
  53. package/dist/browser/globalEndpointManager.d.ts.map +1 -1
  54. package/dist/browser/globalEndpointManager.js +9 -4
  55. package/dist/browser/globalEndpointManager.js.map +1 -1
  56. package/dist/browser/globalPartitionEndpointManager.d.ts +79 -0
  57. package/dist/browser/globalPartitionEndpointManager.d.ts.map +1 -0
  58. package/dist/browser/globalPartitionEndpointManager.js +278 -0
  59. package/dist/browser/globalPartitionEndpointManager.js.map +1 -0
  60. package/dist/browser/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
  61. package/dist/browser/queryExecutionContext/Aggregators/index.js +1 -0
  62. package/dist/browser/queryExecutionContext/Aggregators/index.js.map +1 -1
  63. package/dist/browser/queryExecutionContext/documentProducer.d.ts +2 -3
  64. package/dist/browser/queryExecutionContext/documentProducer.d.ts.map +1 -1
  65. package/dist/browser/queryExecutionContext/documentProducer.js +16 -21
  66. package/dist/browser/queryExecutionContext/documentProducer.js.map +1 -1
  67. package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
  68. package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
  69. package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
  70. package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
  71. package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
  72. package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
  73. package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
  74. package/dist/browser/queryIterator.d.ts.map +1 -1
  75. package/dist/browser/queryIterator.js +2 -3
  76. package/dist/browser/queryIterator.js.map +1 -1
  77. package/dist/browser/request/ErrorResponse.d.ts +1 -1
  78. package/dist/browser/request/ErrorResponse.d.ts.map +1 -1
  79. package/dist/browser/request/ErrorResponse.js.map +1 -1
  80. package/dist/browser/request/RequestContext.d.ts +5 -0
  81. package/dist/browser/request/RequestContext.d.ts.map +1 -1
  82. package/dist/browser/request/RequestContext.js.map +1 -1
  83. package/dist/browser/request/RequestHandler.d.ts.map +1 -1
  84. package/dist/browser/request/RequestHandler.js +14 -4
  85. package/dist/browser/request/RequestHandler.js.map +1 -1
  86. package/dist/browser/request/request.d.ts.map +1 -1
  87. package/dist/browser/request/request.js +3 -3
  88. package/dist/browser/request/request.js.map +1 -1
  89. package/dist/browser/retry/RetryPolicy.d.ts +2 -2
  90. package/dist/browser/retry/RetryPolicy.d.ts.map +1 -1
  91. package/dist/browser/retry/RetryPolicy.js.map +1 -1
  92. package/dist/browser/retry/defaultRetryPolicy.d.ts.map +1 -1
  93. package/dist/browser/retry/defaultRetryPolicy.js +4 -8
  94. package/dist/browser/retry/defaultRetryPolicy.js.map +1 -1
  95. package/dist/browser/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
  96. package/dist/browser/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
  97. package/dist/browser/retry/endpointDiscoveryRetryPolicy.js +9 -2
  98. package/dist/browser/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
  99. package/dist/browser/retry/retryUtility.d.ts.map +1 -1
  100. package/dist/browser/retry/retryUtility.js +11 -5
  101. package/dist/browser/retry/retryUtility.js.map +1 -1
  102. package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
  103. package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  104. package/dist/browser/retry/timeoutFailoverRetryPolicy.js +15 -7
  105. package/dist/browser/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  106. package/dist/browser/routing/partitionKeyRangeCache.d.ts.map +1 -1
  107. package/dist/browser/routing/partitionKeyRangeCache.js +11 -0
  108. package/dist/browser/routing/partitionKeyRangeCache.js.map +1 -1
  109. package/dist/browser/utils/checkURL.js +6 -0
  110. package/dist/browser/utils/checkURL.js.map +1 -1
  111. package/dist/browser/utils/hashing/hash.d.ts +2 -0
  112. package/dist/browser/utils/hashing/hash.d.ts.map +1 -1
  113. package/dist/browser/utils/hashing/hash.js +19 -0
  114. package/dist/browser/utils/hashing/hash.js.map +1 -1
  115. package/dist/browser/utils/time.d.ts +8 -0
  116. package/dist/browser/utils/time.d.ts.map +1 -1
  117. package/dist/browser/utils/time.js +19 -0
  118. package/dist/browser/utils/time.js.map +1 -1
  119. package/dist/commonjs/ClientContext.d.ts +19 -10
  120. package/dist/commonjs/ClientContext.d.ts.map +1 -1
  121. package/dist/commonjs/ClientContext.js +30 -11
  122. package/dist/commonjs/ClientContext.js.map +1 -1
  123. package/dist/commonjs/CosmosClient.d.ts.map +1 -1
  124. package/dist/commonjs/CosmosClient.js +13 -2
  125. package/dist/commonjs/CosmosClient.js.map +1 -1
  126. package/dist/commonjs/PartitionKeyRangeFailoverInfo.d.ts +49 -0
  127. package/dist/commonjs/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
  128. package/dist/commonjs/PartitionKeyRangeFailoverInfo.js +135 -0
  129. package/dist/commonjs/PartitionKeyRangeFailoverInfo.js.map +1 -0
  130. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  131. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.js +4 -0
  132. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  133. package/dist/commonjs/client/ClientUtils.d.ts +3 -1
  134. package/dist/commonjs/client/ClientUtils.d.ts.map +1 -1
  135. package/dist/commonjs/client/ClientUtils.js +11 -0
  136. package/dist/commonjs/client/ClientUtils.js.map +1 -1
  137. package/dist/commonjs/client/Item/Item.d.ts.map +1 -1
  138. package/dist/commonjs/client/Item/Item.js +13 -0
  139. package/dist/commonjs/client/Item/Item.js.map +1 -1
  140. package/dist/commonjs/client/Item/Items.d.ts +1 -0
  141. package/dist/commonjs/client/Item/Items.d.ts.map +1 -1
  142. package/dist/commonjs/client/Item/Items.js +27 -1
  143. package/dist/commonjs/client/Item/Items.js.map +1 -1
  144. package/dist/commonjs/common/constants.d.ts +20 -0
  145. package/dist/commonjs/common/constants.d.ts.map +1 -1
  146. package/dist/commonjs/common/constants.js +24 -2
  147. package/dist/commonjs/common/constants.js.map +1 -1
  148. package/dist/commonjs/common/platform.d.ts +6 -1
  149. package/dist/commonjs/common/platform.d.ts.map +1 -1
  150. package/dist/commonjs/common/platform.js +23 -3
  151. package/dist/commonjs/common/platform.js.map +1 -1
  152. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  153. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  154. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  155. package/dist/commonjs/documents/ConnectionPolicy.d.ts +6 -0
  156. package/dist/commonjs/documents/ConnectionPolicy.d.ts.map +1 -1
  157. package/dist/commonjs/documents/ConnectionPolicy.js +2 -0
  158. package/dist/commonjs/documents/ConnectionPolicy.js.map +1 -1
  159. package/dist/commonjs/documents/DatabaseAccount.d.ts.map +1 -1
  160. package/dist/commonjs/documents/DatabaseAccount.js +3 -0
  161. package/dist/commonjs/documents/DatabaseAccount.js.map +1 -1
  162. package/dist/commonjs/documents/PartitionKeyDefinition.d.ts +1 -1
  163. package/dist/commonjs/documents/PartitionKeyDefinition.js.map +1 -1
  164. package/dist/commonjs/encryption/Cache/ProtectedDataEncryptionKeyCache.d.ts.map +1 -1
  165. package/dist/commonjs/encryption/Cache/ProtectedDataEncryptionKeyCache.js +2 -1
  166. package/dist/commonjs/encryption/Cache/ProtectedDataEncryptionKeyCache.js.map +1 -1
  167. package/dist/commonjs/encryption/EncryptionKeyStoreProvider.d.ts.map +1 -1
  168. package/dist/commonjs/encryption/EncryptionKeyStoreProvider.js +2 -1
  169. package/dist/commonjs/encryption/EncryptionKeyStoreProvider.js.map +1 -1
  170. package/dist/commonjs/extractPartitionKey.d.ts.map +1 -1
  171. package/dist/commonjs/extractPartitionKey.js +33 -20
  172. package/dist/commonjs/extractPartitionKey.js.map +1 -1
  173. package/dist/commonjs/globalEndpointManager.d.ts +6 -0
  174. package/dist/commonjs/globalEndpointManager.d.ts.map +1 -1
  175. package/dist/commonjs/globalEndpointManager.js +10 -5
  176. package/dist/commonjs/globalEndpointManager.js.map +1 -1
  177. package/dist/commonjs/globalPartitionEndpointManager.d.ts +79 -0
  178. package/dist/commonjs/globalPartitionEndpointManager.d.ts.map +1 -0
  179. package/dist/commonjs/globalPartitionEndpointManager.js +282 -0
  180. package/dist/commonjs/globalPartitionEndpointManager.js.map +1 -0
  181. package/dist/commonjs/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
  182. package/dist/commonjs/queryExecutionContext/Aggregators/index.js +1 -0
  183. package/dist/commonjs/queryExecutionContext/Aggregators/index.js.map +1 -1
  184. package/dist/commonjs/queryExecutionContext/documentProducer.d.ts +2 -3
  185. package/dist/commonjs/queryExecutionContext/documentProducer.d.ts.map +1 -1
  186. package/dist/commonjs/queryExecutionContext/documentProducer.js +15 -20
  187. package/dist/commonjs/queryExecutionContext/documentProducer.js.map +1 -1
  188. package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
  189. package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
  190. package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
  191. package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
  192. package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
  193. package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
  194. package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
  195. package/dist/commonjs/queryIterator.d.ts.map +1 -1
  196. package/dist/commonjs/queryIterator.js +2 -3
  197. package/dist/commonjs/queryIterator.js.map +1 -1
  198. package/dist/commonjs/request/ErrorResponse.d.ts +1 -1
  199. package/dist/commonjs/request/ErrorResponse.d.ts.map +1 -1
  200. package/dist/commonjs/request/ErrorResponse.js.map +1 -1
  201. package/dist/commonjs/request/RequestContext.d.ts +5 -0
  202. package/dist/commonjs/request/RequestContext.d.ts.map +1 -1
  203. package/dist/commonjs/request/RequestContext.js.map +1 -1
  204. package/dist/commonjs/request/RequestHandler.d.ts.map +1 -1
  205. package/dist/commonjs/request/RequestHandler.js +12 -2
  206. package/dist/commonjs/request/RequestHandler.js.map +1 -1
  207. package/dist/commonjs/request/defaultAgent.js +4 -4
  208. package/dist/commonjs/request/defaultAgent.js.map +1 -1
  209. package/dist/commonjs/request/request.d.ts.map +1 -1
  210. package/dist/commonjs/request/request.js +3 -3
  211. package/dist/commonjs/request/request.js.map +1 -1
  212. package/dist/commonjs/retry/RetryPolicy.d.ts +2 -2
  213. package/dist/commonjs/retry/RetryPolicy.d.ts.map +1 -1
  214. package/dist/commonjs/retry/RetryPolicy.js.map +1 -1
  215. package/dist/commonjs/retry/defaultRetryPolicy.d.ts.map +1 -1
  216. package/dist/commonjs/retry/defaultRetryPolicy.js +3 -7
  217. package/dist/commonjs/retry/defaultRetryPolicy.js.map +1 -1
  218. package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
  219. package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
  220. package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.js +9 -2
  221. package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
  222. package/dist/commonjs/retry/retryUtility.d.ts.map +1 -1
  223. package/dist/commonjs/retry/retryUtility.js +11 -5
  224. package/dist/commonjs/retry/retryUtility.js.map +1 -1
  225. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
  226. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  227. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js +15 -7
  228. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  229. package/dist/commonjs/routing/partitionKeyRangeCache.d.ts.map +1 -1
  230. package/dist/commonjs/routing/partitionKeyRangeCache.js +11 -0
  231. package/dist/commonjs/routing/partitionKeyRangeCache.js.map +1 -1
  232. package/dist/commonjs/tsdoc-metadata.json +11 -11
  233. package/dist/commonjs/utils/checkURL.js +7 -0
  234. package/dist/commonjs/utils/checkURL.js.map +1 -1
  235. package/dist/commonjs/utils/hashing/hash.d.ts +2 -0
  236. package/dist/commonjs/utils/hashing/hash.d.ts.map +1 -1
  237. package/dist/commonjs/utils/hashing/hash.js +20 -0
  238. package/dist/commonjs/utils/hashing/hash.js.map +1 -1
  239. package/dist/commonjs/utils/time.d.ts +8 -0
  240. package/dist/commonjs/utils/time.d.ts.map +1 -1
  241. package/dist/commonjs/utils/time.js +20 -0
  242. package/dist/commonjs/utils/time.js.map +1 -1
  243. package/dist/esm/ClientContext.d.ts +19 -10
  244. package/dist/esm/ClientContext.d.ts.map +1 -1
  245. package/dist/esm/ClientContext.js +30 -11
  246. package/dist/esm/ClientContext.js.map +1 -1
  247. package/dist/esm/CosmosClient.d.ts.map +1 -1
  248. package/dist/esm/CosmosClient.js +13 -2
  249. package/dist/esm/CosmosClient.js.map +1 -1
  250. package/dist/esm/PartitionKeyRangeFailoverInfo.d.ts +49 -0
  251. package/dist/esm/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
  252. package/dist/esm/PartitionKeyRangeFailoverInfo.js +130 -0
  253. package/dist/esm/PartitionKeyRangeFailoverInfo.js.map +1 -0
  254. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  255. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.js +4 -0
  256. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  257. package/dist/esm/client/ClientUtils.d.ts +3 -1
  258. package/dist/esm/client/ClientUtils.d.ts.map +1 -1
  259. package/dist/esm/client/ClientUtils.js +10 -0
  260. package/dist/esm/client/ClientUtils.js.map +1 -1
  261. package/dist/esm/client/Item/Item.d.ts.map +1 -1
  262. package/dist/esm/client/Item/Item.js +13 -0
  263. package/dist/esm/client/Item/Item.js.map +1 -1
  264. package/dist/esm/client/Item/Items.d.ts +1 -0
  265. package/dist/esm/client/Item/Items.d.ts.map +1 -1
  266. package/dist/esm/client/Item/Items.js +29 -3
  267. package/dist/esm/client/Item/Items.js.map +1 -1
  268. package/dist/esm/common/constants.d.ts +20 -0
  269. package/dist/esm/common/constants.d.ts.map +1 -1
  270. package/dist/esm/common/constants.js +23 -1
  271. package/dist/esm/common/constants.js.map +1 -1
  272. package/dist/esm/common/platform.d.ts +6 -1
  273. package/dist/esm/common/platform.d.ts.map +1 -1
  274. package/dist/esm/common/platform.js +23 -4
  275. package/dist/esm/common/platform.js.map +1 -1
  276. package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  277. package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  278. package/dist/esm/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  279. package/dist/esm/documents/ConnectionPolicy.d.ts +6 -0
  280. package/dist/esm/documents/ConnectionPolicy.d.ts.map +1 -1
  281. package/dist/esm/documents/ConnectionPolicy.js +2 -0
  282. package/dist/esm/documents/ConnectionPolicy.js.map +1 -1
  283. package/dist/esm/documents/DatabaseAccount.d.ts.map +1 -1
  284. package/dist/esm/documents/DatabaseAccount.js +3 -0
  285. package/dist/esm/documents/DatabaseAccount.js.map +1 -1
  286. package/dist/esm/documents/PartitionKeyDefinition.d.ts +1 -1
  287. package/dist/esm/documents/PartitionKeyDefinition.js.map +1 -1
  288. package/dist/esm/encryption/Cache/ProtectedDataEncryptionKeyCache.d.ts.map +1 -1
  289. package/dist/esm/encryption/Cache/ProtectedDataEncryptionKeyCache.js +2 -1
  290. package/dist/esm/encryption/Cache/ProtectedDataEncryptionKeyCache.js.map +1 -1
  291. package/dist/esm/encryption/EncryptionKeyStoreProvider.d.ts.map +1 -1
  292. package/dist/esm/encryption/EncryptionKeyStoreProvider.js +2 -1
  293. package/dist/esm/encryption/EncryptionKeyStoreProvider.js.map +1 -1
  294. package/dist/esm/extractPartitionKey.d.ts.map +1 -1
  295. package/dist/esm/extractPartitionKey.js +33 -20
  296. package/dist/esm/extractPartitionKey.js.map +1 -1
  297. package/dist/esm/globalEndpointManager.d.ts +6 -0
  298. package/dist/esm/globalEndpointManager.d.ts.map +1 -1
  299. package/dist/esm/globalEndpointManager.js +9 -4
  300. package/dist/esm/globalEndpointManager.js.map +1 -1
  301. package/dist/esm/globalPartitionEndpointManager.d.ts +79 -0
  302. package/dist/esm/globalPartitionEndpointManager.d.ts.map +1 -0
  303. package/dist/esm/globalPartitionEndpointManager.js +278 -0
  304. package/dist/esm/globalPartitionEndpointManager.js.map +1 -0
  305. package/dist/esm/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
  306. package/dist/esm/queryExecutionContext/Aggregators/index.js +1 -0
  307. package/dist/esm/queryExecutionContext/Aggregators/index.js.map +1 -1
  308. package/dist/esm/queryExecutionContext/documentProducer.d.ts +2 -3
  309. package/dist/esm/queryExecutionContext/documentProducer.d.ts.map +1 -1
  310. package/dist/esm/queryExecutionContext/documentProducer.js +16 -21
  311. package/dist/esm/queryExecutionContext/documentProducer.js.map +1 -1
  312. package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
  313. package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
  314. package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
  315. package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
  316. package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
  317. package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
  318. package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
  319. package/dist/esm/queryIterator.d.ts.map +1 -1
  320. package/dist/esm/queryIterator.js +2 -3
  321. package/dist/esm/queryIterator.js.map +1 -1
  322. package/dist/esm/request/ErrorResponse.d.ts +1 -1
  323. package/dist/esm/request/ErrorResponse.d.ts.map +1 -1
  324. package/dist/esm/request/ErrorResponse.js.map +1 -1
  325. package/dist/esm/request/RequestContext.d.ts +5 -0
  326. package/dist/esm/request/RequestContext.d.ts.map +1 -1
  327. package/dist/esm/request/RequestContext.js.map +1 -1
  328. package/dist/esm/request/RequestHandler.d.ts.map +1 -1
  329. package/dist/esm/request/RequestHandler.js +14 -4
  330. package/dist/esm/request/RequestHandler.js.map +1 -1
  331. package/dist/esm/request/defaultAgent.js +2 -2
  332. package/dist/esm/request/defaultAgent.js.map +1 -1
  333. package/dist/esm/request/request.d.ts.map +1 -1
  334. package/dist/esm/request/request.js +3 -3
  335. package/dist/esm/request/request.js.map +1 -1
  336. package/dist/esm/retry/RetryPolicy.d.ts +2 -2
  337. package/dist/esm/retry/RetryPolicy.d.ts.map +1 -1
  338. package/dist/esm/retry/RetryPolicy.js.map +1 -1
  339. package/dist/esm/retry/defaultRetryPolicy.d.ts.map +1 -1
  340. package/dist/esm/retry/defaultRetryPolicy.js +4 -8
  341. package/dist/esm/retry/defaultRetryPolicy.js.map +1 -1
  342. package/dist/esm/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
  343. package/dist/esm/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
  344. package/dist/esm/retry/endpointDiscoveryRetryPolicy.js +9 -2
  345. package/dist/esm/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
  346. package/dist/esm/retry/retryUtility.d.ts.map +1 -1
  347. package/dist/esm/retry/retryUtility.js +11 -5
  348. package/dist/esm/retry/retryUtility.js.map +1 -1
  349. package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
  350. package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  351. package/dist/esm/retry/timeoutFailoverRetryPolicy.js +15 -7
  352. package/dist/esm/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  353. package/dist/esm/routing/partitionKeyRangeCache.d.ts.map +1 -1
  354. package/dist/esm/routing/partitionKeyRangeCache.js +11 -0
  355. package/dist/esm/routing/partitionKeyRangeCache.js.map +1 -1
  356. package/dist/esm/utils/checkURL.js +6 -0
  357. package/dist/esm/utils/checkURL.js.map +1 -1
  358. package/dist/esm/utils/hashing/hash.d.ts +2 -0
  359. package/dist/esm/utils/hashing/hash.d.ts.map +1 -1
  360. package/dist/esm/utils/hashing/hash.js +19 -0
  361. package/dist/esm/utils/hashing/hash.js.map +1 -1
  362. package/dist/esm/utils/time.d.ts +8 -0
  363. package/dist/esm/utils/time.d.ts.map +1 -1
  364. package/dist/esm/utils/time.js +19 -0
  365. package/dist/esm/utils/time.js.map +1 -1
  366. package/dist/react-native/ClientContext.d.ts +19 -10
  367. package/dist/react-native/ClientContext.d.ts.map +1 -1
  368. package/dist/react-native/ClientContext.js +30 -11
  369. package/dist/react-native/ClientContext.js.map +1 -1
  370. package/dist/react-native/CosmosClient.d.ts.map +1 -1
  371. package/dist/react-native/CosmosClient.js +13 -2
  372. package/dist/react-native/CosmosClient.js.map +1 -1
  373. package/dist/react-native/PartitionKeyRangeFailoverInfo.d.ts +49 -0
  374. package/dist/react-native/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
  375. package/dist/react-native/PartitionKeyRangeFailoverInfo.js +130 -0
  376. package/dist/react-native/PartitionKeyRangeFailoverInfo.js.map +1 -0
  377. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  378. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.js +4 -0
  379. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  380. package/dist/react-native/client/ClientUtils.d.ts +3 -1
  381. package/dist/react-native/client/ClientUtils.d.ts.map +1 -1
  382. package/dist/react-native/client/ClientUtils.js +10 -0
  383. package/dist/react-native/client/ClientUtils.js.map +1 -1
  384. package/dist/react-native/client/Item/Item.d.ts.map +1 -1
  385. package/dist/react-native/client/Item/Item.js +13 -0
  386. package/dist/react-native/client/Item/Item.js.map +1 -1
  387. package/dist/react-native/client/Item/Items.d.ts +1 -0
  388. package/dist/react-native/client/Item/Items.d.ts.map +1 -1
  389. package/dist/react-native/client/Item/Items.js +29 -3
  390. package/dist/react-native/client/Item/Items.js.map +1 -1
  391. package/dist/react-native/common/constants.d.ts +20 -0
  392. package/dist/react-native/common/constants.d.ts.map +1 -1
  393. package/dist/react-native/common/constants.js +23 -1
  394. package/dist/react-native/common/constants.js.map +1 -1
  395. package/dist/react-native/common/platform.d.ts +6 -1
  396. package/dist/react-native/common/platform.d.ts.map +1 -1
  397. package/dist/react-native/common/platform.js +23 -4
  398. package/dist/react-native/common/platform.js.map +1 -1
  399. package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  400. package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  401. package/dist/react-native/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  402. package/dist/react-native/documents/ConnectionPolicy.d.ts +6 -0
  403. package/dist/react-native/documents/ConnectionPolicy.d.ts.map +1 -1
  404. package/dist/react-native/documents/ConnectionPolicy.js +2 -0
  405. package/dist/react-native/documents/ConnectionPolicy.js.map +1 -1
  406. package/dist/react-native/documents/DatabaseAccount.d.ts.map +1 -1
  407. package/dist/react-native/documents/DatabaseAccount.js +3 -0
  408. package/dist/react-native/documents/DatabaseAccount.js.map +1 -1
  409. package/dist/react-native/documents/PartitionKeyDefinition.d.ts +1 -1
  410. package/dist/react-native/documents/PartitionKeyDefinition.js.map +1 -1
  411. package/dist/react-native/encryption/Cache/ProtectedDataEncryptionKeyCache.d.ts.map +1 -1
  412. package/dist/react-native/encryption/Cache/ProtectedDataEncryptionKeyCache.js +2 -1
  413. package/dist/react-native/encryption/Cache/ProtectedDataEncryptionKeyCache.js.map +1 -1
  414. package/dist/react-native/encryption/EncryptionKeyStoreProvider.d.ts.map +1 -1
  415. package/dist/react-native/encryption/EncryptionKeyStoreProvider.js +2 -1
  416. package/dist/react-native/encryption/EncryptionKeyStoreProvider.js.map +1 -1
  417. package/dist/react-native/extractPartitionKey.d.ts.map +1 -1
  418. package/dist/react-native/extractPartitionKey.js +33 -20
  419. package/dist/react-native/extractPartitionKey.js.map +1 -1
  420. package/dist/react-native/globalEndpointManager.d.ts +6 -0
  421. package/dist/react-native/globalEndpointManager.d.ts.map +1 -1
  422. package/dist/react-native/globalEndpointManager.js +9 -4
  423. package/dist/react-native/globalEndpointManager.js.map +1 -1
  424. package/dist/react-native/globalPartitionEndpointManager.d.ts +79 -0
  425. package/dist/react-native/globalPartitionEndpointManager.d.ts.map +1 -0
  426. package/dist/react-native/globalPartitionEndpointManager.js +278 -0
  427. package/dist/react-native/globalPartitionEndpointManager.js.map +1 -0
  428. package/dist/react-native/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
  429. package/dist/react-native/queryExecutionContext/Aggregators/index.js +1 -0
  430. package/dist/react-native/queryExecutionContext/Aggregators/index.js.map +1 -1
  431. package/dist/react-native/queryExecutionContext/documentProducer.d.ts +2 -3
  432. package/dist/react-native/queryExecutionContext/documentProducer.d.ts.map +1 -1
  433. package/dist/react-native/queryExecutionContext/documentProducer.js +16 -21
  434. package/dist/react-native/queryExecutionContext/documentProducer.js.map +1 -1
  435. package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
  436. package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
  437. package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
  438. package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
  439. package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
  440. package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
  441. package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
  442. package/dist/react-native/queryIterator.d.ts.map +1 -1
  443. package/dist/react-native/queryIterator.js +2 -3
  444. package/dist/react-native/queryIterator.js.map +1 -1
  445. package/dist/react-native/request/ErrorResponse.d.ts +1 -1
  446. package/dist/react-native/request/ErrorResponse.d.ts.map +1 -1
  447. package/dist/react-native/request/ErrorResponse.js.map +1 -1
  448. package/dist/react-native/request/RequestContext.d.ts +5 -0
  449. package/dist/react-native/request/RequestContext.d.ts.map +1 -1
  450. package/dist/react-native/request/RequestContext.js.map +1 -1
  451. package/dist/react-native/request/RequestHandler.d.ts.map +1 -1
  452. package/dist/react-native/request/RequestHandler.js +14 -4
  453. package/dist/react-native/request/RequestHandler.js.map +1 -1
  454. package/dist/react-native/request/defaultAgent.js +2 -2
  455. package/dist/react-native/request/defaultAgent.js.map +1 -1
  456. package/dist/react-native/request/request.d.ts.map +1 -1
  457. package/dist/react-native/request/request.js +3 -3
  458. package/dist/react-native/request/request.js.map +1 -1
  459. package/dist/react-native/retry/RetryPolicy.d.ts +2 -2
  460. package/dist/react-native/retry/RetryPolicy.d.ts.map +1 -1
  461. package/dist/react-native/retry/RetryPolicy.js.map +1 -1
  462. package/dist/react-native/retry/defaultRetryPolicy.d.ts.map +1 -1
  463. package/dist/react-native/retry/defaultRetryPolicy.js +4 -8
  464. package/dist/react-native/retry/defaultRetryPolicy.js.map +1 -1
  465. package/dist/react-native/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
  466. package/dist/react-native/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
  467. package/dist/react-native/retry/endpointDiscoveryRetryPolicy.js +9 -2
  468. package/dist/react-native/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
  469. package/dist/react-native/retry/retryUtility.d.ts.map +1 -1
  470. package/dist/react-native/retry/retryUtility.js +11 -5
  471. package/dist/react-native/retry/retryUtility.js.map +1 -1
  472. package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
  473. package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  474. package/dist/react-native/retry/timeoutFailoverRetryPolicy.js +15 -7
  475. package/dist/react-native/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  476. package/dist/react-native/routing/partitionKeyRangeCache.d.ts.map +1 -1
  477. package/dist/react-native/routing/partitionKeyRangeCache.js +11 -0
  478. package/dist/react-native/routing/partitionKeyRangeCache.js.map +1 -1
  479. package/dist/react-native/utils/checkURL.js +6 -0
  480. package/dist/react-native/utils/checkURL.js.map +1 -1
  481. package/dist/react-native/utils/hashing/hash.d.ts +2 -0
  482. package/dist/react-native/utils/hashing/hash.d.ts.map +1 -1
  483. package/dist/react-native/utils/hashing/hash.js +19 -0
  484. package/dist/react-native/utils/hashing/hash.js.map +1 -1
  485. package/dist/react-native/utils/time.d.ts +8 -0
  486. package/dist/react-native/utils/time.d.ts.map +1 -1
  487. package/dist/react-native/utils/time.js +19 -0
  488. package/dist/react-native/utils/time.js.map +1 -1
  489. package/package.json +11 -11
@@ -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;AAK9D,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,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,mBAAmB;IAxB7B,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,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;IA8BxC,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"}
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 executionContext = new PipelinedQueryExecutionContext(this.clientContext, this.collectionLink, componentQueryInfo.rewrittenQuery, this.options, componentPartitionExecutionInfo, this.correlatedActivityId, this.emitRawOrderByPayload);
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":"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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\";\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":"parallelQueryExecutionContextBase.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/parallelQueryExecutionContextBase.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAIjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,sBAAsB,EAEvB,MAAM,0CAA0C,CAAC;AAKlD,cAAc;AACd,oBAAY,uCAAuC;IACjD,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,KAAK,UAAU;CAChB;AAED,cAAc;AACd,8BAAsB,iCAAkC,YAAW,gBAAgB;IA+B/E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,oBAAoB;IAnC9B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA2C;IAChE,OAAO,CAAC,eAAe,CAA0B;IACjD,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC;IAC1B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,8BAA8B,CAAkC;IACxE,OAAO,CAAC,8BAA8B,CAAkC;IAExE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,qBAAqB,CAG3B;IACF;;;;;;;;;;;;OAYG;gBAEO,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;IA4FtC,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAC3C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,gBAAgB,GACpB,MAAM;IAET,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,iCAAiC;IAMzC,OAAO,CAAC,iBAAiB;YAIX,wBAAwB;IAWtC;;OAEG;YACW,iCAAiC;YAgBjC,oCAAoC;IAkDlD,OAAO,CAAC,MAAM,CAAC,kCAAkC;IASjD;;;;OAIG;IACI,cAAc,IAAI,OAAO;IAOhC;;OAEG;IACH,OAAO,CAAC,2CAA2C;cAuCnC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAkC5D;;;;;OAKG;cACa,uBAAuB,CAAC,cAAc,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqG/F;;;;OAIG;cACa,yBAAyB,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqEpF,OAAO,CAAC,YAAY;CAmBrB"}
1
+ {"version":3,"file":"parallelQueryExecutionContextBase.d.ts","sourceRoot":"","sources":["../../../src/queryExecutionContext/parallelQueryExecutionContextBase.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAIjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,sBAAsB,EAEvB,MAAM,0CAA0C,CAAC;AAKlD,cAAc;AACd,oBAAY,uCAAuC;IACjD,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,KAAK,UAAU;CAChB;AAED,cAAc;AACd,8BAAsB,iCAAkC,YAAW,gBAAgB;IA+B/E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,6BAA6B;IACrC,OAAO,CAAC,oBAAoB;IAnC9B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA2C;IAChE,OAAO,CAAC,eAAe,CAA0B;IACjD,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC;IAC1B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,8BAA8B,CAAkC;IACxE,OAAO,CAAC,8BAA8B,CAAkC;IAExE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,qBAAqB,CAG3B;IACF;;;;;;;;;;;;OAYG;gBAEO,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;IA4FtC,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAC3C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,gBAAgB,GACpB,MAAM;IAET,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,iCAAiC;IAMzC,OAAO,CAAC,iBAAiB;YAIX,wBAAwB;IAWtC;;OAEG;YACW,iCAAiC;YAgBjC,oCAAoC;IAkDlD,OAAO,CAAC,MAAM,CAAC,kCAAkC;IASjD;;;;OAIG;IACI,cAAc,IAAI,OAAO;IAOhC;;OAEG;IACH,OAAO,CAAC,2CAA2C;cAuCnC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAkC5D;;;;;OAKG;cACa,uBAAuB,CAAC,cAAc,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsG/F;;;;OAIG;cACa,yBAAyB,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqEpF,OAAO,CAAC,YAAY;CAmBrB"}
@@ -286,7 +286,8 @@ export class ParallelQueryExecutionContextBase {
286
286
  }
287
287
  const bufferDocumentProducer = async (documentProducer) => {
288
288
  try {
289
- await documentProducer.bufferMore(diagnosticNode);
289
+ const headers = await documentProducer.bufferMore(diagnosticNode);
290
+ this._mergeWithActiveResponseHeaders(headers);
290
291
  // if buffer of document producer is filled, add it to the buffered document producers queue
291
292
  const nextItem = documentProducer.peakNextItem();
292
293
  if (nextItem !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"parallelQueryExecutionContextBase.js","sourceRoot":"","sources":["../../../src/queryExecutionContext/parallelQueryExecutionContextBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport PriorityQueue from \"priorityqueuejs\";\nimport semaphore from \"semaphore\";\nimport type { ClientContext } from \"../ClientContext.js\";\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport { StatusCodes, SubStatusCodes } from \"../common/statusCodes.js\";\nimport type { FeedOptions, Response } from \"../request/index.js\";\nimport type { PartitionedQueryExecutionInfo } from \"../request/ErrorResponse.js\";\nimport { QueryRange } from \"../routing/QueryRange.js\";\nimport { SmartRoutingMapProvider } from \"../routing/smartRoutingMapProvider.js\";\nimport type { CosmosHeaders } from \"./CosmosHeaders.js\";\nimport { DocumentProducer } from \"./documentProducer.js\";\nimport type { ExecutionContext } from \"./ExecutionContext.js\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils.js\";\nimport type { SqlQuerySpec } from \"./SqlQuerySpec.js\";\nimport {\n DiagnosticNodeInternal,\n DiagnosticNodeType,\n} from \"../diagnostics/DiagnosticNodeInternal.js\";\n\n/** @hidden */\nconst logger: AzureLogger = createClientLogger(\"parallelQueryExecutionContextBase\");\n\n/** @hidden */\nexport enum ParallelQueryExecutionContextBaseStates {\n started = \"started\",\n inProgress = \"inProgress\",\n ended = \"ended\",\n}\n\n/** @hidden */\nexport abstract class ParallelQueryExecutionContextBase implements ExecutionContext {\n private err: any;\n private state: any;\n private static STATES = ParallelQueryExecutionContextBaseStates;\n private routingProvider: SmartRoutingMapProvider;\n protected sortOrders: any;\n private requestContinuation: any;\n private respHeaders: CosmosHeaders;\n private unfilledDocumentProducersQueue: PriorityQueue<DocumentProducer>;\n private bufferedDocumentProducersQueue: PriorityQueue<DocumentProducer>;\n // TODO: update type of buffer from any --> generic can be used here\n private buffer: any[];\n private sem: any;\n private diagnosticNodeWrapper: {\n consumed: boolean;\n diagnosticNode: DiagnosticNodeInternal;\n };\n /**\n * Provides the ParallelQueryExecutionContextBase.\n * This is the base class that ParallelQueryExecutionContext and OrderByQueryExecutionContext will derive from.\n *\n * When handling a parallelized query, it instantiates one instance of\n * DocumentProcuder per target partition key range and aggregates the result of each.\n *\n * @param clientContext - The service endpoint to use to create the client.\n * @param collectionLink - The Collection Link\n * @param options - Represents the feed options.\n * @param partitionedQueryExecutionInfo - PartitionedQueryExecutionInfo\n * @hidden\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 ) {\n this.clientContext = clientContext;\n this.collectionLink = collectionLink;\n this.query = query;\n this.options = options;\n this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo;\n this.correlatedActivityId = correlatedActivityId;\n this.diagnosticNodeWrapper = {\n consumed: false,\n diagnosticNode: new DiagnosticNodeInternal(\n clientContext.diagnosticLevel,\n DiagnosticNodeType.PARALLEL_QUERY_NODE,\n null,\n ),\n };\n this.diagnosticNodeWrapper.diagnosticNode.addData({ stateful: true });\n this.err = undefined;\n this.state = ParallelQueryExecutionContextBase.STATES.started;\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n this.sortOrders = this.partitionedQueryExecutionInfo.queryInfo.orderBy;\n this.buffer = [];\n\n this.requestContinuation = options ? options.continuationToken || options.continuation : null;\n // response headers of undergoing operation\n this.respHeaders = getInitialHeader();\n // Make priority queue for documentProducers\n this.unfilledDocumentProducersQueue = new PriorityQueue<DocumentProducer>(\n (a: DocumentProducer, b: DocumentProducer) => a.generation - b.generation,\n );\n // The comparator is supplied by the derived class\n this.bufferedDocumentProducersQueue = new PriorityQueue<DocumentProducer>(\n (a: DocumentProducer, b: DocumentProducer) => this.documentProducerComparator(b, a),\n );\n // Creating the documentProducers\n this.sem = semaphore(1);\n const createDocumentProducersAndFillUpPriorityQueueFunc = async (): Promise<void> => {\n // ensure the lock is released after finishing up\n try {\n const targetPartitionRanges = await this._onTargetPartitionRanges();\n\n const maxDegreeOfParallelism =\n options.maxDegreeOfParallelism === undefined || options.maxDegreeOfParallelism < 1\n ? targetPartitionRanges.length\n : Math.min(options.maxDegreeOfParallelism, targetPartitionRanges.length);\n\n logger.info(\n \"Query starting against \" +\n targetPartitionRanges.length +\n \" ranges with parallelism of \" +\n maxDegreeOfParallelism,\n );\n\n let filteredPartitionKeyRanges = [];\n // The document producers generated from filteredPartitionKeyRanges\n const targetPartitionQueryExecutionContextList: DocumentProducer[] = [];\n\n if (this.requestContinuation) {\n throw new Error(\"Continuation tokens are not yet supported for cross partition queries\");\n } else {\n filteredPartitionKeyRanges = targetPartitionRanges;\n }\n // Create one documentProducer for each partitionTargetRange\n filteredPartitionKeyRanges.forEach((partitionTargetRange: any) => {\n // TODO: any partitionTargetRange\n // no async callback\n targetPartitionQueryExecutionContextList.push(\n this._createTargetPartitionQueryExecutionContext(partitionTargetRange, undefined),\n );\n });\n\n // Fill up our priority queue with documentProducers\n targetPartitionQueryExecutionContextList.forEach((documentProducer): void => {\n // has async callback\n try {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n } catch (e: any) {\n this.err = e;\n }\n });\n\n this.sem.leave();\n } catch (err: any) {\n this.err = err;\n // release the lock\n this.sem.leave();\n return;\n }\n };\n this.sem.take(createDocumentProducersAndFillUpPriorityQueueFunc);\n }\n\n protected abstract documentProducerComparator(\n dp1: DocumentProducer,\n dp2: DocumentProducer,\n ): number;\n\n private _mergeWithActiveResponseHeaders(headers: CosmosHeaders): void {\n mergeHeaders(this.respHeaders, headers);\n }\n\n private _getAndResetActiveResponseHeaders(): CosmosHeaders {\n const ret = this.respHeaders;\n this.respHeaders = getInitialHeader();\n return ret;\n }\n\n private getDiagnosticNode(): DiagnosticNodeInternal {\n return this.diagnosticNodeWrapper.diagnosticNode;\n }\n\n private async _onTargetPartitionRanges(): Promise<any[]> {\n // invokes the callback when the target partition ranges are ready\n const parsedRanges = this.partitionedQueryExecutionInfo.queryRanges;\n const queryRanges = parsedRanges.map((item) => QueryRange.parseFromDict(item));\n return this.routingProvider.getOverlappingRanges(\n this.collectionLink,\n queryRanges,\n this.getDiagnosticNode(),\n );\n }\n\n /**\n * Gets the replacement ranges for a partitionkeyrange that has been split\n */\n private async _getReplacementPartitionKeyRanges(\n documentProducer: DocumentProducer,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<any[]> {\n const partitionKeyRange = documentProducer.targetPartitionKeyRange;\n // Download the new routing map\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n // Get the queryRange that relates to this partitionKeyRange\n const queryRange = QueryRange.parsePartitionKeyRange(partitionKeyRange);\n return this.routingProvider.getOverlappingRanges(\n this.collectionLink,\n [queryRange],\n diagnosticNode,\n );\n }\n\n private async _enqueueReplacementDocumentProducers(\n error: any,\n diagnosticNode: DiagnosticNodeInternal,\n documentProducer: DocumentProducer,\n ): Promise<void> {\n // Get the replacement ranges\n const replacementPartitionKeyRanges = await this._getReplacementPartitionKeyRanges(\n documentProducer,\n diagnosticNode,\n );\n\n if (replacementPartitionKeyRanges.length === 0) {\n throw error;\n } else if (replacementPartitionKeyRanges.length === 1) {\n // Partition is gone due to Merge\n // Create the replacement documentProducer with populateEpkRangeHeaders Flag set to true to set startEpk and endEpk headers\n const replacementDocumentProducer = this._createTargetPartitionQueryExecutionContext(\n replacementPartitionKeyRanges[0],\n documentProducer.continuationToken,\n documentProducer.startEpk,\n documentProducer.endEpk,\n true,\n );\n\n this.unfilledDocumentProducersQueue.enq(replacementDocumentProducer);\n } else {\n // Create the replacement documentProducers\n const replacementDocumentProducers: DocumentProducer[] = [];\n replacementPartitionKeyRanges.forEach((partitionKeyRange) => {\n const queryRange = QueryRange.parsePartitionKeyRange(partitionKeyRange);\n // Create replacment document producers with the parent's continuationToken\n const replacementDocumentProducer = this._createTargetPartitionQueryExecutionContext(\n partitionKeyRange,\n documentProducer.continuationToken,\n queryRange.min,\n queryRange.max,\n false,\n );\n replacementDocumentProducers.push(replacementDocumentProducer);\n });\n\n // add document producers to the queue\n replacementDocumentProducers.forEach((replacementDocumentProducer) => {\n if (replacementDocumentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(replacementDocumentProducer);\n }\n });\n }\n }\n\n private static _needPartitionKeyRangeCacheRefresh(error: any): boolean {\n // TODO: any error\n return (\n error.code === StatusCodes.Gone &&\n \"substatus\" in error &&\n error[\"substatus\"] === SubStatusCodes.PartitionKeyRangeGone\n );\n }\n\n /**\n * Determine if there are still remaining resources to processs based on the value of the continuation\n * token or the elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the ParallelQueryExecutionContextBase.\n */\n public hasMoreResults(): boolean {\n return (\n !this.err &&\n (this.buffer.length > 0 || this.state !== ParallelQueryExecutionContextBase.STATES.ended)\n );\n }\n\n /**\n * Creates target partition range Query Execution Context\n */\n private _createTargetPartitionQueryExecutionContext(\n partitionKeyTargetRange: any,\n continuationToken?: any,\n startEpk?: string,\n endEpk?: string,\n populateEpkRangeHeaders?: boolean,\n ): DocumentProducer {\n let rewrittenQuery = this.partitionedQueryExecutionInfo.queryInfo.rewrittenQuery;\n let sqlQuerySpec: SqlQuerySpec;\n const query = this.query;\n if (typeof query === \"string\") {\n sqlQuerySpec = { query };\n } else {\n sqlQuerySpec = query;\n }\n\n const formatPlaceHolder = \"{documentdb-formattableorderbyquery-filter}\";\n if (rewrittenQuery) {\n sqlQuerySpec = JSON.parse(JSON.stringify(sqlQuerySpec));\n // We hardcode the formattable filter to true for now\n rewrittenQuery = rewrittenQuery.replace(formatPlaceHolder, \"true\");\n sqlQuerySpec[\"query\"] = rewrittenQuery;\n }\n\n const options = { ...this.options };\n options.continuationToken = continuationToken;\n\n return new DocumentProducer(\n this.clientContext,\n this.collectionLink,\n sqlQuerySpec,\n partitionKeyTargetRange,\n options,\n this.correlatedActivityId,\n startEpk,\n endEpk,\n populateEpkRangeHeaders,\n );\n }\n protected async drainBufferedItems(): Promise<Response<any>> {\n return new Promise<Response<any>>((resolve, reject) => {\n this.sem.take(() => {\n if (this.err) {\n // if there is a prior error return error\n this.sem.leave();\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n // return undefined if there is no more results\n if (this.buffer.length === 0) {\n this.sem.leave();\n return resolve({\n result: this.state === ParallelQueryExecutionContextBase.STATES.ended ? undefined : [],\n headers: this._getAndResetActiveResponseHeaders(),\n });\n }\n // draing the entire buffer object and return that in result of return object\n const bufferedResults = this.buffer;\n this.buffer = [];\n\n // release the lock before returning\n this.sem.leave();\n // invoke the callback on the item\n return resolve({\n result: bufferedResults,\n headers: this._getAndResetActiveResponseHeaders(),\n });\n });\n });\n }\n\n /**\n * Buffers document producers based on the maximum degree of parallelism.\n * Moves document producers from the unfilled queue to the buffered queue.\n * @param diagnosticNode - The diagnostic node for logging and tracing.\n * @returns A promise that resolves when buffering is complete.\n */\n protected async bufferDocumentProducers(diagnosticNode?: DiagnosticNodeInternal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.sem.take(async () => {\n if (this.err) {\n this.sem.leave();\n reject(this.err);\n return;\n }\n this.updateStates(this.err);\n\n if (this.state === ParallelQueryExecutionContextBase.STATES.ended) {\n this.sem.leave();\n resolve();\n return;\n }\n\n if (this.unfilledDocumentProducersQueue.size() === 0) {\n this.sem.leave();\n resolve();\n return;\n }\n\n try {\n const maxDegreeOfParallelism =\n this.options.maxDegreeOfParallelism === undefined ||\n this.options.maxDegreeOfParallelism < 1\n ? this.unfilledDocumentProducersQueue.size()\n : Math.min(\n this.options.maxDegreeOfParallelism,\n this.unfilledDocumentProducersQueue.size(),\n );\n\n const documentProducers: DocumentProducer[] = [];\n while (\n documentProducers.length < maxDegreeOfParallelism &&\n this.unfilledDocumentProducersQueue.size() > 0\n ) {\n let documentProducer: DocumentProducer;\n try {\n documentProducer = this.unfilledDocumentProducersQueue.deq();\n } catch (e: any) {\n this.err = e;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n documentProducers.push(documentProducer);\n }\n\n const bufferDocumentProducer = async (\n documentProducer: DocumentProducer,\n ): Promise<void> => {\n try {\n await documentProducer.bufferMore(diagnosticNode);\n // if buffer of document producer is filled, add it to the buffered document producers queue\n const nextItem = documentProducer.peakNextItem();\n if (nextItem !== undefined) {\n this.bufferedDocumentProducersQueue.enq(documentProducer);\n } else if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n }\n } catch (err) {\n if (ParallelQueryExecutionContextBase._needPartitionKeyRangeCacheRefresh(err)) {\n // We want the document producer enqueued\n // So that later parts of the code can repair the execution context\n // refresh the partition key ranges and ctreate new document producers and add it to the queue\n await this._enqueueReplacementDocumentProducers(\n err,\n diagnosticNode,\n documentProducer,\n );\n resolve();\n } else {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n }\n }\n };\n\n try {\n await Promise.all(\n documentProducers.map((producer) => bufferDocumentProducer(producer)),\n );\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n return;\n }\n resolve();\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n } finally {\n this.sem.leave();\n }\n });\n });\n }\n /**\n * Drains the buffer of filled document producers and appends their items to the main buffer.\n * @param isOrderBy - Indicates if the query is an order by query.\n * @returns A promise that resolves when the buffer is filled.\n */\n protected async fillBufferFromBufferQueue(isOrderBy: boolean = false): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.sem.take(async () => {\n if (this.err) {\n // if there is a prior error return error\n this.sem.leave();\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n if (\n this.state === ParallelQueryExecutionContextBase.STATES.ended ||\n this.bufferedDocumentProducersQueue.size() === 0\n ) {\n this.sem.leave();\n resolve();\n return;\n }\n\n try {\n if (isOrderBy) {\n while (\n this.unfilledDocumentProducersQueue.isEmpty() &&\n this.bufferedDocumentProducersQueue.size() > 0\n ) {\n const documentProducer = this.bufferedDocumentProducersQueue.deq();\n const { result, headers } = await documentProducer.fetchNextItem();\n this._mergeWithActiveResponseHeaders(headers);\n if (result) {\n this.buffer.push(result);\n }\n if (documentProducer.peakNextItem() !== undefined) {\n this.bufferedDocumentProducersQueue.enq(documentProducer);\n } else if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n } else {\n // no more results in document producer\n }\n }\n } else {\n while (this.bufferedDocumentProducersQueue.size() > 0) {\n const documentProducer = this.bufferedDocumentProducersQueue.deq();\n const { result, headers } = await documentProducer.fetchBufferedItems();\n this._mergeWithActiveResponseHeaders(headers);\n if (result) {\n this.buffer.push(...result);\n }\n if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n }\n }\n }\n this.updateStates(this.err);\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n } finally {\n // release the lock before returning\n this.sem.leave();\n }\n resolve();\n return;\n });\n });\n }\n\n private updateStates(error: any): void {\n if (error) {\n this.err = error;\n this.state = ParallelQueryExecutionContextBase.STATES.ended;\n return;\n }\n\n if (this.state === ParallelQueryExecutionContextBase.STATES.started) {\n this.state = ParallelQueryExecutionContextBase.STATES.inProgress;\n }\n\n const hasNoActiveProducers =\n this.unfilledDocumentProducersQueue.size() === 0 &&\n this.bufferedDocumentProducersQueue.size() === 0;\n\n if (hasNoActiveProducers) {\n this.state = ParallelQueryExecutionContextBase.STATES.ended;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"parallelQueryExecutionContextBase.js","sourceRoot":"","sources":["../../../src/queryExecutionContext/parallelQueryExecutionContextBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport PriorityQueue from \"priorityqueuejs\";\nimport semaphore from \"semaphore\";\nimport type { ClientContext } from \"../ClientContext.js\";\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport { StatusCodes, SubStatusCodes } from \"../common/statusCodes.js\";\nimport type { FeedOptions, Response } from \"../request/index.js\";\nimport type { PartitionedQueryExecutionInfo } from \"../request/ErrorResponse.js\";\nimport { QueryRange } from \"../routing/QueryRange.js\";\nimport { SmartRoutingMapProvider } from \"../routing/smartRoutingMapProvider.js\";\nimport type { CosmosHeaders } from \"./CosmosHeaders.js\";\nimport { DocumentProducer } from \"./documentProducer.js\";\nimport type { ExecutionContext } from \"./ExecutionContext.js\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils.js\";\nimport type { SqlQuerySpec } from \"./SqlQuerySpec.js\";\nimport {\n DiagnosticNodeInternal,\n DiagnosticNodeType,\n} from \"../diagnostics/DiagnosticNodeInternal.js\";\n\n/** @hidden */\nconst logger: AzureLogger = createClientLogger(\"parallelQueryExecutionContextBase\");\n\n/** @hidden */\nexport enum ParallelQueryExecutionContextBaseStates {\n started = \"started\",\n inProgress = \"inProgress\",\n ended = \"ended\",\n}\n\n/** @hidden */\nexport abstract class ParallelQueryExecutionContextBase implements ExecutionContext {\n private err: any;\n private state: any;\n private static STATES = ParallelQueryExecutionContextBaseStates;\n private routingProvider: SmartRoutingMapProvider;\n protected sortOrders: any;\n private requestContinuation: any;\n private respHeaders: CosmosHeaders;\n private unfilledDocumentProducersQueue: PriorityQueue<DocumentProducer>;\n private bufferedDocumentProducersQueue: PriorityQueue<DocumentProducer>;\n // TODO: update type of buffer from any --> generic can be used here\n private buffer: any[];\n private sem: any;\n private diagnosticNodeWrapper: {\n consumed: boolean;\n diagnosticNode: DiagnosticNodeInternal;\n };\n /**\n * Provides the ParallelQueryExecutionContextBase.\n * This is the base class that ParallelQueryExecutionContext and OrderByQueryExecutionContext will derive from.\n *\n * When handling a parallelized query, it instantiates one instance of\n * DocumentProcuder per target partition key range and aggregates the result of each.\n *\n * @param clientContext - The service endpoint to use to create the client.\n * @param collectionLink - The Collection Link\n * @param options - Represents the feed options.\n * @param partitionedQueryExecutionInfo - PartitionedQueryExecutionInfo\n * @hidden\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 ) {\n this.clientContext = clientContext;\n this.collectionLink = collectionLink;\n this.query = query;\n this.options = options;\n this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo;\n this.correlatedActivityId = correlatedActivityId;\n this.diagnosticNodeWrapper = {\n consumed: false,\n diagnosticNode: new DiagnosticNodeInternal(\n clientContext.diagnosticLevel,\n DiagnosticNodeType.PARALLEL_QUERY_NODE,\n null,\n ),\n };\n this.diagnosticNodeWrapper.diagnosticNode.addData({ stateful: true });\n this.err = undefined;\n this.state = ParallelQueryExecutionContextBase.STATES.started;\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n this.sortOrders = this.partitionedQueryExecutionInfo.queryInfo.orderBy;\n this.buffer = [];\n\n this.requestContinuation = options ? options.continuationToken || options.continuation : null;\n // response headers of undergoing operation\n this.respHeaders = getInitialHeader();\n // Make priority queue for documentProducers\n this.unfilledDocumentProducersQueue = new PriorityQueue<DocumentProducer>(\n (a: DocumentProducer, b: DocumentProducer) => a.generation - b.generation,\n );\n // The comparator is supplied by the derived class\n this.bufferedDocumentProducersQueue = new PriorityQueue<DocumentProducer>(\n (a: DocumentProducer, b: DocumentProducer) => this.documentProducerComparator(b, a),\n );\n // Creating the documentProducers\n this.sem = semaphore(1);\n const createDocumentProducersAndFillUpPriorityQueueFunc = async (): Promise<void> => {\n // ensure the lock is released after finishing up\n try {\n const targetPartitionRanges = await this._onTargetPartitionRanges();\n\n const maxDegreeOfParallelism =\n options.maxDegreeOfParallelism === undefined || options.maxDegreeOfParallelism < 1\n ? targetPartitionRanges.length\n : Math.min(options.maxDegreeOfParallelism, targetPartitionRanges.length);\n\n logger.info(\n \"Query starting against \" +\n targetPartitionRanges.length +\n \" ranges with parallelism of \" +\n maxDegreeOfParallelism,\n );\n\n let filteredPartitionKeyRanges = [];\n // The document producers generated from filteredPartitionKeyRanges\n const targetPartitionQueryExecutionContextList: DocumentProducer[] = [];\n\n if (this.requestContinuation) {\n throw new Error(\"Continuation tokens are not yet supported for cross partition queries\");\n } else {\n filteredPartitionKeyRanges = targetPartitionRanges;\n }\n // Create one documentProducer for each partitionTargetRange\n filteredPartitionKeyRanges.forEach((partitionTargetRange: any) => {\n // TODO: any partitionTargetRange\n // no async callback\n targetPartitionQueryExecutionContextList.push(\n this._createTargetPartitionQueryExecutionContext(partitionTargetRange, undefined),\n );\n });\n\n // Fill up our priority queue with documentProducers\n targetPartitionQueryExecutionContextList.forEach((documentProducer): void => {\n // has async callback\n try {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n } catch (e: any) {\n this.err = e;\n }\n });\n\n this.sem.leave();\n } catch (err: any) {\n this.err = err;\n // release the lock\n this.sem.leave();\n return;\n }\n };\n this.sem.take(createDocumentProducersAndFillUpPriorityQueueFunc);\n }\n\n protected abstract documentProducerComparator(\n dp1: DocumentProducer,\n dp2: DocumentProducer,\n ): number;\n\n private _mergeWithActiveResponseHeaders(headers: CosmosHeaders): void {\n mergeHeaders(this.respHeaders, headers);\n }\n\n private _getAndResetActiveResponseHeaders(): CosmosHeaders {\n const ret = this.respHeaders;\n this.respHeaders = getInitialHeader();\n return ret;\n }\n\n private getDiagnosticNode(): DiagnosticNodeInternal {\n return this.diagnosticNodeWrapper.diagnosticNode;\n }\n\n private async _onTargetPartitionRanges(): Promise<any[]> {\n // invokes the callback when the target partition ranges are ready\n const parsedRanges = this.partitionedQueryExecutionInfo.queryRanges;\n const queryRanges = parsedRanges.map((item) => QueryRange.parseFromDict(item));\n return this.routingProvider.getOverlappingRanges(\n this.collectionLink,\n queryRanges,\n this.getDiagnosticNode(),\n );\n }\n\n /**\n * Gets the replacement ranges for a partitionkeyrange that has been split\n */\n private async _getReplacementPartitionKeyRanges(\n documentProducer: DocumentProducer,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<any[]> {\n const partitionKeyRange = documentProducer.targetPartitionKeyRange;\n // Download the new routing map\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n // Get the queryRange that relates to this partitionKeyRange\n const queryRange = QueryRange.parsePartitionKeyRange(partitionKeyRange);\n return this.routingProvider.getOverlappingRanges(\n this.collectionLink,\n [queryRange],\n diagnosticNode,\n );\n }\n\n private async _enqueueReplacementDocumentProducers(\n error: any,\n diagnosticNode: DiagnosticNodeInternal,\n documentProducer: DocumentProducer,\n ): Promise<void> {\n // Get the replacement ranges\n const replacementPartitionKeyRanges = await this._getReplacementPartitionKeyRanges(\n documentProducer,\n diagnosticNode,\n );\n\n if (replacementPartitionKeyRanges.length === 0) {\n throw error;\n } else if (replacementPartitionKeyRanges.length === 1) {\n // Partition is gone due to Merge\n // Create the replacement documentProducer with populateEpkRangeHeaders Flag set to true to set startEpk and endEpk headers\n const replacementDocumentProducer = this._createTargetPartitionQueryExecutionContext(\n replacementPartitionKeyRanges[0],\n documentProducer.continuationToken,\n documentProducer.startEpk,\n documentProducer.endEpk,\n true,\n );\n\n this.unfilledDocumentProducersQueue.enq(replacementDocumentProducer);\n } else {\n // Create the replacement documentProducers\n const replacementDocumentProducers: DocumentProducer[] = [];\n replacementPartitionKeyRanges.forEach((partitionKeyRange) => {\n const queryRange = QueryRange.parsePartitionKeyRange(partitionKeyRange);\n // Create replacment document producers with the parent's continuationToken\n const replacementDocumentProducer = this._createTargetPartitionQueryExecutionContext(\n partitionKeyRange,\n documentProducer.continuationToken,\n queryRange.min,\n queryRange.max,\n false,\n );\n replacementDocumentProducers.push(replacementDocumentProducer);\n });\n\n // add document producers to the queue\n replacementDocumentProducers.forEach((replacementDocumentProducer) => {\n if (replacementDocumentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(replacementDocumentProducer);\n }\n });\n }\n }\n\n private static _needPartitionKeyRangeCacheRefresh(error: any): boolean {\n // TODO: any error\n return (\n error.code === StatusCodes.Gone &&\n \"substatus\" in error &&\n error[\"substatus\"] === SubStatusCodes.PartitionKeyRangeGone\n );\n }\n\n /**\n * Determine if there are still remaining resources to processs based on the value of the continuation\n * token or the elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the ParallelQueryExecutionContextBase.\n */\n public hasMoreResults(): boolean {\n return (\n !this.err &&\n (this.buffer.length > 0 || this.state !== ParallelQueryExecutionContextBase.STATES.ended)\n );\n }\n\n /**\n * Creates target partition range Query Execution Context\n */\n private _createTargetPartitionQueryExecutionContext(\n partitionKeyTargetRange: any,\n continuationToken?: any,\n startEpk?: string,\n endEpk?: string,\n populateEpkRangeHeaders?: boolean,\n ): DocumentProducer {\n let rewrittenQuery = this.partitionedQueryExecutionInfo.queryInfo.rewrittenQuery;\n let sqlQuerySpec: SqlQuerySpec;\n const query = this.query;\n if (typeof query === \"string\") {\n sqlQuerySpec = { query };\n } else {\n sqlQuerySpec = query;\n }\n\n const formatPlaceHolder = \"{documentdb-formattableorderbyquery-filter}\";\n if (rewrittenQuery) {\n sqlQuerySpec = JSON.parse(JSON.stringify(sqlQuerySpec));\n // We hardcode the formattable filter to true for now\n rewrittenQuery = rewrittenQuery.replace(formatPlaceHolder, \"true\");\n sqlQuerySpec[\"query\"] = rewrittenQuery;\n }\n\n const options = { ...this.options };\n options.continuationToken = continuationToken;\n\n return new DocumentProducer(\n this.clientContext,\n this.collectionLink,\n sqlQuerySpec,\n partitionKeyTargetRange,\n options,\n this.correlatedActivityId,\n startEpk,\n endEpk,\n populateEpkRangeHeaders,\n );\n }\n protected async drainBufferedItems(): Promise<Response<any>> {\n return new Promise<Response<any>>((resolve, reject) => {\n this.sem.take(() => {\n if (this.err) {\n // if there is a prior error return error\n this.sem.leave();\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n // return undefined if there is no more results\n if (this.buffer.length === 0) {\n this.sem.leave();\n return resolve({\n result: this.state === ParallelQueryExecutionContextBase.STATES.ended ? undefined : [],\n headers: this._getAndResetActiveResponseHeaders(),\n });\n }\n // draing the entire buffer object and return that in result of return object\n const bufferedResults = this.buffer;\n this.buffer = [];\n\n // release the lock before returning\n this.sem.leave();\n // invoke the callback on the item\n return resolve({\n result: bufferedResults,\n headers: this._getAndResetActiveResponseHeaders(),\n });\n });\n });\n }\n\n /**\n * Buffers document producers based on the maximum degree of parallelism.\n * Moves document producers from the unfilled queue to the buffered queue.\n * @param diagnosticNode - The diagnostic node for logging and tracing.\n * @returns A promise that resolves when buffering is complete.\n */\n protected async bufferDocumentProducers(diagnosticNode?: DiagnosticNodeInternal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.sem.take(async () => {\n if (this.err) {\n this.sem.leave();\n reject(this.err);\n return;\n }\n this.updateStates(this.err);\n\n if (this.state === ParallelQueryExecutionContextBase.STATES.ended) {\n this.sem.leave();\n resolve();\n return;\n }\n\n if (this.unfilledDocumentProducersQueue.size() === 0) {\n this.sem.leave();\n resolve();\n return;\n }\n\n try {\n const maxDegreeOfParallelism =\n this.options.maxDegreeOfParallelism === undefined ||\n this.options.maxDegreeOfParallelism < 1\n ? this.unfilledDocumentProducersQueue.size()\n : Math.min(\n this.options.maxDegreeOfParallelism,\n this.unfilledDocumentProducersQueue.size(),\n );\n\n const documentProducers: DocumentProducer[] = [];\n while (\n documentProducers.length < maxDegreeOfParallelism &&\n this.unfilledDocumentProducersQueue.size() > 0\n ) {\n let documentProducer: DocumentProducer;\n try {\n documentProducer = this.unfilledDocumentProducersQueue.deq();\n } catch (e: any) {\n this.err = e;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n documentProducers.push(documentProducer);\n }\n\n const bufferDocumentProducer = async (\n documentProducer: DocumentProducer,\n ): Promise<void> => {\n try {\n const headers = await documentProducer.bufferMore(diagnosticNode);\n this._mergeWithActiveResponseHeaders(headers);\n // if buffer of document producer is filled, add it to the buffered document producers queue\n const nextItem = documentProducer.peakNextItem();\n if (nextItem !== undefined) {\n this.bufferedDocumentProducersQueue.enq(documentProducer);\n } else if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n }\n } catch (err) {\n if (ParallelQueryExecutionContextBase._needPartitionKeyRangeCacheRefresh(err)) {\n // We want the document producer enqueued\n // So that later parts of the code can repair the execution context\n // refresh the partition key ranges and ctreate new document producers and add it to the queue\n await this._enqueueReplacementDocumentProducers(\n err,\n diagnosticNode,\n documentProducer,\n );\n resolve();\n } else {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n }\n }\n };\n\n try {\n await Promise.all(\n documentProducers.map((producer) => bufferDocumentProducer(producer)),\n );\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n return;\n }\n resolve();\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(err);\n } finally {\n this.sem.leave();\n }\n });\n });\n }\n /**\n * Drains the buffer of filled document producers and appends their items to the main buffer.\n * @param isOrderBy - Indicates if the query is an order by query.\n * @returns A promise that resolves when the buffer is filled.\n */\n protected async fillBufferFromBufferQueue(isOrderBy: boolean = false): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.sem.take(async () => {\n if (this.err) {\n // if there is a prior error return error\n this.sem.leave();\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n if (\n this.state === ParallelQueryExecutionContextBase.STATES.ended ||\n this.bufferedDocumentProducersQueue.size() === 0\n ) {\n this.sem.leave();\n resolve();\n return;\n }\n\n try {\n if (isOrderBy) {\n while (\n this.unfilledDocumentProducersQueue.isEmpty() &&\n this.bufferedDocumentProducersQueue.size() > 0\n ) {\n const documentProducer = this.bufferedDocumentProducersQueue.deq();\n const { result, headers } = await documentProducer.fetchNextItem();\n this._mergeWithActiveResponseHeaders(headers);\n if (result) {\n this.buffer.push(result);\n }\n if (documentProducer.peakNextItem() !== undefined) {\n this.bufferedDocumentProducersQueue.enq(documentProducer);\n } else if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n } else {\n // no more results in document producer\n }\n }\n } else {\n while (this.bufferedDocumentProducersQueue.size() > 0) {\n const documentProducer = this.bufferedDocumentProducersQueue.deq();\n const { result, headers } = await documentProducer.fetchBufferedItems();\n this._mergeWithActiveResponseHeaders(headers);\n if (result) {\n this.buffer.push(...result);\n }\n if (documentProducer.hasMoreResults()) {\n this.unfilledDocumentProducersQueue.enq(documentProducer);\n }\n }\n }\n this.updateStates(this.err);\n } catch (err) {\n this.err = err;\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n } finally {\n // release the lock before returning\n this.sem.leave();\n }\n resolve();\n return;\n });\n });\n }\n\n private updateStates(error: any): void {\n if (error) {\n this.err = error;\n this.state = ParallelQueryExecutionContextBase.STATES.ended;\n return;\n }\n\n if (this.state === ParallelQueryExecutionContextBase.STATES.started) {\n this.state = ParallelQueryExecutionContextBase.STATES.inProgress;\n }\n\n const hasNoActiveProducers =\n this.unfilledDocumentProducersQueue.size() === 0 &&\n this.bufferedDocumentProducersQueue.size() === 0;\n\n if (hasNoActiveProducers) {\n this.state = ParallelQueryExecutionContextBase.STATES.ended;\n }\n }\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;YA4BjC,+BAA+B;YAiB/B,cAAc;IAiB5B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW,CAAgB;YAarB,KAAK;IAOnB,OAAO,CAAC,gBAAgB;CAYzB"}
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"}
@@ -9,7 +9,6 @@ import { getEmptyCosmosDiagnostics, withDiagnostics, withMetadataDiagnostics, }
9
9
  import { MetadataLookUpType } from "./CosmosDiagnostics.js";
10
10
  import { randomUUID } from "@azure/core-util";
11
11
  import { HybridQueryExecutionContext } from "./queryExecutionContext/hybridQueryExecutionContext.js";
12
- import { PartitionKeyRangeCache } from "./routing/index.js";
13
12
  /**
14
13
  * Represents a QueryIterator Object, an implementation of feed or query response that enables
15
14
  * traversal and iterating over the response
@@ -33,7 +32,7 @@ export class QueryIterator {
33
32
  this.fetchAllLastResHeaders = getInitialHeader();
34
33
  this.reset();
35
34
  this.isInitialized = false;
36
- this.partitionKeyRangeCache = new PartitionKeyRangeCache(this.clientContext);
35
+ this.partitionKeyRangeCache = this.clientContext.partitionKeyRangeCache;
37
36
  }
38
37
  /**
39
38
  * Gets an async iterator that will yield results until completion.
@@ -304,7 +303,7 @@ export class QueryIterator {
304
303
  isMaxInclusive: false,
305
304
  };
306
305
  });
307
- this.queryExecutionContext = new HybridQueryExecutionContext(this.clientContext, this.resourceLink, this.options, queryPlan, this.correlatedActivityId, queryRanges);
306
+ this.queryExecutionContext = new HybridQueryExecutionContext(this.clientContext, this.resourceLink, this.query, this.options, queryPlan, this.correlatedActivityId, queryRanges);
308
307
  }
309
308
  async createPipelinedExecutionContext(queryPlan) {
310
309
  const queryInfo = queryPlan.queryInfo;