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

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 (358) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.d.ts +54 -8
  13. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.js +477 -275
  15. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlStatement.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/FontFile.js.map +1 -1
  39. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  40. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  41. package/lib/cjs/GeometrySummary.js +47 -47
  42. package/lib/cjs/GeometrySummary.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts.map +1 -1
  44. package/lib/cjs/IModelDb.js +9 -8
  45. package/lib/cjs/IModelDb.js.map +1 -1
  46. package/lib/cjs/IModelDbFonts.js.map +1 -1
  47. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  48. package/lib/cjs/IModelHost.js.map +1 -1
  49. package/lib/cjs/IModelJsFs.js.map +1 -1
  50. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  51. package/lib/cjs/IpcHost.js.map +1 -1
  52. package/lib/cjs/LineStyle.js.map +1 -1
  53. package/lib/cjs/LocalHub.js +1 -1
  54. package/lib/cjs/LocalHub.js.map +1 -1
  55. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  56. package/lib/cjs/LockControl.js.map +1 -1
  57. package/lib/cjs/Material.js.map +1 -1
  58. package/lib/cjs/Model.js.map +1 -1
  59. package/lib/cjs/NativeAppStorage.js.map +1 -1
  60. package/lib/cjs/NativeHost.js.map +1 -1
  61. package/lib/cjs/NavigationRelationship.js.map +1 -1
  62. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  63. package/lib/cjs/PropertyStore.js.map +1 -1
  64. package/lib/cjs/Relationship.js.map +1 -1
  65. package/lib/cjs/RpcBackend.js.map +1 -1
  66. package/lib/cjs/SQLiteDb.js.map +1 -1
  67. package/lib/cjs/Schema.js.map +1 -1
  68. package/lib/cjs/SchemaSync.js.map +1 -1
  69. package/lib/cjs/SchemaUtils.js.map +1 -1
  70. package/lib/cjs/SheetIndex.js.map +1 -1
  71. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  72. package/lib/cjs/SqliteStatement.js.map +1 -1
  73. package/lib/cjs/Texture.js.map +1 -1
  74. package/lib/cjs/TileStorage.js.map +1 -1
  75. package/lib/cjs/TxnManager.js.map +1 -1
  76. package/lib/cjs/ViewDefinition.js.map +1 -1
  77. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  78. package/lib/cjs/ViewStore.js.map +1 -1
  79. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  80. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  81. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  84. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  85. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  86. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  87. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  88. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  89. package/lib/cjs/core-backend.d.ts.map +1 -1
  90. package/lib/cjs/core-backend.js +20 -0
  91. package/lib/cjs/core-backend.js.map +1 -1
  92. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  93. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  94. package/lib/cjs/domains/GenericElements.js.map +1 -1
  95. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  96. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  97. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  98. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  99. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  100. package/lib/cjs/internal/HubMock.js.map +1 -1
  101. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  102. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  103. package/lib/cjs/internal/NoLocks.js.map +1 -1
  104. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  105. package/lib/cjs/internal/Symbols.js.map +1 -1
  106. package/lib/cjs/internal/cross-package.js.map +1 -1
  107. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  108. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  109. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  110. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  111. package/lib/cjs/rpc/multipart.js.map +1 -1
  112. package/lib/cjs/rpc/tracing.js.map +1 -1
  113. package/lib/cjs/rpc/web/logging.js.map +1 -1
  114. package/lib/cjs/rpc/web/request.js.map +1 -1
  115. package/lib/cjs/rpc/web/response.js.map +1 -1
  116. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  117. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  118. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  119. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  120. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  121. package/lib/cjs/workspace/Settings.js.map +1 -1
  122. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  123. package/lib/cjs/workspace/Workspace.js.map +1 -1
  124. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  125. package/lib/esm/BackendHubAccess.js.map +1 -1
  126. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  127. package/lib/esm/BisCoreSchema.js.map +1 -1
  128. package/lib/esm/BlobContainerService.js.map +1 -1
  129. package/lib/esm/BriefcaseManager.js.map +1 -1
  130. package/lib/esm/CatalogDb.js.map +1 -1
  131. package/lib/esm/Category.js.map +1 -1
  132. package/lib/esm/ChangeSummaryManager.js +2 -2
  133. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  134. package/lib/esm/ChangedElementsDb.js.map +1 -1
  135. package/lib/esm/ChangesetECAdaptor.d.ts +54 -8
  136. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  137. package/lib/esm/ChangesetECAdaptor.js +477 -275
  138. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  139. package/lib/esm/ChannelControl.js.map +1 -1
  140. package/lib/esm/CheckpointManager.js.map +1 -1
  141. package/lib/esm/ClassRegistry.js +5 -5
  142. package/lib/esm/ClassRegistry.js.map +1 -1
  143. package/lib/esm/CloudSqlite.js.map +1 -1
  144. package/lib/esm/CodeService.js.map +1 -1
  145. package/lib/esm/CodeSpecs.js.map +1 -1
  146. package/lib/esm/ConcurrentQuery.js.map +1 -1
  147. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  148. package/lib/esm/DevTools.js.map +1 -1
  149. package/lib/esm/DisplayStyle.js.map +1 -1
  150. package/lib/esm/ECDb.js.map +1 -1
  151. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  152. package/lib/esm/ECSqlStatement.js.map +1 -1
  153. package/lib/esm/Element.js.map +1 -1
  154. package/lib/esm/ElementAspect.js.map +1 -1
  155. package/lib/esm/ElementGraphics.js.map +1 -1
  156. package/lib/esm/ElementTreeWalker.js.map +1 -1
  157. package/lib/esm/Entity.js.map +1 -1
  158. package/lib/esm/EntityReferences.js.map +1 -1
  159. package/lib/esm/ExportGraphics.js.map +1 -1
  160. package/lib/esm/ExternalSource.js.map +1 -1
  161. package/lib/esm/FontFile.js.map +1 -1
  162. package/lib/esm/GeoCoordConfig.js.map +1 -1
  163. package/lib/esm/GeographicCRSServices.js.map +1 -1
  164. package/lib/esm/GeometrySummary.js +47 -47
  165. package/lib/esm/GeometrySummary.js.map +1 -1
  166. package/lib/esm/IModelDb.d.ts.map +1 -1
  167. package/lib/esm/IModelDb.js +9 -8
  168. package/lib/esm/IModelDb.js.map +1 -1
  169. package/lib/esm/IModelDbFonts.js.map +1 -1
  170. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  171. package/lib/esm/IModelHost.js.map +1 -1
  172. package/lib/esm/IModelJsFs.js.map +1 -1
  173. package/lib/esm/ImageSourceConversion.js.map +1 -1
  174. package/lib/esm/IpcHost.js.map +1 -1
  175. package/lib/esm/LineStyle.js.map +1 -1
  176. package/lib/esm/LocalHub.js +1 -1
  177. package/lib/esm/LocalHub.js.map +1 -1
  178. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  179. package/lib/esm/LockControl.js.map +1 -1
  180. package/lib/esm/Material.js.map +1 -1
  181. package/lib/esm/Model.js.map +1 -1
  182. package/lib/esm/NativeAppStorage.js.map +1 -1
  183. package/lib/esm/NativeHost.js.map +1 -1
  184. package/lib/esm/NavigationRelationship.js.map +1 -1
  185. package/lib/esm/PromiseMemoizer.js.map +1 -1
  186. package/lib/esm/PropertyStore.js.map +1 -1
  187. package/lib/esm/Relationship.js.map +1 -1
  188. package/lib/esm/RpcBackend.js.map +1 -1
  189. package/lib/esm/SQLiteDb.js.map +1 -1
  190. package/lib/esm/Schema.js.map +1 -1
  191. package/lib/esm/SchemaSync.js.map +1 -1
  192. package/lib/esm/SchemaUtils.js.map +1 -1
  193. package/lib/esm/SheetIndex.js.map +1 -1
  194. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  195. package/lib/esm/SqliteStatement.js.map +1 -1
  196. package/lib/esm/Texture.js.map +1 -1
  197. package/lib/esm/TileStorage.js.map +1 -1
  198. package/lib/esm/TxnManager.js.map +1 -1
  199. package/lib/esm/ViewDefinition.js.map +1 -1
  200. package/lib/esm/ViewStateHydrator.js.map +1 -1
  201. package/lib/esm/ViewStore.js.map +1 -1
  202. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  203. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  204. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  205. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  206. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  207. package/lib/esm/core-backend.d.ts.map +1 -1
  208. package/lib/esm/core-backend.js +20 -0
  209. package/lib/esm/core-backend.js.map +1 -1
  210. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  211. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  212. package/lib/esm/domains/GenericElements.js.map +1 -1
  213. package/lib/esm/domains/GenericSchema.js.map +1 -1
  214. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  215. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  216. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  217. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  218. package/lib/esm/internal/HubMock.js.map +1 -1
  219. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  220. package/lib/esm/internal/NativePlatform.js.map +1 -1
  221. package/lib/esm/internal/NoLocks.js.map +1 -1
  222. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  223. package/lib/esm/internal/Symbols.js.map +1 -1
  224. package/lib/esm/internal/cross-package.js.map +1 -1
  225. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  226. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  227. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  228. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  229. package/lib/esm/rpc/multipart.js.map +1 -1
  230. package/lib/esm/rpc/tracing.js.map +1 -1
  231. package/lib/esm/rpc/web/logging.js.map +1 -1
  232. package/lib/esm/rpc/web/request.js.map +1 -1
  233. package/lib/esm/rpc/web/response.js.map +1 -1
  234. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  235. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  236. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  237. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  238. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  239. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  240. package/lib/esm/test/AttachDb.test.js +11 -11
  241. package/lib/esm/test/AttachDb.test.js.map +1 -1
  242. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  243. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  244. package/lib/esm/test/IModelHost.test.js.map +1 -1
  245. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  246. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  247. package/lib/esm/test/IpcHost.test.js.map +1 -1
  248. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  249. package/lib/esm/test/PrintElementTree.js.map +1 -1
  250. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  251. package/lib/esm/test/RevisionUtility.js.map +1 -1
  252. package/lib/esm/test/SchemaUtils.test.js +25 -25
  253. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  254. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  255. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  256. package/lib/esm/test/TestUtils.js.map +1 -1
  257. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  258. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  259. package/lib/esm/test/categories/Category.test.js.map +1 -1
  260. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  261. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  262. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  263. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  264. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  265. package/lib/esm/test/ecdb/ECDb.test.js +57 -57
  266. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  267. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  268. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  269. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  270. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  271. package/lib/esm/test/ecdb/ECSqlQuery.test.js +7 -7
  272. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  273. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  274. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  275. package/lib/esm/test/ecdb/ECSqlStatement.test.js +292 -292
  276. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  277. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  278. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  279. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  280. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  281. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  282. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  283. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  284. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  285. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  286. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  287. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  288. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  289. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  290. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  291. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  292. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  293. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  294. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  295. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  296. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  297. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  298. package/lib/esm/test/imageData.js.map +1 -1
  299. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  300. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  301. package/lib/esm/test/imodel/IModel.test.js +27 -0
  302. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  303. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  304. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  305. package/lib/esm/test/index.js.map +1 -1
  306. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  307. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  308. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  309. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  310. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  311. package/lib/esm/test/rpc/response.test.js.map +1 -1
  312. package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
  313. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  314. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  315. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  316. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  317. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  318. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  319. package/lib/esm/test/standalone/ChangesetReader.test.js +322 -164
  320. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  321. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  322. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  323. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  324. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  325. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  326. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  327. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  328. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  329. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  330. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  331. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  332. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  333. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  334. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  335. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  336. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  337. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  338. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  339. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  340. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  341. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  342. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  343. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  344. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  345. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  346. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  347. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  348. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  349. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  350. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  351. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  352. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  353. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  354. package/lib/esm/workspace/Settings.js.map +1 -1
  355. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  356. package/lib/esm/workspace/Workspace.js.map +1 -1
  357. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  358. package/package.json +13 -13
