@itwin/core-backend 5.1.0-dev.43 → 5.1.0-dev.45

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 (351) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChannelControl.js.map +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/ClassRegistry.js +5 -5
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/CodeService.js.map +1 -1
  19. package/lib/cjs/CodeSpecs.js.map +1 -1
  20. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  21. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  22. package/lib/cjs/DevTools.js.map +1 -1
  23. package/lib/cjs/DisplayStyle.js.map +1 -1
  24. package/lib/cjs/ECDb.js.map +1 -1
  25. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  26. package/lib/cjs/ECSqlStatement.js.map +1 -1
  27. package/lib/cjs/Element.js.map +1 -1
  28. package/lib/cjs/ElementAspect.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  31. package/lib/cjs/Entity.js.map +1 -1
  32. package/lib/cjs/EntityReferences.js.map +1 -1
  33. package/lib/cjs/ExportGraphics.js.map +1 -1
  34. package/lib/cjs/ExternalSource.js.map +1 -1
  35. package/lib/cjs/FontFile.js.map +1 -1
  36. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  37. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  38. package/lib/cjs/GeometrySummary.js +47 -47
  39. package/lib/cjs/GeometrySummary.js.map +1 -1
  40. package/lib/cjs/IModelDb.js +8 -8
  41. package/lib/cjs/IModelDb.js.map +1 -1
  42. package/lib/cjs/IModelDbFonts.js.map +1 -1
  43. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  44. package/lib/cjs/IModelHost.js.map +1 -1
  45. package/lib/cjs/IModelJsFs.js.map +1 -1
  46. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  47. package/lib/cjs/IpcHost.js.map +1 -1
  48. package/lib/cjs/LineStyle.js.map +1 -1
  49. package/lib/cjs/LocalHub.js +1 -1
  50. package/lib/cjs/LocalHub.js.map +1 -1
  51. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  52. package/lib/cjs/LockControl.js.map +1 -1
  53. package/lib/cjs/Material.js.map +1 -1
  54. package/lib/cjs/Model.js.map +1 -1
  55. package/lib/cjs/NativeAppStorage.js.map +1 -1
  56. package/lib/cjs/NativeHost.js.map +1 -1
  57. package/lib/cjs/NavigationRelationship.js.map +1 -1
  58. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  59. package/lib/cjs/PropertyStore.js.map +1 -1
  60. package/lib/cjs/Relationship.js.map +1 -1
  61. package/lib/cjs/RpcBackend.js.map +1 -1
  62. package/lib/cjs/SQLiteDb.js.map +1 -1
  63. package/lib/cjs/Schema.js.map +1 -1
  64. package/lib/cjs/SchemaSync.js.map +1 -1
  65. package/lib/cjs/SchemaUtils.js.map +1 -1
  66. package/lib/cjs/SheetIndex.js.map +1 -1
  67. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  68. package/lib/cjs/SqliteStatement.js.map +1 -1
  69. package/lib/cjs/Texture.js.map +1 -1
  70. package/lib/cjs/TileStorage.js.map +1 -1
  71. package/lib/cjs/TxnManager.js.map +1 -1
  72. package/lib/cjs/ViewDefinition.js.map +1 -1
  73. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  74. package/lib/cjs/ViewStore.js.map +1 -1
  75. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  76. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  77. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  78. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  79. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  80. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  81. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  82. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  83. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  84. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  85. package/lib/cjs/core-backend.js.map +1 -1
  86. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  87. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  88. package/lib/cjs/domains/GenericElements.js.map +1 -1
  89. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  90. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  91. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  92. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  93. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  94. package/lib/cjs/internal/HubMock.js.map +1 -1
  95. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  96. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  97. package/lib/cjs/internal/NoLocks.js.map +1 -1
  98. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  99. package/lib/cjs/internal/Symbols.js.map +1 -1
  100. package/lib/cjs/internal/cross-package.js.map +1 -1
  101. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  102. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  103. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  104. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  105. package/lib/cjs/rpc/multipart.js.map +1 -1
  106. package/lib/cjs/rpc/tracing.js.map +1 -1
  107. package/lib/cjs/rpc/web/logging.js.map +1 -1
  108. package/lib/cjs/rpc/web/request.js.map +1 -1
  109. package/lib/cjs/rpc/web/response.js.map +1 -1
  110. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  111. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  112. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  113. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  114. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  115. package/lib/cjs/workspace/Settings.js.map +1 -1
  116. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  117. package/lib/cjs/workspace/Workspace.js.map +1 -1
  118. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  119. package/lib/esm/BackendHubAccess.js.map +1 -1
  120. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  121. package/lib/esm/BisCoreSchema.js.map +1 -1
  122. package/lib/esm/BlobContainerService.js.map +1 -1
  123. package/lib/esm/BriefcaseManager.js.map +1 -1
  124. package/lib/esm/CatalogDb.js.map +1 -1
  125. package/lib/esm/Category.js.map +1 -1
  126. package/lib/esm/ChangeSummaryManager.js +2 -2
  127. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  128. package/lib/esm/ChangedElementsDb.js.map +1 -1
  129. package/lib/esm/ChangesetECAdaptor.js +248 -248
  130. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  131. package/lib/esm/ChannelControl.js.map +1 -1
  132. package/lib/esm/CheckpointManager.js.map +1 -1
  133. package/lib/esm/ClassRegistry.js +5 -5
  134. package/lib/esm/ClassRegistry.js.map +1 -1
  135. package/lib/esm/CloudSqlite.js.map +1 -1
  136. package/lib/esm/CodeService.js.map +1 -1
  137. package/lib/esm/CodeSpecs.js.map +1 -1
  138. package/lib/esm/ConcurrentQuery.js.map +1 -1
  139. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  140. package/lib/esm/DevTools.js.map +1 -1
  141. package/lib/esm/DisplayStyle.js.map +1 -1
  142. package/lib/esm/ECDb.js.map +1 -1
  143. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  144. package/lib/esm/ECSqlStatement.js.map +1 -1
  145. package/lib/esm/Element.js.map +1 -1
  146. package/lib/esm/ElementAspect.js.map +1 -1
  147. package/lib/esm/ElementGraphics.js.map +1 -1
  148. package/lib/esm/ElementTreeWalker.js.map +1 -1
  149. package/lib/esm/Entity.js.map +1 -1
  150. package/lib/esm/EntityReferences.js.map +1 -1
  151. package/lib/esm/ExportGraphics.js.map +1 -1
  152. package/lib/esm/ExternalSource.js.map +1 -1
  153. package/lib/esm/FontFile.js.map +1 -1
  154. package/lib/esm/GeoCoordConfig.js.map +1 -1
  155. package/lib/esm/GeographicCRSServices.js.map +1 -1
  156. package/lib/esm/GeometrySummary.js +47 -47
  157. package/lib/esm/GeometrySummary.js.map +1 -1
  158. package/lib/esm/IModelDb.js +8 -8
  159. package/lib/esm/IModelDb.js.map +1 -1
  160. package/lib/esm/IModelDbFonts.js.map +1 -1
  161. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  162. package/lib/esm/IModelHost.js.map +1 -1
  163. package/lib/esm/IModelJsFs.js.map +1 -1
  164. package/lib/esm/ImageSourceConversion.js.map +1 -1
  165. package/lib/esm/IpcHost.js.map +1 -1
  166. package/lib/esm/LineStyle.js.map +1 -1
  167. package/lib/esm/LocalHub.js +1 -1
  168. package/lib/esm/LocalHub.js.map +1 -1
  169. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  170. package/lib/esm/LockControl.js.map +1 -1
  171. package/lib/esm/Material.js.map +1 -1
  172. package/lib/esm/Model.js.map +1 -1
  173. package/lib/esm/NativeAppStorage.js.map +1 -1
  174. package/lib/esm/NativeHost.js.map +1 -1
  175. package/lib/esm/NavigationRelationship.js.map +1 -1
  176. package/lib/esm/PromiseMemoizer.js.map +1 -1
  177. package/lib/esm/PropertyStore.js.map +1 -1
  178. package/lib/esm/Relationship.js.map +1 -1
  179. package/lib/esm/RpcBackend.js.map +1 -1
  180. package/lib/esm/SQLiteDb.js.map +1 -1
  181. package/lib/esm/Schema.js.map +1 -1
  182. package/lib/esm/SchemaSync.js.map +1 -1
  183. package/lib/esm/SchemaUtils.js.map +1 -1
  184. package/lib/esm/SheetIndex.js.map +1 -1
  185. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  186. package/lib/esm/SqliteStatement.js.map +1 -1
  187. package/lib/esm/Texture.js.map +1 -1
  188. package/lib/esm/TileStorage.js.map +1 -1
  189. package/lib/esm/TxnManager.js.map +1 -1
  190. package/lib/esm/ViewDefinition.js.map +1 -1
  191. package/lib/esm/ViewStateHydrator.js.map +1 -1
  192. package/lib/esm/ViewStore.js.map +1 -1
  193. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  194. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  195. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  196. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  197. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  198. package/lib/esm/core-backend.js.map +1 -1
  199. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  200. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  201. package/lib/esm/domains/GenericElements.js.map +1 -1
  202. package/lib/esm/domains/GenericSchema.js.map +1 -1
  203. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  204. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  205. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  206. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  207. package/lib/esm/internal/HubMock.js.map +1 -1
  208. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  209. package/lib/esm/internal/NativePlatform.js.map +1 -1
  210. package/lib/esm/internal/NoLocks.js.map +1 -1
  211. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  212. package/lib/esm/internal/Symbols.js.map +1 -1
  213. package/lib/esm/internal/cross-package.js.map +1 -1
  214. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  215. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  216. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  217. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  218. package/lib/esm/rpc/multipart.js.map +1 -1
  219. package/lib/esm/rpc/tracing.js.map +1 -1
  220. package/lib/esm/rpc/web/logging.js.map +1 -1
  221. package/lib/esm/rpc/web/request.js.map +1 -1
  222. package/lib/esm/rpc/web/response.js.map +1 -1
  223. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  224. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  225. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  226. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  227. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  228. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  229. package/lib/esm/test/AttachDb.test.js +11 -11
  230. package/lib/esm/test/AttachDb.test.js.map +1 -1
  231. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  232. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  233. package/lib/esm/test/IModelHost.test.js.map +1 -1
  234. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  235. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  236. package/lib/esm/test/IpcHost.test.js.map +1 -1
  237. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  238. package/lib/esm/test/PrintElementTree.js.map +1 -1
  239. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  240. package/lib/esm/test/RevisionUtility.js.map +1 -1
  241. package/lib/esm/test/SchemaUtils.test.js +25 -25
  242. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  243. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  244. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  245. package/lib/esm/test/TestUtils.js.map +1 -1
  246. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  247. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  248. package/lib/esm/test/categories/Category.test.js.map +1 -1
  249. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  250. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  251. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  252. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts +2 -0
  253. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts.map +1 -0
  254. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +164 -0
  255. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -0
  256. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +35 -45
  257. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  258. package/lib/esm/test/ecdb/ECDb.test.js +57 -57
  259. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  260. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  261. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  262. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  263. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  264. package/lib/esm/test/ecdb/ECSqlQuery.test.js +0 -55
  265. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  266. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  267. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  268. package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
  269. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  270. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  271. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  272. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  273. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  274. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  275. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  276. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  277. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  278. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  279. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  280. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  281. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  282. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  283. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  284. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  285. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  286. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  287. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  288. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  289. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  290. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  291. package/lib/esm/test/imageData.js.map +1 -1
  292. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  293. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  294. package/lib/esm/test/imodel/IModel.test.js +44 -44
  295. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  296. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  297. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  298. package/lib/esm/test/index.js.map +1 -1
  299. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  300. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  301. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  302. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  303. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  304. package/lib/esm/test/rpc/response.test.js.map +1 -1
  305. package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
  306. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  307. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  308. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  309. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  310. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  311. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  312. package/lib/esm/test/standalone/ChangesetReader.test.js +75 -75
  313. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  314. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  315. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  316. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  317. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  318. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  319. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  320. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  321. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  322. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  323. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  324. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  325. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  326. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  327. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  328. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  329. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  330. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  331. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  332. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  333. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  334. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  335. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  336. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  337. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  338. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  339. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  340. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  341. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  342. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  343. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  344. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  345. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  346. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  347. package/lib/esm/workspace/Settings.js.map +1 -1
  348. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  349. package/lib/esm/workspace/Workspace.js.map +1 -1
  350. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  351. package/package.json +13 -13
