@itwin/core-backend 5.1.0-dev.3 → 5.1.0-dev.32

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 (521) hide show
  1. package/CHANGELOG.md +38 -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 +1 -1
  5. package/lib/cjs/BisCoreSchema.js.map +1 -1
  6. package/lib/cjs/BlobContainerService.js.map +1 -1
  7. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  8. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  9. package/lib/cjs/BriefcaseManager.js +12 -0
  10. package/lib/cjs/BriefcaseManager.js.map +1 -1
  11. package/lib/cjs/CatalogDb.js.map +1 -1
  12. package/lib/cjs/Category.d.ts +41 -4
  13. package/lib/cjs/Category.d.ts.map +1 -1
  14. package/lib/cjs/Category.js +77 -4
  15. package/lib/cjs/Category.js.map +1 -1
  16. package/lib/cjs/ChangeSummaryManager.js +2 -2
  17. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  18. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  19. package/lib/cjs/ChangesetECAdaptor.js +242 -242
  20. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  21. package/lib/cjs/ChannelControl.js.map +1 -1
  22. package/lib/cjs/CheckpointManager.js.map +1 -1
  23. package/lib/cjs/ClassRegistry.js +5 -5
  24. package/lib/cjs/ClassRegistry.js.map +1 -1
  25. package/lib/cjs/CloudSqlite.js +1 -1
  26. package/lib/cjs/CloudSqlite.js.map +1 -1
  27. package/lib/cjs/CodeService.js.map +1 -1
  28. package/lib/cjs/CodeSpecs.d.ts +1 -1
  29. package/lib/cjs/CodeSpecs.js +1 -1
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.d.ts +9 -4
  35. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  36. package/lib/cjs/DisplayStyle.js +30 -3
  37. package/lib/cjs/DisplayStyle.js.map +1 -1
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlStatement.js.map +1 -1
  41. package/lib/cjs/Element.d.ts +216 -60
  42. package/lib/cjs/Element.d.ts.map +1 -1
  43. package/lib/cjs/Element.js +560 -59
  44. package/lib/cjs/Element.js.map +1 -1
  45. package/lib/cjs/ElementAspect.d.ts +7 -7
  46. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  47. package/lib/cjs/ElementAspect.js +7 -7
  48. package/lib/cjs/ElementAspect.js.map +1 -1
  49. package/lib/cjs/ElementGraphics.js.map +1 -1
  50. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  51. package/lib/cjs/Entity.d.ts +43 -3
  52. package/lib/cjs/Entity.d.ts.map +1 -1
  53. package/lib/cjs/Entity.js +59 -1
  54. package/lib/cjs/Entity.js.map +1 -1
  55. package/lib/cjs/EntityReferences.js.map +1 -1
  56. package/lib/cjs/ExportGraphics.d.ts +54 -8
  57. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  58. package/lib/cjs/ExportGraphics.js +158 -59
  59. package/lib/cjs/ExportGraphics.js.map +1 -1
  60. package/lib/cjs/ExternalSource.js.map +1 -1
  61. package/lib/cjs/FontFile.js.map +1 -1
  62. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  63. package/lib/cjs/GeographicCRSServices.d.ts +6 -2
  64. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  65. package/lib/cjs/GeographicCRSServices.js +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 +28 -43
  70. package/lib/cjs/IModelDb.d.ts.map +1 -1
  71. package/lib/cjs/IModelDb.js +177 -92
  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.d.ts +13 -0
  76. package/lib/cjs/IModelHost.d.ts.map +1 -1
  77. package/lib/cjs/IModelHost.js +6 -0
  78. package/lib/cjs/IModelHost.js.map +1 -1
  79. package/lib/cjs/IModelJsFs.js.map +1 -1
  80. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  81. package/lib/cjs/IpcHost.js.map +1 -1
  82. package/lib/cjs/LineStyle.js.map +1 -1
  83. package/lib/cjs/LocalHub.js +1 -1
  84. package/lib/cjs/LocalHub.js.map +1 -1
  85. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  86. package/lib/cjs/LockControl.js.map +1 -1
  87. package/lib/cjs/Material.d.ts +19 -0
  88. package/lib/cjs/Material.d.ts.map +1 -1
  89. package/lib/cjs/Material.js +29 -0
  90. package/lib/cjs/Material.js.map +1 -1
  91. package/lib/cjs/Model.d.ts +64 -28
  92. package/lib/cjs/Model.d.ts.map +1 -1
  93. package/lib/cjs/Model.js +115 -27
  94. package/lib/cjs/Model.js.map +1 -1
  95. package/lib/cjs/NativeAppStorage.js.map +1 -1
  96. package/lib/cjs/NativeHost.js.map +1 -1
  97. package/lib/cjs/NavigationRelationship.js.map +1 -1
  98. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  99. package/lib/cjs/PropertyStore.js.map +1 -1
  100. package/lib/cjs/Relationship.js.map +1 -1
  101. package/lib/cjs/RpcBackend.js.map +1 -1
  102. package/lib/cjs/SQLiteDb.js.map +1 -1
  103. package/lib/cjs/Schema.js.map +1 -1
  104. package/lib/cjs/SchemaSync.js.map +1 -1
  105. package/lib/cjs/SchemaUtils.js.map +1 -1
  106. package/lib/cjs/SheetIndex.js.map +1 -1
  107. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  108. package/lib/cjs/SqliteStatement.js.map +1 -1
  109. package/lib/cjs/Texture.d.ts +1 -1
  110. package/lib/cjs/Texture.js +1 -1
  111. package/lib/cjs/Texture.js.map +1 -1
  112. package/lib/cjs/TileStorage.js.map +1 -1
  113. package/lib/cjs/TxnManager.d.ts +4 -4
  114. package/lib/cjs/TxnManager.d.ts.map +1 -1
  115. package/lib/cjs/TxnManager.js +2 -1
  116. package/lib/cjs/TxnManager.js.map +1 -1
  117. package/lib/cjs/ViewDefinition.d.ts +140 -14
  118. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  119. package/lib/cjs/ViewDefinition.js +250 -14
  120. package/lib/cjs/ViewDefinition.js.map +1 -1
  121. package/lib/cjs/ViewStateHydrator.js +3 -3
  122. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  123. package/lib/cjs/ViewStore.js.map +1 -1
  124. package/lib/cjs/annotations/FrameGeometry.d.ts +52 -0
  125. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
  126. package/lib/cjs/annotations/FrameGeometry.js +250 -0
  127. package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
  128. package/lib/cjs/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  129. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
  130. package/lib/cjs/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +20 -26
  131. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
  132. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +31 -0
  133. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  134. package/lib/cjs/annotations/TextAnnotationGeometry.js +83 -0
  135. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
  136. package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
  137. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
  138. package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
  139. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
  140. package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
  141. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
  142. package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
  143. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
  144. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  145. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  146. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  147. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  148. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  149. package/lib/cjs/core-backend.d.ts +5 -3
  150. package/lib/cjs/core-backend.d.ts.map +1 -1
  151. package/lib/cjs/core-backend.js +5 -6
  152. package/lib/cjs/core-backend.js.map +1 -1
  153. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  154. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  155. package/lib/cjs/domains/GenericElements.js.map +1 -1
  156. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  157. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  158. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  159. package/lib/cjs/internal/ElementLRUCache.d.ts +28 -0
  160. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -0
  161. package/lib/cjs/internal/ElementLRUCache.js +120 -0
  162. package/lib/cjs/internal/ElementLRUCache.js.map +1 -0
  163. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  164. package/lib/cjs/internal/HubMock.js.map +1 -1
  165. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  166. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  167. package/lib/cjs/internal/NoLocks.js.map +1 -1
  168. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  169. package/lib/cjs/internal/Symbols.d.ts +1 -0
  170. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  171. package/lib/cjs/internal/Symbols.js +2 -1
  172. package/lib/cjs/internal/Symbols.js.map +1 -1
  173. package/lib/cjs/internal/cross-package.js.map +1 -1
  174. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  175. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  176. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  177. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  178. package/lib/cjs/rpc/multipart.js.map +1 -1
  179. package/lib/cjs/rpc/tracing.js.map +1 -1
  180. package/lib/cjs/rpc/web/logging.js.map +1 -1
  181. package/lib/cjs/rpc/web/request.js.map +1 -1
  182. package/lib/cjs/rpc/web/response.js.map +1 -1
  183. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  184. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +2 -2
  185. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  186. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  187. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  188. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  189. package/lib/cjs/workspace/Settings.js.map +1 -1
  190. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  191. package/lib/cjs/workspace/Workspace.js.map +1 -1
  192. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  193. package/lib/esm/BackendHubAccess.js.map +1 -1
  194. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  195. package/lib/esm/BisCoreSchema.js +1 -1
  196. package/lib/esm/BisCoreSchema.js.map +1 -1
  197. package/lib/esm/BlobContainerService.js.map +1 -1
  198. package/lib/esm/BriefcaseManager.d.ts +10 -2
  199. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  200. package/lib/esm/BriefcaseManager.js +12 -0
  201. package/lib/esm/BriefcaseManager.js.map +1 -1
  202. package/lib/esm/CatalogDb.js.map +1 -1
  203. package/lib/esm/Category.d.ts +41 -4
  204. package/lib/esm/Category.d.ts.map +1 -1
  205. package/lib/esm/Category.js +77 -4
  206. package/lib/esm/Category.js.map +1 -1
  207. package/lib/esm/ChangeSummaryManager.js +2 -2
  208. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  209. package/lib/esm/ChangedElementsDb.js.map +1 -1
  210. package/lib/esm/ChangesetECAdaptor.js +242 -242
  211. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  212. package/lib/esm/ChannelControl.js.map +1 -1
  213. package/lib/esm/CheckpointManager.js.map +1 -1
  214. package/lib/esm/ClassRegistry.js +5 -5
  215. package/lib/esm/ClassRegistry.js.map +1 -1
  216. package/lib/esm/CloudSqlite.js +1 -1
  217. package/lib/esm/CloudSqlite.js.map +1 -1
  218. package/lib/esm/CodeService.js.map +1 -1
  219. package/lib/esm/CodeSpecs.d.ts +1 -1
  220. package/lib/esm/CodeSpecs.js +1 -1
  221. package/lib/esm/CodeSpecs.js.map +1 -1
  222. package/lib/esm/ConcurrentQuery.js.map +1 -1
  223. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  224. package/lib/esm/DevTools.js.map +1 -1
  225. package/lib/esm/DisplayStyle.d.ts +9 -4
  226. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  227. package/lib/esm/DisplayStyle.js +30 -3
  228. package/lib/esm/DisplayStyle.js.map +1 -1
  229. package/lib/esm/ECDb.js.map +1 -1
  230. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  231. package/lib/esm/ECSqlStatement.js.map +1 -1
  232. package/lib/esm/Element.d.ts +216 -60
  233. package/lib/esm/Element.d.ts.map +1 -1
  234. package/lib/esm/Element.js +563 -62
  235. package/lib/esm/Element.js.map +1 -1
  236. package/lib/esm/ElementAspect.d.ts +7 -7
  237. package/lib/esm/ElementAspect.d.ts.map +1 -1
  238. package/lib/esm/ElementAspect.js +7 -7
  239. package/lib/esm/ElementAspect.js.map +1 -1
  240. package/lib/esm/ElementGraphics.js.map +1 -1
  241. package/lib/esm/ElementTreeWalker.js.map +1 -1
  242. package/lib/esm/Entity.d.ts +43 -3
  243. package/lib/esm/Entity.d.ts.map +1 -1
  244. package/lib/esm/Entity.js +59 -1
  245. package/lib/esm/Entity.js.map +1 -1
  246. package/lib/esm/EntityReferences.js.map +1 -1
  247. package/lib/esm/ExportGraphics.d.ts +54 -8
  248. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  249. package/lib/esm/ExportGraphics.js +156 -58
  250. package/lib/esm/ExportGraphics.js.map +1 -1
  251. package/lib/esm/ExternalSource.js.map +1 -1
  252. package/lib/esm/FontFile.js.map +1 -1
  253. package/lib/esm/GeoCoordConfig.js.map +1 -1
  254. package/lib/esm/GeographicCRSServices.d.ts +6 -2
  255. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  256. package/lib/esm/GeographicCRSServices.js +1 -1
  257. package/lib/esm/GeographicCRSServices.js.map +1 -1
  258. package/lib/esm/GeometrySummary.js +47 -47
  259. package/lib/esm/GeometrySummary.js.map +1 -1
  260. package/lib/esm/IModelDb.d.ts +28 -43
  261. package/lib/esm/IModelDb.d.ts.map +1 -1
  262. package/lib/esm/IModelDb.js +180 -95
  263. package/lib/esm/IModelDb.js.map +1 -1
  264. package/lib/esm/IModelDbFonts.js.map +1 -1
  265. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  266. package/lib/esm/IModelHost.d.ts +13 -0
  267. package/lib/esm/IModelHost.d.ts.map +1 -1
  268. package/lib/esm/IModelHost.js +6 -0
  269. package/lib/esm/IModelHost.js.map +1 -1
  270. package/lib/esm/IModelJsFs.js.map +1 -1
  271. package/lib/esm/ImageSourceConversion.js.map +1 -1
  272. package/lib/esm/IpcHost.js.map +1 -1
  273. package/lib/esm/LineStyle.js.map +1 -1
  274. package/lib/esm/LocalHub.js +1 -1
  275. package/lib/esm/LocalHub.js.map +1 -1
  276. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  277. package/lib/esm/LockControl.js.map +1 -1
  278. package/lib/esm/Material.d.ts +19 -0
  279. package/lib/esm/Material.d.ts.map +1 -1
  280. package/lib/esm/Material.js +30 -1
  281. package/lib/esm/Material.js.map +1 -1
  282. package/lib/esm/Model.d.ts +64 -28
  283. package/lib/esm/Model.d.ts.map +1 -1
  284. package/lib/esm/Model.js +116 -28
  285. package/lib/esm/Model.js.map +1 -1
  286. package/lib/esm/NativeAppStorage.js.map +1 -1
  287. package/lib/esm/NativeHost.js.map +1 -1
  288. package/lib/esm/NavigationRelationship.js.map +1 -1
  289. package/lib/esm/PromiseMemoizer.js.map +1 -1
  290. package/lib/esm/PropertyStore.js.map +1 -1
  291. package/lib/esm/Relationship.js.map +1 -1
  292. package/lib/esm/RpcBackend.js.map +1 -1
  293. package/lib/esm/SQLiteDb.js.map +1 -1
  294. package/lib/esm/Schema.js.map +1 -1
  295. package/lib/esm/SchemaSync.js.map +1 -1
  296. package/lib/esm/SchemaUtils.js.map +1 -1
  297. package/lib/esm/SheetIndex.js.map +1 -1
  298. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  299. package/lib/esm/SqliteStatement.js.map +1 -1
  300. package/lib/esm/Texture.d.ts +1 -1
  301. package/lib/esm/Texture.js +1 -1
  302. package/lib/esm/Texture.js.map +1 -1
  303. package/lib/esm/TileStorage.js.map +1 -1
  304. package/lib/esm/TxnManager.d.ts +4 -4
  305. package/lib/esm/TxnManager.d.ts.map +1 -1
  306. package/lib/esm/TxnManager.js +2 -1
  307. package/lib/esm/TxnManager.js.map +1 -1
  308. package/lib/esm/ViewDefinition.d.ts +140 -14
  309. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  310. package/lib/esm/ViewDefinition.js +251 -15
  311. package/lib/esm/ViewDefinition.js.map +1 -1
  312. package/lib/esm/ViewStateHydrator.js +3 -3
  313. package/lib/esm/ViewStateHydrator.js.map +1 -1
  314. package/lib/esm/ViewStore.js.map +1 -1
  315. package/lib/esm/annotations/FrameGeometry.d.ts +52 -0
  316. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
  317. package/lib/esm/annotations/FrameGeometry.js +245 -0
  318. package/lib/esm/annotations/FrameGeometry.js.map +1 -0
  319. package/lib/esm/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  320. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
  321. package/lib/esm/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +22 -28
  322. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
  323. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +31 -0
  324. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  325. package/lib/esm/annotations/TextAnnotationGeometry.js +80 -0
  326. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
  327. package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
  328. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
  329. package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
  330. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
  331. package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
  332. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
  333. package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
  334. package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
  335. package/lib/esm/core-backend.d.ts +5 -3
  336. package/lib/esm/core-backend.d.ts.map +1 -1
  337. package/lib/esm/core-backend.js +5 -3
  338. package/lib/esm/core-backend.js.map +1 -1
  339. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  340. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  341. package/lib/esm/domains/GenericElements.js.map +1 -1
  342. package/lib/esm/domains/GenericSchema.js.map +1 -1
  343. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  344. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  345. package/lib/esm/internal/ElementLRUCache.d.ts +28 -0
  346. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -0
  347. package/lib/esm/internal/ElementLRUCache.js +116 -0
  348. package/lib/esm/internal/ElementLRUCache.js.map +1 -0
  349. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  350. package/lib/esm/internal/HubMock.js.map +1 -1
  351. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  352. package/lib/esm/internal/NativePlatform.js.map +1 -1
  353. package/lib/esm/internal/NoLocks.js.map +1 -1
  354. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  355. package/lib/esm/internal/Symbols.d.ts +1 -0
  356. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  357. package/lib/esm/internal/Symbols.js +1 -0
  358. package/lib/esm/internal/Symbols.js.map +1 -1
  359. package/lib/esm/internal/cross-package.js.map +1 -1
  360. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  361. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  362. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  363. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  364. package/lib/esm/rpc/multipart.js.map +1 -1
  365. package/lib/esm/rpc/tracing.js.map +1 -1
  366. package/lib/esm/rpc/web/logging.js.map +1 -1
  367. package/lib/esm/rpc/web/request.js.map +1 -1
  368. package/lib/esm/rpc/web/response.js.map +1 -1
  369. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  370. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +2 -2
  371. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  372. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  373. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  374. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  375. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  376. package/lib/esm/test/AttachDb.test.js +11 -11
  377. package/lib/esm/test/AttachDb.test.js.map +1 -1
  378. package/lib/esm/test/ElementLRUCache.test.d.ts +2 -0
  379. package/lib/esm/test/ElementLRUCache.test.d.ts.map +1 -0
  380. package/lib/esm/test/ElementLRUCache.test.js +212 -0
  381. package/lib/esm/test/ElementLRUCache.test.js.map +1 -0
  382. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  383. package/lib/esm/test/IModelHost.test.js.map +1 -1
  384. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  385. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  386. package/lib/esm/test/IpcHost.test.js.map +1 -1
  387. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  388. package/lib/esm/test/PrintElementTree.js.map +1 -1
  389. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  390. package/lib/esm/test/RevisionUtility.js.map +1 -1
  391. package/lib/esm/test/SchemaUtils.test.js +25 -25
  392. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  393. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  394. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  395. package/lib/esm/test/TestUtils.js.map +1 -1
  396. package/lib/esm/test/annotations/TextAnnotation.test.js +190 -1025
  397. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  398. package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
  399. package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
  400. package/lib/esm/test/annotations/TextBlock.test.js +969 -0
  401. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
  402. package/lib/esm/test/categories/Category.test.js.map +1 -1
  403. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  404. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  405. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  406. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  407. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  408. package/lib/esm/test/ecdb/ECDb.test.js +86 -65
  409. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  410. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  411. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  412. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  413. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  414. package/lib/esm/test/ecdb/ECSqlQuery.test.js +7 -30
  415. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  416. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  417. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  418. package/lib/esm/test/ecdb/ECSqlStatement.test.js +292 -292
  419. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  420. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  421. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  422. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  423. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  424. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  425. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  426. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  427. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  428. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  429. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  430. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  431. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  432. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  433. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  434. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  435. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  436. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  437. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  438. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  439. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  440. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  441. package/lib/esm/test/imageData.js.map +1 -1
  442. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  443. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  444. package/lib/esm/test/imodel/IModel.test.js +68 -16
  445. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  446. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  447. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  448. package/lib/esm/test/index.js.map +1 -1
  449. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  450. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  451. package/lib/esm/test/misc/GeoServices.test.js +23 -9
  452. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  453. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  454. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  455. package/lib/esm/test/rpc/response.test.js.map +1 -1
  456. package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
  457. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  458. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  459. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  460. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  461. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  462. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ChangesetReader.test.js +28 -28
  464. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  465. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  466. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  467. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  468. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  469. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  470. package/lib/esm/test/standalone/ExportGraphics.test.js +67 -15
  471. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  472. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  473. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  474. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  475. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  476. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  477. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  478. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  479. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  480. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  481. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  482. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  483. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  484. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  485. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  486. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  487. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  488. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  490. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  491. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  492. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  493. package/lib/esm/test/standalone/SnapshotDb.test.js +20 -1
  494. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  495. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  496. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  497. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  498. package/lib/esm/test/standalone/TxnManager.test.js +1 -1
  499. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  500. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  501. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  502. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  503. package/lib/esm/workspace/Settings.js.map +1 -1
  504. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  505. package/lib/esm/workspace/Workspace.js.map +1 -1
  506. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  507. package/package.json +12 -12
  508. package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
  509. package/lib/cjs/TextAnnotationElement.js.map +0 -1
  510. package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
  511. package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
  512. package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
  513. package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
  514. package/lib/cjs/TextAnnotationLayout.js.map +0 -1
  515. package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
  516. package/lib/esm/TextAnnotationElement.js.map +0 -1
  517. package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
  518. package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
  519. package/lib/esm/TextAnnotationGeometry.js.map +0 -1
  520. package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
  521. package/lib/esm/TextAnnotationLayout.js.map +0 -1