@@ -5,7 +5,10 @@
5
5
  /** @packageDocumentation
6
6
  * @module ECDb
7
7
  */
8
- import { DbResult } from "@itwin/core-bentley";
8
+ import { DbResult, Guid } from "@itwin/core-bentley";
9
+ import { Base64EncodedString } from "@itwin/core-common";
10
+ import { ECDb } from "./ECDb";
11
+ import { _nativeDb } from "./internal/Symbols";
9
12
  class ECDbMap {
10
13
  db;
11
14
  _cachedClassMaps = new Map();
@@ -14,14 +17,14 @@ class ECDbMap {
14
17
  this.db = db;
15
18
  }
16
19
  getAllDerivedClasses(classFullName) {
17
- const sql = `
18
- SELECT format('0x%x', ch.ClassId)
19
- FROM [ec_cache_ClassHierarchy] [ch]
20
- JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]
21
- JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]
22
- WHERE (([sc].[Alias] = :schemaNameOrAlias
23
- OR [sc].[Name] = :schemaNameOrAlias)
24
- AND ([cs].[Name] = :className))
20
+ const sql = `
21
+ SELECT format('0x%x', ch.ClassId)
22
+ FROM [ec_cache_ClassHierarchy] [ch]
23
+ JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]
24
+ JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]
25
+ WHERE (([sc].[Alias] = :schemaNameOrAlias
26
+ OR [sc].[Name] = :schemaNameOrAlias)
27
+ AND ([cs].[Name] = :className))
25
28
  `;
26
29
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
27
30
  const parts = classFullName.indexOf(".") !== -1 ? classFullName.split(".") : classFullName.split(":");
@@ -36,39 +39,39 @@ class ECDbMap {
36
39
  getTable(tableName) {
37
40
  if (this._cacheTables.has(tableName))
38
41
  return this._cacheTables.get(tableName);
39
- const sql = `
40
- SELECT
41
- JSON_OBJECT (
42
- 'id', FORMAT ('0x%x', [t].[id]),
43
- 'name', [t].[Name],
44
- 'type', (
45
- CASE
46
- [t].[type]
47
- WHEN 0 THEN 'Primary'
48
- WHEN 1 THEN 'Joined'
49
- WHEN 2 THEN 'Existing'
50
- WHEN 3 THEN 'Overflow'
51
- WHEN 4 THEN 'Virtual'
52
- END
53
- ),
54
- 'exclusiveRootClassId', FORMAT ('0x%x',
55
- COALESCE (
56
- [t].[ExclusiveRootClassId], (
57
- SELECT [parent].[ExclusiveRootClassId]
58
- FROM [ec_Table] [parent]
59
- WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),
60
- 'isClassIdVirtual', (
61
- SELECT
62
- [c].[IsVirtual]
63
- FROM
64
- [ec_Column] [c]
65
- WHERE
66
- [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]
67
- )
68
- )
69
- FROM [ec_Table] [t]
70
- WHERE
71
- [t].[Name] = ?;
42
+ const sql = `
43
+ SELECT
44
+ JSON_OBJECT (
45
+ 'id', FORMAT ('0x%x', [t].[id]),
46
+ 'name', [t].[Name],
47
+ 'type', (
48
+ CASE
49
+ [t].[type]
50
+ WHEN 0 THEN 'Primary'
51
+ WHEN 1 THEN 'Joined'
52
+ WHEN 2 THEN 'Existing'
53
+ WHEN 3 THEN 'Overflow'
54
+ WHEN 4 THEN 'Virtual'
55
+ END
56
+ ),
57
+ 'exclusiveRootClassId', FORMAT ('0x%x',
58
+ COALESCE (
59
+ [t].[ExclusiveRootClassId], (
60
+ SELECT [parent].[ExclusiveRootClassId]
61
+ FROM [ec_Table] [parent]
62
+ WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),
63
+ 'isClassIdVirtual', (
64
+ SELECT
65
+ [c].[IsVirtual]
66
+ FROM
67
+ [ec_Column] [c]
68
+ WHERE
69
+ [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]
70
+ )
71
+ )
72
+ FROM [ec_Table] [t]
73
+ WHERE
74
+ [t].[Name] = ?;
72
75
  `;
73
76
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
74
77
  stmt.bindString(1, tableName);
@@ -89,186 +92,186 @@ class ECDbMap {
89
92
  getClassMap(classId) {
90
93
  if (this._cachedClassMaps.has(classId))
91
94
  return this._cachedClassMaps.get(classId);
92
- const sql = `
93
- SELECT
94
- JSON_OBJECT(
95
- 'id', format('0x%x', cs.id),
96
- 'name', format('%s:%s', ss.Name, cs.Name),
97
- 'mapStrategy',
98
- (
99
- CASE cm.MapStrategy
100
- WHEN 0 THEN 'NotMapped'
101
- WHEN 1 THEN 'OwnTable'
102
- WHEN 2 THEN 'TablePerHierarchy'
103
- WHEN 3 THEN 'ExistingTable'
104
- WHEN 10 THEN 'ForeignKeyInTargetTable'
105
- WHEN 11 THEN 'ForeignKeyInSourceTable'
106
- END
107
- ),
108
- 'type',
109
- (
110
- CASE cs.Type
111
- WHEN 0 THEN 'Entity'
112
- WHEN 1 THEN 'Relationship'
113
- WHEN 2 THEN 'Struct'
114
- WHEN 3 THEN 'CustomAttribute'
115
- END
116
- ),
117
- 'modifier',
118
- (
119
- CASE cs.Modifier
120
- WHEN 0 THEN 'None'
121
- WHEN 1 THEN 'Abstract'
122
- WHEN 2 THEN 'Sealed'
123
- END
124
- ),
125
- 'properties',
126
- (
127
- SELECT
128
- JSON_GROUP_ARRAY(JSON(propJson))
129
- FROM
130
- (
131
- SELECT
132
- JSON_OBJECT(
133
- 'id', format('0x%x', pt.id),
134
- 'name', pt.Name,
135
- 'kind',
136
- (
137
- CASE pt.Kind
138
- WHEN 0 THEN 'Primitive'
139
- WHEN 1 THEN 'Struct'
140
- WHEN 2 THEN 'PrimitiveArray'
141
- WHEN 3 THEN 'StructArray'
142
- WHEN 4 THEN 'Navigation'
143
- END
144
- ),
145
- 'primitiveType',
146
- (
147
- CASE pt.PrimitiveType
148
- WHEN 0x101 THEN 'Binary'
149
- WHEN 0x201 THEN 'Boolean'
150
- WHEN 0x301 THEN 'DateTime'
151
- WHEN 0x401 THEN 'Double'
152
- WHEN 0x501 THEN 'Integer'
153
- WHEN 0x601 THEN 'Long'
154
- WHEN 0x701 THEN 'Point2d'
155
- WHEN 0x801 THEN 'Point3d'
156
- WHEN 0x901 THEN 'String'
157
- WHEN 0xa01 THEN 'IGeometry'
158
- END
159
- ),
160
- 'extendedTypeName', ExtendedTypeName,
161
- 'navigationRelationship',
162
- (
163
- SELECT
164
- JSON_OBJECT(
165
- 'classId', format('0x%x', nc.Id),
166
- 'classFullName', format('%s:%s', ns.Name, nc.Name)
167
- )
168
- FROM ec_Class nc
169
- JOIN ec_Schema ns ON ns.Id = nc.SchemaId
170
- WHERE
171
- nc.Id = pt.NavigationRelationshipClassId
172
- ),
173
- 'structClass',
174
- (
175
- SELECT
176
- JSON_OBJECT(
177
- 'classId', format('0x%x', nc.Id),
178
- 'classFullName', format('%s:%s', ns.Name, nc.Name)
179
- )
180
- FROM ec_Class nc
181
- JOIN ec_Schema ns ON ns.Id = nc.SchemaId
182
- WHERE
183
- nc.Id = pt.StructClassId
184
- ),
185
- 'dateTimeInfo', (
186
- SELECT
187
- JSON_OBJECT (
188
- 'dateTimeKind', (
189
- CASE
190
- WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'
191
- WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'
192
- ELSE 'Unspecified'
193
- END
194
- ),
195
- 'dateTimeComponent', (
196
- CASE
197
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'
198
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'
199
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'
200
- ELSE 'DateTime'
201
- END
202
- )
203
- )
204
- FROM
205
- [ec_CustomAttribute] [ca]
206
- JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]
207
- JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]
208
- WHERE
209
- [ca].[ContainerType] = 992
210
- AND [cl].[Name] = 'DateTimeInfo'
211
- AND [sc].[Name] = 'CoreCustomAttributes'
212
- AND [ca].[ContainerId] = [pt].[Id]
213
- ),
214
- 'columns',
215
- (
216
- SELECT
217
- JSON_GROUP_ARRAY(JSON(columnJson))
218
- FROM
219
- (
220
- SELECT
221
- JSON_OBJECT(
222
- 'table', tb.Name,
223
- 'column', cc.Name,
224
- 'type',
225
- (
226
- CASE cc.Type
227
- WHEN 0 THEN 'Any'
228
- WHEN 1 THEN 'Boolean'
229
- WHEN 2 THEN 'Blob'
230
- WHEN 3 THEN 'Timestamp'
231
- WHEN 4 THEN 'Real'
232
- WHEN 5 THEN 'Integer'
233
- WHEN 6 THEN 'Text'
234
- END
235
- ),
236
- 'columnKind',
237
- (
238
- CASE cc.ColumnKind
239
- WHEN 0 THEN 'Default'
240
- WHEN 1 THEN 'Id'
241
- WHEN 2 THEN 'ClassId'
242
- WHEN 4 THEN 'SharedData'
243
- END
244
- ),
245
- 'accessString', pp0.AccessString,
246
- 'isVirtual', cc.IsVirtual OR tb.Type = 4
247
- ) columnJson
248
- FROM [ec_PropertyMap] [pm0]
249
- JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]
250
- JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]
251
- JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]
252
- WHERE
253
- [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id
254
- )
255
- )
256
- ) propJson
257
- FROM [ec_PropertyMap] [pm]
258
- JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]
259
- JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]
260
- WHERE
261
- pm.ClassId = cs.Id
262
- GROUP BY
263
- pt.Id
264
- )
265
- )
266
- ) classDef
267
- FROM [ec_Class] [cs]
268
- JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]
269
- JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]
270
- WHERE
271
- [cs].[Id] = ?
95
+ const sql = `
96
+ SELECT
97
+ JSON_OBJECT(
98
+ 'id', format('0x%x', cs.id),
99
+ 'name', format('%s:%s', ss.Name, cs.Name),
100
+ 'mapStrategy',
101
+ (
102
+ CASE cm.MapStrategy
103
+ WHEN 0 THEN 'NotMapped'
104
+ WHEN 1 THEN 'OwnTable'
105
+ WHEN 2 THEN 'TablePerHierarchy'
106
+ WHEN 3 THEN 'ExistingTable'
107
+ WHEN 10 THEN 'ForeignKeyInTargetTable'
108
+ WHEN 11 THEN 'ForeignKeyInSourceTable'
109
+ END
110
+ ),
111
+ 'type',
112
+ (
113
+ CASE cs.Type
114
+ WHEN 0 THEN 'Entity'
115
+ WHEN 1 THEN 'Relationship'
116
+ WHEN 2 THEN 'Struct'
117
+ WHEN 3 THEN 'CustomAttribute'
118
+ END
119
+ ),
120
+ 'modifier',
121
+ (
122
+ CASE cs.Modifier
123
+ WHEN 0 THEN 'None'
124
+ WHEN 1 THEN 'Abstract'
125
+ WHEN 2 THEN 'Sealed'
126
+ END
127
+ ),
128
+ 'properties',
129
+ (
130
+ SELECT
131
+ JSON_GROUP_ARRAY(JSON(propJson))
132
+ FROM
133
+ (
134
+ SELECT
135
+ JSON_OBJECT(
136
+ 'id', format('0x%x', pt.id),
137
+ 'name', pt.Name,
138
+ 'kind',
139
+ (
140
+ CASE pt.Kind
141
+ WHEN 0 THEN 'Primitive'
142
+ WHEN 1 THEN 'Struct'
143
+ WHEN 2 THEN 'PrimitiveArray'
144
+ WHEN 3 THEN 'StructArray'
145
+ WHEN 4 THEN 'Navigation'
146
+ END
147
+ ),
148
+ 'primitiveType',
149
+ (
150
+ CASE pt.PrimitiveType
151
+ WHEN 0x101 THEN 'Binary'
152
+ WHEN 0x201 THEN 'Boolean'
153
+ WHEN 0x301 THEN 'DateTime'
154
+ WHEN 0x401 THEN 'Double'
155
+ WHEN 0x501 THEN 'Integer'
156
+ WHEN 0x601 THEN 'Long'
157
+ WHEN 0x701 THEN 'Point2d'
158
+ WHEN 0x801 THEN 'Point3d'
159
+ WHEN 0x901 THEN 'String'
160
+ WHEN 0xa01 THEN 'IGeometry'
161
+ END
162
+ ),
163
+ 'extendedTypeName', ExtendedTypeName,
164
+ 'navigationRelationship',
165
+ (
166
+ SELECT
167
+ JSON_OBJECT(
168
+ 'classId', format('0x%x', nc.Id),
169
+ 'classFullName', format('%s:%s', ns.Name, nc.Name)
170
+ )
171
+ FROM ec_Class nc
172
+ JOIN ec_Schema ns ON ns.Id = nc.SchemaId
173
+ WHERE
174
+ nc.Id = pt.NavigationRelationshipClassId
175
+ ),
176
+ 'structClass',
177
+ (
178
+ SELECT
179
+ JSON_OBJECT(
180
+ 'classId', format('0x%x', nc.Id),
181
+ 'classFullName', format('%s:%s', ns.Name, nc.Name)
182
+ )
183
+ FROM ec_Class nc
184
+ JOIN ec_Schema ns ON ns.Id = nc.SchemaId
185
+ WHERE
186
+ nc.Id = pt.StructClassId
187
+ ),
188
+ 'dateTimeInfo', (
189
+ SELECT
190
+ JSON_OBJECT (
191
+ 'dateTimeKind', (
192
+ CASE
193
+ WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'
194
+ WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'
195
+ ELSE 'Unspecified'
196
+ END
197
+ ),
198
+ 'dateTimeComponent', (
199
+ CASE
200
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'
201
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'
202
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'
203
+ ELSE 'DateTime'
204
+ END
205
+ )
206
+ )
207
+ FROM
208
+ [ec_CustomAttribute] [ca]
209
+ JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]
210
+ JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]
211
+ WHERE
212
+ [ca].[ContainerType] = 992
213
+ AND [cl].[Name] = 'DateTimeInfo'
214
+ AND [sc].[Name] = 'CoreCustomAttributes'
215
+ AND [ca].[ContainerId] = [pt].[Id]
216
+ ),
217
+ 'columns',
218
+ (
219
+ SELECT
220
+ JSON_GROUP_ARRAY(JSON(columnJson))
221
+ FROM
222
+ (
223
+ SELECT
224
+ JSON_OBJECT(
225
+ 'table', tb.Name,
226
+ 'column', cc.Name,
227
+ 'type',
228
+ (
229
+ CASE cc.Type
230
+ WHEN 0 THEN 'Any'
231
+ WHEN 1 THEN 'Boolean'
232
+ WHEN 2 THEN 'Blob'
233
+ WHEN 3 THEN 'Timestamp'
234
+ WHEN 4 THEN 'Real'
235
+ WHEN 5 THEN 'Integer'
236
+ WHEN 6 THEN 'Text'
237
+ END
238
+ ),
239
+ 'columnKind',
240
+ (
241
+ CASE cc.ColumnKind
242
+ WHEN 0 THEN 'Default'
243
+ WHEN 1 THEN 'Id'
244
+ WHEN 2 THEN 'ClassId'
245
+ WHEN 4 THEN 'SharedData'
246
+ END
247
+ ),
248
+ 'accessString', pp0.AccessString,
249
+ 'isVirtual', cc.IsVirtual OR tb.Type = 4
250
+ ) columnJson
251
+ FROM [ec_PropertyMap] [pm0]
252
+ JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]
253
+ JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]
254
+ JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]
255
+ WHERE
256
+ [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id
257
+ )
258
+ )
259
+ ) propJson
260
+ FROM [ec_PropertyMap] [pm]
261
+ JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]
262
+ JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]
263
+ WHERE
264
+ pm.ClassId = cs.Id
265
+ GROUP BY
266
+ pt.Id
267
+ )
268
+ )
269
+ ) classDef
270
+ FROM [ec_Class] [cs]
271
+ JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]
272
+ JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]
273
+ WHERE
274
+ [cs].[Id] = ?
272
275
  `;
273
276
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
274
277
  stmt.bindId(1, classId);
@@ -318,6 +321,186 @@ var DateTime;
318
321
  }
319
322
  DateTime.fromJulianDay = fromJulianDay;
320
323
  })(DateTime || (DateTime = {}));
324
+ export var ECChangeUnifierCache;
325
+ (function (ECChangeUnifierCache) {
326
+ function createInMemory() {
327
+ return new InMemoryInstanceCache();
328
+ }
329
+ ECChangeUnifierCache.createInMemory = createInMemory;
330
+ function createSqliteBacked(db, bufferedReadInstanceSizeInBytes = 1024 * 1024 * 10) {
331
+ return new SqliteBackedInstanceCache(db, bufferedReadInstanceSizeInBytes);
332
+ }
333
+ ECChangeUnifierCache.createSqliteBacked = createSqliteBacked;
334
+ })(ECChangeUnifierCache || (ECChangeUnifierCache = {}));
335
+ /**
336
+ * In-memory cache for storing changed EC instances.
337
+ */
338
+ class InMemoryInstanceCache {
339
+ _cache = new Map();
340
+ /**
341
+ * Retrieves the changed EC instance associated with the specified key.
342
+ * @param key - The key used to retrieve the instance.
343
+ * @returns The changed EC instance, or undefined if not found.
344
+ */
345
+ get(key) {
346
+ return this._cache.get(key);
347
+ }
348
+ /**
349
+ * Sets the changed EC instance associated with the specified key.
350
+ * @param key - The key used to store the instance.
351
+ * @param value - The changed EC instance to be stored.
352
+ */
353
+ set(key, value) {
354
+ const meta = value.$meta;
355
+ // Remove undefined keys
356
+ if (meta) {
357
+ Object.keys(meta).forEach((k) => meta[k] === undefined && delete meta[k]);
358
+ }
359
+ this._cache.set(key, value);
360
+ }
361
+ /**
362
+ * Returns an iterator over all the changed EC instances in the cache.
363
+ * @returns An iterator over all the changed EC instances.
364
+ */
365
+ *all() {
366
+ for (const key of Array.from(this._cache.keys()).sort()) {
367
+ const instance = this._cache.get(key);
368
+ if (instance) {
369
+ yield instance;
370
+ }
371
+ }
372
+ }
373
+ /**
374
+ * Returns the number of changed EC instances in the cache.
375
+ * @returns The number of changed EC instances.
376
+ */
377
+ count() {
378
+ return this._cache.size;
379
+ }
380
+ /**
381
+ * Disposes the cache.
382
+ */
383
+ [Symbol.dispose]() {
384
+ // Implementation details
385
+ }
386
+ }
387
+ /**
388
+ * Represents a cache for unifying EC changes in a SQLite-backed instance cache.
389
+ */
390
+ class SqliteBackedInstanceCache {
391
+ _db;
392
+ bufferedReadInstanceSizeInBytes;
393
+ _cacheTable = `[temp].[${Guid.createValue()}]`;
394
+ static defaultBufferSize = 1024 * 1024 * 10; // 10MB
395
+ /**
396
+ * Creates an instance of SqliteBackedInstanceCache.
397
+ * @param _db The underlying database connection.
398
+ * @param bufferedReadInstanceSizeInBytes The size of read instance buffer defaults to 10Mb.
399
+ * @throws Error if bufferedReadInstanceSizeInBytes is less than or equal to 0.
400
+ */
401
+ constructor(_db, bufferedReadInstanceSizeInBytes = SqliteBackedInstanceCache.defaultBufferSize) {
402
+ this._db = _db;
403
+ this.bufferedReadInstanceSizeInBytes = bufferedReadInstanceSizeInBytes;
404
+ if (bufferedReadInstanceSizeInBytes <= 0)
405
+ throw new Error("bufferedReadInstanceCount must be greater than 0");
406
+ this.createTempTable();
407
+ }
408
+ /**
409
+ * Creates a temporary table in the database for caching instances.
410
+ * @throws Error if unable to create the temporary table.
411
+ */
412
+ createTempTable() {
413
+ this._db.withSqliteStatement(`CREATE TABLE ${this._cacheTable} ([key] text primary key, [value] text)`, (stmt) => {
414
+ if (DbResult.BE_SQLITE_DONE !== stmt.step())
415
+ throw new Error("unable to create temp table");
416
+ });
417
+ }
418
+ /**
419
+ * Drops the temporary table from the database.
420
+ * @throws Error if unable to drop the temporary table.
421
+ */
422
+ dropTempTable() {
423
+ this._db.saveChanges();
424
+ if (this._db instanceof ECDb)
425
+ this._db.clearStatementCache();
426
+ else {
427
+ this._db.clearCaches();
428
+ this._db[_nativeDb].clearECDbCache();
429
+ }
430
+ this._db.withSqliteStatement(`DROP TABLE IF EXISTS ${this._cacheTable}`, (stmt) => {
431
+ if (DbResult.BE_SQLITE_DONE !== stmt.step())
432
+ throw new Error("unable to drop temp table");
433
+ });
434
+ }
435
+ /**
436
+ * Retrieves the changed EC instance from the cache based on the specified key.
437
+ * @param key The key of the instance.
438
+ * @returns The changed EC instance if found, otherwise undefined.
439
+ */
440
+ get(key) {
441
+ return this._db.withPreparedSqliteStatement(`SELECT [value] FROM ${this._cacheTable} WHERE [key]=?`, (stmt) => {
442
+ stmt.bindString(1, key);
443
+ if (stmt.step() === DbResult.BE_SQLITE_ROW) {
444
+ const out = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver);
445
+ return out;
446
+ }
447
+ return undefined;
448
+ });
449
+ }
450
+ /**
451
+ * Sets the changed EC instance in the cache with the specified key.
452
+ * @param key The key of the instance.
453
+ * @param value The changed EC instance to be set.
454
+ */
455
+ set(key, value) {
456
+ const shallowCopy = Object.assign({}, value);
457
+ this._db.withPreparedSqliteStatement(`INSERT INTO ${this._cacheTable} ([key], [value]) VALUES (?, ?) ON CONFLICT ([key]) DO UPDATE SET [value] = [excluded].[value]`, (stmt) => {
458
+ stmt.bindString(1, key);
459
+ stmt.bindString(2, JSON.stringify(shallowCopy, Base64EncodedString.replacer));
460
+ stmt.step();
461
+ });
462
+ }
463
+ /**
464
+ * Returns an iterator for all the changed EC instances in the cache.
465
+ * @returns An iterator for all the changed EC instances.
466
+ */
467
+ *all() {
468
+ const sql = `
469
+ SELECT JSON_GROUP_ARRAY (JSON([value]))
470
+ FROM (SELECT
471
+ [value],
472
+ SUM (LENGTH ([value])) OVER (ORDER BY [key] ROWS UNBOUNDED PRECEDING) / ${this.bufferedReadInstanceSizeInBytes} AS [bucket]
473
+ FROM ${this._cacheTable})
474
+ GROUP BY [bucket]`;
475
+ const stmt = this._db.prepareSqliteStatement(sql);
476
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
477
+ const instanceBucket = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver);
478
+ for (const value of instanceBucket) {
479
+ yield value;
480
+ }
481
+ }
482
+ stmt[Symbol.dispose]();
483
+ }
484
+ /**
485
+ * Returns the number of instances in the cache.
486
+ * @returns The number of instances in the cache.
487
+ */
488
+ count() {
489
+ return this._db.withPreparedSqliteStatement(`SELECT COUNT(*) FROM ${this._cacheTable}`, (stmt) => {
490
+ if (stmt.step() === DbResult.BE_SQLITE_ROW)
491
+ return stmt.getValue(0).getInteger();
492
+ return 0;
493
+ });
494
+ }
495
+ /**
496
+ * Disposes the cache by dropping the temporary table.
497
+ */
498
+ [Symbol.dispose]() {
499
+ if (this._db.isOpen) {
500
+ this.dropTempTable();
501
+ }
502
+ }
503
+ }
321
504
  /**
322
505
  * Combine partial changed instance into single instance.
323
506
  * Partial changes is per table and a single instance can
@@ -325,38 +508,49 @@ var DateTime;
325
508
  * @beta
326
509
  */
327
510
  export class PartialECChangeUnifier {
328
- _cache = new Map();
511
+ _db;
512
+ _cache;
329
513
  _readonly = false;
514
+ constructor(_db, _cache = new InMemoryInstanceCache()) {
515
+ this._db = _db;
516
+ this._cache = _cache;
517
+ }
518
+ /**
519
+ * Dispose the instance.
520
+ */
521
+ [Symbol.dispose]() {
522
+ this._cache[Symbol.dispose]();
523
+ }
330
524
  /**
331
525
  * Get root class id for a given class
332
526
  * @param classId given class id
333
527
  * @param db use to find root class
334
528
  * @returns return root class id
335
529
  */
336
- static getRootClassId(classId, db) {
337
- const sql = `
338
- WITH
339
- [base_class]([classId], [baseClassId], [Level]) AS(
340
- SELECT [ch].[ClassId], [ch].[BaseClassId], 0
341
- FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?
342
- UNION ALL
343
- SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1
344
- FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]
345
-
346
- )
347
- SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass
348
- FROM [base_class] [bc]
349
- WHERE [bc].[ClassId] <> [bc].[BaseClassId]
350
- AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]
351
- FROM [ec_CustomAttribute] [ca]
352
- WHERE [ca].[ContainerType] = 30
353
- AND [ca].[ClassId] IN (SELECT [cc].[Id]
354
- FROM [ec_Class] [cc]
355
- JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]
356
- WHERE [cc].[Name] = 'IsMixIn'
357
- AND [ss].[Name] = 'CoreCustomAttributes'))
530
+ getRootClassId(classId) {
531
+ const sql = `
532
+ WITH
533
+ [base_class]([classId], [baseClassId], [Level]) AS(
534
+ SELECT [ch].[ClassId], [ch].[BaseClassId], 0
535
+ FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?
536
+ UNION ALL
537
+ SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1
538
+ FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]
539
+
540
+ )
541
+ SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass
542
+ FROM [base_class] [bc]
543
+ WHERE [bc].[ClassId] <> [bc].[BaseClassId]
544
+ AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]
545
+ FROM [ec_CustomAttribute] [ca]
546
+ WHERE [ca].[ContainerType] = 30
547
+ AND [ca].[ClassId] IN (SELECT [cc].[Id]
548
+ FROM [ec_Class] [cc]
549
+ JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]
550
+ WHERE [cc].[Name] = 'IsMixIn'
551
+ AND [ss].[Name] = 'CoreCustomAttributes'))
358
552
  ORDER BY [Level] DESC`;
359
- return db.withSqliteStatement(sql, (stmt) => {
553
+ return this._db.withSqliteStatement(sql, (stmt) => {
360
554
  stmt.bindId(1, classId);
361
555
  if (stmt.step() === DbResult.BE_SQLITE_ROW && !stmt.isValueNull(0)) {
362
556
  return stmt.getValueString(0);
@@ -364,15 +558,30 @@ export class PartialECChangeUnifier {
364
558
  return classId;
365
559
  });
366
560
  }
561
+ /**
562
+ * Checks if the given `rhsClassId` is an instance of the `lhsClassId`.
563
+ * @param rhsClassId The ID of the right-hand side class.
564
+ * @param lhsClassId The ID of the left-hand side class.
565
+ * @returns `true` if `rhsClassId` is an instance of `lhsClassId`, `false` otherwise.
566
+ */
567
+ instanceOf(rhsClassId, lhsClassId) {
568
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
569
+ return this._db.withPreparedStatement("SELECT ec_instanceof(?,?)", (stmt) => {
570
+ stmt.bindId(1, rhsClassId);
571
+ stmt.bindId(2, lhsClassId);
572
+ stmt.step();
573
+ return stmt.getValue(0).getInteger() === 1;
574
+ });
575
+ }
367
576
  /**
368
577
  * Combine partial instance with instance with same key if already exists.
369
578
  * @param rhs partial instance
370
579
  */
371
- combine(rhs, db) {
580
+ combine(rhs) {
372
581
  if (!rhs.$meta) {
373
582
  throw new Error("PartialECChange being combine must have '$meta' property");
374
583
  }
375
- const key = PartialECChangeUnifier.buildKey(rhs, db);
584
+ const key = this.buildKey(rhs);
376
585
  const lhs = this._cache.get(key);
377
586
  if (lhs) {
378
587
  const { $meta: _, ...restOfRhs } = rhs;
@@ -381,37 +590,39 @@ export class PartialECChangeUnifier {
381
590
  lhs.$meta.tables = [...rhs.$meta?.tables, ...lhs.$meta?.tables];
382
591
  lhs.$meta.changeIndexes = [...rhs.$meta?.changeIndexes, ...lhs.$meta?.changeIndexes];
383
592
  // we preserve child class name & id when merging instance.
384
- if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && db && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {
593
+ if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {
385
594
  const lhsClassId = lhs.$meta.fallbackClassId;
386
595
  const rhsClassId = rhs.$meta.fallbackClassId;
387
- // eslint-disable-next-line @typescript-eslint/no-deprecated
388
- const isRhsIsSubClassOfLhs = db.withPreparedStatement("SELECT ec_instanceof(?,?)", (stmt) => {
389
- stmt.bindId(1, rhsClassId);
390
- stmt.bindId(2, lhsClassId);
391
- stmt.step();
392
- return stmt.getValue(0).getInteger() === 1;
393
- });
596
+ const isRhsIsSubClassOfLhs = this.instanceOf(rhsClassId, lhsClassId);
394
597
  if (isRhsIsSubClassOfLhs) {
395
598
  lhs.$meta.fallbackClassId = rhs.$meta.fallbackClassId;
396
599
  lhs.$meta.classFullName = rhs.$meta.classFullName;
397
600
  }
398
601
  }
399
602
  }
603
+ this._cache.set(key, lhs);
400
604
  }
401
605
  else {
402
606
  this._cache.set(key, rhs);
403
607
  }
404
608
  }
609
+ /**
610
+ * Returns the number of instances in the cache.
611
+ * @returns The number of instances in the cache.
612
+ */
613
+ getInstanceCount() {
614
+ return this._cache.count();
615
+ }
405
616
  /**
406
617
  * Build key from EC change.
407
618
  * @param change EC change
408
619
  * @returns key created from EC change.
409
620
  */
410
- static buildKey(change, db) {
621
+ buildKey(change) {
411
622
  let classId = change.ECClassId;
412
623
  if (typeof classId === "undefined") {
413
- if (db && change.$meta?.fallbackClassId) {
414
- classId = this.getRootClassId(change.$meta.fallbackClassId, db);
624
+ if (change.$meta?.fallbackClassId) {
625
+ classId = this.getRootClassId(change.$meta.fallbackClassId);
415
626
  }
416
627
  if (typeof classId === "undefined") {
417
628
  throw new Error(`unable to resolve ECClassId to root class id.`);
@@ -434,32 +645,23 @@ export class PartialECChangeUnifier {
434
645
  throw new Error("this instance is marked as readonly.");
435
646
  }
436
647
  if (adaptor.op === "Updated" && adaptor.inserted && adaptor.deleted) {
437
- this.combine(adaptor.inserted, adaptor.reader.db);
438
- this.combine(adaptor.deleted, adaptor.reader.db);
648
+ this.combine(adaptor.inserted);
649
+ this.combine(adaptor.deleted);
439
650
  }
440
651
  else if (adaptor.op === "Inserted" && adaptor.inserted) {
441
- this.combine(adaptor.inserted, adaptor.reader.db);
652
+ this.combine(adaptor.inserted);
442
653
  }
443
654
  else if (adaptor.op === "Deleted" && adaptor.deleted) {
444
- this.combine(adaptor.deleted, adaptor.reader.db);
445
- }
446
- }
447
- /**
448
- * Delete $meta from all the instances.
449
- */
450
- stripMetaData() {
451
- for (const inst of this._cache.values()) {
452
- if ("$meta" in inst) {
453
- delete inst.$meta;
454
- }
655
+ this.combine(adaptor.deleted);
455
656
  }
456
- this._readonly = true;
457
657
  }
458
658
  /**
459
659
  * Returns complete EC change instances.
460
660
  * @beta
461
661
  */
462
- get instances() { return this._cache.values(); }
662
+ get instances() {
663
+ return this._cache.all();
664
+ }
463
665
  }
464
666
  /**
465
667
  * Transform sqlite change to ec change. EC change is partial change as