@@ -24,17 +24,17 @@ describe("Common table expression support in ECSQL", () => {
24
24
  imodel1.close();
25
25
  });
26
26
  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
- )
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
+ )
38
38
  SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name`;
39
39
  const rows = await executeQuery(imodel1, query, ["Element"]);
40
40
  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 +42,58 @@ describe("Common table expression support in ECSQL", () => {
42
42
  assert.sameOrderedMembers(actual, expected);
43
43
  });
44
44
  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];
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];
97
97
  `);
98
98
  const expected = " ....#\n" +
99
99
  " ..#*..\n" +
@@ -121,34 +121,34 @@ describe("Common table expression support in ECSQL", () => {
121
121
  });
122
122
  it("basic cte test", async () => {
123
123
  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
- )
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
+ )
131
131
  SELECT * from cnt`);
132
132
  assert(rows.length === 111);
133
- rows = await executeQuery(imodel1, `
134
- WITH RECURSIVE
135
- cnt (x,y) AS (
136
- SELECT 100, 200
137
- )
133
+ rows = await executeQuery(imodel1, `
134
+ WITH RECURSIVE
135
+ cnt (x,y) AS (
136
+ SELECT 100, 200
137
+ )
138
138
  SELECT * from cnt`);
139
139
  let slm = new SequentialLogMatcher();
