@itwin/core-backend 5.10.0-dev.8 → 5.11.0-dev.1

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 (580) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.d.ts +8 -1
  7. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/CatalogDb.js.map +1 -1
  10. package/lib/cjs/Category.d.ts +4 -4
  11. package/lib/cjs/Category.js.map +1 -1
  12. package/lib/cjs/ChangeSummaryManager.js +2 -2
  13. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  14. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts +6 -6
  16. package/lib/cjs/ChangesetECAdaptor.js +252 -252
  17. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  18. package/lib/cjs/ChangesetReader.d.ts +84 -1
  19. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  20. package/lib/cjs/ChangesetReader.js +108 -12
  21. package/lib/cjs/ChangesetReader.js.map +1 -1
  22. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  23. package/lib/cjs/ChannelControl.js.map +1 -1
  24. package/lib/cjs/CheckpointManager.js.map +1 -1
  25. package/lib/cjs/ClassRegistry.d.ts +3 -3
  26. package/lib/cjs/ClassRegistry.js +8 -8
  27. package/lib/cjs/ClassRegistry.js.map +1 -1
  28. package/lib/cjs/CloudSqlite.js.map +1 -1
  29. package/lib/cjs/CodeService.js.map +1 -1
  30. package/lib/cjs/CodeSpecs.d.ts +3 -3
  31. package/lib/cjs/CodeSpecs.js.map +1 -1
  32. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  33. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  34. package/lib/cjs/DevTools.js.map +1 -1
  35. package/lib/cjs/DisplayStyle.d.ts +2 -2
  36. package/lib/cjs/DisplayStyle.js.map +1 -1
  37. package/lib/cjs/ECDb.js.map +1 -1
  38. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  39. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  40. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  41. package/lib/cjs/ECSqlStatement.js +4 -0
  42. package/lib/cjs/ECSqlStatement.js.map +1 -1
  43. package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
  44. package/lib/cjs/ECSqlSyncReader.js +1 -0
  45. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  46. package/lib/cjs/EditTxn.js.map +1 -1
  47. package/lib/cjs/Element.d.ts +16 -13
  48. package/lib/cjs/Element.d.ts.map +1 -1
  49. package/lib/cjs/Element.js +8 -5
  50. package/lib/cjs/Element.js.map +1 -1
  51. package/lib/cjs/ElementAspect.d.ts +1 -1
  52. package/lib/cjs/ElementAspect.js.map +1 -1
  53. package/lib/cjs/ElementGraphics.js.map +1 -1
  54. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  55. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  56. package/lib/cjs/Entity.d.ts +13 -5
  57. package/lib/cjs/Entity.d.ts.map +1 -1
  58. package/lib/cjs/Entity.js +13 -5
  59. package/lib/cjs/Entity.js.map +1 -1
  60. package/lib/cjs/EntityReferences.js.map +1 -1
  61. package/lib/cjs/ExportGraphics.js.map +1 -1
  62. package/lib/cjs/ExternalSource.d.ts +2 -2
  63. package/lib/cjs/ExternalSource.js.map +1 -1
  64. package/lib/cjs/FontFile.js.map +1 -1
  65. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  66. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  67. package/lib/cjs/GeometrySummary.js +47 -47
  68. package/lib/cjs/GeometrySummary.js.map +1 -1
  69. package/lib/cjs/IModelDb.d.ts +112 -40
  70. package/lib/cjs/IModelDb.d.ts.map +1 -1
  71. package/lib/cjs/IModelDb.js +223 -50
  72. package/lib/cjs/IModelDb.js.map +1 -1
  73. package/lib/cjs/IModelDbFonts.js.map +1 -1
  74. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  75. package/lib/cjs/IModelHost.js.map +1 -1
  76. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  77. package/lib/cjs/IModelJsFs.js.map +1 -1
  78. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  79. package/lib/cjs/IpcHost.js.map +1 -1
  80. package/lib/cjs/LineStyle.d.ts +6 -6
  81. package/lib/cjs/LineStyle.js.map +1 -1
  82. package/lib/cjs/LocalHub.d.ts +6 -0
  83. package/lib/cjs/LocalHub.d.ts.map +1 -1
  84. package/lib/cjs/LocalHub.js +24 -1
  85. package/lib/cjs/LocalHub.js.map +1 -1
  86. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  87. package/lib/cjs/LockControl.js.map +1 -1
  88. package/lib/cjs/Material.d.ts +1 -1
  89. package/lib/cjs/Material.js.map +1 -1
  90. package/lib/cjs/Model.d.ts +6 -6
  91. package/lib/cjs/Model.js.map +1 -1
  92. package/lib/cjs/NativeAppStorage.js.map +1 -1
  93. package/lib/cjs/NativeHost.js.map +1 -1
  94. package/lib/cjs/NavigationRelationship.js.map +1 -1
  95. package/lib/cjs/PartialChangeUnifier.js +7 -7
  96. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  97. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  98. package/lib/cjs/PropertyStore.js.map +1 -1
  99. package/lib/cjs/Relationship.d.ts +13 -11
  100. package/lib/cjs/Relationship.d.ts.map +1 -1
  101. package/lib/cjs/Relationship.js +9 -7
  102. package/lib/cjs/Relationship.js.map +1 -1
  103. package/lib/cjs/RpcBackend.js.map +1 -1
  104. package/lib/cjs/SQLiteDb.js.map +1 -1
  105. package/lib/cjs/Schema.js.map +1 -1
  106. package/lib/cjs/SchemaSync.js.map +1 -1
  107. package/lib/cjs/SchemaUtils.js.map +1 -1
  108. package/lib/cjs/SheetIndex.d.ts +4 -4
  109. package/lib/cjs/SheetIndex.js.map +1 -1
  110. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  111. package/lib/cjs/SqliteStatement.js.map +1 -1
  112. package/lib/cjs/StashManager.js.map +1 -1
  113. package/lib/cjs/Texture.d.ts +1 -1
  114. package/lib/cjs/Texture.js.map +1 -1
  115. package/lib/cjs/TileStorage.js.map +1 -1
  116. package/lib/cjs/TxnManager.d.ts.map +1 -1
  117. package/lib/cjs/TxnManager.js +7 -0
  118. package/lib/cjs/TxnManager.js.map +1 -1
  119. package/lib/cjs/ViewDefinition.d.ts +6 -6
  120. package/lib/cjs/ViewDefinition.js.map +1 -1
  121. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  122. package/lib/cjs/ViewStore.js.map +1 -1
  123. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  124. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  125. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
  126. package/lib/cjs/annotations/FrameGeometry.js +2 -3
  127. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  128. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  129. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  130. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  131. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  132. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  133. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  134. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -32
  135. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -27
  136. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  137. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  138. package/lib/cjs/core-backend.js.map +1 -1
  139. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  140. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  141. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  142. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  143. package/lib/cjs/domains/GenericElements.js.map +1 -1
  144. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  145. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  146. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  147. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  148. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  149. package/lib/cjs/internal/ElementLRUCache.js +23 -4
  150. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  151. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  152. package/lib/cjs/internal/HubMock.d.ts +24 -1
  153. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  154. package/lib/cjs/internal/HubMock.js +60 -39
  155. package/lib/cjs/internal/HubMock.js.map +1 -1
  156. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  157. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  158. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  159. package/lib/cjs/internal/NoLocks.js.map +1 -1
  160. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  161. package/lib/cjs/internal/ServerBasedLocks.d.ts +19 -1
  162. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  163. package/lib/cjs/internal/ServerBasedLocks.js +88 -34
  164. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  165. package/lib/cjs/internal/Symbols.js.map +1 -1
  166. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  167. package/lib/cjs/internal/cross-package.d.ts +1 -1
  168. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  169. package/lib/cjs/internal/cross-package.js +1 -2
  170. package/lib/cjs/internal/cross-package.js.map +1 -1
  171. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  172. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  173. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  174. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +55 -9
  175. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  176. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  177. package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -11
  178. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  179. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  180. package/lib/cjs/rpc/multipart.js.map +1 -1
  181. package/lib/cjs/rpc/tracing.js.map +1 -1
  182. package/lib/cjs/rpc/web/logging.js.map +1 -1
  183. package/lib/cjs/rpc/web/request.js.map +1 -1
  184. package/lib/cjs/rpc/web/response.js.map +1 -1
  185. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  186. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  187. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  188. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  189. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  190. package/lib/cjs/workspace/Settings.js.map +1 -1
  191. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  192. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  193. package/lib/cjs/workspace/SettingsSchemas.d.ts +20 -3
  194. package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
  195. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  196. package/lib/cjs/workspace/Workspace.d.ts +13 -1
  197. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  198. package/lib/cjs/workspace/Workspace.js.map +1 -1
  199. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  200. package/lib/esm/BackendHubAccess.js.map +1 -1
  201. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  202. package/lib/esm/BisCoreSchema.js.map +1 -1
  203. package/lib/esm/BlobContainerService.js.map +1 -1
  204. package/lib/esm/BriefcaseManager.d.ts +8 -1
  205. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  206. package/lib/esm/BriefcaseManager.js.map +1 -1
  207. package/lib/esm/CatalogDb.js.map +1 -1
  208. package/lib/esm/Category.d.ts +4 -4
  209. package/lib/esm/Category.js.map +1 -1
  210. package/lib/esm/ChangeSummaryManager.js +2 -2
  211. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  212. package/lib/esm/ChangedElementsDb.js.map +1 -1
  213. package/lib/esm/ChangesetECAdaptor.d.ts +6 -6
  214. package/lib/esm/ChangesetECAdaptor.js +252 -252
  215. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  216. package/lib/esm/ChangesetReader.d.ts +84 -1
  217. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  218. package/lib/esm/ChangesetReader.js +108 -12
  219. package/lib/esm/ChangesetReader.js.map +1 -1
  220. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  221. package/lib/esm/ChannelControl.js.map +1 -1
  222. package/lib/esm/CheckpointManager.js.map +1 -1
  223. package/lib/esm/ClassRegistry.d.ts +3 -3
  224. package/lib/esm/ClassRegistry.js +8 -8
  225. package/lib/esm/ClassRegistry.js.map +1 -1
  226. package/lib/esm/CloudSqlite.js.map +1 -1
  227. package/lib/esm/CodeService.js.map +1 -1
  228. package/lib/esm/CodeSpecs.d.ts +3 -3
  229. package/lib/esm/CodeSpecs.js.map +1 -1
  230. package/lib/esm/ConcurrentQuery.js.map +1 -1
  231. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  232. package/lib/esm/DevTools.js.map +1 -1
  233. package/lib/esm/DisplayStyle.d.ts +2 -2
  234. package/lib/esm/DisplayStyle.js.map +1 -1
  235. package/lib/esm/ECDb.js.map +1 -1
  236. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  237. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  238. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  239. package/lib/esm/ECSqlStatement.js +4 -0
  240. package/lib/esm/ECSqlStatement.js.map +1 -1
  241. package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
  242. package/lib/esm/ECSqlSyncReader.js +1 -0
  243. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  244. package/lib/esm/EditTxn.js.map +1 -1
  245. package/lib/esm/Element.d.ts +16 -13
  246. package/lib/esm/Element.d.ts.map +1 -1
  247. package/lib/esm/Element.js +8 -5
  248. package/lib/esm/Element.js.map +1 -1
  249. package/lib/esm/ElementAspect.d.ts +1 -1
  250. package/lib/esm/ElementAspect.js.map +1 -1
  251. package/lib/esm/ElementGraphics.js.map +1 -1
  252. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  253. package/lib/esm/ElementTreeWalker.js.map +1 -1
  254. package/lib/esm/Entity.d.ts +13 -5
  255. package/lib/esm/Entity.d.ts.map +1 -1
  256. package/lib/esm/Entity.js +13 -5
  257. package/lib/esm/Entity.js.map +1 -1
  258. package/lib/esm/EntityReferences.js.map +1 -1
  259. package/lib/esm/ExportGraphics.js.map +1 -1
  260. package/lib/esm/ExternalSource.d.ts +2 -2
  261. package/lib/esm/ExternalSource.js.map +1 -1
  262. package/lib/esm/FontFile.js.map +1 -1
  263. package/lib/esm/GeoCoordConfig.js.map +1 -1
  264. package/lib/esm/GeographicCRSServices.js.map +1 -1
  265. package/lib/esm/GeometrySummary.js +47 -47
  266. package/lib/esm/GeometrySummary.js.map +1 -1
  267. package/lib/esm/IModelDb.d.ts +112 -40
  268. package/lib/esm/IModelDb.d.ts.map +1 -1
  269. package/lib/esm/IModelDb.js +224 -51
  270. package/lib/esm/IModelDb.js.map +1 -1
  271. package/lib/esm/IModelDbFonts.js.map +1 -1
  272. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  273. package/lib/esm/IModelHost.js.map +1 -1
  274. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  275. package/lib/esm/IModelJsFs.js.map +1 -1
  276. package/lib/esm/ImageSourceConversion.js.map +1 -1
  277. package/lib/esm/IpcHost.js.map +1 -1
  278. package/lib/esm/LineStyle.d.ts +6 -6
  279. package/lib/esm/LineStyle.js.map +1 -1
  280. package/lib/esm/LocalHub.d.ts +6 -0
  281. package/lib/esm/LocalHub.d.ts.map +1 -1
  282. package/lib/esm/LocalHub.js +24 -1
  283. package/lib/esm/LocalHub.js.map +1 -1
  284. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  285. package/lib/esm/LockControl.js.map +1 -1
  286. package/lib/esm/Material.d.ts +1 -1
  287. package/lib/esm/Material.js.map +1 -1
  288. package/lib/esm/Model.d.ts +6 -6
  289. package/lib/esm/Model.js.map +1 -1
  290. package/lib/esm/NativeAppStorage.js.map +1 -1
  291. package/lib/esm/NativeHost.js.map +1 -1
  292. package/lib/esm/NavigationRelationship.js.map +1 -1
  293. package/lib/esm/PartialChangeUnifier.js +7 -7
  294. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  295. package/lib/esm/PromiseMemoizer.js.map +1 -1
  296. package/lib/esm/PropertyStore.js.map +1 -1
  297. package/lib/esm/Relationship.d.ts +13 -11
  298. package/lib/esm/Relationship.d.ts.map +1 -1
  299. package/lib/esm/Relationship.js +9 -7
  300. package/lib/esm/Relationship.js.map +1 -1
  301. package/lib/esm/RpcBackend.js.map +1 -1
  302. package/lib/esm/SQLiteDb.js.map +1 -1
  303. package/lib/esm/Schema.js.map +1 -1
  304. package/lib/esm/SchemaSync.js.map +1 -1
  305. package/lib/esm/SchemaUtils.js.map +1 -1
  306. package/lib/esm/SheetIndex.d.ts +4 -4
  307. package/lib/esm/SheetIndex.js.map +1 -1
  308. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  309. package/lib/esm/SqliteStatement.js.map +1 -1
  310. package/lib/esm/StashManager.js.map +1 -1
  311. package/lib/esm/Texture.d.ts +1 -1
  312. package/lib/esm/Texture.js.map +1 -1
  313. package/lib/esm/TileStorage.js.map +1 -1
  314. package/lib/esm/TxnManager.d.ts.map +1 -1
  315. package/lib/esm/TxnManager.js +7 -0
  316. package/lib/esm/TxnManager.js.map +1 -1
  317. package/lib/esm/ViewDefinition.d.ts +6 -6
  318. package/lib/esm/ViewDefinition.js.map +1 -1
  319. package/lib/esm/ViewStateHydrator.js.map +1 -1
  320. package/lib/esm/ViewStore.js.map +1 -1
  321. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  322. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  323. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
  324. package/lib/esm/annotations/FrameGeometry.js +2 -3
  325. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  326. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  327. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  328. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  329. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  330. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  331. package/lib/esm/core-backend.js.map +1 -1
  332. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  333. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  334. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  335. package/lib/esm/domains/GenericElements.d.ts +2 -2
  336. package/lib/esm/domains/GenericElements.js.map +1 -1
  337. package/lib/esm/domains/GenericSchema.js.map +1 -1
  338. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  339. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  340. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  341. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  342. package/lib/esm/internal/ElementLRUCache.js +23 -4
  343. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  344. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  345. package/lib/esm/internal/HubMock.d.ts +24 -1
  346. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  347. package/lib/esm/internal/HubMock.js +61 -40
  348. package/lib/esm/internal/HubMock.js.map +1 -1
  349. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  350. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  351. package/lib/esm/internal/NativePlatform.js.map +1 -1
  352. package/lib/esm/internal/NoLocks.js.map +1 -1
  353. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  354. package/lib/esm/internal/ServerBasedLocks.d.ts +19 -1
  355. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  356. package/lib/esm/internal/ServerBasedLocks.js +88 -34
  357. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  358. package/lib/esm/internal/Symbols.js.map +1 -1
  359. package/lib/esm/internal/annotations/fields.js.map +1 -1
  360. package/lib/esm/internal/cross-package.d.ts +1 -1
  361. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  362. package/lib/esm/internal/cross-package.js +1 -1
  363. package/lib/esm/internal/cross-package.js.map +1 -1
  364. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  365. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  366. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  367. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +55 -9
  368. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  369. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  370. package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -11
  371. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  372. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  373. package/lib/esm/rpc/multipart.js.map +1 -1
  374. package/lib/esm/rpc/tracing.js.map +1 -1
  375. package/lib/esm/rpc/web/logging.js.map +1 -1
  376. package/lib/esm/rpc/web/request.js.map +1 -1
  377. package/lib/esm/rpc/web/response.js.map +1 -1
  378. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  379. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  380. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  381. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  382. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  383. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  384. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  385. package/lib/esm/test/AttachDb.test.js +11 -11
  386. package/lib/esm/test/AttachDb.test.js.map +1 -1
  387. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  388. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  389. package/lib/esm/test/ElementLRUCache.test.js +60 -0
  390. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  391. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  392. package/lib/esm/test/IModelHost.test.js.map +1 -1
  393. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  394. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  395. package/lib/esm/test/IpcHost.test.js.map +1 -1
  396. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  397. package/lib/esm/test/PrintElementTree.js.map +1 -1
  398. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  399. package/lib/esm/test/RevisionUtility.js.map +1 -1
  400. package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts +2 -0
  401. package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts.map +1 -0
  402. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +239 -0
  403. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -0
  404. package/lib/esm/test/SchemaUtils.test.js +25 -25
  405. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  406. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  407. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  408. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  409. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  410. package/lib/esm/test/TestEditTxn.js.map +1 -1
  411. package/lib/esm/test/TestUtils.js.map +1 -1
  412. package/lib/esm/test/annotations/Fields.test.js +53 -53
  413. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  414. package/lib/esm/test/annotations/FrameGeometry.test.js +2 -1
  415. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  416. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  417. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  418. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  419. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  420. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  421. package/lib/esm/test/categories/Category.test.js.map +1 -1
  422. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  423. package/lib/esm/test/ecdb/CTE.test.js +89 -88
  424. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  425. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  426. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  427. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  428. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  429. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  430. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  431. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  432. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  433. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  434. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  435. package/lib/esm/test/ecdb/ECSqlQuery.test.js +14 -6
  436. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  437. package/lib/esm/test/ecdb/ECSqlStatement.test.js +342 -332
  438. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  439. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +1 -0
  440. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  441. package/lib/esm/test/ecdb/QueryReaders.test.js +44 -31
  442. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  443. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  444. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  445. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  446. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  447. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  448. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +1 -0
  449. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  450. package/lib/esm/test/element/DeleteDefinitionElements.test.js +6 -2
  451. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  452. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  453. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  454. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  455. package/lib/esm/test/element/ElementRoundTrip.test.js +144 -139
  456. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  457. package/lib/esm/test/element/ExcludedElements.test.js +1 -0
  458. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  459. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  460. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  461. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  462. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  463. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  464. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  465. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  466. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  467. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +42 -32
  468. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  469. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  470. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  471. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  472. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  473. package/lib/esm/test/hubaccess/SemanticRebase.test.js +346 -345
  474. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  475. package/lib/esm/test/imageData.js.map +1 -1
  476. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  477. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  478. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  479. package/lib/esm/test/imodel/IModel.test.js +75 -44
  480. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  481. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  482. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  483. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  484. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  485. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  486. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  487. package/lib/esm/test/index.js.map +1 -1
  488. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  489. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  490. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  491. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  492. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  493. package/lib/esm/test/rpc/response.test.js.map +1 -1
  494. package/lib/esm/test/schema/ClassRegistry.test.js +102 -99
  495. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  496. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  497. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  498. package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -9
  499. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  500. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  501. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  502. package/lib/esm/test/schema/SchemaViewHidden.test.d.ts +2 -0
  503. package/lib/esm/test/schema/SchemaViewHidden.test.d.ts.map +1 -0
  504. package/lib/esm/test/schema/SchemaViewHidden.test.js +275 -0
  505. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -0
  506. package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts +2 -0
  507. package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts.map +1 -0
  508. package/lib/esm/test/schema/SchemaViewKoQ.test.js +184 -0
  509. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -0
  510. package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts +2 -0
  511. package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts.map +1 -0
  512. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +141 -0
  513. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -0
  514. package/lib/esm/test/schema/SchemaViewValidation.test.d.ts +2 -0
  515. package/lib/esm/test/schema/SchemaViewValidation.test.d.ts.map +1 -0
  516. package/lib/esm/test/schema/SchemaViewValidation.test.js +475 -0
  517. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -0
  518. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  519. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  520. package/lib/esm/test/standalone/ChangesetReader.test.js +1191 -583
  521. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  522. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  523. package/lib/esm/test/standalone/DeleteElements.test.js +45 -0
  524. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  525. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  526. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  527. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  528. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  529. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  530. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  531. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  532. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  533. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  534. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  535. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  536. package/lib/esm/test/standalone/IModelWrite.test.js +33 -27
  537. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  538. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  539. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  540. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  541. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  542. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  543. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  544. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  545. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  546. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  547. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  548. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  549. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  550. package/lib/esm/test/standalone/ServerBasedLocks.test.js +62 -0
  551. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  552. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  553. package/lib/esm/test/standalone/Settings.test.js +2 -0
  554. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  555. package/lib/esm/test/standalone/SettingsSchemas.test.js +397 -0
  556. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  557. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  558. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  559. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  560. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  561. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  562. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  563. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  564. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  565. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  566. package/lib/esm/test/standalone/Workspace.test.js +23 -0
  567. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  568. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  569. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  570. package/lib/esm/workspace/Settings.js.map +1 -1
  571. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  572. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  573. package/lib/esm/workspace/SettingsSchemas.d.ts +20 -3
  574. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
  575. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  576. package/lib/esm/workspace/Workspace.d.ts +13 -1
  577. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  578. package/lib/esm/workspace/Workspace.js.map +1 -1
  579. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  580. package/package.json +15 -15