@@ -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 ISenario {\n name: string;\n config?: DbQueryConfig;\n totalBatches: number;\n taskPerBatch: number;\n createReader: (db: ECDb | IModelDb) => ECSqlReader;\n}\n\n\nclass LoadSimulator {\n constructor(public db: ECDb | IModelDb, public senario: ISenario) { }\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.senario.config) {\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.senario.config);\n // eslint-disable-next-line no-console\n console.log(config);\n }\n const overalTime = new StopWatch();\n overalTime.start();\n const results: ITaskResult[] = [];\n for (let i = 0; i < this.senario.totalBatches; ++i) {\n const promises: Promise<ITaskResult>[] = [];\n const readerTasks = Array(this.senario.taskPerBatch).fill(undefined).map(() => this.senario.createReader(this.db));\n readerTasks.forEach((reader) => {\n promises.push(this.runQueryTask(reader));\n });\n results.push(... await Promise.all(promises));\n\n }\n overalTime.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 overalTimeInSec: overalTime.currentSeconds,\n errorCount,\n totalQueries: results.length,\n errorMap: errorsMap\n };\n\n }\n}\n\ndescribe.skip(\"ConcurrentQueryLoad\", () => {\n it(\"should run\", async () => {\n Logger.initializeToConsole();\n Logger.setLevel(\"ECDb.ConcurrentQuery\", LogLevel.Trace);\n // {\n // workerThreads: 4,\n // requestQueueSize: 2000,\n // ignorePriority: false,\n // ignoreDelay: true,\n // doNotUsePrimaryConnToPrepare: false,\n // autoShutdowWhenIdlelForSeconds: 300,\n // statementCacheSizePerWorker: 40,\n // monitorPollInterval: 1000,\n // memoryMapFileSize: 0,\n // allowTestingArgs: false,\n // globalQuota: { time: 60, memory: 8388608 }\n // }\n\n const senario: ISenario = {\n name: \"ConcurrentQueryLoad\",\n config: {\n\n },\n totalBatches: 1,\n taskPerBatch: 1,\n createReader: (dbs: ECDb | IModelDb) => {\n const quries = [\n {\n sql: `\n WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000\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 < 1000000\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() * quries.length);\n return dbs.createQueryReader(quries[idx].sql);\n }\n };\n\n const verySmallFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(verySmallFile);\n const simulator = new LoadSimulator(db, senario);\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 ISenario {\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\n\r\nclass LoadSimulator {\r\n constructor(public db: ECDb | IModelDb, public senario: ISenario) { }\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.senario.config) {\r\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.senario.config);\r\n // eslint-disable-next-line no-console\r\n console.log(config);\r\n }\r\n const overalTime = new StopWatch();\r\n overalTime.start();\r\n const results: ITaskResult[] = [];\r\n for (let i = 0; i < this.senario.totalBatches; ++i) {\r\n const promises: Promise<ITaskResult>[] = [];\r\n const readerTasks = Array(this.senario.taskPerBatch).fill(undefined).map(() => this.senario.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 overalTime.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 overalTimeInSec: overalTime.currentSeconds,\r\n errorCount,\r\n totalQueries: results.length,\r\n errorMap: errorsMap\r\n };\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 // workerThreads: 4,\r\n // requestQueueSize: 2000,\r\n // ignorePriority: false,\r\n // ignoreDelay: true,\r\n // doNotUsePrimaryConnToPrepare: false,\r\n // autoShutdowWhenIdlelForSeconds: 300,\r\n // statementCacheSizePerWorker: 40,\r\n // monitorPollInterval: 1000,\r\n // memoryMapFileSize: 0,\r\n // allowTestingArgs: false,\r\n // globalQuota: { time: 60, memory: 8388608 }\r\n // }\r\n\r\n const senario: ISenario = {\r\n name: \"ConcurrentQueryLoad\",\r\n config: {\r\n\r\n },\r\n totalBatches: 1,\r\n taskPerBatch: 1,\r\n createReader: (dbs: ECDb | IModelDb) => {\r\n const quries = [\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 < 10000\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 < 1000000\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() * quries.length);\r\n return dbs.createQueryReader(quries[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, senario);\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});"]}
@@ -57,11 +57,12 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
57
57
  import { assert, expect } from "chai";