140
140
  // these two are generated by sqlite
141
141
  slm.append().error().category("ECDb").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);
142
142
  assert(rows.length === 1);
143
143
  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
- )
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
+ )
152
152
  SELECT * from cte_1`);
153
153
  assert(false);
154
154
  }
@@ -160,11 +160,11 @@ describe("Common table expression support in ECSQL", () => {
160
160
  // these two are generated by ECSQL. Its not clear why this message is logged twice.
161
161
  slm.append().error().category("ECDb").message(/Common table 'cte_1' has 3 values for columns 2/gm);
162
162
  try {
163
- rows = await executeQuery(imodel1, `
164
- WITH
165
- cte_1 (a,b,c) AS (
166
- SELECT 100, 400
167
- )
163
+ rows = await executeQuery(imodel1, `
164
+ WITH
165
+ cte_1 (a,b,c) AS (
166
+ SELECT 100, 400
167
+ )
168
168
  SELECT * from cte_1`);
169
169
  assert(false);
170
170
  }
@@ -1 +1 @@
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 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"]}
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"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ConcurrentQuery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcurrentQuery.test.d.ts","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQuery.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ import { DbResponseStatus } from "@itwin/core-common";
2
+ import { expect } from "chai";
3
+ import { ConcurrentQuery } from "../../ConcurrentQuery";
4
+ import { SnapshotDb } from "../../IModelDb";
5
+ import { _nativeDb } from "../../core-backend";
6
+ import { IModelTestUtils } from "../IModelTestUtils";
7
+ async function delay(ms) {
8
+ return new Promise(resolve => {
9
+ setTimeout(resolve, ms);
10
+ });
11
+ }
12
+ describe("ConcurrentQuery", () => {
13
+ it("default config", () => {
14
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
15
+ const db = SnapshotDb.openFile(testFile);
16
+ const defaultConfig = {
17
+ autoShutdownWhenIdleForSeconds: 1800,
18
+ doNotUsePrimaryConnToPrepare: false,
19
+ globalQuota: { time: 60, memory: 8388608 },
20
+ ignoreDelay: true,
21
+ ignorePriority: false,
22
+ memoryMapFileSize: 0,
23
+ monitorPollInterval: 5000,
24
+ progressOpCount: 5000,
25
+ requestQueueSize: 2000,
26
+ statementCacheSizePerWorker: 40,
27
+ workerThreads: 4,
28
+ };
29
+ const config = ConcurrentQuery.resetConfig(db[_nativeDb], {});
30
+ expect(config).deep.eq(defaultConfig);
31
+ db.close();
32
+ });
33
+ it("modify config", () => {
34
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
35
+ const db = SnapshotDb.openFile(testFile);
36
+ const modifiedConfig = {
37
+ autoShutdownWhenIdleForSeconds: 100,
38
+ doNotUsePrimaryConnToPrepare: true,
39
+ globalQuota: { time: 10, memory: 1000000 },
40
+ ignoreDelay: false,
41
+ ignorePriority: true,
42
+ memoryMapFileSize: 100,
43
+ monitorPollInterval: 2000,
44
+ progressOpCount: 6000,
45
+ requestQueueSize: 1000,
46
+ statementCacheSizePerWorker: 20,
47
+ workerThreads: 3,
48
+ };
49
+ const config = ConcurrentQuery.resetConfig(db[_nativeDb], modifiedConfig);
50
+ expect(config).deep.eq(modifiedConfig);
51
+ db.close();
52
+ });
53
+ it("time limit check", async () => {
54
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
55
+ const db = SnapshotDb.openFile(testFile);
56
+ ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });
57
+ // await runSingleRequest(db, `SELECT 1`);
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
61
+ ) SELECT COUNT(*) FROM sequence s`
62
+ };
63
+ const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
64
+ expect(resp.status).equals(DbResponseStatus.Partial);
65
+ expect(resp.stats.timeLimit).equals(1000);
66
+ expect(resp.stats.memLimit).equals(100000);
67
+ expect(resp.stats.cpuTime).to.be.closeTo(1000970, 500000);
68
+ expect(resp.stats.totalTime).to.be.closeTo(1001, 100);
69
+ expect(resp.stats.memUsed).to.be.closeTo(2, 3);
70
+ expect(resp.stats.prepareTime).to.be.closeTo(0, 2);
71
+ db.close();
72
+ });
73
+ it("memory limit check", async () => {
74
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
75
+ const db = SnapshotDb.openFile(testFile);
76
+ ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });
77
+ // await runSingleRequest(db, `SELECT 1`);
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
+ )
84
+ SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`
85
+ };
86
+ const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
87
+ expect(resp.status).equals(DbResponseStatus.Partial);
88
+ expect(resp.stats.timeLimit).equals(60000);
89
+ expect(resp.stats.memLimit).equals(1000);
90
+ expect(resp.stats.memUsed).to.be.closeTo(1037, 100);
91
+ db.close();
92
+ });
93
+ it("prepare error", async () => {
94
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
95
+ const db = SnapshotDb.openFile(testFile);
96
+ const req = {
97
+ query: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
98
+ };
99
+ const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
100
+ expect(resp.status).equals(DbResponseStatus.Error_ECSql_PreparedFailed);
101
+ db.close();
102
+ });
103
+ it("restart query", async () => {
104
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
105
+ const db = SnapshotDb.openFile(testFile);
106
+ ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });
107
+ const req0 = {
108
+ query: `WITH sequence(n) AS (
109
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
110
+ ) SELECT n FROM sequence s`,
111
+ restartToken: "Blah",
112
+ };
113
+ const req1 = {
114
+ query: `WITH sequence(n) AS (
115
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000
116
+ ) SELECT n FROM sequence s`,
117
+ restartToken: "Blah",
118
+ };
119
+ const resp1 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req0);
120
+ await delay(1);
121
+ const resp2 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req1);
122
+ const resp = await Promise.all([resp1, resp2]);
123
+ expect(resp[0].status).equals(DbResponseStatus.Cancel);
124
+ expect(resp[1].status).equals(DbResponseStatus.Done);
125
+ db.close();
126
+ });
127
+ it("queue limit check", async () => {
128
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
129
+ const db = SnapshotDb.openFile(testFile);
130
+ ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });
131
+ const req = {
132
+ query: `WITH sequence(n) AS (
133
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
134
+ ) SELECT n FROM sequence s`,
135
+ };
136
+ const responsePromises = [];
137
+ for (let i = 0; i < 60; ++i) {
138
+ responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));
139
+ }
140
+ const responses = await Promise.all(responsePromises);
141
+ const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.QueueFull));
142
+ expect(queueResponses.length).to.be.greaterThanOrEqual(10);
143
+ db.close();
144
+ });
145
+ it("timeout check", async () => {
146
+ const testFile = IModelTestUtils.resolveAssetFile("test.bim");
147
+ const db = SnapshotDb.openFile(testFile);
148
+ ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });
149
+ const req = {
150
+ query: `WITH sequence(n) AS (
151
+ SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
152
+ ) SELECT n FROM sequence s`,
153
+ };
154
+ const responsePromises = [];
155
+ for (let i = 0; i < 100; ++i) {
156
+ responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));
157
+ }
158
+ const responses = await Promise.all(responsePromises);
159
+ const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.Timeout));
160
+ expect(queueResponses.length).to.be.greaterThanOrEqual(10);
161
+ db.close();
162
+ });
163
+ });
164
+ //# sourceMappingURL=ConcurrentQuery.test.js.map
@@ -0,0 +1 @@
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\";\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(\"restart query\", 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);\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"]}
@@ -6,10 +6,10 @@ import { _nativeDb } from "../../core-backend";
6
6
  import { IModelTestUtils } from "../IModelTestUtils";