@@ -10,6 +10,7 @@ import { SequentialLogMatcher } from "../SequentialLogMatcher";
10
10
  // cspell:ignore mirukuru ibim
11
11
  async function executeQuery(iModel, ecsql, bindings, abbreviateBlobs) {
12
12
  const rows = [];
13
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
13
14
  for await (const queryRow of iModel.createQueryReader(ecsql, QueryBinder.from(bindings), { rowFormat: QueryRowFormat.UseJsPropertyNames, abbreviateBlobs })) {
14
15
  rows.push(queryRow.toRow());
15
16
  }
@@ -24,17 +25,17 @@ describe("Common table expression support in ECSQL", () => {
24
25
  imodel1.close();
25
26
  });
26
27
  it("collect base properties recursively", async () => {
27
- const query = `
28
- WITH RECURSIVE
29
- base_classes (aId, aParentId, aPath, aDepth) AS (
30
- SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?
31
- UNION ALL
32
- SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1
33
- FROM meta.ECClassDef c
34
- JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId
35
- JOIN base_classes ON aId = cbc.TargetECInstanceId
36
- ORDER BY 1
37
- )
28
+ const query = `
29
+ WITH RECURSIVE
30
+ base_classes (aId, aParentId, aPath, aDepth) AS (
31
+ SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?
32
+ UNION ALL
33
+ SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1
34
+ FROM meta.ECClassDef c
35
+ JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId
36
+ JOIN base_classes ON aId = cbc.TargetECInstanceId
37
+ ORDER BY 1
38
+ )
38
39
  SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name`;
39
40
  const rows = await executeQuery(imodel1, query, ["Element"]);
40
41
  const expected = ["Angle", "BaseModel", "BBoxHigh", "BBoxLow", "Border", "BorderTemplate", "Category", "CategorySelector", "CodeScope", "CodeSpec", "CodeValue", "Data", "Description", "DisplayStyle", "DrawingModel", "Enabled", "Extents", "EyePoint", "FederationGuid", "Flags", "FocusDistance", "Format", "GeometryStream", "Height", "InSpatialIndex", "IsCameraOn", "IsPrivate", "JsonProperties", "LastMod", "LensAngle", "Model", "ModelSelector", "Name", "Origin", "PaletteName", "Parent", "Pitch", "Properties", "Rank", "Recipe", "RepositoryGuid", "Roll", "Rotation", "RotationAngle", "Scale", "SheetTemplate", "Type", "TypeDefinition", "Url", "UserLabel", "View", "ViewAttachment", "Width", "Yaw"];
@@ -42,58 +43,58 @@ describe("Common table expression support in ECSQL", () => {
42
43
  assert.sameOrderedMembers(actual, expected);
43
44
  });
44
45
  it("generate mandelbrot set", async () => {
45
- const rows = await executeQuery(imodel1, `
46
- WITH RECURSIVE
47
- [xaxis]([x]) AS(
48
- VALUES (- 2.0)
49
- UNION ALL
50
- SELECT [x] + 0.05
51
- FROM [xaxis]
52
- WHERE [x] < 1.2
53
- ),
54
- [yaxis]([y]) AS(
55
- VALUES (- 1.0)
56
- UNION ALL
57
- SELECT [y] + 0.1
58
- FROM [yaxis]
59
- WHERE [y] < 1.0
60
- ),
61
- [m]([iter], [cx], [cy], [x], [y]) AS(
62
- SELECT
63
- 0,
64
- [x],
65
- [y],
66
- 0.0,
67
- 0.0
68
- FROM [xaxis],
69
- [yaxis]
70
- UNION ALL
71
- SELECT
72
- [iter] + 1,
73
- [cx],
74
- [cy],
75
- [x] * [x] - [y] * [y] + [cx],
76
- 2.0 * [x] * [y] + [cy]
77
- FROM [m]
78
- WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28
79
- ),
80
- [m2]([iter], [cx], [cy]) AS(
81
- SELECT
82
- MAX ([iter]),
83
- [cx],
84
- [cy]
85
- FROM [m]
86
- GROUP BY
87
- [cx],
88
- [cy]
89
- ),
90
- [a]([t]) AS(
91
- SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')
92
- FROM [m2]
93
- GROUP BY [cy]
94
- )
95
- SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set
96
- FROM [a];
46
+ const rows = await executeQuery(imodel1, `
47
+ WITH RECURSIVE
48
+ [xaxis]([x]) AS(
49
+ VALUES (- 2.0)
50
+ UNION ALL
51
+ SELECT [x] + 0.05
52
+ FROM [xaxis]
53
+ WHERE [x] < 1.2
54
+ ),
55
+ [yaxis]([y]) AS(
56
+ VALUES (- 1.0)
57
+ UNION ALL
58
+ SELECT [y] + 0.1
59
+ FROM [yaxis]
60
+ WHERE [y] < 1.0
61
+ ),
62
+ [m]([iter], [cx], [cy], [x], [y]) AS(
63
+ SELECT
64
+ 0,
65
+ [x],
66
+ [y],
67
+ 0.0,
68
+ 0.0
69
+ FROM [xaxis],
70
+ [yaxis]
71
+ UNION ALL
72
+ SELECT
73
+ [iter] + 1,
74
+ [cx],
75
+ [cy],
76
+ [x] * [x] - [y] * [y] + [cx],
77
+ 2.0 * [x] * [y] + [cy]
78
+ FROM [m]
79
+ WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28
80
+ ),
81
+ [m2]([iter], [cx], [cy]) AS(
82
+ SELECT
83
+ MAX ([iter]),
84
+ [cx],
85
+ [cy]
86
+ FROM [m]
87
+ GROUP BY
88
+ [cx],
89
+ [cy]
90
+ ),
91
+ [a]([t]) AS(
92
+ SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')
93
+ FROM [m2]
94
+ GROUP BY [cy]
95
+ )
96
+ SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set
97
+ FROM [a];
97
98
  `);
98
99
  const expected = " ....#\n" +
99
100
  " ..#*..\n" +
@@ -121,34 +122,34 @@ describe("Common table expression support in ECSQL", () => {
121
122
  });
122
123
  it("basic cte test", async () => {
123
124
  let rows = [];
124
- rows = await executeQuery(imodel1, `
125
- WITH RECURSIVE
126
- cnt (x,y) AS (
127
- SELECT 100, 200
128
- UNION ALL
129
- SELECT x+1, 200 FROM cnt WHERE x<210
130
- )
125
+ rows = await executeQuery(imodel1, `
126
+ WITH RECURSIVE
127
+ cnt (x,y) AS (
128
+ SELECT 100, 200
129
+ UNION ALL
130
+ SELECT x+1, 200 FROM cnt WHERE x<210
131
+ )
131
132
  SELECT * from cnt`);
132
133
  assert(rows.length === 111);
133
- rows = await executeQuery(imodel1, `
134
- WITH RECURSIVE
135
- cnt (x,y) AS (
136
- SELECT 100, 200
137
- )
134
+ rows = await executeQuery(imodel1, `
135
+ WITH RECURSIVE
136
+ cnt (x,y) AS (
137
+ SELECT 100, 200
138
+ )
138
139
  SELECT * from cnt`);
139
140
  let slm = new SequentialLogMatcher();
140
141
  // these two are generated by sqlite
141
142
  slm.append().error().category("ECDb").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);
142
143
  assert(rows.length === 1);
143
144
  try {
144
- rows = await executeQuery(imodel1, `
145
- WITH
146
- cte_1 (a,b,c) AS (
147
- SELECT 100, 400, 300
148
- ),
149
- cte_1 (a,b,c) AS (
150
- SELECT 100, 400, 300
151
- )
145
+ rows = await executeQuery(imodel1, `
146
+ WITH
147
+ cte_1 (a,b,c) AS (
148
+ SELECT 100, 400, 300
149
+ ),
150
+ cte_1 (a,b,c) AS (
151
+ SELECT 100, 400, 300
152
+ )
152
153
  SELECT * from cte_1`);
153
154
  assert(false);
154
155
  }
@@ -160,11 +161,11 @@ describe("Common table expression support in ECSQL", () => {
160
161
  // these two are generated by ECSQL. Its not clear why this message is logged twice.
161
162
  slm.append().error().category("ECDb").message(/Common table 'cte_1' has 3 values for columns 2/gm);
162
163
  try {
163
- rows = await executeQuery(imodel1, `
164
- WITH
165
- cte_1 (a,b,c) AS (
166
- SELECT 100, 400
167
- )
164
+ rows = await executeQuery(imodel1, `
165
+ WITH
166
+ cte_1 (a,b,c) AS (
167
+ SELECT 100, 400
168
+ )
168
169
  SELECT * from cte_1`);
169
170
  assert(false);
170
171
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CTE.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/CTE.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelDb, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\n\n// cspell:ignore mirukuru ibim\n\nasync function executeQuery(iModel: IModelDb, ecsql: string, bindings?: any[] | object, abbreviateBlobs?: boolean): Promise<any[]> {\n const rows: any[] = [];\n for await (const queryRow of iModel.createQueryReader(ecsql, QueryBinder.from(bindings), { rowFormat: QueryRowFormat.UseJsPropertyNames, abbreviateBlobs })) {\n rows.push(queryRow.toRow());\n }\n return rows;\n}\n\ndescribe(\"Common table expression support in ECSQL\", () => {\n let imodel1: SnapshotDb;\n\n before(async () => {\n imodel1 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(async () => {\n imodel1.close();\n });\n it(\"collect base properties recursively\", async () => {\n const query = `\n WITH RECURSIVE\n base_classes (aId, aParentId, aPath, aDepth) AS (\n SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?\n UNION ALL\n SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1\n FROM meta.ECClassDef c\n JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId\n JOIN base_classes ON aId = cbc.TargetECInstanceId\n ORDER BY 1\n )\n SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name` ;\n const rows = await executeQuery(imodel1, query, [\"Element\"]);\n const expected = [\"Angle\", \"BaseModel\", \"BBoxHigh\", \"BBoxLow\", \"Border\", \"BorderTemplate\", \"Category\", \"CategorySelector\", \"CodeScope\", \"CodeSpec\", \"CodeValue\", \"Data\", \"Description\", \"DisplayStyle\", \"DrawingModel\", \"Enabled\", \"Extents\", \"EyePoint\", \"FederationGuid\", \"Flags\", \"FocusDistance\", \"Format\", \"GeometryStream\", \"Height\", \"InSpatialIndex\", \"IsCameraOn\", \"IsPrivate\", \"JsonProperties\", \"LastMod\", \"LensAngle\", \"Model\", \"ModelSelector\", \"Name\", \"Origin\", \"PaletteName\", \"Parent\", \"Pitch\", \"Properties\", \"Rank\", \"Recipe\", \"RepositoryGuid\", \"Roll\", \"Rotation\", \"RotationAngle\", \"Scale\", \"SheetTemplate\", \"Type\", \"TypeDefinition\", \"Url\", \"UserLabel\", \"View\", \"ViewAttachment\", \"Width\", \"Yaw\"];\n const actual = rows.map((r) => r.prop);\n assert.sameOrderedMembers(actual, expected);\n });\n\n it(\"generate mandelbrot set\", async () => {\n const rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n [xaxis]([x]) AS(\n VALUES (- 2.0)\n UNION ALL\n SELECT [x] + 0.05\n FROM [xaxis]\n WHERE [x] < 1.2\n ),\n [yaxis]([y]) AS(\n VALUES (- 1.0)\n UNION ALL\n SELECT [y] + 0.1\n FROM [yaxis]\n WHERE [y] < 1.0\n ),\n [m]([iter], [cx], [cy], [x], [y]) AS(\n SELECT\n 0,\n [x],\n [y],\n 0.0,\n 0.0\n FROM [xaxis],\n [yaxis]\n UNION ALL\n SELECT\n [iter] + 1,\n [cx],\n [cy],\n [x] * [x] - [y] * [y] + [cx],\n 2.0 * [x] * [y] + [cy]\n FROM [m]\n WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28\n ),\n [m2]([iter], [cx], [cy]) AS(\n SELECT\n MAX ([iter]),\n [cx],\n [cy]\n FROM [m]\n GROUP BY\n [cx],\n [cy]\n ),\n [a]([t]) AS(\n SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')\n FROM [m2]\n GROUP BY [cy]\n )\n SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set\n FROM [a];\n `);\n\n const expected =\n \" ....#\\n\" +\n \" ..#*..\\n\" +\n \" ..+####+.\\n\" +\n \" .......+####.... +\\n\" +\n \" ..##+*##########+.++++\\n\" +\n \" .+.##################+.\\n\" +\n \" .............+###################+.+\\n\" +\n \" ..++..#.....*#####################+.\\n\" +\n \" ...+#######++#######################.\\n\" +\n \" ....+*################################.\\n\" +\n \" #############################################...\\n\" +\n \" ....+*################################.\\n\" +\n \" ...+#######++#######################.\\n\" +\n \" ..++..#.....*#####################+.\\n\" +\n \" .............+###################+.+\\n\" +\n \" .+.##################+.\\n\" +\n \" ..##+*##########+.++++\\n\" +\n \" .......+####.... +\\n\" +\n \" ..+####+.\\n\" +\n \" ..#*..\\n\" +\n \" ....#\\n\" +\n \" +.\";\n assert(rows[0].mandelbrot_set === expected);\n });\n\n it(\"basic cte test\", async () => {\n let rows = [];\n rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n cnt (x,y) AS (\n SELECT 100, 200\n UNION ALL\n SELECT x+1, 200 FROM cnt WHERE x<210\n )\n SELECT * from cnt`);\n assert(rows.length === 111);\n\n rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n cnt (x,y) AS (\n SELECT 100, 200\n )\n SELECT * from cnt`);\n\n let slm = new SequentialLogMatcher();\n // these two are generated by sqlite\n slm.append().error().category(\"ECDb\").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);\n assert(rows.length === 1);\n try {\n rows = await executeQuery(imodel1, `\n WITH\n cte_1 (a,b,c) AS (\n SELECT 100, 400, 300\n ),\n cte_1 (a,b,c) AS (\n SELECT 100, 400, 300\n )\n SELECT * from cte_1`);\n assert(false);\n } catch {\n assert(true); // should fail as cte_1 is used for two ct expression.\n }\n assert.isTrue(slm.finishAndDispose());\n slm = new SequentialLogMatcher();\n // these two are generated by ECSQL. Its not clear why this message is logged twice.\n slm.append().error().category(\"ECDb\").message(/Common table 'cte_1' has 3 values for columns 2/gm);\n try {\n rows = await executeQuery(imodel1, `\n WITH\n cte_1 (a,b,c) AS (\n SELECT 100, 400\n )\n SELECT * from cte_1`);\n assert(false);\n } catch {\n assert(true); // number are to ct expression does not match select\n }\n assert.isTrue(slm.finishAndDispose());\n });\n});\n"]}
1
+ {"version":3,"file":"CTE.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/CTE.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert } from \"chai\";\r\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { IModelDb, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\r\n\r\n// cspell:ignore mirukuru ibim\r\n\r\nasync function executeQuery(iModel: IModelDb, ecsql: string, bindings?: any[] | object, abbreviateBlobs?: boolean): Promise<any[]> {\r\n const rows: any[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n for await (const queryRow of iModel.createQueryReader(ecsql, QueryBinder.from(bindings), { rowFormat: QueryRowFormat.UseJsPropertyNames, abbreviateBlobs })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n return rows;\r\n}\r\n\r\ndescribe(\"Common table expression support in ECSQL\", () => {\r\n let imodel1: SnapshotDb;\r\n\r\n before(async () => {\r\n imodel1 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n });\r\n\r\n after(async () => {\r\n imodel1.close();\r\n });\r\n it(\"collect base properties recursively\", async () => {\r\n const query = `\r\n WITH RECURSIVE\r\n base_classes (aId, aParentId, aPath, aDepth) AS (\r\n SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?\r\n UNION ALL\r\n SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1\r\n FROM meta.ECClassDef c\r\n JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId\r\n JOIN base_classes ON aId = cbc.TargetECInstanceId\r\n ORDER BY 1\r\n )\r\n SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name` ;\r\n const rows = await executeQuery(imodel1, query, [\"Element\"]);\r\n const expected = [\"Angle\", \"BaseModel\", \"BBoxHigh\", \"BBoxLow\", \"Border\", \"BorderTemplate\", \"Category\", \"CategorySelector\", \"CodeScope\", \"CodeSpec\", \"CodeValue\", \"Data\", \"Description\", \"DisplayStyle\", \"DrawingModel\", \"Enabled\", \"Extents\", \"EyePoint\", \"FederationGuid\", \"Flags\", \"FocusDistance\", \"Format\", \"GeometryStream\", \"Height\", \"InSpatialIndex\", \"IsCameraOn\", \"IsPrivate\", \"JsonProperties\", \"LastMod\", \"LensAngle\", \"Model\", \"ModelSelector\", \"Name\", \"Origin\", \"PaletteName\", \"Parent\", \"Pitch\", \"Properties\", \"Rank\", \"Recipe\", \"RepositoryGuid\", \"Roll\", \"Rotation\", \"RotationAngle\", \"Scale\", \"SheetTemplate\", \"Type\", \"TypeDefinition\", \"Url\", \"UserLabel\", \"View\", \"ViewAttachment\", \"Width\", \"Yaw\"];\r\n const actual = rows.map((r) => r.prop);\r\n assert.sameOrderedMembers(actual, expected);\r\n });\r\n\r\n it(\"generate mandelbrot set\", async () => {\r\n const rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n [xaxis]([x]) AS(\r\n VALUES (- 2.0)\r\n UNION ALL\r\n SELECT [x] + 0.05\r\n FROM [xaxis]\r\n WHERE [x] < 1.2\r\n ),\r\n [yaxis]([y]) AS(\r\n VALUES (- 1.0)\r\n UNION ALL\r\n SELECT [y] + 0.1\r\n FROM [yaxis]\r\n WHERE [y] < 1.0\r\n ),\r\n [m]([iter], [cx], [cy], [x], [y]) AS(\r\n SELECT\r\n 0,\r\n [x],\r\n [y],\r\n 0.0,\r\n 0.0\r\n FROM [xaxis],\r\n [yaxis]\r\n UNION ALL\r\n SELECT\r\n [iter] + 1,\r\n [cx],\r\n [cy],\r\n [x] * [x] - [y] * [y] + [cx],\r\n 2.0 * [x] * [y] + [cy]\r\n FROM [m]\r\n WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28\r\n ),\r\n [m2]([iter], [cx], [cy]) AS(\r\n SELECT\r\n MAX ([iter]),\r\n [cx],\r\n [cy]\r\n FROM [m]\r\n GROUP BY\r\n [cx],\r\n [cy]\r\n ),\r\n [a]([t]) AS(\r\n SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')\r\n FROM [m2]\r\n GROUP BY [cy]\r\n )\r\n SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set\r\n FROM [a];\r\n `);\r\n\r\n const expected =\r\n \" ....#\\n\" +\r\n \" ..#*..\\n\" +\r\n \" ..+####+.\\n\" +\r\n \" .......+####.... +\\n\" +\r\n \" ..##+*##########+.++++\\n\" +\r\n \" .+.##################+.\\n\" +\r\n \" .............+###################+.+\\n\" +\r\n \" ..++..#.....*#####################+.\\n\" +\r\n \" ...+#######++#######################.\\n\" +\r\n \" ....+*################################.\\n\" +\r\n \" #############################################...\\n\" +\r\n \" ....+*################################.\\n\" +\r\n \" ...+#######++#######################.\\n\" +\r\n \" ..++..#.....*#####################+.\\n\" +\r\n \" .............+###################+.+\\n\" +\r\n \" .+.##################+.\\n\" +\r\n \" ..##+*##########+.++++\\n\" +\r\n \" .......+####.... +\\n\" +\r\n \" ..+####+.\\n\" +\r\n \" ..#*..\\n\" +\r\n \" ....#\\n\" +\r\n \" +.\";\r\n assert(rows[0].mandelbrot_set === expected);\r\n });\r\n\r\n it(\"basic cte test\", async () => {\r\n let rows = [];\r\n rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n cnt (x,y) AS (\r\n SELECT 100, 200\r\n UNION ALL\r\n SELECT x+1, 200 FROM cnt WHERE x<210\r\n )\r\n SELECT * from cnt`);\r\n assert(rows.length === 111);\r\n\r\n rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n cnt (x,y) AS (\r\n SELECT 100, 200\r\n )\r\n SELECT * from cnt`);\r\n\r\n let slm = new SequentialLogMatcher();\r\n // these two are generated by sqlite\r\n slm.append().error().category(\"ECDb\").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);\r\n assert(rows.length === 1);\r\n try {\r\n rows = await executeQuery(imodel1, `\r\n WITH\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400, 300\r\n ),\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400, 300\r\n )\r\n SELECT * from cte_1`);\r\n assert(false);\r\n } catch {\r\n assert(true); // should fail as cte_1 is used for two ct expression.\r\n }\r\n assert.isTrue(slm.finishAndDispose());\r\n slm = new SequentialLogMatcher();\r\n // these two are generated by ECSQL. Its not clear why this message is logged twice.\r\n slm.append().error().category(\"ECDb\").message(/Common table 'cte_1' has 3 values for columns 2/gm);\r\n try {\r\n rows = await executeQuery(imodel1, `\r\n WITH\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400\r\n )\r\n SELECT * from cte_1`);\r\n assert(false);\r\n } catch {\r\n assert(true); // number are to ct expression does not match select\r\n }\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n});\r\n"]}
@@ -56,8 +56,8 @@ describe("ConcurrentQuery", () => {
56
56
  ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });
57
57
  // await runSingleRequest(db, `SELECT 1`);
58
58
  const req = {
59
- query: `WITH sequence(n,k) AS (
60
- SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
59
+ query: `WITH sequence(n,k) AS (
60
+ SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
61
61
  ) SELECT COUNT(*) FROM sequence s`
62
62
  };
63
63
  const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
@@ -76,11 +76,11 @@ describe("ConcurrentQuery", () => {
76
76
  ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });
77
77
  // await runSingleRequest(db, `SELECT 1`);
78
78
  const req = {
79
- query: `WITH sequence(n) AS (
80
- SELECT 1
81
- UNION ALL
82
- SELECT n + 1 FROM sequence WHERE n < 10000000
83
- )
79
+ query: `WITH sequence(n) AS (
80
+ SELECT 1
81
+ UNION ALL
82
+ SELECT n + 1 FROM sequence WHERE n < 10000000
83
+ )
84
84
  SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`
85
85
  };
86
86
  const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
@@ -105,14 +105,14 @@ describe("ConcurrentQuery", () => {
105
105
  const db = SnapshotDb.openFile(testFile);
106
106
  ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });
107
107
  const req0 = {
108
- query: `WITH sequence(n) AS (
109
- SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
108
+ query: `WITH sequence(n) AS (
109
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
110
110
  ) SELECT n FROM sequence s`,
111
111
  restartToken: "Blah",
112
112
  };
113
113
  const req1 = {
114
- query: `WITH sequence(n) AS (
115
- SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000
114
+ query: `WITH sequence(n) AS (
115
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000
116
116
  ) SELECT n FROM sequence s`,
117
117
  restartToken: "Blah",
118
118
  };
@@ -129,8 +129,8 @@ describe("ConcurrentQuery", () => {
129
129
  const db = SnapshotDb.openFile(testFile);
130
130
  ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });
131
131
  const req = {
132
- query: `WITH sequence(n) AS (
133
- SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
132
+ query: `WITH sequence(n) AS (
133
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
134
134
  ) SELECT n FROM sequence s`,
135
135
  };
136
136
  const responsePromises = [];
@@ -147,8 +147,8 @@ describe("ConcurrentQuery", () => {
147
147
  const db = SnapshotDb.openFile(testFile);
148
148
  ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });
149
149
  const req = {
150
- query: `WITH sequence(n) AS (
151
- SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
150
+ query: `WITH sequence(n) AS (
151
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
152
152
  ) SELECT n FROM sequence s`,
153
153
  };
154
154
  const responsePromises = [];
@@ -177,10 +177,10 @@ describe("ConcurrentQuery", () => {
177
177
  const spam = async () => {
178
178
  while (!shouldStop) {
179
179
  // Use random numbers to prevent query caching
180
- const query = `
181
- WITH sequence(n,k) AS (
182
- SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
183
- ) SELECT COUNT(*) FROM sequence s
180
+ const query = `
181
+ WITH sequence(n,k) AS (
182
+ SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
183
+ ) SELECT COUNT(*) FROM sequence s
184
184
  `;
185
185
  const request = { query };
186
186
  const p = ConcurrentQuery.executeQueryRequest(iModelDb[_nativeDb], request);
@@ -1 +1 @@
1
- {"version":3,"file":"ConcurrentQuery.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQuery.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG;YACpB,8BAA8B,EAAE,IAAI;YACpC,4BAA4B,EAAE,KAAK;YACnC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YAC1C,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,KAAK;YACrB,iBAAiB,EAAE,CAAC;YACpB,mBAAmB,EAAE,IAAI;YACzB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,2BAA2B,EAAE,EAAE;YAC/B,aAAa,EAAE,CAAC;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACtC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG;YACrB,8BAA8B,EAAE,GAAG;YACnC,4BAA4B,EAAE,IAAI;YAClC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YAC1C,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,GAAG;YACtB,mBAAmB,EAAE,IAAI;YACzB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,2BAA2B,EAAE,EAAE;YAC/B,aAAa,EAAE,CAAC;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;QACvC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAChH,0CAA0C;QAC1C,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE;;gDAEmC;SAC3C,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,0CAA0C;QAC1C,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE;;;;;wEAK2D;SACnE,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE,gCAAgC;SACxC,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QACxE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACnH,MAAM,IAAI,GAAmB;YAC3B,KAAK,EAAE;;yCAE4B;YACnC,YAAY,EAAE,MAAM;SACrB,CAAC;QAEF,MAAM,IAAI,GAAmB;YAC3B,KAAK,EAAE;;yCAE4B;YACnC,YAAY,EAAE,MAAM;SACrB,CAAC;QAEF,MAAM,KAAK,GAAG,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,4EAA4E;QACpI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/G,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE;;yCAE4B;SACpC,CAAC;QAEF,MAAM,gBAAgB,GAA+B,EAAE,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5B,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;QACpG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC3D,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,mBAAmB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnH,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE;;yCAE4B;SACpC,CAAC;QAEF,MAAM,gBAAgB,GAA+B,EAAE,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7B,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC3D,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,mCAAmC;QACnC,MAAM,MAAM,GAAG;YACb,gBAAgB,EAAE,IAAI;YACtB,2BAA2B,EAAE,CAAC,EAAE,+BAA+B;YAC/D,4BAA4B,EAAE,KAAK,EAAE,iCAAiC;SACvE,CAAC;QAEF,sBAAsB;QACtB,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,gBAAgB,GAA+B,EAAE,CAAC;QACxD,MAAM,YAAY,GAAoB,EAAE,CAAC;QACzC,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnB,8CAA8C;gBAC9C,MAAM,KAAK,GAAG;;;;WAIX,CAAC;gBACJ,MAAM,OAAO,GAAmB,EAAE,KAAK,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5E,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC;QAEF,uDAAuD;QACvD,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,6CAA6C;QAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtD,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAE9C,UAAU,GAAG,IAAI,CAAC;QAElB,oCAAoC;QACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAEvC,MAAM,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAEnJ,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,oCAAoC;QAElF,kDAAkD;QAClD,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { DbQueryRequest, DbQueryResponse, DbResponseStatus } from \"@itwin/core-common\";\nimport { expect } from \"chai\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { _nativeDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nasync function delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\ndescribe(\"ConcurrentQuery\", () => {\n it(\"default config\", () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const defaultConfig = {\n autoShutdownWhenIdleForSeconds: 1800,\n doNotUsePrimaryConnToPrepare: false,\n globalQuota: { time: 60, memory: 8388608 },\n ignoreDelay: true,\n ignorePriority: false,\n memoryMapFileSize: 0,\n monitorPollInterval: 5000,\n progressOpCount: 5000,\n requestQueueSize: 2000,\n statementCacheSizePerWorker: 40,\n workerThreads: 4,\n };\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], {});\n expect(config).deep.eq(defaultConfig);\n db.close();\n });\n\n it(\"modify config\", () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const modifiedConfig = {\n autoShutdownWhenIdleForSeconds: 100,\n doNotUsePrimaryConnToPrepare: true,\n globalQuota: { time: 10, memory: 1000000 },\n ignoreDelay: false,\n ignorePriority: true,\n memoryMapFileSize: 100,\n monitorPollInterval: 2000,\n progressOpCount: 6000,\n requestQueueSize: 1000,\n statementCacheSizePerWorker: 20,\n workerThreads: 3,\n };\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], modifiedConfig);\n expect(config).deep.eq(modifiedConfig);\n db.close();\n });\n\n it(\"time limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });\n // await runSingleRequest(db, `SELECT 1`);\n const req: DbQueryRequest = {\n query: `WITH sequence(n,k) AS (\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\n ) SELECT COUNT(*) FROM sequence s`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Partial);\n expect(resp.stats.timeLimit).equals(1000);\n expect(resp.stats.memLimit).equals(100000);\n expect(resp.stats.cpuTime).to.be.closeTo(1000970, 500000);\n expect(resp.stats.totalTime).to.be.closeTo(1001, 100);\n expect(resp.stats.memUsed).to.be.closeTo(2, 3);\n expect(resp.stats.prepareTime).to.be.closeTo(0, 2);\n db.close();\n });\n\n it(\"memory limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });\n // await runSingleRequest(db, `SELECT 1`);\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Partial);\n expect(resp.stats.timeLimit).equals(60000);\n expect(resp.stats.memLimit).equals(1000);\n expect(resp.stats.memUsed).to.be.closeTo(1037, 100);\n db.close();\n });\n\n it(\"prepare error\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const req: DbQueryRequest = {\n query: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Error_ECSql_PreparedFailed);\n db.close();\n });\n\n it.skip(\"restart query #flaky\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });\n const req0: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n restartToken: \"Blah\",\n };\n\n const req1: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000\n ) SELECT n FROM sequence s`,\n restartToken: \"Blah\",\n };\n\n const resp1 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req0);\n await delay(1);\n const resp2 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req1);\n const resp = await Promise.all([resp1, resp2]);\n expect(resp[0].status).equals(DbResponseStatus.Cancel); // can result in DbResponseStatus.Partial instead of DbResponseStatus.Cancel\n expect(resp[1].status).equals(DbResponseStatus.Done);\n db.close();\n });\n\n it(\"queue limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n };\n\n const responsePromises: Promise<DbQueryResponse>[] = [];\n for (let i = 0; i < 60; ++i) {\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\n }\n const responses = await Promise.all(responsePromises);\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.QueueFull));\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\n db.close();\n });\n\n it(\"timeout check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n };\n\n const responsePromises: Promise<DbQueryResponse>[] = [];\n for (let i = 0; i < 100; ++i) {\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\n }\n const responses = await Promise.all(responsePromises);\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.Timeout));\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\n db.close();\n });\n\n it(\"should handle concurrent queries during shutdown without deadlock\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const iModelDb = SnapshotDb.openFile(testFile);\n // Configure for maximum contention\n const config = {\n requestQueueSize: 1000,\n statementCacheSizePerWorker: 1, // Force frequent prepare calls\n doNotUsePrimaryConnToPrepare: false, // Force primary connection usage\n };\n\n // Reset configuration\n ConcurrentQuery.resetConfig(iModelDb[_nativeDb], config);\n\n const responsePromises: Promise<DbQueryResponse>[] = [];\n const spamPromises: Promise<void>[] = [];\n let shouldStop = false;\n\n const spam = async () => {\n while (!shouldStop) {\n // Use random numbers to prevent query caching\n const query = `\n WITH sequence(n,k) AS (\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\n ) SELECT COUNT(*) FROM sequence s\n `;\n const request: DbQueryRequest = { query };\n const p = ConcurrentQuery.executeQueryRequest(iModelDb[_nativeDb], request);\n responsePromises.push(p);\n await new Promise(resolve => setImmediate(resolve));\n }\n };\n\n // Start spamming simple queries to increase contention\n spamPromises.push(spam());\n // Let queries start and establish contention\n await new Promise(resolve => setTimeout(resolve, 10));\n\n ConcurrentQuery.shutdown(iModelDb[_nativeDb]);\n\n shouldStop = true;\n\n // Wait for all promises to complete\n const results = await Promise.allSettled(responsePromises);\n await Promise.allSettled(spamPromises);\n\n const satisfiesShutDownResponse = results.some((result) => result.status === \"fulfilled\" && result.value.status === DbResponseStatus.ShuttingDown);\n\n expect(satisfiesShutDownResponse).to.be.true; // some queries should face shutdown\n\n // Restore original config by resetting to default\n ConcurrentQuery.resetConfig(iModelDb[_nativeDb], {});\n iModelDb.close();\n });\n});\n"]}
1
+ {"version":3,"file":"ConcurrentQuery.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQuery.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { DbQueryRequest, DbQueryResponse, DbResponseStatus } from \"@itwin/core-common\";\r\nimport { expect } from \"chai\";\r\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { _nativeDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\nasync function delay(ms: number): Promise<void> {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\ndescribe(\"ConcurrentQuery\", () => {\r\n it(\"default config\", () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const defaultConfig = {\r\n autoShutdownWhenIdleForSeconds: 1800,\r\n doNotUsePrimaryConnToPrepare: false,\r\n globalQuota: { time: 60, memory: 8388608 },\r\n ignoreDelay: true,\r\n ignorePriority: false,\r\n memoryMapFileSize: 0,\r\n monitorPollInterval: 5000,\r\n progressOpCount: 5000,\r\n requestQueueSize: 2000,\r\n statementCacheSizePerWorker: 40,\r\n workerThreads: 4,\r\n };\r\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], {});\r\n expect(config).deep.eq(defaultConfig);\r\n db.close();\r\n });\r\n\r\n it(\"modify config\", () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const modifiedConfig = {\r\n autoShutdownWhenIdleForSeconds: 100,\r\n doNotUsePrimaryConnToPrepare: true,\r\n globalQuota: { time: 10, memory: 1000000 },\r\n ignoreDelay: false,\r\n ignorePriority: true,\r\n memoryMapFileSize: 100,\r\n monitorPollInterval: 2000,\r\n progressOpCount: 6000,\r\n requestQueueSize: 1000,\r\n statementCacheSizePerWorker: 20,\r\n workerThreads: 3,\r\n };\r\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], modifiedConfig);\r\n expect(config).deep.eq(modifiedConfig);\r\n db.close();\r\n });\r\n\r\n it(\"time limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });\r\n // await runSingleRequest(db, `SELECT 1`);\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n,k) AS (\r\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\r\n ) SELECT COUNT(*) FROM sequence s`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Partial);\r\n expect(resp.stats.timeLimit).equals(1000);\r\n expect(resp.stats.memLimit).equals(100000);\r\n expect(resp.stats.cpuTime).to.be.closeTo(1000970, 500000);\r\n expect(resp.stats.totalTime).to.be.closeTo(1001, 100);\r\n expect(resp.stats.memUsed).to.be.closeTo(2, 3);\r\n expect(resp.stats.prepareTime).to.be.closeTo(0, 2);\r\n db.close();\r\n });\r\n\r\n it(\"memory limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });\r\n // await runSingleRequest(db, `SELECT 1`);\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Partial);\r\n expect(resp.stats.timeLimit).equals(60000);\r\n expect(resp.stats.memLimit).equals(1000);\r\n expect(resp.stats.memUsed).to.be.closeTo(1037, 100);\r\n db.close();\r\n });\r\n\r\n it(\"prepare error\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const req: DbQueryRequest = {\r\n query: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Error_ECSql_PreparedFailed);\r\n db.close();\r\n });\r\n\r\n it.skip(\"restart query #flaky\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });\r\n const req0: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n restartToken: \"Blah\",\r\n };\r\n\r\n const req1: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000\r\n ) SELECT n FROM sequence s`,\r\n restartToken: \"Blah\",\r\n };\r\n\r\n const resp1 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req0);\r\n await delay(1);\r\n const resp2 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req1);\r\n const resp = await Promise.all([resp1, resp2]);\r\n expect(resp[0].status).equals(DbResponseStatus.Cancel); // can result in DbResponseStatus.Partial instead of DbResponseStatus.Cancel\r\n expect(resp[1].status).equals(DbResponseStatus.Done);\r\n db.close();\r\n });\r\n\r\n it(\"queue limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n };\r\n\r\n const responsePromises: Promise<DbQueryResponse>[] = [];\r\n for (let i = 0; i < 60; ++i) {\r\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\r\n }\r\n const responses = await Promise.all(responsePromises);\r\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.QueueFull));\r\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\r\n db.close();\r\n });\r\n\r\n it(\"timeout check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n };\r\n\r\n const responsePromises: Promise<DbQueryResponse>[] = [];\r\n for (let i = 0; i < 100; ++i) {\r\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\r\n }\r\n const responses = await Promise.all(responsePromises);\r\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.Timeout));\r\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\r\n db.close();\r\n });\r\n\r\n it(\"should handle concurrent queries during shutdown without deadlock\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const iModelDb = SnapshotDb.openFile(testFile);\r\n // Configure for maximum contention\r\n const config = {\r\n requestQueueSize: 1000,\r\n statementCacheSizePerWorker: 1, // Force frequent prepare calls\r\n doNotUsePrimaryConnToPrepare: false, // Force primary connection usage\r\n };\r\n\r\n // Reset configuration\r\n ConcurrentQuery.resetConfig(iModelDb[_nativeDb], config);\r\n\r\n const responsePromises: Promise<DbQueryResponse>[] = [];\r\n const spamPromises: Promise<void>[] = [];\r\n let shouldStop = false;\r\n\r\n const spam = async () => {\r\n while (!shouldStop) {\r\n // Use random numbers to prevent query caching\r\n const query = `\r\n WITH sequence(n,k) AS (\r\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\r\n ) SELECT COUNT(*) FROM sequence s\r\n `;\r\n const request: DbQueryRequest = { query };\r\n const p = ConcurrentQuery.executeQueryRequest(iModelDb[_nativeDb], request);\r\n responsePromises.push(p);\r\n await new Promise(resolve => setImmediate(resolve));\r\n }\r\n };\r\n\r\n // Start spamming simple queries to increase contention\r\n spamPromises.push(spam());\r\n // Let queries start and establish contention\r\n await new Promise(resolve => setTimeout(resolve, 10));\r\n\r\n ConcurrentQuery.shutdown(iModelDb[_nativeDb]);\r\n\r\n shouldStop = true;\r\n\r\n // Wait for all promises to complete\r\n const results = await Promise.allSettled(responsePromises);\r\n await Promise.allSettled(spamPromises);\r\n\r\n const satisfiesShutDownResponse = results.some((result) => result.status === \"fulfilled\" && result.value.status === DbResponseStatus.ShuttingDown);\r\n\r\n expect(satisfiesShutDownResponse).to.be.true; // some queries should face shutdown\r\n\r\n // Restore original config by resetting to default\r\n ConcurrentQuery.resetConfig(iModelDb[_nativeDb], {});\r\n iModelDb.close();\r\n });\r\n});\r\n"]}
@@ -116,24 +116,24 @@ describe.skip("ConcurrentQueryLoad", () => {
116
116
  createReader: (dbs) => {
117
117
  const queries = [
118
118
  {
119
- sql: `
120
- WITH sequence(n) AS (
121
- SELECT 1
122
- UNION ALL
123
- SELECT n + 1 FROM sequence WHERE n < 10000000
124
- )
125
- SELECT COUNT(*)
126
- FROM bis.SpatialIndex i, sequence s
127
- WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(
119
+ sql: `
120
+ WITH sequence(n) AS (
121
+ SELECT 1
122
+ UNION ALL
123
+ SELECT n + 1 FROM sequence WHERE n < 10000000
124
+ )
125
+ SELECT COUNT(*)
126
+ FROM bis.SpatialIndex i, sequence s
127
+ WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(
128
128
  iModel_bbox(random(), random(), random(), random(),random(), random()))`
129
129
  },
130
130
  {
131
- sql: `
132
- WITH sequence(n) AS (
133
- SELECT 1
134
- UNION ALL
135
- SELECT n + 1 FROM sequence WHERE n < 10000000
136
- )
131
+ sql: `
132
+ WITH sequence(n) AS (
133
+ SELECT 1
134
+ UNION ALL
135
+ SELECT n + 1 FROM sequence WHERE n < 10000000
136
+ )
137
137
  SELECT COUNT(*) FROM sequence`
138
138
  },
139
139
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ConcurrentQueryLoad.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQueryLoad.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, LogLevel, StopWatch } from \"@itwin/core-bentley\";\nimport { DbQueryConfig, ECSqlReader, QueryStats } from \"@itwin/core-common\";\nimport { expect } from \"chai\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\nimport { ECDb } from \"../../ECDb\";\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { _nativeDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ninterface ITaskResult {\n stats: QueryStats;\n error?: any;\n}\n\ninterface IScenario {\n name: string;\n config?: DbQueryConfig;\n totalBatches: number;\n taskPerBatch: number;\n createReader: (db: ECDb | IModelDb) => ECSqlReader;\n}\n\nclass LoadSimulator {\n constructor(public db: ECDb | IModelDb, public scenario: IScenario) { }\n private async runQueryTask(reader: ECSqlReader): Promise<ITaskResult> {\n try {\n while (await reader.step()) { }\n return { stats: reader.stats };\n } catch (err) {\n return { stats: reader.stats, error: err };\n }\n }\n\n public async run() {\n ConcurrentQuery.shutdown(this.db[_nativeDb]);\n if (this.scenario.config) {\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.scenario.config);\n // eslint-disable-next-line no-console\n console.log(config);\n }\n const overallTime = new StopWatch();\n overallTime.start();\n const results: ITaskResult[] = [];\n for (let i = 0; i < this.scenario.totalBatches; ++i) {\n const promises: Promise<ITaskResult>[] = [];\n const readerTasks = Array(this.scenario.taskPerBatch).fill(undefined).map(() => this.scenario.createReader(this.db));\n readerTasks.forEach((reader) => {\n promises.push(this.runQueryTask(reader));\n });\n results.push(... await Promise.all(promises));\n\n }\n overallTime.stop();\n const errors = results.filter((x) => x.error !== undefined);\n const errorsMap = new Map<string, number>();\n errors.forEach((x) => {\n if (x.error instanceof Error) {\n if (!errorsMap.has(x.error.message)) {\n errorsMap.set(x.error.message, 1);\n } else {\n errorsMap.set(x.error.message, errorsMap.get(x.error.message)! + 1);\n }\n } else {\n if (!errorsMap.has(\"error\")) {\n errorsMap.set(\"error\", 1);\n } else {\n errorsMap.set(\"error\", errorsMap.get(\"error\")! + 1);\n }\n }\n });\n const errorCount = errors.length;\n let backendCpuTime: bigint = BigInt(0);\n let backendTotalTime: bigint = BigInt(0);\n let backendMemUsed: bigint = BigInt(0);\n let backendRowsReturned: bigint = BigInt(0);\n let totalTime: bigint = BigInt(0);\n let retryCount: bigint = BigInt(0);\n let prepareTime: bigint = BigInt(0);\n\n // Calculate average\n results.forEach((r: ITaskResult) => {\n backendCpuTime += BigInt(r.stats.backendCpuTime);\n backendTotalTime += BigInt(r.stats.backendTotalTime);\n backendMemUsed += BigInt(r.stats.backendMemUsed);\n backendRowsReturned += BigInt(r.stats.backendRowsReturned);\n totalTime += BigInt(r.stats.totalTime);\n retryCount += BigInt(r.stats.retryCount);\n prepareTime += BigInt(r.stats.prepareTime);\n });\n\n backendCpuTime /= BigInt(results.length);\n backendTotalTime /= BigInt(results.length);\n backendMemUsed /= BigInt(results.length);\n backendRowsReturned /= BigInt(results.length);\n totalTime /= BigInt(results.length);\n retryCount /= BigInt(results.length);\n // prepareTime /= BigInt(results.length);\n\n return {\n result: {\n backendCpuTime,\n backendTotalTime,\n backendMemUsed,\n backendRowsReturned,\n totalTime,\n retryCount,\n prepareTime,\n },\n overallTimeInSec: overallTime.currentSeconds,\n errorCount,\n totalQueries: results.length,\n errorMap: errorsMap\n };\n\n }\n}\ndescribe.skip(\"ConcurrentQueryLoad\", () => {\n it(\"should run\", async () => {\n Logger.initializeToConsole();\n Logger.setLevel(\"ECDb.ConcurrentQuery\", LogLevel.Trace);\n\n const scenario: IScenario = {\n name: \"ConcurrentQueryLoad\",\n config: {\n globalQuota: { time: 1, memory: 8388608 },\n workerThreads: 1,\n },\n totalBatches: 1,\n taskPerBatch: 1,\n createReader: (dbs: ECDb | IModelDb) => {\n const queries = [\n {\n sql: `\n WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT COUNT(*)\n FROM bis.SpatialIndex i, sequence s\n WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(\n iModel_bbox(random(), random(), random(), random(),random(), random()))`\n },\n {\n sql: `\n WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT COUNT(*) FROM sequence`\n },\n {\n sql: \"SELECT $ FROM bis.Element LIMIT 10000\"\n }\n ];\n const idx = Math.floor(Math.random() * queries.length);\n return dbs.createQueryReader(queries[idx].sql);\n }\n };\n\n const verySmallFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(verySmallFile);\n const simulator = new LoadSimulator(db, scenario);\n const result = await simulator.run();\n // eslint-disable-next-line no-console\n console.log(result);\n db.close();\n expect(result.errorCount).to.be.equal(0);\n });\n});\n"]}
1
+ {"version":3,"file":"ConcurrentQueryLoad.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQueryLoad.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, LogLevel, StopWatch } from \"@itwin/core-bentley\";\r\nimport { DbQueryConfig, ECSqlReader, QueryStats } from \"@itwin/core-common\";\r\nimport { expect } from \"chai\";\r\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\r\nimport { ECDb } from \"../../ECDb\";\r\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { _nativeDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ninterface ITaskResult {\r\n stats: QueryStats;\r\n error?: any;\r\n}\r\n\r\ninterface IScenario {\r\n name: string;\r\n config?: DbQueryConfig;\r\n totalBatches: number;\r\n taskPerBatch: number;\r\n createReader: (db: ECDb | IModelDb) => ECSqlReader;\r\n}\r\n\r\nclass LoadSimulator {\r\n constructor(public db: ECDb | IModelDb, public scenario: IScenario) { }\r\n private async runQueryTask(reader: ECSqlReader): Promise<ITaskResult> {\r\n try {\r\n while (await reader.step()) { }\r\n return { stats: reader.stats };\r\n } catch (err) {\r\n return { stats: reader.stats, error: err };\r\n }\r\n }\r\n\r\n public async run() {\r\n ConcurrentQuery.shutdown(this.db[_nativeDb]);\r\n if (this.scenario.config) {\r\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.scenario.config);\r\n // eslint-disable-next-line no-console\r\n console.log(config);\r\n }\r\n const overallTime = new StopWatch();\r\n overallTime.start();\r\n const results: ITaskResult[] = [];\r\n for (let i = 0; i < this.scenario.totalBatches; ++i) {\r\n const promises: Promise<ITaskResult>[] = [];\r\n const readerTasks = Array(this.scenario.taskPerBatch).fill(undefined).map(() => this.scenario.createReader(this.db));\r\n readerTasks.forEach((reader) => {\r\n promises.push(this.runQueryTask(reader));\r\n });\r\n results.push(... await Promise.all(promises));\r\n\r\n }\r\n overallTime.stop();\r\n const errors = results.filter((x) => x.error !== undefined);\r\n const errorsMap = new Map<string, number>();\r\n errors.forEach((x) => {\r\n if (x.error instanceof Error) {\r\n if (!errorsMap.has(x.error.message)) {\r\n errorsMap.set(x.error.message, 1);\r\n } else {\r\n errorsMap.set(x.error.message, errorsMap.get(x.error.message)! + 1);\r\n }\r\n } else {\r\n if (!errorsMap.has(\"error\")) {\r\n errorsMap.set(\"error\", 1);\r\n } else {\r\n errorsMap.set(\"error\", errorsMap.get(\"error\")! + 1);\r\n }\r\n }\r\n });\r\n const errorCount = errors.length;\r\n let backendCpuTime: bigint = BigInt(0);\r\n let backendTotalTime: bigint = BigInt(0);\r\n let backendMemUsed: bigint = BigInt(0);\r\n let backendRowsReturned: bigint = BigInt(0);\r\n let totalTime: bigint = BigInt(0);\r\n let retryCount: bigint = BigInt(0);\r\n let prepareTime: bigint = BigInt(0);\r\n\r\n // Calculate average\r\n results.forEach((r: ITaskResult) => {\r\n backendCpuTime += BigInt(r.stats.backendCpuTime);\r\n backendTotalTime += BigInt(r.stats.backendTotalTime);\r\n backendMemUsed += BigInt(r.stats.backendMemUsed);\r\n backendRowsReturned += BigInt(r.stats.backendRowsReturned);\r\n totalTime += BigInt(r.stats.totalTime);\r\n retryCount += BigInt(r.stats.retryCount);\r\n prepareTime += BigInt(r.stats.prepareTime);\r\n });\r\n\r\n backendCpuTime /= BigInt(results.length);\r\n backendTotalTime /= BigInt(results.length);\r\n backendMemUsed /= BigInt(results.length);\r\n backendRowsReturned /= BigInt(results.length);\r\n totalTime /= BigInt(results.length);\r\n retryCount /= BigInt(results.length);\r\n // prepareTime /= BigInt(results.length);\r\n\r\n return {\r\n result: {\r\n backendCpuTime,\r\n backendTotalTime,\r\n backendMemUsed,\r\n backendRowsReturned,\r\n totalTime,\r\n retryCount,\r\n prepareTime,\r\n },\r\n overallTimeInSec: overallTime.currentSeconds,\r\n errorCount,\r\n totalQueries: results.length,\r\n errorMap: errorsMap\r\n };\r\n\r\n }\r\n}\r\ndescribe.skip(\"ConcurrentQueryLoad\", () => {\r\n it(\"should run\", async () => {\r\n Logger.initializeToConsole();\r\n Logger.setLevel(\"ECDb.ConcurrentQuery\", LogLevel.Trace);\r\n\r\n const scenario: IScenario = {\r\n name: \"ConcurrentQueryLoad\",\r\n config: {\r\n globalQuota: { time: 1, memory: 8388608 },\r\n workerThreads: 1,\r\n },\r\n totalBatches: 1,\r\n taskPerBatch: 1,\r\n createReader: (dbs: ECDb | IModelDb) => {\r\n const queries = [\r\n {\r\n sql: `\r\n WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT COUNT(*)\r\n FROM bis.SpatialIndex i, sequence s\r\n WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(\r\n iModel_bbox(random(), random(), random(), random(),random(), random()))`\r\n },\r\n {\r\n sql: `\r\n WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT COUNT(*) FROM sequence`\r\n },\r\n {\r\n sql: \"SELECT $ FROM bis.Element LIMIT 10000\"\r\n }\r\n ];\r\n const idx = Math.floor(Math.random() * queries.length);\r\n return dbs.createQueryReader(queries[idx].sql);\r\n }\r\n };\r\n\r\n const verySmallFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(verySmallFile);\r\n const simulator = new LoadSimulator(db, scenario);\r\n const result = await simulator.run();\r\n // eslint-disable-next-line no-console\r\n console.log(result);\r\n db.close();\r\n expect(result.errorCount).to.be.equal(0);\r\n });\r\n});\r\n"]}