58
58
  import * as path from "path";
59
59
  import * as sinon from "sinon";
60
- import { DbResult, Id64, Logger } from "@itwin/core-bentley";
60
+ import { DbResult, Id64, Logger, LogLevel } from "@itwin/core-bentley";
61
61
  import { ECDb, ECDbOpenMode, IModelJsFs, SqliteValueType } from "../../core-backend";
62
62
  import { KnownTestLocations } from "../KnownTestLocations";
63
63
  import { ECDbTestHelper } from "./ECDbTestHelper";
64
64
  import { QueryOptionsBuilder } from "@itwin/core-common";
65
+ import { EntityClass, SchemaContext, SchemaJsonLocater, SchemaKey } from "@itwin/ecschema-metadata";
65
66
  describe("ECDb", () => {
66
67
  const outDir = KnownTestLocations.outputDir;
67
68
  it("should be able to create a new ECDb", () => {
@@ -180,11 +181,11 @@ describe("ECDb", () => {
180
181
  try {
181
182
  const fileName1 = "source_file.ecdb";
182
183
  const ecdbPath1 = path.join(outDir, fileName1);
183
- const testECDb = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
184
- <ECEntityClass typeName="Person" modifier="Sealed">
185
- <ECProperty propertyName="Name" typeName="string"/>
186
- <ECProperty propertyName="Age" typeName="int"/>
187
- </ECEntityClass>
184
+ const testECDb = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
185
+ <ECEntityClass typeName="Person" modifier="Sealed">
186
+ <ECProperty propertyName="Name" typeName="string"/>
187
+ <ECProperty propertyName="Age" typeName="int"/>
188
+ </ECEntityClass>
188
189
  </ECSchema>`), false);
189
190
  assert.isTrue(testECDb.isOpen);
190
191
  // eslint-disable-next-line @typescript-eslint/no-deprecated
@@ -196,9 +197,9 @@ describe("ECDb", () => {
196
197
  return res.id;
197
198
  });
198
199
  // override profile version to 55.0.0 which is currently not supported
199
- testECDb.withSqliteStatement(`
200
- UPDATE be_Prop SET
201
- StrData = '{"major":55,"minor":0,"sub1":0,"sub2":0}'
200
+ testECDb.withSqliteStatement(`
201
+ UPDATE be_Prop SET
202
+ StrData = '{"major":55,"minor":0,"sub1":0,"sub2":0}'
202
203
  WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`, (stmt) => { stmt.step(); });
203
204
  testECDb.saveChanges();
204
205
  const runDbListPragmaUsingStatement = (ecdb) => {
@@ -300,11 +301,11 @@ describe("ECDb", () => {
300
301
  try {
301
302
  const fileName1 = "source_file.ecdb";
302
303
  const ecdbPath1 = path.join(outDir, fileName1);
303
- const testECDb = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
304
- <ECEntityClass typeName="Person" modifier="Sealed">
305
- <ECProperty propertyName="Name" typeName="string"/>
306
- <ECProperty propertyName="Age" typeName="int"/>
307
- </ECEntityClass>
304
+ const testECDb = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
305
+ <ECEntityClass typeName="Person" modifier="Sealed">
306
+ <ECProperty propertyName="Name" typeName="string"/>
307
+ <ECProperty propertyName="Age" typeName="int"/>
308
+ </ECEntityClass>
308
309
  </ECSchema>`), false);
309
310
  assert.isTrue(testECDb.isOpen);
310
311
  // eslint-disable-next-line @typescript-eslint/no-deprecated
@@ -404,11 +405,11 @@ describe("ECDb", () => {
404
405
  {
405
406
  const env_11 = { stack: [], error: void 0, hasError: false };
406
407
  try {
407
- const testECDb = __addDisposableResource(env_11, ECDbTestHelper.createECDb(outDir, fileName, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
408
- <ECEntityClass typeName="Person" modifier="Sealed">
409
- <ECProperty propertyName="Name" typeName="string"/>
410
- <ECProperty propertyName="Age" typeName="int"/>
411
- </ECEntityClass>
408
+ const testECDb = __addDisposableResource(env_11, ECDbTestHelper.createECDb(outDir, fileName, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
409
+ <ECEntityClass typeName="Person" modifier="Sealed">
410
+ <ECProperty propertyName="Name" typeName="string"/>
411
+ <ECProperty propertyName="Age" typeName="int"/>
412
+ </ECEntityClass>
412
413
  </ECSchema>`), false);
413
414
  assert.isTrue(testECDb.isOpen);
414
415
  id = testECDb.withCachedWriteStatement("INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)", (stmt) => {
@@ -562,19 +563,19 @@ describe("ECDb", () => {
562
563
  it("test unit labels in composite formats", () => {
563
564
  const ecdb = ECDbTestHelper.createECDb(outDir, "TestCompositeFormats.ecdb");
564
565
  const xmlpathOriginal = path.join(outDir, "compositeFormats1.ecschema.xml");
565
- IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="utf-8" ?>
566
- <ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
567
- <ECSchemaReference name="Units" version="01.00.00" alias="u" />
568
- <Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
569
- <Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
570
- <Composite>
571
- <Unit>u:KM</Unit>
572
- <Unit label="m">TestUnit</Unit>
573
- <Unit label="">u:CM</Unit>
574
- <Unit label="mm">u:MM</Unit>
575
- </Composite>
576
- </Format>
577
- <KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
566
+ IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="utf-8" ?>
567
+ <ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
568
+ <ECSchemaReference name="Units" version="01.00.00" alias="u" />
569
+ <Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
570
+ <Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
571
+ <Composite>
572
+ <Unit>u:KM</Unit>
573
+ <Unit label="m">TestUnit</Unit>
574
+ <Unit label="">u:CM</Unit>
575
+ <Unit label="mm">u:MM</Unit>
576
+ </Composite>
577
+ </Format>
578
+ <KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
578
579
  </ECSchema>`);
579
580
  ecdb.importSchema(xmlpathOriginal);
580
581
  ecdb.saveChanges();
@@ -588,19 +589,19 @@ describe("ECDb", () => {
588
589
  }
589
590
  });
590
591
  const xmlpathUpdated = path.join(outDir, "compositeFormats2.ecschema.xml");
591
- IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="utf-8" ?>
592
- <ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
593
- <ECSchemaReference name="Units" version="01.00.00" alias="u" />
594
- <Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
595
- <Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
596
- <Composite spacer="=" includeZero="False">
597
- <Unit label="">u:KM</Unit>
598
- <Unit label="m">TestUnit</Unit>
599
- <Unit>u:CM</Unit>
600
- <Unit label="mm">u:MM</Unit>
601
- </Composite>
602
- </Format>
603
- <KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
592
+ IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="utf-8" ?>
593
+ <ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
594
+ <ECSchemaReference name="Units" version="01.00.00" alias="u" />
595
+ <Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
596
+ <Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
597
+ <Composite spacer="=" includeZero="False">
598
+ <Unit label="">u:KM</Unit>
599
+ <Unit label="m">TestUnit</Unit>
600
+ <Unit>u:CM</Unit>
601
+ <Unit label="mm">u:MM</Unit>
602
+ </Composite>
603
+ </Format>
604
+ <KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
604
605
  </ECSchema>`);
605
606
  ecdb.importSchema(xmlpathUpdated);
606
607
  ecdb.saveChanges();
@@ -615,38 +616,58 @@ describe("ECDb", () => {
615
616
  });
616
617
  ecdb.closeDb();
617
618
  });
618
- it("should make importSchema fail if new schema changes are observed without version bump", () => {
619
+ it("should log warning but continue if new schema changes are observed without version bump", async () => {
619
620
  const ecdb = ECDbTestHelper.createECDb(outDir, "importSchemaNoVersionBump.ecdb");
620
621
  const xmlpathOriginal = path.join(outDir, "importSchemaNoVersionBump1.ecschema.xml");
621
- IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="UTF-8"?>
622
- <ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
623
- <ECEntityClass typeName="Person" modifier="Sealed">
624
- <ECProperty propertyName="Name" typeName="string"/>
625
- <ECProperty propertyName="Age" typeName="int"/>
626
- </ECEntityClass>
622
+ IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="UTF-8"?>
623
+ <ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
624
+ <ECEntityClass typeName="Person" modifier="Sealed">
625
+ <ECProperty propertyName="Name" typeName="string"/>
626
+ <ECProperty propertyName="Age" typeName="int"/>
627
+ </ECEntityClass>
627
628
  </ECSchema>`);
628
629
  ecdb.importSchema(xmlpathOriginal);
629
630
  ecdb.saveChanges();
630
631
  const xmlpathUpdated = path.join(outDir, "importSchemaNoVersionBump2.ecschema.xml");
631
- IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="UTF-8"?>
632
- <ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
633
- <ECEntityClass typeName="Person" modifier="Sealed">
634
- <ECProperty propertyName="Name" typeName="string"/>
635
- <ECProperty propertyName="Age" typeName="int"/>
636
- <ECProperty propertyName="Height" typeName="int"/>
637
- </ECEntityClass>
632
+ IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="UTF-8"?>
633
+ <ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
634
+ <ECEntityClass typeName="Person" modifier="Sealed">
635
+ <ECProperty propertyName="Name" typeName="string"/>
636
+ <ECProperty propertyName="Age" typeName="int"/>
637
+ <ECProperty propertyName="Height" typeName="int"/>
638
+ </ECEntityClass>
638
639
  </ECSchema>`);
639
640
  let calledCategory = "";
640
641
  let calledMessage = "";
641
- const stubbedLogError = sinon.stub(Logger, "logError").callsFake((category, message) => {
642
+ const stubbedLogWarning = sinon.stub(Logger, "logWarning").callsFake((category, message) => {
642
643
  calledCategory = category;
643
644
  calledMessage = message;
644
645
  });
645
- // although an error should be logged, no error is actually returned to not disrupt currently existing workflows and to alert the user about some wrong/unexpected behavior
646
- expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;
647
- expect(calledCategory).to.equal("ECDb");
648
- expect(calledMessage).to.equal("ECSchema import has failed. Schema Test has new changes, but the schema version is not incremented.");
649
- stubbedLogError.restore();
646
+ const prevLevel = Logger.getLevel("ECDb");
647
+ try {
648
+ Logger.setLevel("ECDb", LogLevel.Warning);
649
+ // We do not want this behavior (just logs a warning and proceeds), initially we intended to throw an error
650
+ // We will wait for the next major change to make this a hard error
651
+ expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;
652
+ expect(calledCategory).to.equal("ECDb");
653
+ expect(calledMessage).to.equal("Schema 'Test' has changes but its version was not incremented. Proceeding with import, but this may lead to unexpected behavior.");
654
+ stubbedLogWarning.restore();
655
+ }
656
+ finally {
657
+ if (prevLevel !== undefined)
658
+ Logger.setLevel("ECDb", prevLevel);
659
+ else
660
+ delete Logger._categoryFilter.ECDb;
661
+ }
662
+ const context = new SchemaContext();
663
+ const locater = new SchemaJsonLocater((name) => ecdb.getSchemaProps(name));
664
+ context.addLocater(locater);
665
+ const schema = await context.getSchema(new SchemaKey("Test", 1, 0, 0));
666
+ assert.isDefined(schema);
667
+ const personClass = await schema.getItem("Person", EntityClass);
668
+ assert.isDefined(personClass);
669
+ const heightProp = personClass.getProperty("Height");
670
+ assert.isDefined(heightProp);
650
671
  ecdb.closeDb();
651
672
  });
652
673
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ECDb.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDb.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, expect } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Id64, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { ECDb, ECDbOpenMode, ECSqlInsertResult, ECSqlStatement, ECSqlWriteStatement, IModelJsFs, SqliteStatement, SqliteValue, SqliteValueType } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { QueryOptionsBuilder } from \"@itwin/core-common\";\n\ndescribe(\"ECDb\", () => {\n const outDir = KnownTestLocations.outputDir;\n\n it(\"should be able to create a new ECDb\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"create.ecdb\");\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"should be able to close an ECDb\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"close.ecdb\");\n assert.isTrue(ecdb.isOpen);\n ecdb.closeDb();\n assert.isFalse(ecdb.isOpen);\n });\n\n it(\"should be able to open an ECDb\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite);\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"Open ECDb with upgrade option\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.FileUpgrade));\n }\n\n });\n it(\"attach/detach newer profile version\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n\n // override profile version to 55.0.0 which is currently not supported\n testECDb.withSqliteStatement(`\n UPDATE be_Prop SET\n StrData = '{\"major\":55,\"minor\":0,\"sub1\":0,\"sub2\":0}'\n WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`,\n (stmt: SqliteStatement) => { stmt.step(); });\n testECDb.saveChanges();\n\n const runDbListPragmaUsingStatement = (ecdb: ECDb) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n const runDbListPragmaCCQ = async (ecdb: ECDb) => {\n const reader = ecdb.createQueryReader(\"PRAGMA db_list\");\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (await reader.step()) {\n result.push(reader.current.toRow());\n }\n return result;\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n // following call will not fail but unknow ECDb profile will cause it to be attach as SQLite.\n testECDb0.attachDb(ecdbPath1, \"source\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader1.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb1.detachDb(\"source\");\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n });\n it(\"attach/detach file & db_list pragma\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n\n const runDbListPragma = (ecdb: ECDb) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n testECDb0.attachDb(ecdbPath1, \"source\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"ECDb\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file3.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\", undefined, new QueryOptionsBuilder().setUsePrimaryConnection(true).getOptions());\n assert.equal(await reader1.step(), true);\n assert.equal(reader1.current.name, \"Mary\");\n assert.equal(reader1.current.age, 45);\n testECDb1.detachDb(\"source\");\n\n\n using testECDb2 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb2.attachDb(ecdbPath1, \"source\");\n const reader2 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n assert.equal(await reader2.step(), true);\n assert.equal(reader2.current.name, \"Mary\");\n assert.equal(reader2.current.age, 45);\n testECDb2.detachDb(\"source\");\n const reader3 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader3.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n });\n it(\"should be able to import a schema\", () => {\n const fileName = \"schemaimport.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n let id: Id64String;\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n id = testECDb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name, Age FROM test.Person WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n });\n\n it(\"should be able to get schema props\", () => {\n const fileName = \"schema-props.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath);\n const schema = ecdb.getSchemaProps(\"ECDbMeta\");\n assert.equal(schema.name, \"ECDbMeta\");\n });\n\n it(\"Run plain SQL\", () => {\n const fileName = \"plainseql.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n\n testECDb.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"Dummy 1\");\n stmt.bindValue(2, 100);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValues([\"Dummy 2\", 200]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValue(\":p1\", \"Dummy 3\");\n stmt.bindValue(\":p2\", 300);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n assert.equal(stmt.getColumnCount(), 3);\n const val0: SqliteValue = stmt.getValue(0);\n assert.equal(val0.columnName, \"Id\");\n assert.equal(val0.type, SqliteValueType.Integer);\n assert.isFalse(val0.isNull);\n assert.equal(val0.getInteger(), i);\n\n const val1: SqliteValue = stmt.getValue(1);\n assert.equal(val1.columnName, \"Name\");\n assert.equal(val1.type, SqliteValueType.String);\n assert.isFalse(val1.isNull);\n assert.equal(val1.getString(), `Dummy ${i}`);\n\n const val2: SqliteValue = stmt.getValue(2);\n assert.equal(val2.columnName, \"Code\");\n assert.equal(val2.type, SqliteValueType.Integer);\n assert.isFalse(val2.isNull);\n assert.equal(val2.getInteger(), i * 100);\n\n const row: any = stmt.getRow();\n assert.equal(row.id, i);\n assert.equal(row.name, `Dummy ${i}`);\n assert.equal(row.code, i * 100);\n }\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n it(\"test unit labels in composite formats\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"TestCompositeFormats.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"compositeFormats1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite>\n <Unit>u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit label=\"\">u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const expectedLabels = [undefined, \"m\", \"\", \"mm\"];\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabels[index++]);\n }\n });\n\n const xmlpathUpdated = path.join(outDir, \"compositeFormats2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite spacer=\"=\" includeZero=\"False\">\n <Unit label=\"\">u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit>u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n\n ecdb.importSchema(xmlpathUpdated);\n ecdb.saveChanges();\n\n const expectedLabelsUpdated = [\"\", \"m\", undefined, \"mm\"];\n index = 0;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabelsUpdated[index++]);\n }\n });\n\n ecdb.closeDb();\n });\n\n it(\"should make importSchema fail if new schema changes are observed without version bump\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"importSchemaNoVersionBump.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"importSchemaNoVersionBump1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const xmlpathUpdated = path.join(outDir, \"importSchemaNoVersionBump2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECProperty propertyName=\"Height\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n let calledCategory = \"\";\n let calledMessage = \"\";\n const stubbedLogError = sinon.stub(Logger, \"logError\").callsFake((category: string, message: string) => {\n calledCategory = category;\n calledMessage = message;\n });\n\n // although an error should be logged, no error is actually returned to not disrupt currently existing workflows and to alert the user about some wrong/unexpected behavior\n expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;\n expect(calledCategory).to.equal(\"ECDb\");\n expect(calledMessage).to.equal(\"ECSchema import has failed. Schema Test has new changes, but the schema version is not incremented.\");\n\n stubbedLogError.restore();\n ecdb.closeDb();\n });\n});\n"]}
1
+ {"version":3,"file":"ECDb.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDb.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, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { DbResult, Id64, Id64String, Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { ECDb, ECDbOpenMode, ECSqlInsertResult, ECSqlStatement, ECSqlWriteStatement, IModelJsFs, SqliteStatement, SqliteValue, SqliteValueType } from \"../../core-backend\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\r\nimport { QueryOptionsBuilder } from \"@itwin/core-common\";\r\nimport { EntityClass, SchemaContext, SchemaJsonLocater, SchemaKey } from \"@itwin/ecschema-metadata\";\r\n\r\ndescribe(\"ECDb\", () => {\r\n const outDir = KnownTestLocations.outputDir;\r\n\r\n it(\"should be able to create a new ECDb\", () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"create.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n });\r\n\r\n it(\"should be able to close an ECDb\", () => {\r\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"close.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n ecdb.closeDb();\r\n assert.isFalse(ecdb.isOpen);\r\n });\r\n\r\n it(\"should be able to open an ECDb\", () => {\r\n const fileName = \"open.ecdb\";\r\n const ecdbPath: string = path.join(outDir, fileName);\r\n {\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testECDb.isOpen);\r\n }\r\n\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite);\r\n assert.isTrue(ecdb.isOpen);\r\n });\r\n\r\n it(\"Open ECDb with upgrade option\", () => {\r\n const fileName = \"open.ecdb\";\r\n const ecdbPath: string = path.join(outDir, fileName);\r\n {\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testECDb.isOpen);\r\n }\r\n {\r\n using ecdb = new ECDb();\r\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly));\r\n }\r\n {\r\n using ecdb = new ECDb();\r\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite));\r\n }\r\n {\r\n using ecdb = new ECDb();\r\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.FileUpgrade));\r\n }\r\n\r\n });\r\n it(\"attach/detach newer profile version\", async () => {\r\n const fileName1 = \"source_file.ecdb\";\r\n const ecdbPath1: string = path.join(outDir, fileName1);\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(testECDb.isOpen);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n assert.isTrue(Id64.isValidId64(res.id!));\r\n return res.id!;\r\n });\r\n\r\n // override profile version to 55.0.0 which is currently not supported\r\n testECDb.withSqliteStatement(`\r\n UPDATE be_Prop SET\r\n StrData = '{\"major\":55,\"minor\":0,\"sub1\":0,\"sub2\":0}'\r\n WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`,\r\n (stmt: SqliteStatement) => { stmt.step(); });\r\n testECDb.saveChanges();\r\n\r\n const runDbListPragmaUsingStatement = (ecdb: ECDb) => {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\r\n const result: { alias: string, filename: string, profile: string }[] = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n result.push(stmt.getRow());\r\n }\r\n return result;\r\n });\r\n }\r\n const runDbListPragmaCCQ = async (ecdb: ECDb) => {\r\n const reader = ecdb.createQueryReader(\"PRAGMA db_list\");\r\n const result: { alias: string, filename: string, profile: string }[] = [];\r\n while (await reader.step()) {\r\n result.push(reader.current.toRow());\r\n }\r\n return result;\r\n }\r\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\r\n // following call will not fail but unknow ECDb profile will cause it to be attach as SQLite.\r\n testECDb0.attachDb(ecdbPath1, \"source\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\r\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file2.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n {\r\n sno: 1,\r\n alias: \"source\",\r\n fileName: path.join(outDir, \"source_file.ecdb\"),\r\n profile: \"SQLite\"\r\n }\r\n ]);\r\n testECDb0.detachDb(\"source\");\r\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file2.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n ]);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\r\n\r\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\r\n testECDb1.attachDb(ecdbPath1, \"source\");\r\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\r\n let expectThrow = false;\r\n try {\r\n await reader1.step();\r\n } catch (err) {\r\n if (err instanceof Error) {\r\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\r\n expectThrow = true;\r\n }\r\n }\r\n assert.isTrue(expectThrow);\r\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file4.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n {\r\n sno: 1,\r\n alias: \"source\",\r\n fileName: path.join(outDir, \"source_file.ecdb\"),\r\n profile: \"SQLite\"\r\n }\r\n ]);\r\n testECDb1.detachDb(\"source\");\r\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file4.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n ]);\r\n });\r\n it(\"attach/detach file & db_list pragma\", async () => {\r\n const fileName1 = \"source_file.ecdb\";\r\n const ecdbPath1: string = path.join(outDir, fileName1);\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(testECDb.isOpen);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n assert.isTrue(Id64.isValidId64(res.id!));\r\n return res.id!;\r\n });\r\n testECDb.saveChanges();\r\n\r\n const runDbListPragma = (ecdb: ECDb) => {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\r\n const result: { alias: string, filename: string, profile: string }[] = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n result.push(stmt.getRow());\r\n }\r\n return result;\r\n });\r\n }\r\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\r\n testECDb0.attachDb(ecdbPath1, \"source\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.name, \"Mary\");\r\n assert.equal(row.age, 45);\r\n });\r\n expect(runDbListPragma(testECDb0)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file2.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n {\r\n sno: 1,\r\n alias: \"source\",\r\n fileName: path.join(outDir, \"source_file.ecdb\"),\r\n profile: \"ECDb\"\r\n }\r\n ]);\r\n testECDb0.detachDb(\"source\");\r\n expect(runDbListPragma(testECDb0)).deep.equals([\r\n {\r\n sno: 0,\r\n alias: \"main\",\r\n fileName: path.join(outDir, \"file2.ecdb\"),\r\n profile: \"ECDb\"\r\n },\r\n ]);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\r\n\r\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file3.ecdb\");\r\n testECDb1.attachDb(ecdbPath1, \"source\");\r\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\", undefined, new QueryOptionsBuilder().setUsePrimaryConnection(true).getOptions());\r\n assert.equal(await reader1.step(), true);\r\n assert.equal(reader1.current.name, \"Mary\");\r\n assert.equal(reader1.current.age, 45);\r\n testECDb1.detachDb(\"source\");\r\n\r\n\r\n using testECDb2 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\r\n testECDb2.attachDb(ecdbPath1, \"source\");\r\n const reader2 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\r\n assert.equal(await reader2.step(), true);\r\n assert.equal(reader2.current.name, \"Mary\");\r\n assert.equal(reader2.current.age, 45);\r\n testECDb2.detachDb(\"source\");\r\n const reader3 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\r\n let expectThrow = false;\r\n try {\r\n await reader3.step();\r\n } catch (err) {\r\n if (err instanceof Error) {\r\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\r\n expectThrow = true;\r\n }\r\n }\r\n assert.isTrue(expectThrow);\r\n });\r\n it(\"should be able to import a schema\", () => {\r\n const fileName = \"schemaimport.ecdb\";\r\n const ecdbPath: string = path.join(outDir, fileName);\r\n let id: Id64String;\r\n {\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName,\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(testECDb.isOpen);\r\n id = testECDb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n assert.isTrue(Id64.isValidId64(res.id!));\r\n return res.id!;\r\n });\r\n testECDb.saveChanges();\r\n }\r\n\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Name, Age FROM test.Person WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.name, \"Mary\");\r\n assert.equal(row.age, 45);\r\n });\r\n });\r\n\r\n it(\"should be able to get schema props\", () => {\r\n const fileName = \"schema-props.ecdb\";\r\n const ecdbPath: string = path.join(outDir, fileName);\r\n {\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testECDb.isOpen);\r\n }\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath);\r\n const schema = ecdb.getSchemaProps(\"ECDbMeta\");\r\n assert.equal(schema.name, \"ECDbMeta\");\r\n });\r\n\r\n it(\"Run plain SQL\", () => {\r\n const fileName = \"plainseql.ecdb\";\r\n const ecdbPath: string = path.join(outDir, fileName);\r\n {\r\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testECDb.isOpen);\r\n\r\n testECDb.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\r\n stmt.bindValue(1, \"Dummy 1\");\r\n stmt.bindValue(2, 100);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\r\n stmt.bindValues([\"Dummy 2\", 200]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\r\n stmt.bindValue(\":p1\", \"Dummy 3\");\r\n stmt.bindValue(\":p2\", 300);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\r\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n testECDb.saveChanges();\r\n }\r\n\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n ecdb.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\r\n for (let i: number = 1; i <= 4; i++) {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n assert.equal(stmt.getColumnCount(), 3);\r\n const val0: SqliteValue = stmt.getValue(0);\r\n assert.equal(val0.columnName, \"Id\");\r\n assert.equal(val0.type, SqliteValueType.Integer);\r\n assert.isFalse(val0.isNull);\r\n assert.equal(val0.getInteger(), i);\r\n\r\n const val1: SqliteValue = stmt.getValue(1);\r\n assert.equal(val1.columnName, \"Name\");\r\n assert.equal(val1.type, SqliteValueType.String);\r\n assert.isFalse(val1.isNull);\r\n assert.equal(val1.getString(), `Dummy ${i}`);\r\n\r\n const val2: SqliteValue = stmt.getValue(2);\r\n assert.equal(val2.columnName, \"Code\");\r\n assert.equal(val2.type, SqliteValueType.Integer);\r\n assert.isFalse(val2.isNull);\r\n assert.equal(val2.getInteger(), i * 100);\r\n\r\n const row: any = stmt.getRow();\r\n assert.equal(row.id, i);\r\n assert.equal(row.name, `Dummy ${i}`);\r\n assert.equal(row.code, i * 100);\r\n }\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n });\r\n\r\n it(\"test unit labels in composite formats\", () => {\r\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"TestCompositeFormats.ecdb\");\r\n const xmlpathOriginal = path.join(outDir, \"compositeFormats1.ecschema.xml\");\r\n\r\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\r\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\r\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\r\n <Composite>\r\n <Unit>u:KM</Unit>\r\n <Unit label=\"m\">TestUnit</Unit>\r\n <Unit label=\"\">u:CM</Unit>\r\n <Unit label=\"mm\">u:MM</Unit>\r\n </Composite>\r\n </Format>\r\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\r\n </ECSchema>`);\r\n ecdb.importSchema(xmlpathOriginal);\r\n ecdb.saveChanges();\r\n\r\n const expectedLabels = [undefined, \"m\", \"\", \"mm\"];\r\n let index = 0;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\r\n for (let i: number = 1; i <= 4; i++) {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n expect(stmt.getRow().label).to.eql(expectedLabels[index++]);\r\n }\r\n });\r\n\r\n const xmlpathUpdated = path.join(outDir, \"compositeFormats2.ecschema.xml\");\r\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\r\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\r\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\r\n <Composite spacer=\"=\" includeZero=\"False\">\r\n <Unit label=\"\">u:KM</Unit>\r\n <Unit label=\"m\">TestUnit</Unit>\r\n <Unit>u:CM</Unit>\r\n <Unit label=\"mm\">u:MM</Unit>\r\n </Composite>\r\n </Format>\r\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\r\n </ECSchema>`);\r\n\r\n ecdb.importSchema(xmlpathUpdated);\r\n ecdb.saveChanges();\r\n\r\n const expectedLabelsUpdated = [\"\", \"m\", undefined, \"mm\"];\r\n index = 0;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\r\n for (let i: number = 1; i <= 4; i++) {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n expect(stmt.getRow().label).to.eql(expectedLabelsUpdated[index++]);\r\n }\r\n });\r\n\r\n ecdb.closeDb();\r\n });\r\n\r\n it(\"should log warning but continue if new schema changes are observed without version bump\", async () => {\r\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"importSchemaNoVersionBump.ecdb\");\r\n const xmlpathOriginal = path.join(outDir, \"importSchemaNoVersionBump1.ecschema.xml\");\r\n\r\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n ecdb.importSchema(xmlpathOriginal);\r\n ecdb.saveChanges();\r\n\r\n const xmlpathUpdated = path.join(outDir, \"importSchemaNoVersionBump2.ecschema.xml\");\r\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"Height\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n\r\n let calledCategory = \"\";\r\n let calledMessage = \"\";\r\n const stubbedLogWarning = sinon.stub(Logger, \"logWarning\").callsFake((category: string, message: string) => {\r\n calledCategory = category;\r\n calledMessage = message;\r\n });\r\n const prevLevel = Logger.getLevel(\"ECDb\");\r\n\r\n try {\r\n Logger.setLevel(\"ECDb\", LogLevel.Warning);\r\n // We do not want this behavior (just logs a warning and proceeds), initially we intended to throw an error\r\n // We will wait for the next major change to make this a hard error\r\n expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;\r\n expect(calledCategory).to.equal(\"ECDb\");\r\n expect(calledMessage).to.equal(\"Schema 'Test' has changes but its version was not incremented. Proceeding with import, but this may lead to unexpected behavior.\");\r\n stubbedLogWarning.restore();\r\n }\r\n finally {\r\n if (prevLevel !== undefined)\r\n Logger.setLevel(\"ECDb\", prevLevel);\r\n else\r\n delete (Logger as any)._categoryFilter.ECDb;\r\n }\r\n\r\n const context = new SchemaContext();\r\n const locater = new SchemaJsonLocater((name) => ecdb.getSchemaProps(name));\r\n context.addLocater(locater);\r\n const schema = await context.getSchema(new SchemaKey(\"Test\", 1, 0, 0));\r\n assert.isDefined(schema);\r\n const personClass = await schema!.getItem(\"Person\", EntityClass);\r\n assert.isDefined(personClass);\r\n const heightProp = personClass!.getProperty(\"Height\");\r\n assert.isDefined(heightProp);\r\n\r\n ecdb.closeDb();\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECDbTestHelper.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDbTestHelper.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,cAAc;IAElB,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,SAAkB;QAC3E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;YAChC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,CAAC,SAAS;YACZ,OAAO,IAAI,CAAC;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;CACF","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 * as path from \"path\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { ECDb } from \"../../ECDb\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\n\nexport class ECDbTestHelper {\n\n public static createECDb(outDir: string, fileName: string, schemaXml?: string): ECDb {\n if (!IModelJsFs.existsSync(outDir))\n IModelJsFs.mkdirSync(outDir);\n\n const outPath = path.join(outDir, fileName);\n if (IModelJsFs.existsSync(outPath))\n IModelJsFs.unlinkSync(outPath);\n\n const ecdb = new ECDb();\n ecdb.createDb(outPath);\n\n if (!schemaXml)\n return ecdb;\n\n const schemaPath = path.join(outDir, `${Guid.createValue()}.ecschema.xml`);\n if (IModelJsFs.existsSync(schemaPath))\n IModelJsFs.unlinkSync(schemaPath);\n\n IModelJsFs.writeFileSync(schemaPath, schemaXml);\n\n ecdb.importSchema(schemaPath);\n return ecdb;\n }\n}\n"]}
1
+ {"version":3,"file":"ECDbTestHelper.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDbTestHelper.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,cAAc;IAElB,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,SAAkB;QAC3E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;YAChC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,CAAC,SAAS;YACZ,OAAO,IAAI,CAAC;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;CACF","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 * as path from \"path\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { ECDb } from \"../../ECDb\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\n\r\nexport class ECDbTestHelper {\r\n\r\n public static createECDb(outDir: string, fileName: string, schemaXml?: string): ECDb {\r\n if (!IModelJsFs.existsSync(outDir))\r\n IModelJsFs.mkdirSync(outDir);\r\n\r\n const outPath = path.join(outDir, fileName);\r\n if (IModelJsFs.existsSync(outPath))\r\n IModelJsFs.unlinkSync(outPath);\r\n\r\n const ecdb = new ECDb();\r\n ecdb.createDb(outPath);\r\n\r\n if (!schemaXml)\r\n return ecdb;\r\n\r\n const schemaPath = path.join(outDir, `${Guid.createValue()}.ecschema.xml`);\r\n if (IModelJsFs.existsSync(schemaPath))\r\n IModelJsFs.unlinkSync(schemaPath);\r\n\r\n IModelJsFs.writeFileSync(schemaPath, schemaXml);\r\n\r\n ecdb.importSchema(schemaPath);\r\n return ecdb;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECSchemaXmlContext.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSchemaXmlContext.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 { expect } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ECSchemaXmlContext, SchemaKey } from \"../../ECSchemaXmlContext\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\n\ndescribe(\"ECSchemaXmlContext\", () => {\n\n it(\"should be able to convert schema XML to JSON\", () => {\n const testSchemaXmlPath = path.join(KnownTestLocations.assetsDir, \"TestSchema.ecschema.xml\");\n const testSchemaJsonPath = path.join(KnownTestLocations.assetsDir, \"TestSchema.ecschema.json\");\n const expectedTestSchemaJson = JSON.parse(fs.readFileSync(testSchemaJsonPath, { encoding: \"utf-8\" }));\n\n const context = new ECSchemaXmlContext();\n const schema = context.readSchemaFromXmlFile(testSchemaXmlPath);\n expect(schema).to.eql(expectedTestSchemaJson);\n });\n\n it(\"setSchemaLocater, should call schema locater callback for missing schema references\", () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECObjectsNative\").message(/Unable to locate referenced schema BisCore\\.01\\.00\\.00 while deserializing TestDomain\\.01\\.00\\.00/gm);\n slm.append().error().category(\"ECObjectsNative\").message(/Failed to read schema 'TestDomain\\.01\\.00\\.00'/gm);\n const testDomainXmlPath = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\n const expectedBisCoreKey = {\n name: \"BisCore\",\n readVersion: 1,\n writeVersion: 0,\n minorVersion: 0,\n };\n const context = new ECSchemaXmlContext();\n const missingReferences: SchemaKey[] = [];\n context.setSchemaLocater((key: SchemaKey) => {\n missingReferences.push(key);\n });\n\n expect(() => context.readSchemaFromXmlFile(testDomainXmlPath)).to.throw(\"ReferencedSchemaNotFound\");\n expect(missingReferences).to.have.lengthOf(1);\n expect(missingReferences[0]).to.eql(expectedBisCoreKey);\n expect(slm.finishAndDispose()).to.true;\n });\n\n it(\"setFirstSchemaLocater, should call schema locater callback for missing schema references\", () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECObjectsNative\").message(/Unable to locate referenced schema BisCore\\.01\\.00\\.00 while deserializing TestDomain\\.01\\.00\\.00/gm);\n slm.append().error().category(\"ECObjectsNative\").message(/Failed to read schema 'TestDomain\\.01\\.00\\.00'/gm);\n const testDomainXmlPath = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\n const expectedBisCoreKey = {\n name: \"BisCore\",\n readVersion: 1,\n writeVersion: 0,\n minorVersion: 0,\n };\n const context = new ECSchemaXmlContext();\n const missingReferences: SchemaKey[] = [];\n context.setFirstSchemaLocater((key: SchemaKey) => {\n missingReferences.push(key);\n });\n\n expect(() => context.readSchemaFromXmlFile(testDomainXmlPath)).to.throw(\"ReferencedSchemaNotFound\");\n expect(missingReferences).to.have.lengthOf(1);\n expect(missingReferences[0]).to.eql(expectedBisCoreKey);\n expect(slm.finishAndDispose()).to.true;\n });\n});\n"]}
1
+ {"version":3,"file":"ECSchemaXmlContext.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSchemaXmlContext.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAa,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC7F,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAC/F,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAEtG,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,GAAG,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,qGAAqG,CAAC,CAAC;QAChK,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC7F,MAAM,kBAAkB,GAAG;YACzB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,iBAAiB,GAAgB,EAAE,CAAC;QAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAc,EAAE,EAAE;YAC1C,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpG,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,GAAG,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,qGAAqG,CAAC,CAAC;QAChK,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC7F,MAAM,kBAAkB,GAAG;YACzB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,iBAAiB,GAAgB,EAAE,CAAC;QAC1C,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAc,EAAE,EAAE;YAC/C,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpG,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 { expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { ECSchemaXmlContext, SchemaKey } from \"../../ECSchemaXmlContext\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\r\n\r\ndescribe(\"ECSchemaXmlContext\", () => {\r\n\r\n it(\"should be able to convert schema XML to JSON\", () => {\r\n const testSchemaXmlPath = path.join(KnownTestLocations.assetsDir, \"TestSchema.ecschema.xml\");\r\n const testSchemaJsonPath = path.join(KnownTestLocations.assetsDir, \"TestSchema.ecschema.json\");\r\n const expectedTestSchemaJson = JSON.parse(fs.readFileSync(testSchemaJsonPath, { encoding: \"utf-8\" }));\r\n\r\n const context = new ECSchemaXmlContext();\r\n const schema = context.readSchemaFromXmlFile(testSchemaXmlPath);\r\n expect(schema).to.eql(expectedTestSchemaJson);\r\n });\r\n\r\n it(\"setSchemaLocater, should call schema locater callback for missing schema references\", () => {\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECObjectsNative\").message(/Unable to locate referenced schema BisCore\\.01\\.00\\.00 while deserializing TestDomain\\.01\\.00\\.00/gm);\r\n slm.append().error().category(\"ECObjectsNative\").message(/Failed to read schema 'TestDomain\\.01\\.00\\.00'/gm);\r\n const testDomainXmlPath = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\r\n const expectedBisCoreKey = {\r\n name: \"BisCore\",\r\n readVersion: 1,\r\n writeVersion: 0,\r\n minorVersion: 0,\r\n };\r\n const context = new ECSchemaXmlContext();\r\n const missingReferences: SchemaKey[] = [];\r\n context.setSchemaLocater((key: SchemaKey) => {\r\n missingReferences.push(key);\r\n });\r\n\r\n expect(() => context.readSchemaFromXmlFile(testDomainXmlPath)).to.throw(\"ReferencedSchemaNotFound\");\r\n expect(missingReferences).to.have.lengthOf(1);\r\n expect(missingReferences[0]).to.eql(expectedBisCoreKey);\r\n expect(slm.finishAndDispose()).to.true;\r\n });\r\n\r\n it(\"setFirstSchemaLocater, should call schema locater callback for missing schema references\", () => {\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECObjectsNative\").message(/Unable to locate referenced schema BisCore\\.01\\.00\\.00 while deserializing TestDomain\\.01\\.00\\.00/gm);\r\n slm.append().error().category(\"ECObjectsNative\").message(/Failed to read schema 'TestDomain\\.01\\.00\\.00'/gm);\r\n const testDomainXmlPath = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\r\n const expectedBisCoreKey = {\r\n name: \"BisCore\",\r\n readVersion: 1,\r\n writeVersion: 0,\r\n minorVersion: 0,\r\n };\r\n const context = new ECSchemaXmlContext();\r\n const missingReferences: SchemaKey[] = [];\r\n context.setFirstSchemaLocater((key: SchemaKey) => {\r\n missingReferences.push(key);\r\n });\r\n\r\n expect(() => context.readSchemaFromXmlFile(testDomainXmlPath)).to.throw(\"ReferencedSchemaNotFound\");\r\n expect(missingReferences).to.have.lengthOf(1);\r\n expect(missingReferences[0]).to.eql(expectedBisCoreKey);\r\n expect(slm.finishAndDispose()).to.true;\r\n });\r\n});\r\n"]}