7
7
  class LoadSimulator {
8
8
  db;
9
- senario;
10
- constructor(db, senario) {
9
+ scenario;
10
+ constructor(db, scenario) {
11
11
  this.db = db;
12
- this.senario = senario;
12
+ this.scenario = scenario;
13
13
  }
14
14
  async runQueryTask(reader) {
15
15
  try {
@@ -22,23 +22,23 @@ class LoadSimulator {
22
22
  }
23
23
  async run() {
24
24
  ConcurrentQuery.shutdown(this.db[_nativeDb]);
25
- if (this.senario.config) {
26
- const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.senario.config);
25
+ if (this.scenario.config) {
26
+ const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.scenario.config);
27
27
  // eslint-disable-next-line no-console
28
28
  console.log(config);
29
29
  }
30
- const overalTime = new StopWatch();
31
- overalTime.start();
30
+ const overallTime = new StopWatch();
31
+ overallTime.start();
32
32
  const results = [];
33
- for (let i = 0; i < this.senario.totalBatches; ++i) {
33
+ for (let i = 0; i < this.scenario.totalBatches; ++i) {
34
34
  const promises = [];
35
- const readerTasks = Array(this.senario.taskPerBatch).fill(undefined).map(() => this.senario.createReader(this.db));
35
+ const readerTasks = Array(this.scenario.taskPerBatch).fill(undefined).map(() => this.scenario.createReader(this.db));
36
36
  readerTasks.forEach((reader) => {
37
37
  promises.push(this.runQueryTask(reader));
38
38
  });
39
39
  results.push(...await Promise.all(promises));
40
40
  }
41
- overalTime.stop();
41
+ overallTime.stop();
42
42
  const errors = results.filter((x) => x.error !== undefined);
43
43
  const errorsMap = new Map();
44
44
  errors.forEach((x) => {
@@ -94,7 +94,7 @@ class LoadSimulator {
94
94
  retryCount,
95
95
  prepareTime,
96
96
  },
97
- overalTimeInSec: overalTime.currentSeconds,
97
+ overallTimeInSec: overallTime.currentSeconds,
98
98
  errorCount,
99
99
  totalQueries: results.length,
100
100
  errorMap: errorsMap
@@ -105,58 +105,48 @@ describe.skip("ConcurrentQueryLoad", () => {
105
105
  it("should run", async () => {
106
106
  Logger.initializeToConsole();
107
107
  Logger.setLevel("ECDb.ConcurrentQuery", LogLevel.Trace);
108
- // {
109
- // workerThreads: 4,
110
- // requestQueueSize: 2000,
111
- // ignorePriority: false,
112
- // ignoreDelay: true,
113
- // doNotUsePrimaryConnToPrepare: false,
114
- // autoShutdowWhenIdlelForSeconds: 300,
115
- // statementCacheSizePerWorker: 40,
116
- // monitorPollInterval: 1000,
117
- // memoryMapFileSize: 0,
118
- // allowTestingArgs: false,
119
- // globalQuota: { time: 60, memory: 8388608 }
120
- // }
121
- const senario = {
108
+ const scenario = {
122
109
  name: "ConcurrentQueryLoad",
123
- config: {},
110
+ config: {
111
+ globalQuota: { time: 1, memory: 8388608 },
112
+ workerThreads: 1,
113
+ },
124
114
  totalBatches: 1,
125
115
  taskPerBatch: 1,
126
116
  createReader: (dbs) => {
127
- const quries = [
117
+ const queries = [
128
118
  {
129
- sql: `
130
- WITH sequence(n) AS (
131
- SELECT 1
132
- UNION ALL
133
- SELECT n + 1 FROM sequence WHERE n < 10000
134
- )
135
- SELECT COUNT(*)
136
- FROM bis.SpatialIndex i, sequence s
137
- 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(
138
128
  iModel_bbox(random(), random(), random(), random(),random(), random()))`
139
129
  },
140
130
  {
141
- sql: `
142
- WITH sequence(n) AS (
143
- SELECT 1
144
- UNION ALL
145
- SELECT n + 1 FROM sequence WHERE n < 1000000
146
- )
131
+ sql: `
132
+ WITH sequence(n) AS (
133
+ SELECT 1
134
+ UNION ALL
135
+ SELECT n + 1 FROM sequence WHERE n < 10000000
136
+ )
147
137
  SELECT COUNT(*) FROM sequence`
148
138
  },
149
139
  {
150
140
  sql: "SELECT $ FROM bis.Element LIMIT 10000"
151
141
  }
152
142
  ];
153
- const idx = Math.floor(Math.random() * quries.length);
154
- return dbs.createQueryReader(quries[idx].sql);
143
+ const idx = Math.floor(Math.random() * queries.length);
144
+ return dbs.createQueryReader(queries[idx].sql);
155
145
  }
156
146
  };
157
147
  const verySmallFile = IModelTestUtils.resolveAssetFile("test.bim");
158
148
  const db = SnapshotDb.openFile(verySmallFile);
159
- const simulator = new LoadSimulator(db, senario);
149
+ const simulator = new LoadSimulator(db, scenario);
160
150
  const result = await simulator.run();
161
151
  // eslint-disable-next-line no-console
162
152
  console.log(result);