@itwin/core-backend 5.9.0-dev.8 → 5.9.0

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 (604) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +38 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js.map +1 -1
  7. package/lib/cjs/BlobContainerService.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  9. package/lib/cjs/BriefcaseManager.js +6 -3
  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 +4 -4
  13. package/lib/cjs/Category.js.map +1 -1
  14. package/lib/cjs/ChangeSummaryManager.js +2 -2
  15. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  16. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  17. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  18. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  19. package/lib/cjs/ChangesetECAdaptor.js +255 -249
  20. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  21. package/lib/cjs/ChangesetReader.d.ts +186 -0
  22. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  23. package/lib/cjs/ChangesetReader.js +372 -0
  24. package/lib/cjs/ChangesetReader.js.map +1 -0
  25. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  26. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  27. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  28. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  29. package/lib/cjs/ChannelControl.js.map +1 -1
  30. package/lib/cjs/CheckpointManager.js.map +1 -1
  31. package/lib/cjs/ClassRegistry.js +5 -5
  32. package/lib/cjs/ClassRegistry.js.map +1 -1
  33. package/lib/cjs/CloudSqlite.d.ts +1 -1
  34. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  35. package/lib/cjs/CloudSqlite.js +68 -13
  36. package/lib/cjs/CloudSqlite.js.map +1 -1
  37. package/lib/cjs/CodeService.js.map +1 -1
  38. package/lib/cjs/CodeSpecs.d.ts +3 -3
  39. package/lib/cjs/CodeSpecs.js.map +1 -1
  40. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  41. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  42. package/lib/cjs/DevTools.js.map +1 -1
  43. package/lib/cjs/DisplayStyle.d.ts +2 -2
  44. package/lib/cjs/DisplayStyle.js.map +1 -1
  45. package/lib/cjs/ECDb.js.map +1 -1
  46. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  47. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  48. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  49. package/lib/cjs/ECSqlStatement.js.map +1 -1
  50. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  51. package/lib/cjs/EditTxn.d.ts +55 -1
  52. package/lib/cjs/EditTxn.d.ts.map +1 -1
  53. package/lib/cjs/EditTxn.js +43 -1
  54. package/lib/cjs/EditTxn.js.map +1 -1
  55. package/lib/cjs/Element.d.ts +79 -10
  56. package/lib/cjs/Element.d.ts.map +1 -1
  57. package/lib/cjs/Element.js +38 -2
  58. package/lib/cjs/Element.js.map +1 -1
  59. package/lib/cjs/ElementAspect.d.ts +1 -1
  60. package/lib/cjs/ElementAspect.js.map +1 -1
  61. package/lib/cjs/ElementGraphics.js.map +1 -1
  62. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  63. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  64. package/lib/cjs/Entity.js.map +1 -1
  65. package/lib/cjs/EntityReferences.js.map +1 -1
  66. package/lib/cjs/ExportGraphics.js.map +1 -1
  67. package/lib/cjs/ExternalSource.d.ts +2 -2
  68. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  69. package/lib/cjs/ExternalSource.js.map +1 -1
  70. package/lib/cjs/FontFile.js.map +1 -1
  71. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  72. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  73. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  74. package/lib/cjs/GeographicCRSServices.js +13 -4
  75. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  76. package/lib/cjs/GeometrySummary.js +47 -47
  77. package/lib/cjs/GeometrySummary.js.map +1 -1
  78. package/lib/cjs/IModelDb.d.ts +31 -23
  79. package/lib/cjs/IModelDb.d.ts.map +1 -1
  80. package/lib/cjs/IModelDb.js +53 -34
  81. package/lib/cjs/IModelDb.js.map +1 -1
  82. package/lib/cjs/IModelDbFonts.js.map +1 -1
  83. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  84. package/lib/cjs/IModelHost.js.map +1 -1
  85. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  86. package/lib/cjs/IModelJsFs.js.map +1 -1
  87. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  88. package/lib/cjs/IpcHost.d.ts.map +1 -1
  89. package/lib/cjs/IpcHost.js +33 -13
  90. package/lib/cjs/IpcHost.js.map +1 -1
  91. package/lib/cjs/LineStyle.d.ts +6 -6
  92. package/lib/cjs/LineStyle.js.map +1 -1
  93. package/lib/cjs/LocalHub.js +1 -1
  94. package/lib/cjs/LocalHub.js.map +1 -1
  95. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  96. package/lib/cjs/LockControl.d.ts +85 -1
  97. package/lib/cjs/LockControl.d.ts.map +1 -1
  98. package/lib/cjs/LockControl.js.map +1 -1
  99. package/lib/cjs/Material.d.ts +1 -1
  100. package/lib/cjs/Material.js.map +1 -1
  101. package/lib/cjs/Model.d.ts +40 -6
  102. package/lib/cjs/Model.d.ts.map +1 -1
  103. package/lib/cjs/Model.js +24 -0
  104. package/lib/cjs/Model.js.map +1 -1
  105. package/lib/cjs/NativeAppStorage.js.map +1 -1
  106. package/lib/cjs/NativeHost.js.map +1 -1
  107. package/lib/cjs/NavigationRelationship.js.map +1 -1
  108. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  109. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  110. package/lib/cjs/PartialChangeUnifier.js +234 -0
  111. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  112. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  113. package/lib/cjs/PropertyStore.js.map +1 -1
  114. package/lib/cjs/Relationship.d.ts +10 -10
  115. package/lib/cjs/Relationship.js +6 -6
  116. package/lib/cjs/Relationship.js.map +1 -1
  117. package/lib/cjs/RpcBackend.js.map +1 -1
  118. package/lib/cjs/SQLiteDb.js.map +1 -1
  119. package/lib/cjs/Schema.js.map +1 -1
  120. package/lib/cjs/SchemaSync.js.map +1 -1
  121. package/lib/cjs/SchemaUtils.js.map +1 -1
  122. package/lib/cjs/SheetIndex.d.ts +4 -4
  123. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  124. package/lib/cjs/SheetIndex.js.map +1 -1
  125. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  126. package/lib/cjs/SqliteChangesetReader.js +1 -1
  127. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  128. package/lib/cjs/SqliteStatement.js.map +1 -1
  129. package/lib/cjs/StashManager.js.map +1 -1
  130. package/lib/cjs/Texture.d.ts +1 -1
  131. package/lib/cjs/Texture.js.map +1 -1
  132. package/lib/cjs/TileStorage.js.map +1 -1
  133. package/lib/cjs/TxnManager.d.ts +114 -4
  134. package/lib/cjs/TxnManager.d.ts.map +1 -1
  135. package/lib/cjs/TxnManager.js +196 -8
  136. package/lib/cjs/TxnManager.js.map +1 -1
  137. package/lib/cjs/ViewDefinition.d.ts +25 -13
  138. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  139. package/lib/cjs/ViewDefinition.js +77 -25
  140. package/lib/cjs/ViewDefinition.js.map +1 -1
  141. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  142. package/lib/cjs/ViewStore.d.ts.map +1 -1
  143. package/lib/cjs/ViewStore.js +63 -21
  144. package/lib/cjs/ViewStore.js.map +1 -1
  145. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  146. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  147. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  148. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  149. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  150. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  151. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  152. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  153. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  154. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  155. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  156. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  157. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  158. package/lib/cjs/core-backend.d.ts +3 -0
  159. package/lib/cjs/core-backend.d.ts.map +1 -1
  160. package/lib/cjs/core-backend.js +3 -0
  161. package/lib/cjs/core-backend.js.map +1 -1
  162. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  163. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  164. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  165. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  166. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  167. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  168. package/lib/cjs/domains/GenericElements.js.map +1 -1
  169. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  170. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  171. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  172. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  173. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  174. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  175. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  176. package/lib/cjs/internal/HubMock.d.ts +2 -0
  177. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  178. package/lib/cjs/internal/HubMock.js +7 -0
  179. package/lib/cjs/internal/HubMock.js.map +1 -1
  180. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  181. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  182. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  183. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  184. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  185. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  186. package/lib/cjs/internal/NoLocks.js +6 -0
  187. package/lib/cjs/internal/NoLocks.js.map +1 -1
  188. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  189. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  190. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  191. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  192. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  193. package/lib/cjs/internal/Symbols.js.map +1 -1
  194. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  195. package/lib/cjs/internal/cross-package.js.map +1 -1
  196. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  197. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  198. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  199. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  200. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  201. package/lib/cjs/rpc/multipart.js.map +1 -1
  202. package/lib/cjs/rpc/tracing.js.map +1 -1
  203. package/lib/cjs/rpc/web/logging.js.map +1 -1
  204. package/lib/cjs/rpc/web/request.js.map +1 -1
  205. package/lib/cjs/rpc/web/response.js.map +1 -1
  206. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  207. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  208. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  209. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  210. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  211. package/lib/cjs/workspace/Settings.d.ts +6 -4
  212. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  213. package/lib/cjs/workspace/Settings.js.map +1 -1
  214. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  215. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  216. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  217. package/lib/cjs/workspace/Workspace.js.map +1 -1
  218. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  219. package/lib/esm/BackendHubAccess.d.ts +38 -0
  220. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  221. package/lib/esm/BackendHubAccess.js.map +1 -1
  222. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  223. package/lib/esm/BisCoreSchema.js.map +1 -1
  224. package/lib/esm/BlobContainerService.js.map +1 -1
  225. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  226. package/lib/esm/BriefcaseManager.js +6 -3
  227. package/lib/esm/BriefcaseManager.js.map +1 -1
  228. package/lib/esm/CatalogDb.js.map +1 -1
  229. package/lib/esm/Category.d.ts +4 -4
  230. package/lib/esm/Category.js.map +1 -1
  231. package/lib/esm/ChangeSummaryManager.js +2 -2
  232. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  233. package/lib/esm/ChangedElementsDb.js.map +1 -1
  234. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  235. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  236. package/lib/esm/ChangesetECAdaptor.js +255 -249
  237. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  238. package/lib/esm/ChangesetReader.d.ts +186 -0
  239. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  240. package/lib/esm/ChangesetReader.js +368 -0
  241. package/lib/esm/ChangesetReader.js.map +1 -0
  242. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  243. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  244. package/lib/esm/ChangesetReaderTypes.js +20 -0
  245. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  246. package/lib/esm/ChannelControl.js.map +1 -1
  247. package/lib/esm/CheckpointManager.js.map +1 -1
  248. package/lib/esm/ClassRegistry.js +5 -5
  249. package/lib/esm/ClassRegistry.js.map +1 -1
  250. package/lib/esm/CloudSqlite.d.ts +1 -1
  251. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  252. package/lib/esm/CloudSqlite.js +69 -14
  253. package/lib/esm/CloudSqlite.js.map +1 -1
  254. package/lib/esm/CodeService.js.map +1 -1
  255. package/lib/esm/CodeSpecs.d.ts +3 -3
  256. package/lib/esm/CodeSpecs.js.map +1 -1
  257. package/lib/esm/ConcurrentQuery.js.map +1 -1
  258. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  259. package/lib/esm/DevTools.js.map +1 -1
  260. package/lib/esm/DisplayStyle.d.ts +2 -2
  261. package/lib/esm/DisplayStyle.js.map +1 -1
  262. package/lib/esm/ECDb.js.map +1 -1
  263. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  264. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  265. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  266. package/lib/esm/ECSqlStatement.js.map +1 -1
  267. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  268. package/lib/esm/EditTxn.d.ts +55 -1
  269. package/lib/esm/EditTxn.d.ts.map +1 -1
  270. package/lib/esm/EditTxn.js +43 -1
  271. package/lib/esm/EditTxn.js.map +1 -1
  272. package/lib/esm/Element.d.ts +79 -10
  273. package/lib/esm/Element.d.ts.map +1 -1
  274. package/lib/esm/Element.js +38 -2
  275. package/lib/esm/Element.js.map +1 -1
  276. package/lib/esm/ElementAspect.d.ts +1 -1
  277. package/lib/esm/ElementAspect.js.map +1 -1
  278. package/lib/esm/ElementGraphics.js.map +1 -1
  279. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  280. package/lib/esm/ElementTreeWalker.js.map +1 -1
  281. package/lib/esm/Entity.js.map +1 -1
  282. package/lib/esm/EntityReferences.js.map +1 -1
  283. package/lib/esm/ExportGraphics.js.map +1 -1
  284. package/lib/esm/ExternalSource.d.ts +2 -2
  285. package/lib/esm/ExternalSource.d.ts.map +1 -1
  286. package/lib/esm/ExternalSource.js.map +1 -1
  287. package/lib/esm/FontFile.js.map +1 -1
  288. package/lib/esm/GeoCoordConfig.js.map +1 -1
  289. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  290. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  291. package/lib/esm/GeographicCRSServices.js +12 -4
  292. package/lib/esm/GeographicCRSServices.js.map +1 -1
  293. package/lib/esm/GeometrySummary.js +47 -47
  294. package/lib/esm/GeometrySummary.js.map +1 -1
  295. package/lib/esm/IModelDb.d.ts +31 -23
  296. package/lib/esm/IModelDb.d.ts.map +1 -1
  297. package/lib/esm/IModelDb.js +54 -35
  298. package/lib/esm/IModelDb.js.map +1 -1
  299. package/lib/esm/IModelDbFonts.js.map +1 -1
  300. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  301. package/lib/esm/IModelHost.js.map +1 -1
  302. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  303. package/lib/esm/IModelJsFs.js.map +1 -1
  304. package/lib/esm/ImageSourceConversion.js.map +1 -1
  305. package/lib/esm/IpcHost.d.ts.map +1 -1
  306. package/lib/esm/IpcHost.js +33 -13
  307. package/lib/esm/IpcHost.js.map +1 -1
  308. package/lib/esm/LineStyle.d.ts +6 -6
  309. package/lib/esm/LineStyle.js.map +1 -1
  310. package/lib/esm/LocalHub.js +1 -1
  311. package/lib/esm/LocalHub.js.map +1 -1
  312. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  313. package/lib/esm/LockControl.d.ts +85 -1
  314. package/lib/esm/LockControl.d.ts.map +1 -1
  315. package/lib/esm/LockControl.js.map +1 -1
  316. package/lib/esm/Material.d.ts +1 -1
  317. package/lib/esm/Material.js.map +1 -1
  318. package/lib/esm/Model.d.ts +40 -6
  319. package/lib/esm/Model.d.ts.map +1 -1
  320. package/lib/esm/Model.js +24 -0
  321. package/lib/esm/Model.js.map +1 -1
  322. package/lib/esm/NativeAppStorage.js.map +1 -1
  323. package/lib/esm/NativeHost.js.map +1 -1
  324. package/lib/esm/NavigationRelationship.js.map +1 -1
  325. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  326. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  327. package/lib/esm/PartialChangeUnifier.js +230 -0
  328. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  329. package/lib/esm/PromiseMemoizer.js.map +1 -1
  330. package/lib/esm/PropertyStore.js.map +1 -1
  331. package/lib/esm/Relationship.d.ts +10 -10
  332. package/lib/esm/Relationship.js +6 -6
  333. package/lib/esm/Relationship.js.map +1 -1
  334. package/lib/esm/RpcBackend.js.map +1 -1
  335. package/lib/esm/SQLiteDb.js.map +1 -1
  336. package/lib/esm/Schema.js.map +1 -1
  337. package/lib/esm/SchemaSync.js.map +1 -1
  338. package/lib/esm/SchemaUtils.js.map +1 -1
  339. package/lib/esm/SheetIndex.d.ts +4 -4
  340. package/lib/esm/SheetIndex.d.ts.map +1 -1
  341. package/lib/esm/SheetIndex.js.map +1 -1
  342. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  343. package/lib/esm/SqliteChangesetReader.js +1 -1
  344. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  345. package/lib/esm/SqliteStatement.js.map +1 -1
  346. package/lib/esm/StashManager.js.map +1 -1
  347. package/lib/esm/Texture.d.ts +1 -1
  348. package/lib/esm/Texture.js.map +1 -1
  349. package/lib/esm/TileStorage.js.map +1 -1
  350. package/lib/esm/TxnManager.d.ts +114 -4
  351. package/lib/esm/TxnManager.d.ts.map +1 -1
  352. package/lib/esm/TxnManager.js +196 -8
  353. package/lib/esm/TxnManager.js.map +1 -1
  354. package/lib/esm/ViewDefinition.d.ts +25 -13
  355. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  356. package/lib/esm/ViewDefinition.js +78 -26
  357. package/lib/esm/ViewDefinition.js.map +1 -1
  358. package/lib/esm/ViewStateHydrator.js.map +1 -1
  359. package/lib/esm/ViewStore.d.ts.map +1 -1
  360. package/lib/esm/ViewStore.js +64 -22
  361. package/lib/esm/ViewStore.js.map +1 -1
  362. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  363. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  364. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  365. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  366. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  367. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  368. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  369. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  370. package/lib/esm/core-backend.d.ts +3 -0
  371. package/lib/esm/core-backend.d.ts.map +1 -1
  372. package/lib/esm/core-backend.js +3 -0
  373. package/lib/esm/core-backend.js.map +1 -1
  374. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  375. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  376. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  377. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  378. package/lib/esm/domains/GenericElements.d.ts +2 -2
  379. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  380. package/lib/esm/domains/GenericElements.js.map +1 -1
  381. package/lib/esm/domains/GenericSchema.js.map +1 -1
  382. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  383. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  384. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  385. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  386. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  387. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  388. package/lib/esm/internal/HubMock.d.ts +2 -0
  389. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  390. package/lib/esm/internal/HubMock.js +7 -0
  391. package/lib/esm/internal/HubMock.js.map +1 -1
  392. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  393. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  394. package/lib/esm/internal/IntegrityCheck.js +22 -22
  395. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  396. package/lib/esm/internal/NativePlatform.js.map +1 -1
  397. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  398. package/lib/esm/internal/NoLocks.js +6 -0
  399. package/lib/esm/internal/NoLocks.js.map +1 -1
  400. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  401. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  402. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  403. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  404. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  405. package/lib/esm/internal/Symbols.js.map +1 -1
  406. package/lib/esm/internal/annotations/fields.js.map +1 -1
  407. package/lib/esm/internal/cross-package.js.map +1 -1
  408. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  409. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  410. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  411. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  412. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  413. package/lib/esm/rpc/multipart.js.map +1 -1
  414. package/lib/esm/rpc/tracing.js.map +1 -1
  415. package/lib/esm/rpc/web/logging.js.map +1 -1
  416. package/lib/esm/rpc/web/request.js.map +1 -1
  417. package/lib/esm/rpc/web/response.js.map +1 -1
  418. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  419. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  420. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  421. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  422. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  423. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  424. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  425. package/lib/esm/test/AttachDb.test.js +11 -11
  426. package/lib/esm/test/AttachDb.test.js.map +1 -1
  427. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  428. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  429. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  430. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  431. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  432. package/lib/esm/test/IModelHost.test.js.map +1 -1
  433. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  434. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  435. package/lib/esm/test/IModelTestUtils.js +5 -0
  436. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  437. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  438. package/lib/esm/test/IpcHost.test.js +112 -0
  439. package/lib/esm/test/IpcHost.test.js.map +1 -1
  440. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  441. package/lib/esm/test/PrintElementTree.js.map +1 -1
  442. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  443. package/lib/esm/test/RevisionUtility.js.map +1 -1
  444. package/lib/esm/test/SchemaUtils.test.js +25 -25
  445. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  446. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  447. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  448. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  449. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  450. package/lib/esm/test/TestEditTxn.js.map +1 -1
  451. package/lib/esm/test/TestUtils.js.map +1 -1
  452. package/lib/esm/test/annotations/Fields.test.js +53 -53
  453. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  454. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  455. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  456. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  457. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  458. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  459. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  460. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  461. package/lib/esm/test/categories/Category.test.js.map +1 -1
  462. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  463. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  464. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  465. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  466. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  467. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  468. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  469. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  470. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  471. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  472. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  473. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  474. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  475. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  476. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  477. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  478. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  479. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  480. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  481. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  482. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  483. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  484. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  485. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  486. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  487. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  488. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  489. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  490. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  491. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  492. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  493. package/lib/esm/test/element/ElementRoundTrip.test.js +283 -142
  494. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  495. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  496. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  497. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  498. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  499. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  500. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  501. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  502. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  503. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  504. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  505. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  506. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  507. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  508. package/lib/esm/test/hubaccess/Rebase.test.js +57 -57
  509. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  510. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  511. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  512. package/lib/esm/test/imageData.js.map +1 -1
  513. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  514. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  515. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  516. package/lib/esm/test/imodel/IModel.test.js +45 -45
  517. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  518. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  519. package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
  520. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  521. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  522. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  523. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  524. package/lib/esm/test/index.js.map +1 -1
  525. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  526. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  527. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  528. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  529. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  530. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  531. package/lib/esm/test/rpc/response.test.js.map +1 -1
  532. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  533. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  534. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  535. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  536. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  537. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  538. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  539. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  540. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  541. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  542. package/lib/esm/test/standalone/ChangesetReader.test.js +4201 -1671
  543. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  544. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  545. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  546. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  547. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  548. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  549. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  550. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  551. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  552. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  553. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  554. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  555. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  556. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  557. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  558. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  559. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  560. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  561. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  562. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  563. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  564. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  565. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  566. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  567. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  568. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  569. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  570. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  571. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  572. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  573. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  574. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  575. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  576. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  577. package/lib/esm/test/standalone/ServerBasedLocks.test.js +907 -3
  578. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  579. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  580. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  581. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  582. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  583. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  584. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  585. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  586. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  587. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  588. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  589. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  590. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  591. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  592. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  593. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  594. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  595. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  596. package/lib/esm/workspace/Settings.d.ts +6 -4
  597. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  598. package/lib/esm/workspace/Settings.js.map +1 -1
  599. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  600. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  601. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  602. package/lib/esm/workspace/Workspace.js.map +1 -1
  603. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  604. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.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 { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ColorDef, GeometryStreamProps, IModel, QueryBinder, QueryRowFormat, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"node:path\";\r\nimport { DrawingCategory } from \"../../Category\";\r\nimport { ChangedECInstance, ChangesetECAdaptor, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\r\nimport { _nativeDb, ChannelControl, GraphicalElement2d, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\r\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { EditTxn } from \"../../EditTxn\";\r\n\r\nfunction startTestTxn(iModel: BriefcaseDb | SnapshotDb, description = \"changeset reader\"): EditTxn {\r\n const txn = new EditTxn(iModel, description);\r\n txn.start();\r\n return txn;\r\n}\r\n\r\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\r\n if (txn.isActive)\r\n txn.saveChanges();\r\n await txn.iModel.importSchemaStrings(schemas);\r\n}\r\n\r\ndescribe(\"Changeset Reader API\", async () => {\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\r\n /**\r\n * 1. Import schema with class that span overflow table.\r\n * 2. Insert a element for the class.\r\n * 3. Push changes to hub.\r\n * 4. Update the element.\r\n * 5. Push changes to hub.\r\n * 6. Delete the element.\r\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\r\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const nProps = 36;\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"recover overflow table changeset reader\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n // Insert element with 100 properties\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const props = Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `test_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {});\r\n\r\n const geomElement = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...props,\r\n };\r\n\r\n // 2. Insert a element for the class.\r\n const id = txn.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n txn.saveChanges();\r\n\r\n // 3. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 4. Update the element.\r\n const updatedElementProps = Object.assign(\r\n rwIModel.elements.getElementProps(id),\r\n Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `updated_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {}));\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n txn.updateElement(updatedElementProps);\r\n txn.saveChanges();\r\n\r\n // 5. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n\r\n // 6. Delete the element.\r\n txn.deleteElement(id);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\r\n\r\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\r\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\r\n\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n let assertOnOverflowTable = false;\r\n const classId = getClassIdByName(rwIModel, \"GeometricElement2d\");\r\n\r\n while (adaptor.step()) {\r\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\r\n\r\n assert.isUndefined(adaptor.inserted.ECClassId);\r\n assert.equal(adaptor.inserted.ECInstanceId, \"\");\r\n assert.deepEqual(adaptor.inserted.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.inserted.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.inserted.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.inserted.$meta.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.inserted.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.inserted.$meta?.stage, \"New\");\r\n\r\n assert.equal(adaptor.deleted!.ECInstanceId, \"\");\r\n assert.isUndefined(adaptor.deleted!.ECClassId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.deleted!.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.deleted!.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.deleted!.$meta!.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.deleted!.$meta?.stage, \"Old\");\r\n\r\n assertOnOverflowTable = true;\r\n }\r\n }\r\n\r\n assert.isTrue(assertOnOverflowTable);\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n\r\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\r\n stmt.bindString(1, className);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n return stmt.getValue(0).getId();\r\n });\r\n }\r\n\r\n async function getClassNameById(iModel: BriefcaseDb, classId: string): Promise<string | undefined> {\r\n const reader = iModel.createQueryReader(`select ec_classname(${classId});`);\r\n\r\n if (await reader.step())\r\n return reader.current[0] as string;\r\n\r\n return undefined;\r\n }\r\n\r\n it(\"Changeset reader / EC adaptor\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"changeset reader EC adaptor\");\r\n\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n }\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges(\"user 1: create drawing partition\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n }\r\n\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const insertElements = (className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = txn.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n const generatedStr = new Array(10).join(\"x\");\r\n insertElements(\"Test2dElement\", 1, () => {\r\n return { s: generatedStr };\r\n });\r\n\r\n const updatedElements = async () => {\r\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\r\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\r\n (updatedElement as any).s = \"updated property\";\r\n txn.updateElement(updatedElement);\r\n txn.saveChanges(\"user 1: updated data\");\r\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\r\n };\r\n\r\n txn.saveChanges(\"user 1: data\");\r\n\r\n if (true || \"test local changes\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n\r\n await updatedElements();\r\n\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n if (true || \"updated element\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].ECClassId, classId);\r\n assert.equal(changes[2].s, \"updated property\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[3].ECClassId, classId);\r\n assert.equal(changes[3].s, \"xxxxxxxxx\");\r\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"updated element when no classId\") {\r\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[2].ECClassId);\r\n assert.isDefined(changes[2].$meta?.fallbackClassId);\r\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[2].s);\r\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[3].ECClassId);\r\n assert.isDefined(changes[3].$meta?.fallbackClassId);\r\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[3].s);\r\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"test changeset file\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 1);\r\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.adaptor()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 2);\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"revert timeline changes\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"revert timeline changes\");\r\n let nProps = 0;\r\n // 1. Import schema with class that span overflow table.\r\n const addPropertyAndImportSchema = async () => {\r\n await rwIModel.acquireSchemaLock();\r\n ++nProps;\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n };\r\n await addPropertyAndImportSchema();\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const createEl = async (args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...args,\r\n };\r\n return txn.insertElement(e1);;\r\n };\r\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\r\n txn.updateElement(updatedElementProps);\r\n };\r\n\r\n const deleteEl = async (id: Id64String) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n txn.deleteElement(id);\r\n };\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\r\n };\r\n\r\n const findEl = (id: Id64String) => {\r\n try {\r\n return rwIModel.elements.getElementProps(id);\r\n } catch {\r\n return undefined;\r\n }\r\n };\r\n // 2. Insert a element for the class\r\n const el1 = await createEl({ p1: \"test1\" });\r\n const el2 = await createEl({ p1: \"test2\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\r\n\r\n // 3. Update the element.\r\n await updateEl(el1, { p1: \"test3\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element 1\" });\r\n\r\n // 4. Delete the element.\r\n await deleteEl(el2);\r\n const el3 = await createEl({ p1: \"test4\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element 2\" });\r\n\r\n // 5. import schema and insert element 4 & update element 3\r\n await addPropertyAndImportSchema();\r\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\r\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\r\n\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n // 6. Revert to timeline 2\r\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\r\n\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n\r\n await addPropertyAndImportSchema();\r\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\r\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n // skip schema changes & auto generated comment\r\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n assert.isUndefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n assert.isDefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"openGroup() & writeToFile()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"openGroup writeToFile\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = txn.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 3. Update the element.\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n txn.updateElement(updatedElementProps);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n // 4. Delete the element.\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n txn.deleteElement(e1id);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\r\n\r\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n\r\n expect(instances.length).to.eq(1);\r\n expect(instances[0].id).to.eq(\"0x20000000001\");\r\n expect(instances[0].classId).to.eq(drawingModelClassId);\r\n expect(instances[0].op).to.eq(\"Updated\");\r\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\r\n }\r\n\r\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n\r\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\r\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n\r\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\r\n }\r\n if (true || \"writeToFile() test\") {\r\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n\r\n it(\"Delete class FK constraint violation in cache table\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\r\n\r\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK constraint setup\");\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n\r\n // Sync the second briefcase with the iModel\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n </ECSchema>`]);\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, true);\r\n\r\n // Apply the latest changeset to a new briefcase\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n firstTxn.end();\r\n secondBriefCase.close();\r\n firstBriefCase.close();\r\n });\r\n\r\n\r\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK revert\");\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"AnotherTestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Revert the latest changeset from the first briefcase\r\n try {\r\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\r\n\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n firstTxn.end();\r\n secondBriefCase.close();\r\n firstBriefCase.close();\r\n });\r\n\r\n it(\"Track changeset health stats\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefcase, secondBriefcase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefcase, \"track changeset health first briefcase\");\r\n const secondTxn = startTestTxn(secondBriefcase, \"track changeset health second briefcase\");\r\n\r\n [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Enable changeset tracking for both briefcases\r\n await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Schema upgrade\r\n await importSchemaStrings(secondTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"TestProperty\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n\r\n await secondBriefcase.pushChanges({ description: \"Added a property to TestClass and an enum\", accessToken: adminToken });\r\n await firstBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Major schema change\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"Deleted TestClass\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();\r\n const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();\r\n\r\n assert.equal(firstBriefcaseChangesets.length, 1);\r\n const firstBriefcaseChangeset = firstBriefcaseChangesets[0];\r\n\r\n expect(firstBriefcaseChangeset.changesetIndex).to.be.eql(2);\r\n expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);\r\n expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);\r\n expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);\r\n expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);\r\n\r\n assert.equal(secondBriefcaseChangesets.length, 2);\r\n const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;\r\n\r\n expect(secondBriefcaseChangeset1.changesetIndex).to.be.eql(1);\r\n expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset1.insertedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset1.deletedRows).to.be.greaterThanOrEqual(0)\r\n expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);\r\n\r\n expect(secondBriefcaseChangeset2.changesetIndex).to.be.eql(3);\r\n expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset2.insertedRows).to.be.greaterThanOrEqual(0);\r\n expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset2.deletedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);\r\n\r\n // Cleanup\r\n secondTxn.end();\r\n firstTxn.end();\r\n secondBriefcase.close();\r\n firstBriefcase.close();\r\n });\r\n it(\"openInMemory() & step()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"openInMemory step\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = txn.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n const testElClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n if (true) {\r\n const reader = SqliteChangesetReader.openInMemory({ db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(1);\r\n const testEl = instances[0];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n\r\n // save changes and verify the the txn\r\n txn.saveChanges();\r\n\r\n if (true) {\r\n const txnId = rwIModel.txns.getLastSavedTxnProps()?.id as string;\r\n expect(txnId).to.not.be.undefined;\r\n const reader = SqliteChangesetReader.openTxn({ db: rwIModel, disableSchemaCheck: true, txnId });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(3);\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n // DrawingModel new instance\r\n const drawingModelElNew = instances[0];\r\n expect(drawingModelElNew.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElNew.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElNew.$meta?.stage).to.equals(\"New\");\r\n expect(drawingModelElNew.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElNew.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElNew.LastMod).to.exist;\r\n expect(drawingModelElNew.GeometryGuid).to.exist;\r\n\r\n // DrawingModel old instance\r\n const drawingModelElOld = instances[1];\r\n expect(drawingModelElOld.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElOld.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElOld.$meta?.stage).to.equals(\"Old\");\r\n expect(drawingModelElOld.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElOld.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElOld.LastMod).to.null;\r\n expect(drawingModelElOld.GeometryGuid).to.null;\r\n\r\n // Test element instance\r\n const testEl = instances[2];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"Instance update to a different class (bug)\", async () => {\r\n /**\r\n * Test scenario: Verifies changeset reader behavior when an instance ID is reused with a different class.\r\n *\r\n * Steps:\r\n * 1. Import schema with two classes (T1 and T2) that inherit from GraphicalElement2d.\r\n * - T1 has property 'p' of type string\r\n * - T2 has property 'p' of type long\r\n * 2. Insert an element of type T1 with id=elId and property p=\"wwww\"\r\n * 3. Push changeset #1: \"insert element\"\r\n * 4. Delete the T1 element\r\n * 5. Manipulate the element ID sequence to force reuse of the same ID\r\n * 6. Insert a new element of type T2 with the same id=elId but property p=1111\r\n * 7. Push changeset #2: \"buggy changeset\"\r\n *\r\n * Verification:\r\n * - Changeset #2 should show an \"Updated\" operation (not Delete+Insert)\r\n * - In bis_Element table: ECClassId changes from T1 to T2\r\n * - In bis_GeometricElement2d table: ECClassId changes from T1 to T2\r\n * - Property 'p' changes from string \"wwww\" to integer 1111\r\n *\r\n * This tests the changeset reader's ability to handle instance class changes,\r\n * which can occur in edge cases where IDs are reused with different types.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const modelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(modelId);\r\n let b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: modelId, accessToken: adminToken });\r\n let txn = startTestTxn(b1, \"instance update to different class\");\r\n // 1. Import schema with classes that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"T1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"T2\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"long\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await importSchemaStrings(txn, [schema]);\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const geomElementT1 = {\r\n classFullName: `TestDomain:T1`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: \"wwww\",\r\n };\r\n\r\n const elId = txn.insertElement(geomElementT1);\r\n assert.isTrue(Id64.isValidId64(elId), \"insert worked\");\r\n txn.saveChanges();\r\n await b1.pushChanges({ description: \"insert element\" });\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId, exclusive: elId });\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n txn.deleteElement(elId);\r\n txn.saveChanges();\r\n\r\n // Force id set to reproduce same instance with different classid\r\n const bid = BigInt(elId) - 1n\r\n b1[_nativeDb].saveLocalValue(\"bis_elementidsequence\", bid.toString());\r\n txn.saveChanges();\r\n const fileName = b1[_nativeDb].getFilePath();\r\n txn.end();\r\n b1.close();\r\n\r\n b1 = await BriefcaseDb.open({ fileName });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n txn = startTestTxn(b1, \"instance update to different class reopened briefcase\");\r\n\r\n\r\n const geomElementT2 = {\r\n classFullName: `TestDomain:T2`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: 1111,\r\n };\r\n\r\n const elId2 = txn.insertElement(geomElementT2);\r\n chai.expect(elId).equals(elId2);\r\n\r\n txn.saveChanges();\r\n await b1.pushChanges({ description: \"buggy changeset\" });\r\n\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: modelId, targetDir: path.join(KnownTestLocations.outputDir, modelId, \"changesets\") });\r\n };\r\n\r\n\r\n const changesets = await getChanges();\r\n chai.expect(changesets.length).equals(2);\r\n chai.expect(changesets[0].description).equals(\"insert element\");\r\n chai.expect(changesets[1].description).equals(\"buggy changeset\");\r\n\r\n const getClassId = async (name: string) => {\r\n const r = b1.createQueryReader(\"SELECT FORMAT('0x%x', ec_classid(?))\", QueryBinder.from([name]));\r\n if (await r.step()) {\r\n return r.current[0];\r\n }\r\n }\r\n\r\n const t1ClassId = await getClassId(\"TestDomain:T1\");\r\n const t2ClassId = await getClassId(\"TestDomain:T2\");\r\n\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 });\r\n let bisElementAsserted = false;\r\n let bisGeometricElement2dAsserted = false;\r\n while (reader.step()) {\r\n if (reader.tableName === \"bis_Element\" && reader.op === \"Updated\") {\r\n bisElementAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"Id\",\r\n \"ECClassId\",\r\n \"ModelId\",\r\n \"LastMod\",\r\n \"CodeSpecId\",\r\n \"CodeScopeId\",\r\n \"CodeValue\",\r\n \"UserLabel\",\r\n \"ParentId\",\r\n \"ParentRelECClassId\",\r\n \"FederationGuid\",\r\n \"JsonProperties\",\r\n ]);\r\n\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n }\r\n if (reader.tableName === \"bis_GeometricElement2d\" && reader.op === \"Updated\") {\r\n bisGeometricElement2dAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"ElementId\",\r\n \"ECClassId\",\r\n \"CategoryId\",\r\n \"Origin_X\",\r\n \"Origin_Y\",\r\n \"Rotation\",\r\n \"BBoxLow_X\",\r\n \"BBoxLow_Y\",\r\n \"BBoxHigh_X\",\r\n \"BBoxHigh_Y\",\r\n \"GeometryStream\",\r\n \"TypeDefinitionId\",\r\n \"TypeDefinitionRelECClassId\",\r\n \"js1\",\r\n \"js2\",\r\n ]);\r\n\r\n // ECInstanceId\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n // ECClassId (changed)\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n\r\n // Property 'p' changed type and value.\r\n const oldP = reader.getChangeValueText(13, \"Old\");\r\n const newP = reader.getChangeValueInteger(13, \"New\");\r\n chai.expect(oldP).equals(\"wwww\");\r\n chai.expect(newP).equals(1111);\r\n }\r\n }\r\n\r\n chai.expect(bisElementAsserted).to.be.true;\r\n chai.expect(bisGeometricElement2dAsserted).to.be.true;\r\n reader.close();\r\n\r\n\r\n // ChangesetECAdaptor works incorrectly as it does not expect ECClassId to change in an update.\r\n const adaptor = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n\r\n adaptor.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor.acceptOp(\"Updated\");\r\n\r\n let ecChangeForElementAsserted = false;\r\n let ecChangeForGeometricElement2dAsserted = false;\r\n while (adaptor.step()) {\r\n if (adaptor.reader.tableName === \"bis_Element\") {\r\n ecChangeForElementAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n }\r\n if (adaptor.reader.tableName === \"bis_GeometricElement2d\") {\r\n ecChangeForGeometricElement2dAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.inserted?.p).equals(\"0x457\"); // CORRECT p in T2 is integer\r\n chai.expect(adaptor.deleted?.p).equals(\"wwww\"); // CORRECT p in T1 is string\r\n }\r\n }\r\n chai.expect(ecChangeForElementAsserted).to.be.true;\r\n chai.expect(ecChangeForGeometricElement2dAsserted).to.be.true;\r\n adaptor.close();\r\n\r\n // PartialECChangeUnifier fail to combine changes correctly when ECClassId is updated.\r\n const adaptor2 = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n const unifier = new PartialECChangeUnifier(b1);\r\n adaptor2.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor2.acceptOp(\"Updated\");\r\n while (adaptor2.step()) {\r\n unifier.appendFrom(adaptor2);\r\n }\r\n\r\n chai.expect(unifier.getInstanceCount()).to.be.equals(2); // WRONG should be 1\r\n\r\n txn.end();\r\n b1.close();\r\n });\r\n\r\n});\r\n\r\ndescribe(\"PRAGMA ECSQL Functions\", async () => {\r\n let iTwinId: GuidString;\r\n let iModel: BriefcaseDb;\r\n\r\n before(() => {\r\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n\r\n after(() => HubMock.shutdown());\r\n\r\n beforeEach(async () => {\r\n // Create new iModel\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"PRAGMA_test\";\r\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(iModelId);\r\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\r\n });\r\n\r\n afterEach(() => {\r\n // Cleanup\r\n iModel.close();\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check on a new iModel and return no errors\", async () => {\r\n // Call PRAGMA integrity_check\r\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\r\n const result = iModel.createQueryReader(query, undefined, undefined);\r\n const results = await result.toArray();\r\n\r\n // Verify no errors\r\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\r\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\r\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\r\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\r\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\r\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\r\n assert(results[5][2] === true, \"'check_linktable_fk_ids' check should be true\")\r\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\r\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\r\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check individual checks on a new iModel and return no errors\", async () => {\r\n // Call check_ec_profile\r\n let query = \"pragma integrity_check(check_ec_profile) options enable_experimental_features\";\r\n let result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n let resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_data_schema\r\n query = \"pragma integrity_check(check_data_schema) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_data_columns\r\n query = \"pragma integrity_check(check_data_columns) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_nav_class_ids\r\n query = \"pragma integrity_check(check_nav_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_nav_ids\r\n query = \"pragma integrity_check(check_nav_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_linktable_fk_class_ids\r\n query = \"pragma integrity_check(check_linktable_fk_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_linktable_fk_ids\r\n query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_class_ids\r\n query = \"pragma integrity_check(check_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_schema_load\r\n query = \"pragma integrity_check(check_schema_load) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check on a corrupted iModel and return an error\", async () => {\r\n // Insert two elements\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted iModel\");\r\n\r\n const element1Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\r\n });\r\n\r\n const element2Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\r\n });\r\n txn.saveChanges();\r\n\r\n // Create a relationship between them\r\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\r\n const relationship = iModel.relationships.createInstance({\r\n classFullName: \"BisCore:SubjectRefersToSubject\",\r\n sourceId: element1Id,\r\n targetId: element2Id,\r\n });\r\n const relationshipId = txn.insertRelationship(relationship.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId));\r\n txn.saveChanges();\r\n\r\n // Delete one element without deleting the relationship to corrupt the iModel\r\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\r\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\r\n txn.saveChanges();\r\n\r\n // Call PRAGMA integrity_check\r\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\r\n const result = iModel.createQueryReader(query, undefined, undefined);\r\n const results = await result.toArray();\r\n\r\n // Verify error is reported\r\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\r\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\r\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\r\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\r\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\r\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\r\n assert(results[5][2] === false, \"'check_linktable_fk_ids' check should be false\") // Expecting error report here\r\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\r\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\r\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\r\n txn.end();\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check(check_linktable_fk_class_ids) on a corrupted iModel and return an error\", async () => {\r\n // Insert two elements\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted linktable fk ids\");\r\n\r\n const element1Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\r\n });\r\n\r\n const element2Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\r\n });\r\n txn.saveChanges();\r\n\r\n // Create a relationship between them\r\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\r\n const relationship = iModel.relationships.createInstance({\r\n classFullName: \"BisCore:SubjectRefersToSubject\",\r\n sourceId: element1Id,\r\n targetId: element2Id,\r\n });\r\n const relationshipId = txn.insertRelationship(relationship.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId));\r\n txn.saveChanges();\r\n\r\n // Delete one element without deleting the relationship to corrupt the iModel\r\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\r\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\r\n txn.saveChanges();\r\n\r\n // Call PRAGMA integrity_check\r\n const query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\r\n const result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(1); // 1 error report expected\r\n expect(resultArray[0].id).to.equal(\"0x20000000001\");\r\n expect(resultArray[0].key_id).to.equal(\"0x20000000002\");\r\n txn.end();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.test.ts"],"names":[],"mappings":"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,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAChD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;YAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG;YAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE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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 { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, GeometryStreamProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\nimport { assert, expect } from \"chai\";\nimport { DrawingCategory } from \"../../Category\";\nimport { _nativeDb, BriefcaseDb, ChannelControl } from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { ChangesetReader } from \"../../ChangesetReader\";\nimport * as path from \"node:path\";\nimport * as fs from \"fs\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ChangeUnifierCache, PartialChangeUnifier } from \"../../PartialChangeUnifier\";\nimport { ChangeInstance, PropertyFilter, RowFormatOptions } from \"../../ChangesetReaderTypes\";\nimport { EditTxn } from \"../../EditTxn\";\n\n/* eslint-disable @typescript-eslint/naming-convention */ // disabling it because the property names are not in camelcase, and we want to test them as-is\n\n/** Open a txn, drive the unifier, log and return all merged instances. */\nfunction readTxn(\n db: BriefcaseDb,\n txnId: string,\n propFilter?: PropertyFilter,\n rowOptions?: RowFormatOptions,\n invert?: boolean,\n useInMemoryUnifierCache?: boolean,\n): ChangeInstance[] {\n using reader = ChangesetReader.openTxn({ db, txnId, propFilter, rowOptions, invert });\n const inMemCache = useInMemoryUnifierCache ?? true;\n using pcu = new PartialChangeUnifier(inMemCache ? ChangeUnifierCache.createInMemoryCache() : ChangeUnifierCache.createSqliteBackedCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n return instances;\n}\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"changeset reader\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\ndescribe(\"ChangesetReader insert-full\", () => {\n let rwIModel: BriefcaseDb;\n let fullElementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txnId: string;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetInsertFull\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"insertFull\", description: \"insertFull\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader insert-full setup\");\n // Txn 1: import schema + drawing model setup, then push\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <!-- Rich struct: scalar fields + nested point2d/3d sub-properties -->\n <ECStructClass typeName=\"RichPoint\" modifier=\"Sealed\">\n <ECProperty propertyName=\"X\" typeName=\"double\"/>\n <ECProperty propertyName=\"Y\" typeName=\"double\"/>\n <ECProperty propertyName=\"Z\" typeName=\"double\"/>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"Pt2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <!-- Relationship used by the RelatedElem navigation property -->\n <ECRelationshipClass typeName=\"Test2dUsesElement\" strength=\"referencing\" modifier=\"None\">\n <Source multiplicity=\"(0..*)\" roleLabel=\"uses\" polymorphic=\"true\"><Class class=\"Test2dElement\"/></Source>\n <Target multiplicity=\"(0..1)\" roleLabel=\"is used by\" polymorphic=\"true\"><Class class=\"bis:Element\"/></Target>\n </ECRelationshipClass>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Primitives -->\n <ECProperty propertyName=\"StrProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"IntProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"LongProp\" typeName=\"long\"/>\n <ECProperty propertyName=\"DblProp\" typeName=\"double\"/>\n <ECProperty propertyName=\"BoolProp\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"DtProp\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Geometric primitives -->\n <ECProperty propertyName=\"Pt2dProp\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Struct, arrays -->\n <ECStructProperty propertyName=\"StructProp\" typeName=\"RichPoint\"/>\n <ECArrayProperty propertyName=\"IntArrProp\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"StrArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"StructArrProp\" typeName=\"RichPoint\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!-- Navigation property -->\n <ECNavigationProperty propertyName=\"RelatedElem\" relationshipName=\"Test2dUsesElement\" direction=\"forward\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrillDownDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"DrillDownCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"DrillDownCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 2: insert FULL element every EC primitive type populated\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n\n fullElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n StrProp: \"hello\",\n IntProp: 42,\n LongProp: 9_007_199_254_740_991, // Number.MAX_SAFE_INTEGER\n DblProp: 3.14159265358979,\n BoolProp: true,\n DtProp: \"2024-01-15T12:00:00.000\",\n BinProp: new Uint8Array([1, 2, 3, 4]),\n Pt2dProp: { x: 1.5, y: 2.5 },\n Pt3dProp: { x: 3.0, y: 4.0, z: 5.0 },\n StructProp: {\n X: 1.0, Y: 2.0, Z: 3.0, Label: \"origin\",\n Pt2d: { x: 0.5, y: 0.5 },\n Pt3d: { x: 1.0, y: 2.0, z: 3.0 },\n },\n IntArrProp: [10, 20, 30],\n StrArrProp: [\"alpha\", \"beta\", \"gamma\"],\n StructArrProp: [\n { X: 0.0, Y: 1.0, Z: 2.0, Label: \"a\", Pt2d: { x: 0.0, y: 0.0 }, Pt3d: { x: 0.0, y: 0.0, z: 0.0 } },\n { X: 3.0, Y: 4.0, Z: 5.0, Label: \"b\", Pt2d: { x: 1.0, y: 1.0 }, Pt3d: { x: 1.0, y: 1.0, z: 1.0 } },\n ],\n RelatedElem: { id: drawingCategoryId, relClassName: \"TestDomain:Test2dUsesElement\" },\n } as any);\n txn.saveChanges(\"insert full element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn1 insert-full | All_Properties | default rowOptions\", () => {\n const instances = readTxn(rwIModel, txnId);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.deepEqual([...modelNew!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.deepEqual([...modelNew!.$meta.changeIndexes].sort(), [3].sort());\n assert.isString(modelNew!.$meta.instanceKey);\n assert.equal(modelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n // Object.keys\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.deepEqual([...modelOld!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n assert.include(String(elem!.GeometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.deepEqual(elem!.StructArrProp, [\n { X: 0, Y: 1, Z: 2, Label: \"a\", Pt2d: { X: 0, Y: 0 }, Pt3d: { X: 0, Y: 0, Z: 0 } },\n { X: 3, Y: 4, Z: 5, Label: \"b\", Pt2d: { X: 1, Y: 1 }, Pt3d: { X: 1, Y: 1, Z: 1 } },\n ]);\n assert.equal(elem!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n // Object.keys\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n // $meta keys\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'BBoxHigh', 'BBoxLow', 'BinProp', 'BoolProp', 'Category.Id', 'CodeScope.Id',\n 'CodeSpec.Id', 'CodeValue', 'DblProp', 'DtProp', 'ECClassId', 'ECInstanceId',\n 'FederationGuid', 'GeometryStream', 'IntArrProp', 'IntProp', 'JsonProperties',\n 'LastMod', 'LongProp', 'Model.Id', 'Origin', 'Parent', 'Pt2dProp', 'Pt3dProp',\n 'RelatedElem', 'Rotation', 'StrArrProp', 'StrProp', 'StructArrProp', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'StructProp.X', 'StructProp.Y', 'StructProp.Z',\n 'TypeDefinition', 'UserLabel'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 insert-full | All_Properties | default rowOptions | invert\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, undefined, true);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isUndefined(modelNew!.LastMod);\n assert.isUndefined(modelNew!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.deepEqual([...modelNew!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.deepEqual([...modelNew!.$meta.changeIndexes].sort(), [3].sort());\n assert.isString(modelNew!.$meta.instanceKey);\n assert.equal(modelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.isString(modelOld!.LastMod);\n assert.isString(modelOld!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"LastMod\", \"GeometryGuid\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.deepEqual([...modelOld!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n assert.include(String(elem!.GeometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.deepEqual(elem!.StructArrProp, [\n { X: 0, Y: 1, Z: 2, Label: \"a\", Pt2d: { X: 0, Y: 0 }, Pt3d: { X: 0, Y: 0, Z: 0 } },\n { X: 3, Y: 4, Z: 5, Label: \"b\", Pt2d: { X: 1, Y: 1 }, Pt3d: { X: 1, Y: 1, Z: 1 } },\n ]);\n assert.equal(elem!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n // Object.keys\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n // $meta keys\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'BBoxHigh', 'BBoxLow', 'BinProp', 'BoolProp', 'Category.Id', 'CodeScope.Id',\n 'CodeSpec.Id', 'CodeValue', 'DblProp', 'DtProp', 'ECClassId', 'ECInstanceId',\n 'FederationGuid', 'GeometryStream', 'IntArrProp', 'IntProp', 'JsonProperties',\n 'LastMod', 'LongProp', 'Model.Id', 'Origin', 'Parent', 'Pt2dProp', 'Pt3dProp',\n 'RelatedElem', 'Rotation', 'StrArrProp', 'StrProp', 'StructArrProp', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'StructProp.X', 'StructProp.Y', 'StructProp.Z',\n 'TypeDefinition', 'UserLabel'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 insert-full | Bis_Element_Properties\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.BisCoreElement, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New (Bis_Element_Properties: no custom props) ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(elem!.ECClassId, \"TestDomain.Test2dElement\");\n // No custom domain props\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.IntProp);\n assert.isUndefined(elem!.LongProp);\n assert.isUndefined(elem!.DblProp);\n assert.isUndefined(elem!.BoolProp);\n assert.isUndefined(elem!.DtProp);\n assert.isUndefined(elem!.Pt2dProp);\n assert.isUndefined(elem!.Pt3dProp);\n assert.isUndefined(elem!.StructProp);\n assert.isUndefined(elem!.IntArrProp);\n assert.isUndefined(elem!.StrArrProp);\n assert.isUndefined(elem!.StructArrProp);\n assert.isUndefined(elem!.RelatedElem);\n expect(elem!.Model).to.exist;\n expect(elem!.CodeScope).to.exist;\n expect(elem!.CodeSpec).to.exist;\n expect(elem!.FederationGuid).to.exist;\n expect(elem!.LastMod).to.exist;\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"CodeScope\", \"CodeSpec\", \"FederationGuid\", \"LastMod\", \"Model\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"ECClassId\", \"CodeScope.Id\", \"CodeSpec.Id\",\n \"CodeValue\", \"FederationGuid\", \"JsonProperties\", \"LastMod\", \"Model.Id\", \"Parent\", \"UserLabel\"].sort());\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 insert-full | Instance_Key\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.InstanceKey);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.deepEqual([...modelNew!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.deepEqual([...modelNew!.$meta.changeIndexes].sort(), [3].sort());\n assert.isString(modelNew!.$meta.instanceKey);\n assert.equal(modelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New (only ECInstanceId + ECClassId) ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.Model);\n assert.isUndefined(elem!.Category);\n assert.isUndefined(elem!.LastMod);\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"ECClassId\"].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 | rowOptions: classIdsToClassNames\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New (ECClassId is now class name) ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n\n // --- instances[2]: Test2dElement Inserted New (ECClassId + all RelECClassId = class names) ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain.Test2dElement\", elem!.ECClassId);\n assert.deepEqual(elem!.Model, { Id: drawingModelId, RelECClassId: \"BisCore.ModelContainsElements\" });\n assert.isString(elem!.LastMod);\n assert.deepEqual(elem!.CodeSpec, { Id: \"0x1\", RelECClassId: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.CodeScope, { Id: \"0x1\", RelECClassId: \"BisCore.ElementScopesCode\" });\n assert.isString(elem!.FederationGuid);\n assert.deepEqual(elem!.Category, { Id: drawingCategoryId, RelECClassId: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n assert.include(String(elem!.GeometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.equal(elem!.StructArrProp.length, 2);\n assert.deepEqual(elem!.RelatedElem, { Id: drawingCategoryId, RelECClassId: \"TestDomain.Test2dUsesElement\" });\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(),\n [\"ECInstanceId\", \"ECClassId\", \"Model.Id\", \"LastMod\", \"CodeSpec.Id\", \"CodeScope.Id\",\n \"CodeValue\", \"UserLabel\", \"Parent\", \"FederationGuid\", \"JsonProperties\", \"Category.Id\",\n \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\", \"TypeDefinition\", \"StrProp\",\n \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\", \"BinProp\", \"Pt2dProp\", \"Pt3dProp\",\n \"StructProp.X\", \"StructProp.Y\", \"StructProp.Z\", \"StructProp.Label\", \"StructProp.Pt2d\",\n \"StructProp.Pt3d\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\"].sort());\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 | rowOptions: useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { useJsName: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New (all keys camelCase) ---\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.id, drawingModelId);\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.lastMod);\n assert.isString(modelNew!.geometryGuid);\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.isUndefined(modelNew!.ECClassId);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"id\", \"className\", \"lastMod\", \"geometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { useJsName: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.id, drawingModelId);\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelOld!.ECInstanceId);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"id\", \"className\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { useJsName: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New (camelCase keys + class names for nav) ---\n const elem = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.id, fullElementId);\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.isUndefined(elem!.ECClassId);\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.isString(elem!.lastMod);\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.isString(elem!.federationGuid);\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.deepEqual(elem!.origin, { x: 0, y: 0 });\n assert.equal(elem!.rotation, 0);\n assert.deepEqual(elem!.bBoxLow, { x: -25, y: -25 });\n assert.deepEqual(elem!.bBoxHigh, { x: 15, y: 15 });\n assert.include(String(elem!.geometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.binProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.strProp, \"hello\");\n assert.equal(elem!.intProp, 42);\n assert.equal(elem!.longProp, 9007199254740991);\n assert.closeTo(elem!.dblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.boolProp, true);\n assert.equal(elem!.dtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.pt2dProp, { x: 1.5, y: 2.5 });\n assert.deepEqual(elem!.pt3dProp, { x: 3, y: 4, z: 5 });\n assert.deepEqual(elem!.structProp, { x: 1, y: 2, z: 3, label: \"origin\", pt2d: { x: 0.5, y: 0.5 }, pt3d: { x: 1, y: 2, z: 3 } });\n assert.deepEqual(elem!.intArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.strArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.equal(elem!.structArrProp.length, 2);\n assert.deepEqual(elem!.structArrProp[0], { x: 0, y: 1, z: 2, label: \"a\", pt2d: { x: 0, y: 0 }, pt3d: { x: 0, y: 0, z: 0 } });\n assert.deepEqual(elem!.relatedElem, { id: drawingCategoryId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\",\n \"category\", \"origin\", \"rotation\", \"bBoxLow\", \"bBoxHigh\", \"geometryStream\",\n \"strProp\", \"intProp\", \"longProp\", \"dblProp\", \"boolProp\", \"dtProp\",\n \"pt2dProp\", \"pt3dProp\", \"structProp\", \"intArrProp\", \"strArrProp\", \"structArrProp\", \"relatedElem\", \"binProp\"\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'BBoxHigh', 'BBoxLow', 'BinProp', 'BoolProp', 'Category.Id', 'CodeScope.Id',\n 'CodeSpec.Id', 'CodeValue', 'DblProp', 'DtProp', 'ECClassId',\n 'ECInstanceId', 'FederationGuid', 'GeometryStream', 'IntArrProp', 'IntProp',\n 'JsonProperties', 'LastMod', 'LongProp', 'Model.Id', 'Origin', 'Parent', 'Pt2dProp',\n 'Pt3dProp', 'RelatedElem', 'Rotation', 'StrArrProp', 'StrProp', 'StructArrProp', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'StructProp.X', 'StructProp.Y',\n 'StructProp.Z', 'TypeDefinition', 'UserLabel'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, { useJsName: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 | rowOptions: abbreviateBlobs\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { abbreviateBlobs: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId)); // still raw hex\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { abbreviateBlobs: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { abbreviateBlobs: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId)); // still raw hex (no classIdsToClassNames)\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n // GeometryStream is a blob — abbreviated to {\"bytes\": N}\n assert.include(String(elem!.GeometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.equal(elem!.StructArrProp.length, 2);\n assert.equal(elem!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { abbreviateBlobs: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 | rowOptions: abbreviateBlobs: false\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { abbreviateBlobs: false }, undefined, false);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId)); // still raw hex\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId)); // still raw hex (no classIdsToClassNames)\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n // GeometryStream is a blob — abbreviated to {\"bytes\": N}\n assert.deepEqual(elem!.GeometryStream, new Uint8Array([\n 1, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n 7, 0, 0, 0, 112, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0,\n 16, 0, 88, 0, 8, 0, 32, 0, 56, 0, 0, 0, 80, 0, 7, 0,\n 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0,\n 24, 45, 68, 84, 251, 33, 25, 64, 7, 0, 0, 0, 112, 0, 0, 0,\n 24, 0, 0, 0, 0, 0, 0, 0, 16, 0, 88, 0, 8, 0, 32, 0,\n 56, 0, 0, 0, 80, 0, 7, 0, 16, 0, 0, 0, 0, 0, 0, 1,\n 0, 0, 0, 0, 0, 0, 20, 64, 0, 0, 0, 0, 0, 0, 20, 64,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,\n 0, 0, 0, 0, 0, 0, 0, 0, 24, 45, 68, 84, 251, 33, 25, 64,\n 7, 0, 0, 0, 112, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0,\n 16, 0, 88, 0, 8, 0, 32, 0, 56, 0, 0, 0, 80, 0, 7, 0,\n 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 20, 192,\n 0, 0, 0, 0, 0, 0, 20, 192, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 52, 64, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 52, 64, 0, 0, 0, 0, 0, 0, 0, 0,\n 24, 45, 68, 84, 251, 33, 25, 64\n ]));\n assert.deepEqual(elem!.BinProp, new Uint8Array([1, 2, 3, 4]));\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.equal(elem!.StructArrProp.length, 2);\n assert.equal(elem!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 | rowOptions: classIdsToClassNames + useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true, useJsName: true }, undefined, false);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.id, drawingModelId);\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.lastMod);\n assert.isString(modelNew!.geometryGuid);\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"id\", \"className\", \"lastMod\", \"geometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.id, drawingModelId);\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelOld!.ECInstanceId);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"id\", \"className\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Inserted New (camelCase + class names) ---\n const elem = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.id, fullElementId);\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.isUndefined(elem!.ECClassId);\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.isString(elem!.lastMod);\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.isString(elem!.federationGuid);\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.deepEqual(elem!.origin, { x: 0, y: 0 });\n assert.equal(elem!.rotation, 0);\n assert.deepEqual(elem!.bBoxLow, { x: -25, y: -25 });\n assert.deepEqual(elem!.bBoxHigh, { x: 15, y: 15 });\n assert.include(String(elem!.geometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.binProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.strProp, \"hello\");\n assert.equal(elem!.intProp, 42);\n assert.equal(elem!.longProp, 9007199254740991);\n assert.closeTo(elem!.dblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.boolProp, true);\n assert.equal(elem!.dtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.pt2dProp, { x: 1.5, y: 2.5 });\n assert.deepEqual(elem!.pt3dProp, { x: 3, y: 4, z: 5 });\n assert.deepEqual(elem!.structProp, { x: 1, y: 2, z: 3, label: \"origin\", pt2d: { x: 0.5, y: 0.5 }, pt3d: { x: 1, y: 2, z: 3 } });\n assert.deepEqual(elem!.intArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.strArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.equal(elem!.structArrProp.length, 2);\n assert.deepEqual(elem!.relatedElem, { id: drawingCategoryId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\",\n \"category\", \"origin\", \"rotation\", \"bBoxLow\", \"bBoxHigh\", \"geometryStream\",\n \"strProp\", \"intProp\", \"longProp\", \"dblProp\", \"boolProp\", \"dtProp\",\n \"pt2dProp\", \"pt3dProp\", \"structProp\", \"intArrProp\", \"strArrProp\", \"structArrProp\", \"relatedElem\", \"binProp\"\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'BBoxHigh', 'BBoxLow', 'BinProp', 'BoolProp', 'Category.Id',\n 'CodeScope.Id', 'CodeSpec.Id',\n 'CodeValue', 'DblProp', 'DtProp',\n 'ECClassId', 'ECInstanceId', 'FederationGuid',\n 'GeometryStream', 'IntArrProp', 'IntProp',\n 'JsonProperties', 'LastMod', 'LongProp',\n 'Model.Id', 'Origin', 'Parent', 'Pt2dProp', 'Pt3dProp', 'RelatedElem', 'Rotation', 'StrArrProp',\n 'StrProp', 'StructArrProp', 'StructProp.Label', 'StructProp.Pt2d', 'StructProp.Pt3d',\n 'StructProp.X', 'StructProp.Y', 'StructProp.Z', 'TypeDefinition', 'UserLabel'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 insert-full | All_Properties | inMemoryCache vs sqliteBackedCache\", () => {\n const inMemoryInstances = readTxn(rwIModel, txnId);\n const sqliteBackedInstances = readTxn(rwIModel, txnId, undefined, undefined, undefined, false);\n assert.equal(inMemoryInstances.length, 3);\n assert.equal(sqliteBackedInstances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const inMemoryModelNew = inMemoryInstances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n const sqliteBackedModelNew = sqliteBackedInstances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(inMemoryModelNew).to.exist;\n expect(sqliteBackedModelNew).to.exist;\n assert.equal(inMemoryModelNew!.ECInstanceId, sqliteBackedModelNew!.ECInstanceId);\n assert.equal(sqliteBackedModelNew!.ECClassId, inMemoryModelNew!.ECClassId);\n assert.equal(inMemoryModelNew!.LastMod, sqliteBackedModelNew!.LastMod);\n assert.equal(inMemoryModelNew!.GeometryGuid, sqliteBackedModelNew!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(inMemoryModelNew!).sort(), Object.keys(sqliteBackedModelNew!).sort());\n // $meta keys\n assert.deepEqual(Object.keys(inMemoryModelNew!.$meta).sort(), Object.keys(sqliteBackedModelNew!.$meta).sort());\n assert.equal(inMemoryModelNew!.$meta.op, sqliteBackedModelNew!.$meta.op);\n assert.equal(inMemoryModelNew!.$meta.stage, sqliteBackedModelNew!.$meta.stage);\n assert.deepEqual([...inMemoryModelNew!.$meta.tables].sort(), [...sqliteBackedModelNew!.$meta.tables].sort());\n assert.deepEqual([...inMemoryModelNew!.$meta.changeIndexes].sort(), [...sqliteBackedModelNew!.$meta.changeIndexes].sort());\n assert.isString(inMemoryModelNew!.$meta.instanceKey);\n assert.equal(inMemoryModelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(inMemoryModelNew!.$meta.propFilter, sqliteBackedModelNew!.$meta.propFilter);\n assert.deepEqual([...inMemoryModelNew!.$meta.changeFetchedPropNames].sort(), [...sqliteBackedModelNew!.$meta.changeFetchedPropNames].sort());\n assert.deepEqual(inMemoryModelNew!.$meta.rowOptions, sqliteBackedModelNew!.$meta.rowOptions);\n assert.equal(inMemoryModelNew!.$meta.isIndirectChange, sqliteBackedModelNew!.$meta.isIndirectChange);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const inMemoryModelOld = inMemoryInstances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n const sqliteBackedModelOld = sqliteBackedInstances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(inMemoryModelOld).to.exist;\n expect(sqliteBackedModelOld).to.exist;\n assert.equal(inMemoryModelOld!.ECInstanceId, sqliteBackedModelOld!.ECInstanceId);\n assert.equal(sqliteBackedModelOld!.ECClassId, inMemoryModelOld!.ECClassId);\n // Object.keys\n assert.deepEqual(Object.keys(inMemoryModelOld!).sort(), Object.keys(sqliteBackedModelOld!).sort());\n // $meta keys\n assert.deepEqual(Object.keys(inMemoryModelOld!.$meta).sort(), Object.keys(sqliteBackedModelOld!.$meta).sort());\n assert.equal(inMemoryModelOld!.$meta.op, sqliteBackedModelOld!.$meta.op);\n assert.equal(inMemoryModelOld!.$meta.stage, sqliteBackedModelOld!.$meta.stage);\n assert.deepEqual([...inMemoryModelOld!.$meta.tables].sort(), [...sqliteBackedModelOld!.$meta.tables].sort());\n assert.equal(inMemoryModelOld!.$meta.propFilter, sqliteBackedModelOld!.$meta.propFilter);\n assert.deepEqual([...inMemoryModelOld!.$meta.changeFetchedPropNames].sort(), [...sqliteBackedModelOld!.$meta.changeFetchedPropNames].sort());\n assert.deepEqual(inMemoryModelOld!.$meta.rowOptions, sqliteBackedModelOld!.$meta.rowOptions);\n assert.equal(inMemoryModelOld!.$meta.isIndirectChange, sqliteBackedModelOld!.$meta.isIndirectChange);\n\n // --- instances[2]: Test2dElement Inserted New ---\n const inMemoryElem = inMemoryInstances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n const sqliteBackedElem = sqliteBackedInstances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(inMemoryElem).to.exist;\n expect(sqliteBackedElem).to.exist;\n assert.equal(inMemoryElem!.ECInstanceId, sqliteBackedElem!.ECInstanceId);\n assert.equal(sqliteBackedElem!.ECClassId, inMemoryElem!.ECClassId);\n assert.equal(inMemoryElem!.Model.Id, sqliteBackedElem!.Model.Id);\n assert.equal(inMemoryElem!.Model.RelECClassId, sqliteBackedElem!.Model.RelECClassId);\n assert.equal(inMemoryElem!.LastMod, sqliteBackedElem!.LastMod);\n assert.equal(inMemoryElem!.CodeSpec.Id, sqliteBackedElem!.CodeSpec.Id);\n assert.equal(inMemoryElem!.CodeSpec.RelECClassId, sqliteBackedElem!.CodeSpec.RelECClassId);\n\n assert.equal(inMemoryElem!.CodeScope.Id, sqliteBackedElem!.CodeScope.Id);\n assert.equal(inMemoryElem!.CodeScope.RelECClassId, sqliteBackedElem!.CodeScope.RelECClassId);\n assert.equal(inMemoryElem!.FederationGuid, sqliteBackedElem!.FederationGuid);\n\n assert.equal(inMemoryElem!.Category.Id, sqliteBackedElem!.Category.Id);\n assert.equal(inMemoryElem!.Category.RelECClassId, sqliteBackedElem!.Category.RelECClassId);\n assert.deepEqual(inMemoryElem!.Origin, sqliteBackedElem!.Origin);\n assert.equal(inMemoryElem!.Rotation, sqliteBackedElem!.Rotation);\n assert.deepEqual(inMemoryElem!.BBoxLow, sqliteBackedElem!.BBoxLow);\n assert.deepEqual(inMemoryElem!.BBoxHigh, sqliteBackedElem!.BBoxHigh);\n assert.equal(inMemoryElem!.GeometryStream, sqliteBackedElem!.GeometryStream);\n assert.equal(inMemoryElem!.BinProp, sqliteBackedElem!.BinProp);\n assert.equal(inMemoryElem!.StrProp, sqliteBackedElem!.StrProp);\n assert.equal(inMemoryElem!.IntProp, sqliteBackedElem!.IntProp);\n assert.equal(inMemoryElem!.LongProp, sqliteBackedElem!.LongProp);\n assert.closeTo(inMemoryElem!.DblProp as number, sqliteBackedElem!.DblProp as number, 1e-10);\n assert.equal(inMemoryElem!.BoolProp, sqliteBackedElem!.BoolProp);\n assert.equal(inMemoryElem!.DtProp, sqliteBackedElem!.DtProp);\n assert.deepEqual(inMemoryElem!.Pt2dProp, sqliteBackedElem!.Pt2dProp);\n assert.deepEqual(inMemoryElem!.Pt3dProp, sqliteBackedElem!.Pt3dProp);\n assert.deepEqual(inMemoryElem!.StructProp, sqliteBackedElem!.StructProp);\n assert.deepEqual(inMemoryElem!.IntArrProp, sqliteBackedElem!.IntArrProp);\n assert.deepEqual(inMemoryElem!.StrArrProp, sqliteBackedElem!.StrArrProp);\n assert.deepEqual(inMemoryElem!.StructArrProp, sqliteBackedElem!.StructArrProp);\n assert.equal(inMemoryElem!.RelatedElem.Id, sqliteBackedElem!.RelatedElem.Id);\n assert.equal(inMemoryElem!.RelatedElem.RelECClassId, sqliteBackedElem!.RelatedElem.RelECClassId);\n // Object.keys\n assert.deepEqual(Object.keys(inMemoryElem!).sort(), Object.keys(sqliteBackedElem!).sort());\n // $meta keys\n assert.deepEqual(Object.keys(inMemoryElem!.$meta).sort(), Object.keys(sqliteBackedElem!.$meta).sort());\n assert.equal(inMemoryElem!.$meta.op, sqliteBackedElem!.$meta.op);\n assert.equal(inMemoryElem!.$meta.stage, sqliteBackedElem!.$meta.stage);\n assert.deepEqual([...inMemoryElem!.$meta.tables].sort(), [...sqliteBackedElem!.$meta.tables].sort());\n assert.deepEqual([...inMemoryElem!.$meta.changeIndexes].sort(), [...sqliteBackedElem!.$meta.changeIndexes].sort());\n assert.equal(inMemoryElem!.$meta.instanceKey, sqliteBackedElem!.$meta.instanceKey);\n assert.deepEqual([...inMemoryElem!.$meta.changeFetchedPropNames].sort(), [...sqliteBackedElem!.$meta.changeFetchedPropNames].sort());\n assert.deepEqual(inMemoryElem!.$meta.rowOptions, sqliteBackedElem!.$meta.rowOptions);\n assert.equal(inMemoryElem!.$meta.isIndirectChange, sqliteBackedElem!.$meta.isIndirectChange);\n });\n it(\"should throw error if tried to fetch changeset metadata values before stepping\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n it(\"should throw error if tried to fetch changeset metadata values after stepping past the end\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n while (reader.step()) { }\n assert.equal(reader.step(), false);\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n\n it(\"Checking non unified values\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n\n assert.isTrue(reader.step());\n assert.isTrue(reader.isECTable);\n assert.isFalse(reader.isIndirectChange);\n assert.equal(reader.tableName, \"bis_Element\");\n assert.equal(reader.op, \"Inserted\");\n assert.isDefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n\n assert.isTrue(reader.step());\n assert.isTrue(reader.isECTable);\n assert.isFalse(reader.isIndirectChange);\n assert.equal(reader.tableName, \"bis_GeometricElement2d\");\n assert.equal(reader.op, \"Inserted\");\n assert.isDefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n\n assert.isTrue(reader.step());\n assert.isTrue(reader.isECTable);\n assert.isTrue(reader.isIndirectChange);\n assert.equal(reader.tableName, \"bis_Model\");\n assert.equal(reader.op, \"Updated\");\n assert.isDefined(reader.inserted);\n assert.isDefined(reader.deleted);\n\n assert.isFalse(reader.step());\n });\n});\n\ndescribe(\"ChangesetReader insert-partial\", () => {\n let rwIModel: BriefcaseDb;\n let partialElementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txnId: string;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetInsertPartial\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"insertPartial\", description: \"insertPartial\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader insert-partial\");\n // Txn 1: import schema + drawing model setup, then push\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <!-- Rich struct: scalar fields + nested point2d/3d sub-properties -->\n <ECStructClass typeName=\"RichPoint\" modifier=\"Sealed\">\n <ECProperty propertyName=\"X\" typeName=\"double\"/>\n <ECProperty propertyName=\"Y\" typeName=\"double\"/>\n <ECProperty propertyName=\"Z\" typeName=\"double\"/>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"Pt2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <!-- Relationship used by the RelatedElem navigation property -->\n <ECRelationshipClass typeName=\"Test2dUsesElement\" strength=\"referencing\" modifier=\"None\">\n <Source multiplicity=\"(0..*)\" roleLabel=\"uses\" polymorphic=\"true\"><Class class=\"Test2dElement\"/></Source>\n <Target multiplicity=\"(0..1)\" roleLabel=\"is used by\" polymorphic=\"true\"><Class class=\"bis:Element\"/></Target>\n </ECRelationshipClass>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Primitives -->\n <ECProperty propertyName=\"StrProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"IntProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"LongProp\" typeName=\"long\"/>\n <ECProperty propertyName=\"DblProp\" typeName=\"double\"/>\n <ECProperty propertyName=\"BoolProp\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"DtProp\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Geometric primitives -->\n <ECProperty propertyName=\"Pt2dProp\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Struct, arrays -->\n <ECStructProperty propertyName=\"StructProp\" typeName=\"RichPoint\"/>\n <ECArrayProperty propertyName=\"IntArrProp\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"StrArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"StructArrProp\" typeName=\"RichPoint\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!-- Navigation property -->\n <ECNavigationProperty propertyName=\"RelatedElem\" relationshipName=\"Test2dUsesElement\" direction=\"forward\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrillDownDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"DrillDownCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"DrillDownCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 2: insert PARTIAL element only mandatory props\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n partialElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n // StrProp, IntProp, LongProp, DblProp, BoolProp, DtProp, BinProp intentionally absent\n } as any);\n txn.saveChanges(\"insert partial element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn2 insert-partial | All_Properties | default rowOptions\", () => {\n const instances = readTxn(rwIModel, txnId);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n // Model Old has LastMod and GeometryGuid when previous txn's model New values survive\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n // No custom props on the partial element\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.IntProp);\n assert.isUndefined(elem!.LongProp);\n assert.isUndefined(elem!.DblProp);\n assert.isUndefined(elem!.BoolProp);\n assert.isUndefined(elem!.DtProp);\n assert.isUndefined(elem!.Pt2dProp);\n assert.isUndefined(elem!.Pt3dProp);\n assert.isUndefined(elem!.StructProp);\n assert.isUndefined(elem!.IntArrProp);\n assert.isUndefined(elem!.StrArrProp);\n assert.isUndefined(elem!.StructArrProp);\n assert.isUndefined(elem!.RelatedElem);\n assert.isUndefined(elem!.BinProp);\n // Object.keys — partial insert: only BIS columns present (no 2d geometry columns either)\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\",\n ].sort());\n // $meta keys\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'ECInstanceId', 'ECClassId', 'Model.Id', 'LastMod', 'CodeSpec.Id',\n 'CodeScope.Id', 'CodeValue', 'UserLabel', 'Parent', 'FederationGuid',\n 'JsonProperties', 'Category.Id', 'Origin', 'Rotation', 'BBoxLow', 'BBoxHigh',\n 'GeometryStream', 'TypeDefinition', 'StrProp', 'IntProp', 'LongProp',\n 'DblProp', 'BoolProp', 'DtProp', 'BinProp', 'Pt2dProp', 'Pt3dProp',\n 'StructProp.X', 'StructProp.Y', 'StructProp.Z', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'IntArrProp', 'StrArrProp',\n 'StructArrProp', 'RelatedElem'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.isUndefined(elem!.BinProp);\n assert.equal(elem!.$meta.isIndirectChange, false);\n\n });\n\n it(\"txn2 insert-partial | All_Properties | default rowOptions | invert\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, undefined, true);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isUndefined(modelNew!.LastMod);\n assert.isUndefined(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.isString(modelOld!.LastMod);\n assert.isString(modelOld!.GeometryGuid);\n // Model Old has LastMod and GeometryGuid when previous txn's model New values survive\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n // No custom props on the partial element\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.IntProp);\n assert.isUndefined(elem!.LongProp);\n assert.isUndefined(elem!.DblProp);\n assert.isUndefined(elem!.BoolProp);\n assert.isUndefined(elem!.DtProp);\n assert.isUndefined(elem!.Pt2dProp);\n assert.isUndefined(elem!.Pt3dProp);\n assert.isUndefined(elem!.StructProp);\n assert.isUndefined(elem!.IntArrProp);\n assert.isUndefined(elem!.StrArrProp);\n assert.isUndefined(elem!.StructArrProp);\n assert.isUndefined(elem!.RelatedElem);\n assert.isUndefined(elem!.BinProp);\n // Object.keys — partial insert: only BIS columns present (no 2d geometry columns either)\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\",\n ].sort());\n // $meta keys\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'ECInstanceId', 'ECClassId', 'Model.Id', 'LastMod', 'CodeSpec.Id',\n 'CodeScope.Id', 'CodeValue', 'UserLabel', 'Parent', 'FederationGuid',\n 'JsonProperties', 'Category.Id', 'Origin', 'Rotation', 'BBoxLow', 'BBoxHigh',\n 'GeometryStream', 'TypeDefinition', 'StrProp', 'IntProp', 'LongProp',\n 'DblProp', 'BoolProp', 'DtProp', 'BinProp', 'Pt2dProp', 'Pt3dProp',\n 'StructProp.X', 'StructProp.Y', 'StructProp.Z', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'IntArrProp', 'StrArrProp',\n 'StructArrProp', 'RelatedElem'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.isUndefined(elem!.BinProp);\n assert.equal(elem!.$meta.isIndirectChange, false);\n\n });\n\n it(\"txn2 insert-partial | Bis_Element_Properties\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.BisCoreElement, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore.DrawingModel\", modelOld!.ECClassId);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(elem!.ECClassId, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.IntProp);\n expect(elem!.Model).to.exist;\n expect(elem!.LastMod).to.exist;\n expect(elem!.CodeSpec).to.exist;\n expect(elem!.CodeScope).to.exist;\n expect(elem!.FederationGuid).to.exist;\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"ECClassId\", \"CodeScope.Id\",\n \"CodeSpec.Id\", \"CodeValue\", \"FederationGuid\", \"JsonProperties\", \"LastMod\", \"Model.Id\", \"Parent\", \"UserLabel\"].sort());\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn2 insert-partial | Instance_Key\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.InstanceKey);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Inserted New ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.Model);\n assert.isUndefined(elem!.LastMod);\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"ECClassId\"].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn2 insert-partial | rowOptions: classIdsToClassNames\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECClassId, \"TestDomain.Test2dElement\");\n assert.deepEqual(elem!.Model, { Id: drawingModelId, RelECClassId: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.CodeSpec, { Id: \"0x1\", RelECClassId: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.CodeScope, { Id: \"0x1\", RelECClassId: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.Category, { Id: drawingCategoryId, RelECClassId: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n });\n\n it(\"txn2 insert-partial | rowOptions: useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { useJsName: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { useJsName: true });\n\n const elem = instances.find((i) => i.id === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.isUndefined(elem!.ECClassId);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.strProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\", \"category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { useJsName: true });\n });\n\n it(\"txn2 insert-partial | rowOptions: abbreviateBlobs\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { abbreviateBlobs: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(modelNew!.$meta.rowOptions, { abbreviateBlobs: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(modelOld!.$meta.rowOptions, { abbreviateBlobs: true });\n\n // Partial element has no blob props; ECClassId stays as raw hex\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { abbreviateBlobs: true });\n });\n\n it(\"txn2 insert-partial | rowOptions: classIdsToClassNames + useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true, useJsName: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const elem = instances.find((i) => i.id === partialElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.strProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\", \"category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n });\n it(\"should throw error if tried to fetch changeset metadata values before stepping\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n it(\"should throw error if tried to fetch changeset metadata values after stepping past the end\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n while (reader.step()) { }\n assert.equal(reader.step(), false);\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n\n});\n\n\ndescribe(\"ChangesetReader update-full\", () => {\n let rwIModel: BriefcaseDb;\n let fullElementId: Id64String;\n let partialElementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txnId: string;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetUpdateFull\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"updateFull\", description: \"updateFull\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader update-full setup\");\n // Txn 1: import schema + drawing model setup, then push\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <!-- Rich struct: scalar fields + nested point2d/3d sub-properties -->\n <ECStructClass typeName=\"RichPoint\" modifier=\"Sealed\">\n <ECProperty propertyName=\"X\" typeName=\"double\"/>\n <ECProperty propertyName=\"Y\" typeName=\"double\"/>\n <ECProperty propertyName=\"Z\" typeName=\"double\"/>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"Pt2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <!-- Relationship used by the RelatedElem navigation property -->\n <ECRelationshipClass typeName=\"Test2dUsesElement\" strength=\"referencing\" modifier=\"None\">\n <Source multiplicity=\"(0..*)\" roleLabel=\"uses\" polymorphic=\"true\"><Class class=\"Test2dElement\"/></Source>\n <Target multiplicity=\"(0..1)\" roleLabel=\"is used by\" polymorphic=\"true\"><Class class=\"bis:Element\"/></Target>\n </ECRelationshipClass>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Primitives -->\n <ECProperty propertyName=\"StrProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"IntProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"LongProp\" typeName=\"long\"/>\n <ECProperty propertyName=\"DblProp\" typeName=\"double\"/>\n <ECProperty propertyName=\"BoolProp\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"DtProp\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Geometric primitives -->\n <ECProperty propertyName=\"Pt2dProp\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Struct, arrays -->\n <ECStructProperty propertyName=\"StructProp\" typeName=\"RichPoint\"/>\n <ECArrayProperty propertyName=\"IntArrProp\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"StrArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"StructArrProp\" typeName=\"RichPoint\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!-- Navigation property -->\n <ECNavigationProperty propertyName=\"RelatedElem\" relationshipName=\"Test2dUsesElement\" direction=\"forward\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrillDownDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"DrillDownCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"DrillDownCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the full insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 2: insert FULL element (needed as update target)\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n\n fullElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n StrProp: \"hello\",\n IntProp: 42,\n LongProp: 9_007_199_254_740_991, // Number.MAX_SAFE_INTEGER\n DblProp: 3.14159265358979,\n BoolProp: true,\n DtProp: \"2024-01-15T12:00:00.000\",\n BinProp: new Uint8Array([1, 2, 3, 5]),\n Pt2dProp: { x: 1.5, y: 2.5 },\n Pt3dProp: { x: 3.0, y: 4.0, z: 5.0 },\n StructProp: {\n X: 1.0, Y: 2.0, Z: 3.0, Label: \"origin\",\n Pt2d: { x: 0.5, y: 0.5 },\n Pt3d: { x: 1.0, y: 2.0, z: 3.0 },\n },\n IntArrProp: [10, 20, 30],\n StrArrProp: [\"alpha\", \"beta\", \"gamma\"],\n StructArrProp: [\n { X: 0.0, Y: 1.0, Z: 2.0, Label: \"a\", Pt2d: { x: 0.0, y: 0.0 }, Pt3d: { x: 0.0, y: 0.0, z: 0.0 } },\n { X: 3.0, Y: 4.0, Z: 5.0, Label: \"b\", Pt2d: { x: 1.0, y: 1.0 }, Pt3d: { x: 1.0, y: 1.0, z: 1.0 } },\n ],\n RelatedElem: { id: drawingCategoryId, relClassName: \"TestDomain:Test2dUsesElement\" },\n } as any);\n txn.saveChanges(\"insert full element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the partial insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 3: insert PARTIAL element (needed as RelatedElem target in the update)\n partialElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n // StrProp, IntProp, LongProp, DblProp, BoolProp, DtProp, BinProp intentionally absent\n } as any);\n txn.saveChanges(\"insert partial element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 4: update FULL element this is the txn under test\n // Txn 3: update FULL element — change several property types\n await rwIModel.locks.acquireLocks({ exclusive: fullElementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(fullElementId),\n StrProp: \"updated\",\n IntProp: 99,\n LongProp: 0,\n DblProp: 2.71828182845904,\n BoolProp: false,\n DtProp: \"2025-06-01T08:30:00.000\",\n BinProp: new Uint8Array([10, 20, 30, 40, 50]),\n Pt2dProp: { x: 9.0, y: 8.0 },\n Pt3dProp: { x: 7.0, y: 6.0, z: 5.0 },\n StructProp: {\n X: 9.0, Y: 8.0, Z: 7.0, Label: \"updated-origin\",\n Pt2d: { x: 9.5, y: 8.5 },\n Pt3d: { x: 9.0, y: 8.0, z: 7.0 },\n },\n IntArrProp: [100, 200],\n StrArrProp: [\"delta\", \"epsilon\"],\n StructArrProp: [\n { X: 5.0, Y: 6.0, Z: 7.0, Label: \"c\", Pt2d: { x: 5.0, y: 5.0 }, Pt3d: { x: 5.0, y: 5.0, z: 5.0 } },\n { X: 7.0, Y: 8.0, Z: 9.0, Label: \"d\", Pt2d: { x: 7.0, y: 7.0 }, Pt3d: { x: 7.0, y: 7.0, z: 7.0 } },\n { X: 9.0, Y: 10.0, Z: 11.0, Label: \"e\", Pt2d: { x: 9.0, y: 9.0 }, Pt3d: { x: 9.0, y: 9.0, z: 9.0 } },\n ],\n RelatedElem: { id: partialElementId, relClassName: \"TestDomain:Test2dUsesElement\" },\n });\n txn.saveChanges(\"update full element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn3 update-full | All_Properties | default rowOptions\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, undefined, undefined, false);\n assert.equal(instances.length, 4);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isUndefined(modelNew!.GeometryGuid); // no GeometryGuid in update txn model row\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.isString(modelOld!.LastMod);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Updated New ---\n const elemNew = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.ECInstanceId, fullElementId);\n assert.equal(elemNew!.ECClassId, \"0x176\");\n assert.equal(elemNew!.StrProp, \"updated\");\n assert.equal(elemNew!.IntProp, 99);\n assert.equal(elemNew!.LongProp, 0);\n assert.include(String(elemNew!.BinProp), \"\\\"bytes\\\"\");\n assert.closeTo(elemNew!.DblProp as number, 2.71828182845904, 1e-10);\n assert.equal(elemNew!.BoolProp, false);\n assert.equal(elemNew!.DtProp, \"2025-06-01T08:30:00.000\");\n assert.deepEqual(elemNew!.Pt2dProp, { X: 9, Y: 8 });\n assert.deepEqual(elemNew!.Pt3dProp, { X: 7, Y: 6, Z: 5 });\n assert.deepEqual(elemNew!.StructProp, { X: 9, Y: 8, Z: 7, Label: \"updated-origin\", Pt2d: { X: 9.5, Y: 8.5 }, Pt3d: { X: 9, Y: 8, Z: 7 } });\n assert.deepEqual(elemNew!.IntArrProp, [100, 200]);\n assert.deepEqual(elemNew!.StrArrProp, [\"delta\", \"epsilon\"]);\n assert.deepEqual(elemNew!.StructArrProp, [\n { X: 5, Y: 6, Z: 7, Label: \"c\", Pt2d: { X: 5, Y: 5 }, Pt3d: { X: 5, Y: 5, Z: 5 } },\n { X: 7, Y: 8, Z: 9, Label: \"d\", Pt2d: { X: 7, Y: 7 }, Pt3d: { X: 7, Y: 7, Z: 7 } },\n { X: 9, Y: 10, Z: 11, Label: \"e\", Pt2d: { X: 9, Y: 9 }, Pt3d: { X: 9, Y: 9, Z: 9 } },\n ]);\n assert.equal(elemNew!.RelatedElem.Id, partialElementId);\n assert.equal(rwIModel.getClassNameFromId(elemNew!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n assert.isString(elemNew!.LastMod);\n // Object.keys — update row: custom-prop columns first, then $meta and LastMod at the end\n assert.deepEqual(Object.keys(elemNew!).sort(), [\n \"ECInstanceId\", \"ECClassId\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\",\n \"$meta\", \"LastMod\", \"BinProp\"\n ].sort());\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual([...elemNew!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elemNew!.$meta.instanceKey);\n assert.equal(elemNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\n \"BoolProp\", \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\",\n \"StrProp\", \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\", \"BinProp\"\n ].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, {});\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n // --- instances[3]: Test2dElement Updated Old ---\n const elemOld = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECInstanceId, fullElementId);\n assert.equal(elemOld!.ECClassId, \"0x176\");\n assert.equal(elemOld!.StrProp, \"hello\");\n assert.equal(elemOld!.IntProp, 42);\n assert.equal(elemOld!.LongProp, 9007199254740991);\n assert.closeTo(elemOld!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elemOld!.BoolProp, true);\n assert.include(String(elemOld!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elemOld!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elemOld!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elemOld!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elemOld!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elemOld!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elemOld!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.deepEqual(elemOld!.StructArrProp, [\n { X: 0, Y: 1, Z: 2, Label: \"a\", Pt2d: { X: 0, Y: 0 }, Pt3d: { X: 0, Y: 0, Z: 0 } },\n { X: 3, Y: 4, Z: 5, Label: \"b\", Pt2d: { X: 1, Y: 1 }, Pt3d: { X: 1, Y: 1, Z: 1 } },\n ]);\n assert.equal(elemOld!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elemOld!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n assert.isString(elemOld!.LastMod);\n assert.deepEqual(Object.keys(elemOld!).sort(), [\n \"ECInstanceId\", \"ECClassId\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\",\n \"$meta\", \"LastMod\", \"BinProp\"\n ].sort());\n assert.deepEqual(Object.keys(elemOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.stage, \"Old\");\n assert.deepEqual([...elemOld!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.equal(elemOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\n \"BoolProp\", \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\",\n \"StrProp\", \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\", \"BinProp\"\n ].sort());\n assert.deepEqual(elemOld!.$meta.rowOptions, {});\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n });\n\n it(\"txn3 update-full | Bis_Element_Properties\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.BisCoreElement, { classIdsToClassNames: true }, undefined, false);\n assert.equal(instances.length, 4);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.LastMod);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelOld!.LastMod);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Updated New (no custom props) ---\n const elemNew = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.ECInstanceId, fullElementId);\n assert.equal(elemNew!.ECClassId, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemNew!.StrProp);\n assert.isUndefined(elemNew!.IntProp);\n assert.isUndefined(elemNew!.Model);\n assert.isUndefined(elemNew!.Category);\n expect(elemNew!.LastMod).to.exist;\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"LastMod\"].sort());\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual([...elemNew!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elemNew!.$meta.instanceKey);\n assert.equal(elemNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.BisCoreElement);\n\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n // --- instances[3]: Test2dElement Updated Old ---\n const elemOld = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECInstanceId, fullElementId);\n assert.equal(elemOld!.ECClassId, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemOld!.StrProp);\n assert.isUndefined(elemOld!.IntProp);\n assert.isUndefined(elemOld!.Model);\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"LastMod\"].sort());\n assert.deepEqual(Object.keys(elemOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.stage, \"Old\");\n assert.deepEqual([...elemOld!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.equal(elemOld!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(elemOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n });\n\n it(\"txn3 update-full | Instance_Key\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.InstanceKey, undefined, undefined, false);\n assert.equal(instances.length, 4);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement Updated New ---\n const elemNew = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.ECInstanceId, fullElementId);\n assert.equal(elemNew!.ECClassId, \"0x176\");\n assert.isUndefined(elemNew!.StrProp);\n assert.isUndefined(elemNew!.Model);\n assert.isUndefined(elemNew!.LastMod);\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual([...elemNew!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elemNew!.$meta.instanceKey);\n assert.equal(elemNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, {});\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n // --- instances[3]: Test2dElement Updated Old ---\n const elemOld = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECInstanceId, fullElementId);\n assert.equal(elemOld!.ECClassId, \"0x176\");\n assert.isUndefined(elemOld!.StrProp);\n assert.isUndefined(elemOld!.Model);\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elemOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.stage, \"Old\");\n assert.deepEqual([...elemOld!.$meta.tables].sort(), [\"bis_GeometricElement2d\", \"bis_Element\"].sort());\n assert.equal(elemOld!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(elemOld!.$meta.rowOptions, {});\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n });\n\n it(\"txn3 update-full | rowOptions: useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { useJsName: true }, undefined, false);\n assert.equal(instances.length, 4);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { useJsName: true });\n\n const elemNew = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemNew!.ECInstanceId);\n assert.equal(elemNew!.strProp, \"updated\");\n assert.equal(elemNew!.intProp, 99);\n assert.include(String(elemNew!.binProp), \"\\\"bytes\\\"\");\n assert.deepEqual(elemNew!.pt2dProp, { x: 9, y: 8 });\n assert.deepEqual(elemNew!.pt3dProp, { x: 7, y: 6, z: 5 });\n assert.deepEqual(elemNew!.relatedElem, { id: partialElementId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.rowOptions, { useJsName: true });\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"$meta\", \"binProp\", \"boolProp\", \"className\",\n \"dblProp\", \"dtProp\", \"id\", \"intArrProp\", \"intProp\", \"lastMod\", \"longProp\", \"pt2dProp\",\n \"pt3dProp\", \"relatedElem\", \"strArrProp\", \"strProp\", \"structArrProp\", \"structProp\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n\n const elemOld = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemOld!.ECInstanceId);\n assert.equal(elemOld!.strProp, \"hello\");\n assert.include(String(elemOld!.binProp), \"\\\"bytes\\\"\");\n assert.equal(elemOld!.intProp, 42);\n assert.deepEqual(elemOld!.relatedElem, { id: drawingCategoryId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.deepEqual(elemOld!.$meta.rowOptions, { useJsName: true });\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"$meta\", \"binProp\", \"boolProp\", \"className\",\n \"dblProp\", \"dtProp\", \"id\", \"intArrProp\", \"intProp\", \"lastMod\", \"longProp\", \"pt2dProp\",\n \"pt3dProp\", \"relatedElem\", \"strArrProp\", \"strProp\", \"structArrProp\", \"structProp\"].sort());\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n });\n\n it(\"txn3 update-full | rowOptions: abbreviateBlobs\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { abbreviateBlobs: true }, undefined, false);\n assert.equal(instances.length, 4);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(modelNew!.$meta.rowOptions, { abbreviateBlobs: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(modelOld!.$meta.rowOptions, { abbreviateBlobs: true });\n\n const elemNew = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elemNew!.ECClassId));\n assert.equal(elemNew!.StrProp, \"updated\");\n // BinProp is a blob should be abbreviated to { bytes: N }\n assert.include(String(elemNew!.BinProp), \"bytes\");\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.deepEqual(elemNew!.$meta.rowOptions, { abbreviateBlobs: true });\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"$meta\", \"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"IntArrProp\", \"IntProp\", \"LastMod\", \"LongProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"RelatedElem\", \"StrArrProp\", \"StrProp\", \"StructArrProp\", \"StructProp\", \"ECClassId\", \"ECInstanceId\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n\n const elemOld = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECClassId, \"0x176\");\n assert.equal(elemOld!.StrProp, \"hello\");\n assert.include(String(elemOld!.BinProp), \"bytes\");\n assert.deepEqual(elemOld!.$meta.rowOptions, { abbreviateBlobs: true });\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"$meta\", \"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"IntArrProp\", \"IntProp\", \"LastMod\", \"LongProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"RelatedElem\", \"StrArrProp\", \"StrProp\", \"StructArrProp\", \"StructProp\", \"ECClassId\", \"ECInstanceId\"].sort());\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n });\n\n it(\"txn3 update-full | rowOptions: classIdsToClassNames + useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true, useJsName: true }, undefined, false);\n assert.equal(instances.length, 4);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const elemNew = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemNew!.ECInstanceId);\n assert.equal(elemNew!.strProp, \"updated\");\n assert.equal(elemNew!.intProp, 99);\n assert.include(String(elemNew!.binProp), \"\\\"bytes\\\"\");\n assert.deepEqual(elemNew!.relatedElem, { id: partialElementId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.deepEqual(elemNew!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"$meta\", \"binProp\", \"boolProp\", \"className\",\n \"dblProp\", \"dtProp\", \"id\", \"intArrProp\", \"intProp\", \"lastMod\", \"longProp\", \"pt2dProp\",\n \"pt3dProp\", \"relatedElem\", \"strArrProp\", \"strProp\", \"structArrProp\", \"structProp\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n\n const elemOld = instances.find((i) => i.id === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elemOld!.ECInstanceId);\n assert.equal(elemOld!.strProp, \"hello\");\n assert.include(String(elemOld!.binProp), \"\\\"bytes\\\"\");\n assert.deepEqual(elemOld!.relatedElem, { id: drawingCategoryId, relClassName: \"TestDomain.Test2dUsesElement\" });\n assert.deepEqual(elemOld!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"$meta\", \"binProp\", \"boolProp\", \"className\",\n \"dblProp\", \"dtProp\", \"id\", \"intArrProp\", \"intProp\", \"lastMod\", \"longProp\", \"pt2dProp\",\n \"pt3dProp\", \"relatedElem\", \"strArrProp\", \"strProp\", \"structArrProp\", \"structProp\"].sort());\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n });\n\n it(\"txn3 update-full | rowOptions: classIdsToClassNames\", () => {\n\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true }, undefined, false);\n assert.equal(instances.length, 4);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const elemNew = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.ECClassId, \"TestDomain.Test2dElement\");\n assert.equal(elemNew!.StrProp, \"updated\");\n assert.equal(elemNew!.IntProp, 99);\n assert.include(String(elemNew!.BinProp), \"\\\"bytes\\\"\");\n assert.deepEqual(elemNew!.RelatedElem, { Id: partialElementId, RelECClassId: \"TestDomain.Test2dUsesElement\" });\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.rowOptions, { classIdsToClassNames: true });\n\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"$meta\", \"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"IntArrProp\", \"IntProp\", \"LastMod\", \"LongProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"RelatedElem\", \"StrArrProp\", \"StrProp\", \"StructArrProp\", \"StructProp\", \"ECClassId\", \"ECInstanceId\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n\n const elemOld = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECClassId, \"TestDomain.Test2dElement\");\n assert.equal(elemOld!.StrProp, \"hello\");\n assert.equal(elemOld!.IntProp, 42);\n assert.include(String(elemOld!.BinProp), \"\\\"bytes\\\"\");\n assert.deepEqual(elemOld!.RelatedElem, { Id: drawingCategoryId, RelECClassId: \"TestDomain.Test2dUsesElement\" });\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.deepEqual(elemOld!.$meta.rowOptions, { classIdsToClassNames: true });\n\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"$meta\", \"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"IntArrProp\", \"IntProp\", \"LastMod\", \"LongProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"RelatedElem\", \"StrArrProp\", \"StrProp\", \"StructArrProp\", \"StructProp\", \"ECClassId\", \"ECInstanceId\"].sort());\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"BinProp\", \"BoolProp\",\n \"DblProp\", \"DtProp\", \"ECInstanceId\", \"IntArrProp\", \"IntProp\", \"LastMod\",\n \"LongProp\", \"Pt2dProp\", \"Pt3dProp.X\", \"Pt3dProp.Y\", \"RelatedElem.Id\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\",\n \"StructProp.Y\", \"StructProp.Z\"].sort());\n });\n it(\"should throw error if tried to fetch changeset metadata values before stepping\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n it(\"should throw error if tried to fetch changeset metadata values after stepping past the end\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n while (reader.step()) { }\n assert.equal(reader.step(), false);\n assert.equal(reader.step(), false); // trying multiple steps past the end should still return false and not throw, but metadata access should throw\n assert.equal(reader.step(), false);\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n});\n\ndescribe(\"ChangesetReader delete-partial\", () => {\n let rwIModel: BriefcaseDb;\n let partialElementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txnId: string;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetDeletePartial\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"deletePartial\", description: \"deletePartial\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader delete-partial\");\n // Txn 1: import schema + drawing model setup, then push\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <!-- Rich struct: scalar fields + nested point2d/3d sub-properties -->\n <ECStructClass typeName=\"RichPoint\" modifier=\"Sealed\">\n <ECProperty propertyName=\"X\" typeName=\"double\"/>\n <ECProperty propertyName=\"Y\" typeName=\"double\"/>\n <ECProperty propertyName=\"Z\" typeName=\"double\"/>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"Pt2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <!-- Relationship used by the RelatedElem navigation property -->\n <ECRelationshipClass typeName=\"Test2dUsesElement\" strength=\"referencing\" modifier=\"None\">\n <Source multiplicity=\"(0..*)\" roleLabel=\"uses\" polymorphic=\"true\"><Class class=\"Test2dElement\"/></Source>\n <Target multiplicity=\"(0..1)\" roleLabel=\"is used by\" polymorphic=\"true\"><Class class=\"bis:Element\"/></Target>\n </ECRelationshipClass>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Primitives -->\n <ECProperty propertyName=\"StrProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"IntProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"LongProp\" typeName=\"long\"/>\n <ECProperty propertyName=\"DblProp\" typeName=\"double\"/>\n <ECProperty propertyName=\"BoolProp\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"DtProp\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Geometric primitives -->\n <ECProperty propertyName=\"Pt2dProp\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Struct, arrays -->\n <ECStructProperty propertyName=\"StructProp\" typeName=\"RichPoint\"/>\n <ECArrayProperty propertyName=\"IntArrProp\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"StrArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"StructArrProp\" typeName=\"RichPoint\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!-- Navigation property -->\n <ECNavigationProperty propertyName=\"RelatedElem\" relationshipName=\"Test2dUsesElement\" direction=\"forward\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrillDownDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"DrillDownCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"DrillDownCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 2: insert PARTIAL element\n partialElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n // StrProp, IntProp, LongProp, DblProp, BoolProp, DtProp, BinProp intentionally absent\n } as any);\n txn.saveChanges(\"insert partial element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the delete txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ exclusive: partialElementId });\n txn.deleteElement(partialElementId);\n txn.saveChanges(\"delete partial element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn4 delete-partial | All_Properties | default rowOptions\", () => {\n const instances = readTxn(rwIModel, txnId);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.isString(modelOld!.LastMod);\n assert.isString(modelOld!.GeometryGuid);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Deleted Old ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n // Partial element had no custom props at time of delete\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.IntProp);\n assert.isUndefined(elem!.Pt2dProp);\n assert.isUndefined(elem!.StructProp);\n assert.isUndefined(elem!.IntArrProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\",\n ].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"BBoxHigh\", \"BBoxLow\", \"BinProp\", \"BoolProp\",\n \"Category.Id\", \"CodeScope.Id\", \"CodeSpec.Id\", \"CodeValue\", \"DblProp\", \"DtProp\", \"ECClassId\", \"ECInstanceId\", \"FederationGuid\", \"GeometryStream\",\n \"IntArrProp\", \"IntProp\", \"JsonProperties\", \"LastMod\", \"LongProp\", \"Model.Id\", \"Origin\", \"Parent\", \"Pt2dProp\", \"Pt3dProp\", \"RelatedElem\", \"Rotation\", \"StrArrProp\", \"StrProp\",\n \"StructArrProp\", \"StructProp.Label\", \"StructProp.Pt2d\", \"StructProp.Pt3d\", \"StructProp.X\", \"StructProp.Y\", \"StructProp.Z\", \"TypeDefinition\", \"UserLabel\"\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn4 delete-partial | Bis_Element_Properties\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.BisCoreElement, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.isString(modelOld!.LastMod);\n assert.isString(modelOld!.GeometryGuid);\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Deleted Old ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(elem!.ECClassId, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.Category);\n expect(elem!.Model).to.exist;\n expect(elem!.LastMod).to.exist;\n expect(elem!.CodeSpec).to.exist;\n expect(elem!.CodeScope).to.exist;\n expect(elem!.FederationGuid).to.exist;\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.BisCoreElement);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\"CodeScope.Id\", \"CodeSpec.Id\", \"CodeValue\", \"ECClassId\", \"ECInstanceId\",\n \"FederationGuid\", \"JsonProperties\", \"LastMod\", \"Model.Id\", \"Parent\", \"UserLabel\"].sort());\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn4 delete-partial | Instance_Key\", () => {\n const instances = readTxn(rwIModel, txnId, PropertyFilter.InstanceKey);\n assert.equal(instances.length, 3);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // --- instances[2]: Test2dElement (partial) Deleted Old ---\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, partialElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.isUndefined(elem!.StrProp);\n assert.isUndefined(elem!.Model);\n assert.isUndefined(elem!.LastMod);\n assert.deepEqual(Object.keys(elem!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.InstanceKey);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), ['ECClassId', 'ECInstanceId'].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn4 delete-partial | rowOptions: classIdsToClassNames\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECClassId, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true });\n\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.ECClassId, \"TestDomain.Test2dElement\");\n assert.deepEqual(elem!.Model, { Id: drawingModelId, RelECClassId: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.CodeSpec, { Id: \"0x1\", RelECClassId: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.CodeScope, { Id: \"0x1\", RelECClassId: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.Category, { Id: drawingCategoryId, RelECClassId: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true });\n });\n\n it(\"txn4 delete-partial | rowOptions: useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { useJsName: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { useJsName: true });\n\n const elem = instances.find((i) => i.id === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.isUndefined(elem!.ECClassId);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.strProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\", \"category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { useJsName: true });\n });\n\n it(\"txn4 delete-partial | rowOptions: abbreviateBlobs\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { abbreviateBlobs: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.deepEqual(modelNew!.$meta.rowOptions, { abbreviateBlobs: true });\n\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n assert.deepEqual(modelOld!.$meta.rowOptions, { abbreviateBlobs: true });\n\n // Partial element had no blobs; ECClassId still raw hex\n const elem = instances.find((i) => i.ECInstanceId === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isUndefined(elem!.StrProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { abbreviateBlobs: true });\n });\n\n it(\"txn4 delete-partial | rowOptions: classIdsToClassNames + useJsName\", () => {\n const instances = readTxn(rwIModel, txnId, undefined, { classIdsToClassNames: true, useJsName: true });\n assert.equal(instances.length, 3);\n\n const modelNew = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.className, \"BisCore.DrawingModel\");\n assert.isUndefined(modelNew!.ECInstanceId);\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const modelOld = instances.find((i) => i.id === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.className, \"BisCore.DrawingModel\");\n assert.deepEqual(modelOld!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n\n const elem = instances.find((i) => i.id === partialElementId && i.$meta.stage === \"Old\");\n expect(elem).to.exist;\n assert.equal(elem!.className, \"TestDomain.Test2dElement\");\n assert.isUndefined(elem!.ECInstanceId);\n assert.deepEqual(elem!.model, { id: drawingModelId, relClassName: \"BisCore.ModelContainsElements\" });\n assert.deepEqual(elem!.codeSpec, { id: \"0x1\", relClassName: \"BisCore.CodeSpecSpecifiesCode\" });\n assert.deepEqual(elem!.codeScope, { id: \"0x1\", relClassName: \"BisCore.ElementScopesCode\" });\n assert.deepEqual(elem!.category, { id: drawingCategoryId, relClassName: \"BisCore.GeometricElement2dIsInCategory\" });\n assert.isUndefined(elem!.strProp);\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"id\", \"className\", \"model\", \"lastMod\", \"codeSpec\", \"codeScope\", \"federationGuid\", \"$meta\", \"category\",\n ].sort());\n assert.equal(elem!.$meta.op, \"Deleted\");\n assert.equal(elem!.$meta.stage, \"Old\");\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elem!.$meta.rowOptions, { classIdsToClassNames: true, useJsName: true });\n });\n it(\"should throw error if tried to fetch changeset metadata values before stepping\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n it(\"should throw error if tried to fetch changeset metadata values after stepping past the end\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n while (reader.step()) { }\n assert.equal(reader.step(), false);\n assert.equal(reader.step(), false); // try stepping again after already stepping past the end\n assert.equal(reader.step(), false);\n expect(() => reader.isECTable).to.throw();\n expect(() => reader.isIndirectChange).to.throw();\n expect(() => reader.tableName).to.throw();\n expect(() => reader.op).to.throw();\n assert.isUndefined(reader.inserted);\n assert.isUndefined(reader.deleted);\n reader.close();\n });\n});\n\ndescribe(\"ChangesetReader filters\", () => {\n let rwIModel: BriefcaseDb;\n let fullElementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txnId: string;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetInsertFull\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"insertFull\", description: \"insertFull\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader filters\");\n // Txn 1: import schema + drawing model setup, then push\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <!-- Rich struct: scalar fields + nested point2d/3d sub-properties -->\n <ECStructClass typeName=\"RichPoint\" modifier=\"Sealed\">\n <ECProperty propertyName=\"X\" typeName=\"double\"/>\n <ECProperty propertyName=\"Y\" typeName=\"double\"/>\n <ECProperty propertyName=\"Z\" typeName=\"double\"/>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"Pt2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <!-- Relationship used by the RelatedElem navigation property -->\n <ECRelationshipClass typeName=\"Test2dUsesElement\" strength=\"referencing\" modifier=\"None\">\n <Source multiplicity=\"(0..*)\" roleLabel=\"uses\" polymorphic=\"true\"><Class class=\"Test2dElement\"/></Source>\n <Target multiplicity=\"(0..1)\" roleLabel=\"is used by\" polymorphic=\"true\"><Class class=\"bis:Element\"/></Target>\n </ECRelationshipClass>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Primitives -->\n <ECProperty propertyName=\"StrProp\" typeName=\"string\"/>\n <ECProperty propertyName=\"IntProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"LongProp\" typeName=\"long\"/>\n <ECProperty propertyName=\"DblProp\" typeName=\"double\"/>\n <ECProperty propertyName=\"BoolProp\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"DtProp\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Geometric primitives -->\n <ECProperty propertyName=\"Pt2dProp\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Struct, arrays -->\n <ECStructProperty propertyName=\"StructProp\" typeName=\"RichPoint\"/>\n <ECArrayProperty propertyName=\"IntArrProp\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"StrArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"StructArrProp\" typeName=\"RichPoint\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!-- Navigation property -->\n <ECNavigationProperty propertyName=\"RelatedElem\" relationshipName=\"Test2dUsesElement\" direction=\"forward\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrillDownDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"DrillDownCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"DrillDownCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 2: insert FULL element every EC primitive type populated\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n\n fullElementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n StrProp: \"hello\",\n IntProp: 42,\n LongProp: 9_007_199_254_740_991, // Number.MAX_SAFE_INTEGER\n DblProp: 3.14159265358979,\n BoolProp: true,\n DtProp: \"2024-01-15T12:00:00.000\",\n BinProp: new Uint8Array([1, 2, 3, 4]),\n Pt2dProp: { x: 1.5, y: 2.5 },\n Pt3dProp: { x: 3.0, y: 4.0, z: 5.0 },\n StructProp: {\n X: 1.0, Y: 2.0, Z: 3.0, Label: \"origin\",\n Pt2d: { x: 0.5, y: 0.5 },\n Pt3d: { x: 1.0, y: 2.0, z: 3.0 },\n },\n IntArrProp: [10, 20, 30],\n StrArrProp: [\"alpha\", \"beta\", \"gamma\"],\n StructArrProp: [\n { X: 0.0, Y: 1.0, Z: 2.0, Label: \"a\", Pt2d: { x: 0.0, y: 0.0 }, Pt3d: { x: 0.0, y: 0.0, z: 0.0 } },\n { X: 3.0, Y: 4.0, Z: 5.0, Label: \"b\", Pt2d: { x: 1.0, y: 1.0 }, Pt3d: { x: 1.0, y: 1.0, z: 1.0 } },\n ],\n RelatedElem: { id: drawingCategoryId, relClassName: \"TestDomain:Test2dUsesElement\" },\n } as any);\n txn.saveChanges(\"insert full element\");\n txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn1 insert-full | filter by table name\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n reader.setTableNameFilters(new Set([\"bis_Model\"]));\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n assert.equal(instances.length, 2);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.deepEqual([...modelNew!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.deepEqual([...modelNew!.$meta.changeIndexes].sort(), [1].sort());\n assert.isString(modelNew!.$meta.instanceKey);\n assert.equal(modelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n // Object.keys\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.deepEqual([...modelOld!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n });\n\n it(\"txn1 insert-full | filter by operation name\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n reader.setOpCodeFilters(new Set([\"Inserted\"]));\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n assert.equal(instances.length, 1);\n\n const elem = instances.find((i) => i.ECInstanceId === fullElementId && i.$meta.stage === \"New\");\n expect(elem).to.exist;\n assert.equal(elem!.ECInstanceId, fullElementId);\n assert.equal(\"TestDomain:Test2dElement\", rwIModel.getClassNameFromId(elem!.ECClassId));\n assert.equal(elem!.Model.Id, drawingModelId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Model.RelECClassId), \"BisCore:ModelContainsElements\");\n assert.isString(elem!.LastMod);\n assert.equal(elem!.CodeSpec.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeSpec.RelECClassId), \"BisCore:CodeSpecSpecifiesCode\");\n\n assert.equal(elem!.CodeScope.Id, \"0x1\");\n assert.equal(rwIModel.getClassNameFromId(elem!.CodeScope.RelECClassId), \"BisCore:ElementScopesCode\");\n assert.isString(elem!.FederationGuid);\n\n assert.equal(elem!.Category.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.Category.RelECClassId), \"BisCore:GeometricElement2dIsInCategory\");\n assert.deepEqual(elem!.Origin, { X: 0, Y: 0 });\n assert.equal(elem!.Rotation, 0);\n assert.deepEqual(elem!.BBoxLow, { X: -25, Y: -25 });\n assert.deepEqual(elem!.BBoxHigh, { X: 15, Y: 15 });\n assert.include(String(elem!.GeometryStream), \"\\\"bytes\\\"\");\n assert.include(String(elem!.BinProp), \"\\\"bytes\\\"\");\n assert.equal(elem!.StrProp, \"hello\");\n assert.equal(elem!.IntProp, 42);\n assert.equal(elem!.LongProp, 9007199254740991);\n assert.closeTo(elem!.DblProp as number, 3.14159265358979, 1e-10);\n assert.equal(elem!.BoolProp, true);\n assert.equal(elem!.DtProp, \"2024-01-15T12:00:00.000\");\n assert.deepEqual(elem!.Pt2dProp, { X: 1.5, Y: 2.5 });\n assert.deepEqual(elem!.Pt3dProp, { X: 3, Y: 4, Z: 5 });\n assert.deepEqual(elem!.StructProp, { X: 1, Y: 2, Z: 3, Label: \"origin\", Pt2d: { X: 0.5, Y: 0.5 }, Pt3d: { X: 1, Y: 2, Z: 3 } });\n assert.deepEqual(elem!.IntArrProp, [10, 20, 30]);\n assert.deepEqual(elem!.StrArrProp, [\"alpha\", \"beta\", \"gamma\"]);\n assert.deepEqual(elem!.StructArrProp, [\n { X: 0, Y: 1, Z: 2, Label: \"a\", Pt2d: { X: 0, Y: 0 }, Pt3d: { X: 0, Y: 0, Z: 0 } },\n { X: 3, Y: 4, Z: 5, Label: \"b\", Pt2d: { X: 1, Y: 1 }, Pt3d: { X: 1, Y: 1, Z: 1 } },\n ]);\n assert.equal(elem!.RelatedElem.Id, drawingCategoryId);\n assert.equal(rwIModel.getClassNameFromId(elem!.RelatedElem.RelECClassId), \"TestDomain:Test2dUsesElement\");\n // Object.keys\n assert.deepEqual(Object.keys(elem!).sort(), [\n \"ECInstanceId\", \"ECClassId\", \"Model\", \"LastMod\", \"CodeSpec\", \"CodeScope\", \"FederationGuid\", \"$meta\",\n \"Category\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"GeometryStream\",\n \"StrProp\", \"IntProp\", \"LongProp\", \"DblProp\", \"BoolProp\", \"DtProp\",\n \"Pt2dProp\", \"Pt3dProp\", \"StructProp\", \"IntArrProp\", \"StrArrProp\", \"StructArrProp\", \"RelatedElem\", \"BinProp\"\n ].sort());\n // $meta keys\n assert.deepEqual(Object.keys(elem!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(elem!.$meta.op, \"Inserted\");\n assert.equal(elem!.$meta.stage, \"New\");\n assert.deepEqual([...elem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual([...elem!.$meta.changeIndexes].sort(), [1, 2].sort());\n assert.isString(elem!.$meta.instanceKey);\n assert.equal(elem!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(elem!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...elem!.$meta.changeFetchedPropNames].sort(), [\n 'BBoxHigh', 'BBoxLow', 'BinProp', 'BoolProp', 'Category.Id', 'CodeScope.Id',\n 'CodeSpec.Id', 'CodeValue', 'DblProp', 'DtProp', 'ECClassId', 'ECInstanceId',\n 'FederationGuid', 'GeometryStream', 'IntArrProp', 'IntProp', 'JsonProperties',\n 'LastMod', 'LongProp', 'Model.Id', 'Origin', 'Parent', 'Pt2dProp', 'Pt3dProp',\n 'RelatedElem', 'Rotation', 'StrArrProp', 'StrProp', 'StructArrProp', 'StructProp.Label',\n 'StructProp.Pt2d', 'StructProp.Pt3d', 'StructProp.X', 'StructProp.Y', 'StructProp.Z',\n 'TypeDefinition', 'UserLabel'\n ].sort());\n assert.deepEqual(elem!.$meta.rowOptions, {});\n assert.equal(elem!.$meta.isIndirectChange, false);\n });\n\n it(\"txn1 insert-full | filter by className\", () => {\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createSqliteBackedCache());\n reader.setClassNameFilters(new Set([\"BisCore:DrawingModel\"]));\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n assert.equal(instances.length, 2);\n\n // --- instances[0]: DrawingModel Updated New ---\n const modelNew = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelNew!.ECClassId));\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n // Object.keys\n assert.deepEqual(Object.keys(modelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"GeometryGuid\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.equal(modelNew!.$meta.stage, \"New\");\n assert.deepEqual([...modelNew!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.deepEqual([...modelNew!.$meta.changeIndexes].sort(), [1].sort());\n assert.isString(modelNew!.$meta.instanceKey);\n assert.equal(modelNew!.$meta.instanceKey.split(`-`).length, 2);\n assert.equal(modelNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, {});\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // --- instances[1]: DrawingModel Updated Old ---\n const modelOld = instances.find((i) => i.ECInstanceId === drawingModelId && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.ECInstanceId, drawingModelId);\n assert.equal(\"BisCore:DrawingModel\", rwIModel.getClassNameFromId(modelOld!.ECClassId));\n // Object.keys\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n // $meta keys\n assert.deepEqual(Object.keys(modelOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"instanceKey\", \"propFilter\", \"changeFetchedPropNames\", \"rowOptions\", \"isIndirectChange\"].sort());\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.equal(modelOld!.$meta.stage, \"Old\");\n assert.deepEqual([...modelOld!.$meta.tables].sort(), [\"bis_Model\"].sort());\n assert.equal(modelOld!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual([...modelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelOld!.$meta.rowOptions, {});\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n });\n});\n\ndescribe(\"ChangesetReader — openFile + openGroup\", () => {\n let rwIModel: BriefcaseDb;\n let rwIModelId: string;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetOpenFileGroup\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"openFileGroup\", description: \"openFileGroup\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n\n txn = startTestTxn(rwIModel, \"ChangesetReader setup\");\n\n // Push 1: import schema + drawing model setup\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"SimpleElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Simple binary -->\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Point3d -->\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Array of GUIDs stored as strings -->\n <ECArrayProperty propertyName=\"GuidArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"OpenFileDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"OpenFileCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"OpenFileCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(0,128,255)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n await rwIModel.pushChanges({ description: \"setup\", accessToken: adminToken });\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"openFile reads insert and update changesets independently; openGroup reads both as a stream\", async () => {\n const adminToken = \"super manager token\";\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // --- Push 2: insert element — only Y and Z set on Pt3dProp, X omitted (defaults to 0) ---\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const elementId: Id64String = txn.insertElement({\n classFullName: \"TestDomain:SimpleElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n Pt3dProp: { y: 2.5, z: 3.7 },\n BinProp: new Uint8Array([1, 2, 3, 4]),\n GuidArrProp: [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ],\n } as any);\n txn.saveChanges(\"insert element\");\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n\n let changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n expect(changesets.length).to.equal(2);\n const insertCs = changesets[1];\n // === openFile: insert changeset ===\n {\n using reader = ChangesetReader.openFile({ db: rwIModel, fileName: insertCs.pathname, rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Inserted\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual(elemNew!.$meta.tables.sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.changeIndexes.sort(), [1, 2].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n expect(elemNew!.Category).to.exist;\n expect(elemNew!.CodeScope).to.exist;\n expect(elemNew!.CodeSpec).to.exist;\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Model).to.exist;\n expect(elemNew!.FederationGuid).to.exist;\n assert.isUndefined(elemNew!.Pt3dProp);\n assert.isNotNull(elemNew!.BinProp);\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([1, 2, 3, 4]));\n assert.deepEqual(elemNew!.GuidArrProp, [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ]);\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Model\", \"CodeSpec\",\n \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\", \"LastMod\",\n \"BinProp\", \"GuidArrProp\"].sort())\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp',\n 'Category.Id', 'CodeScope.Id', 'CodeSpec.Id', 'CodeValue',\n 'ECClassId', 'ECInstanceId', 'FederationGuid', 'GeometryStream', 'GuidArrProp',\n 'JsonProperties', 'LastMod', 'Model.Id', 'Origin', 'Parent', 'Pt3dProp', 'Rotation',\n 'TypeDefinition', 'UserLabel'].sort());\n }\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // --- Push 3: update element — change all custom props ---\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n Pt3dProp: { x: 1.0, y: 9.9, z: 7.7 },\n BinProp: new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]),\n GuidArrProp: [\n \"ffffffff-0000-1111-2222-333344445555\",\n ],\n });\n txn.saveChanges(\"update element\");\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // Download all changesets: [setup(0), insert(1), update(2)]\n changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n expect(changesets.length).to.equal(3);\n const updateCs = changesets[2];\n\n // === openFile: update changeset ===\n {\n using reader = ChangesetReader.openFile({ db: rwIModel, fileName: updateCs.pathname, rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n const elemOld = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(elemNew).to.exist;\n expect(elemOld).to.exist;\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Origin\",\n \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"Pt3dProp\", \"BinProp\", \"GuidArrProp\", \"$meta\", \"LastMod\"].sort());\n assert.deepEqual(elemNew!.Pt3dProp, { X: 1, Y: 9.9, Z: 7.7 });\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));\n assert.deepEqual(elemNew!.GuidArrProp, [\"ffffffff-0000-1111-2222-333344445555\"]);\n assert.deepEqual(elemNew!.Origin, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxLow, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxHigh, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.Rotation, 0);\n expect(elemNew!.LastMod).to.exist;\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp', 'ECInstanceId', 'GuidArrProp', 'LastMod', 'Origin', 'Pt3dProp', 'Rotation'].sort());\n\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.stage, \"Old\");\n assert.deepEqual(Object.keys(elemOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"BinProp\", \"GuidArrProp\", \"$meta\",\n \"LastMod\"].sort());\n assert.deepEqual(elemOld!.BinProp, new Uint8Array([1, 2, 3, 4]));\n assert.deepEqual(elemOld!.GuidArrProp, [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ]);\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n expect(elemOld!.LastMod).to.exist;\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp', 'ECInstanceId', 'GuidArrProp', 'LastMod', 'Origin', 'Pt3dProp', 'Rotation'].sort());\n }\n\n // === openGroup: insert + update as a single stream ===\n // After merging, the elem New key is shared between insert-New and update-New;\n // the update-New wins on overlapping props, so the final New reflects the updated state.\n // elem Old only comes from the update changeset.\n {\n using reader = ChangesetReader.openGroup({ db: rwIModel, changesetFiles: [insertCs.pathname, updateCs.pathname], rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n const elemOld = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(elemNew).to.exist;\n expect(elemOld).to.not.exist;\n // New merges insert + update; final values are from the update\n assert.deepEqual(elemNew!.Pt3dProp, { X: 1, Y: 9.9, Z: 7.7 });\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));\n assert.deepEqual(elemNew!.GuidArrProp, [\"ffffffff-0000-1111-2222-333344445555\"]);\n assert.deepEqual(elemNew!.Origin, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxLow, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxHigh, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.Rotation, 0);\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Category).to.exist;\n expect(elemNew!.CodeScope).to.exist;\n expect(elemNew!.CodeSpec).to.exist;\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Model).to.exist;\n expect(elemNew!.FederationGuid).to.exist;\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Inserted\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual(elemNew!.$meta.tables.sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.changeIndexes.sort(), [1, 2].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Model\", \"CodeSpec\",\n \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\", \"LastMod\",\n \"BinProp\", \"GuidArrProp\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"Pt3dProp\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow',\n 'BinProp', 'Category.Id', 'CodeScope.Id', 'CodeSpec.Id',\n 'CodeValue', 'ECClassId', 'ECInstanceId', 'FederationGuid', 'GeometryStream',\n 'GuidArrProp', 'JsonProperties', 'LastMod', 'Model.Id', 'Origin', 'Parent', 'Pt3dProp',\n 'Rotation', 'TypeDefinition', 'UserLabel'].sort());\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n }\n });\n});\n\ndescribe(\"ChangesetReader — openLocalChanges + openInmemoryChanges\", () => {\n let rwIModel: BriefcaseDb;\n let rwIModelId: string;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ECChangesetOpenFileGroup\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"openFileGroup\", description: \"openFileGroup\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader setup\");\n // Push 1: import schema + drawing model setup\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"SimpleElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <!-- Simple binary -->\n <ECProperty propertyName=\"BinProp\" typeName=\"binary\"/>\n <!-- Point3d -->\n <ECProperty propertyName=\"Pt3dProp\" typeName=\"point3d\"/>\n <!-- Array of GUIDs stored as strings -->\n <ECArrayProperty propertyName=\"GuidArrProp\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"OpenFileDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"OpenFileCategory\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"OpenFileCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(0,128,255)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n await rwIModel.pushChanges({ description: \"setup\", accessToken: adminToken });\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"opens local and in-memory changes\", async () => {\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const elementId: Id64String = txn.insertElement({\n classFullName: \"TestDomain:SimpleElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n Pt3dProp: { y: 2.5, z: 3.7 },\n BinProp: new Uint8Array([1, 2, 3, 4]),\n GuidArrProp: [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ],\n } as any);\n txn.saveChanges(\"insert element\");\n\n\n // === openFile: insert changeset ===\n {\n using reader = ChangesetReader.openLocalChanges({ db: rwIModel, rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createSqliteBackedCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Inserted\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual(elemNew!.$meta.tables.sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.changeIndexes.sort(), [1, 2].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n expect(elemNew!.Category).to.exist;\n expect(elemNew!.CodeScope).to.exist;\n expect(elemNew!.CodeSpec).to.exist;\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Model).to.exist;\n expect(elemNew!.FederationGuid).to.exist;\n assert.isUndefined(elemNew!.Pt3dProp);\n assert.isNotNull(elemNew!.BinProp);\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([1, 2, 3, 4]));\n assert.deepEqual(elemNew!.GuidArrProp, [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ]);\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Model\", \"CodeSpec\",\n \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\", \"LastMod\",\n \"BinProp\", \"GuidArrProp\"].sort())\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp',\n 'Category.Id', 'CodeScope.Id', 'CodeSpec.Id', 'CodeValue',\n 'ECClassId', 'ECInstanceId', 'FederationGuid', 'GeometryStream', 'GuidArrProp',\n 'JsonProperties', 'LastMod', 'Model.Id', 'Origin', 'Parent', 'Pt3dProp', 'Rotation',\n 'TypeDefinition', 'UserLabel'].sort());\n }\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // --- Push 3: update element — change all custom props ---\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n Pt3dProp: { x: 1.0, y: 9.9, z: 7.7 },\n BinProp: new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]),\n GuidArrProp: [\n \"ffffffff-0000-1111-2222-333344445555\",\n ],\n });\n\n // === openFile: update changeset ===\n {\n using reader = ChangesetReader.openInMemoryChanges({ db: rwIModel, rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createSqliteBackedCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n const elemOld = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(elemNew).to.exist;\n expect(elemOld).to.exist;\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.equal(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Origin\",\n \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"Pt3dProp\", \"BinProp\", \"GuidArrProp\", \"$meta\", \"LastMod\"].sort());\n assert.deepEqual(elemNew!.Pt3dProp, { X: 1, Y: 9.9, Z: 7.7 });\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));\n assert.deepEqual(elemNew!.GuidArrProp, [\"ffffffff-0000-1111-2222-333344445555\"]);\n assert.deepEqual(elemNew!.Origin, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxLow, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxHigh, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.Rotation, 0);\n expect(elemNew!.LastMod).to.exist;\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp', 'ECInstanceId', 'GuidArrProp', 'LastMod', 'Origin', 'Pt3dProp', 'Rotation'].sort());\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.stage, \"Old\");\n assert.deepEqual(Object.keys(elemOld!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"BinProp\", \"GuidArrProp\", \"$meta\",\n \"LastMod\"].sort());\n assert.deepEqual(elemOld!.BinProp, new Uint8Array([1, 2, 3, 4]));\n assert.deepEqual(elemOld!.GuidArrProp, [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"bbbbbbbb-cccc-dddd-eeee-ffffffffffff\",\n ]);\n expect(elemOld!.LastMod).to.exist;\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow', 'BinProp', 'ECInstanceId', 'GuidArrProp', 'LastMod', 'Origin', 'Pt3dProp', 'Rotation'].sort());\n }\n\n // === openGroup: insert + update as a single stream ===\n // After merging, the elem New key is shared between insert-New and update-New;\n // the update-New wins on overlapping props, so the final New reflects the updated state.\n // elem Old only comes from the update changeset.\n {\n using reader = ChangesetReader.openLocalChanges({ db: rwIModel, includeInMemoryChanges: true, rowOptions: { abbreviateBlobs: false } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createSqliteBackedCache());\n while (reader.step())\n pcu.appendFrom(reader);\n const instances = Array.from(pcu.instances);\n\n const elemNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n const elemOld = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(elemNew).to.exist;\n expect(elemOld).to.not.exist;\n // New merges insert + update; final values are from the update\n assert.deepEqual(elemNew!.Pt3dProp, { X: 1, Y: 9.9, Z: 7.7 });\n assert.deepEqual(elemNew!.BinProp, new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));\n assert.deepEqual(elemNew!.GuidArrProp, [\"ffffffff-0000-1111-2222-333344445555\"]);\n assert.deepEqual(elemNew!.Origin, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxLow, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.BBoxHigh, { X: 0, Y: 0 });\n assert.deepEqual(elemNew!.Rotation, 0);\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Category).to.exist;\n expect(elemNew!.CodeScope).to.exist;\n expect(elemNew!.CodeSpec).to.exist;\n expect(elemNew!.LastMod).to.exist;\n expect(elemNew!.Model).to.exist;\n expect(elemNew!.FederationGuid).to.exist;\n assert.deepEqual(Object.keys(elemNew!.$meta).sort(), [\"op\", \"tables\", \"changeIndexes\", \"stage\", \"propFilter\", \"rowOptions\", \"changeFetchedPropNames\", \"instanceKey\", \"isIndirectChange\"].sort());\n assert.equal(elemNew!.$meta.op, \"Inserted\");\n assert.equal(elemNew!.$meta.stage, \"New\");\n assert.deepEqual(elemNew!.$meta.tables.sort(), [\"bis_Element\", \"bis_GeometricElement2d\"].sort());\n assert.deepEqual(elemNew!.$meta.propFilter, PropertyFilter.All);\n assert.deepEqual(elemNew!.$meta.changeIndexes.sort(), [1, 2].sort());\n assert.deepEqual(elemNew!.$meta.rowOptions, { abbreviateBlobs: false });\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"Model\", \"CodeSpec\",\n \"CodeScope\", \"FederationGuid\", \"$meta\", \"Category\", \"LastMod\",\n \"BinProp\", \"GuidArrProp\", \"Origin\", \"Rotation\", \"BBoxLow\", \"BBoxHigh\", \"Pt3dProp\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), ['BBoxHigh', 'BBoxLow',\n 'BinProp', 'Category.Id', 'CodeScope.Id', 'CodeSpec.Id',\n 'CodeValue', 'ECClassId', 'ECInstanceId', 'FederationGuid', 'GeometryStream',\n 'GuidArrProp', 'JsonProperties', 'LastMod', 'Model.Id', 'Origin', 'Parent', 'Pt3dProp',\n 'Rotation', 'TypeDefinition', 'UserLabel'].sort());\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n }\n });\n});\n\ndescribe(\"ChangesetReader: behaviour in case imodel is not in sync with changeset file being read\", async () => {\n let rwIModel: BriefcaseDb;\n let rwIModelId: string;\n let elementId: Id64String;\n let drawingModelId: Id64String;\n let categoryId1: Id64String;\n let categoryId2: Id64String;\n let txn: EditTxn;\n\n before(async () => {\n HubMock.startup(\"ChangesetReaderBugsTest\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"bugTest\", description: \"BugTest\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReaderBugsTest setup\");\n // Push 1: import schema + set up drawing model and two categories\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"point2d\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n\n categoryId1 = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"Category1\")\n ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n categoryId2 = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"Category2\")\n ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(0,0,255)\").toJSON() }));\n\n txn.saveChanges(\"setup\");\n await rwIModel.pushChanges({ description: \"setup\", accessToken: adminToken });\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"openFile() reads the middle changeset of an insert → update → delete lifecycle\", async () => {\n const adminToken = \"super manager token\";\n // Push 2 (insert): insert element with category1\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray)\n geometryStream.push(IModelJson.Writer.toIModelJson(geom));\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n elementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: categoryId1,\n code: Code.createEmpty(),\n geom: geometryStream,\n s: { x: 1.5, y: 2.5 },\n } as any);\n assert.isTrue(Id64.isValidId64(elementId));\n txn.saveChanges(\"insert element\");\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 3 (update): change category to category2\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n category: categoryId2,\n });\n txn.saveChanges(\"update element\");\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the delete txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 4 (delete): delete the element\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.deleteElement(elementId);\n txn.saveChanges(\"delete element\");\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n // changesets: [setup, insert, update, delete] — 4 total; index 2 = update changeset\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n expect(changesets.length).to.equal(4);\n const middleChangeset = changesets[Math.floor(changesets.length / 2)]; // index 2 = update\n\n using reader = ChangesetReader.openFile({ db: rwIModel, fileName: middleChangeset.pathname, propFilter: PropertyFilter.InstanceKey, rowOptions: { classIdsToClassNames: true } });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n while (reader.step())\n pcu.appendFrom(reader);\n\n const instances = Array.from(pcu.instances);\n\n const bisElementOld = instances.filter((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n const bisElementNew = instances.filter((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(bisElementOld).to.exist;\n expect(bisElementNew).to.exist;\n expect(bisElementOld).to.have.lengthOf(2);\n expect(bisElementNew).to.have.lengthOf(2);\n // Why this is happening?\n // We have deleted the instance from the db when the changeset is opened\n // So we are unable to fetch the correct classId for the instance\n // and it is defaulting to the base class of the deleted instance which is \"BisCore.Element\" and \"BisCore.GeometricElement2d\" instead of \"TestDomain.Test2dElement\"\n // If the instance had not been deleted, we would have been able to fetch the correct classId for the instance and it would have been \"TestDomain.Test2dElement\"\n // And we would have just two entries for the instance with classId \"TestDomain.Test2dElement\" , one wioth stage \"New\" and other with \"old\"\n expect(bisElementNew.map((i => i.ECClassId)).sort()).to.deep.equal([\"BisCore.GeometricElement2d\", \"BisCore.Element\"].sort());\n expect(bisElementOld.map((i => i.ECClassId)).sort()).to.deep.equal([\"BisCore.GeometricElement2d\", \"BisCore.Element\"].sort());\n });\n\n it(\"openTxn() reads the middle txn of an insert → update → update lifecycle\", async () => {\n // Push 2 (insert): insert element with category1\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray)\n geometryStream.push(IModelJson.Writer.toIModelJson(geom));\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n elementId = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: categoryId1,\n code: Code.createEmpty(),\n geom: geometryStream,\n s: { x: 1.5, y: 2.5 },\n } as any);\n assert.isTrue(Id64.isValidId64(elementId));\n txn.saveChanges(\"insert element\");\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n s: { x: 100.0, y: 2.5 },\n });\n txn.saveChanges(\"update element\");\n const txnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n assert.isTrue(Id64.isValidId64(txnId));\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n s: { x: 100.0, y: 200.0 },\n });\n txn.saveChanges(\"update element\");\n\n using reader = ChangesetReader.openTxn({ db: rwIModel, txnId });\n using pcu = new PartialChangeUnifier(ChangeUnifierCache.createInMemoryCache());\n while (reader.step())\n pcu.appendFrom(reader);\n\n const instances = Array.from(pcu.instances);\n\n const elementOld = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n const elementNew = instances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(elementOld).to.exist;\n expect(elementNew).to.exist;\n // Here as we can see that we correctly captured old value of s.X which is 1.5 and new value of s.X which is 100.0\n // But the Y value, though same is a bit different, it is 200\n // Because in liveDB we have done another tyransaction after the one which we have opened\n // In that transaction we have updated the Y value to 200, so when we are fetching the changes for the opened transaction,\n // we are getting the latest value of Y which is 200 instead of 2.5\n assert.deepEqual(elementOld!.s, { X: 1.5, Y: 200 });\n assert.deepEqual(elementNew!.s, { X: 100, Y: 200 });\n // But we can find the exact stuff which actually changed and which we fetched from the changeset and not the live DB\n // using the changeFetchedPropNames, we can find that only s.X was changed in the changeset and s.Y was not changed in the changeset.\n expect(elementNew!.$meta.changeFetchedPropNames).to.include(\"s.X\");\n expect(elementNew!.$meta.changeFetchedPropNames).to.not.include(\"s.Y\");\n expect(elementOld!.$meta.changeFetchedPropNames).to.include(\"s.X\");\n expect(elementOld!.$meta.changeFetchedPropNames).to.not.include(\"s.Y\");\n });\n});\n\ndescribe(\"ChangesetReader: overflow table graceful recovery when ExclusiveRootClassId is NULL\", () => {\n let rwIModel: BriefcaseDb;\n let rwIModelId: string;\n let txn: EditTxn;\n let updateChangesetPathname: string;\n let id: string;\n\n before(async () => {\n HubMock.startup(\"ECChangesetOverflowNull\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const nProps = 36; // enough to spill into the overflow table\n\n rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"overflowNull\", description: \"OverflowNull\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"overflow null test\");\n\n // Import schema with class that spans the overflow table (36 properties)\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"OverflowNullCat\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"OverflowNullCat\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n\n const props = Array(nProps).fill(undefined).map((_, i) => ({ [`p${i}`]: `test_${i}` })).reduce((acc, curr) => ({ ...acc, ...curr }), {});\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 1: insert element\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n id = txn.insertElement({\n classFullName: \"TestDomain:Test2dElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n ...props,\n } as any);\n assert.isTrue(Id64.isValidId64(id));\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // Push 2: update element — this is the changeset we will read against the broken iModel\n const updatedProps = Object.assign(\n rwIModel.elements.getElementProps(id),\n Array(nProps).fill(undefined).map((_, i) => ({ [`p${i}`]: `updated_${i}` })).reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n );\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the update txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ exclusive: id });\n txn.updateElement(updatedProps);\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the delete txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 3: delete element (so the iModel is out of sync when we re-read push 2)\n await rwIModel.locks.acquireLocks({ exclusive: id });\n txn.deleteElement(id);\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n // changesets: [insert, update, delete] — index 1 = update changeset\n updateChangesetPathname = changesets[1].pathname;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"openFile() recovers gracefully when ExclusiveRootClassId is NULL for overflow table\", () => {\n /**\n * Simulate the broken state: clear ExclusiveRootClassId so the reader cannot\n * determine which derived class owns the overflow table rows.\n * The reader should fall back gracefully rather than crashing, and still\n * produce inserted/deleted instances for the overflow table rows.\n */\n expect(\n rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\"),\n ).to.equal(DbResult.BE_SQLITE_OK);\n\n let assertedOnOverflowTable = false;\n\n using reader = ChangesetReader.openFile({ db: rwIModel, fileName: updateChangesetPathname });\n while (reader.step()) {\n if (reader.tableName !== \"bis_GeometricElement2d_Overflow\")\n continue;\n\n assert.equal(reader.op, \"Updated\");\n\n // inserted (New stage)\n expect(reader.inserted).to.exist;\n assert.deepEqual(reader.inserted!.$meta.tables, [\"bis_GeometricElement2d_Overflow\"]);\n assert.equal(reader.inserted!.$meta.op, \"Updated\");\n assert.equal(reader.inserted!.$meta.stage, \"New\");\n assert.equal(reader.inserted!.ECInstanceId, id);\n assert.equal(rwIModel.getClassNameFromId(reader.inserted!.ECClassId), \"BisCore:GeometricElement2d\");\n\n // deleted (Old stage)\n expect(reader.deleted).to.exist;\n assert.deepEqual(reader.deleted!.$meta.tables, [\"bis_GeometricElement2d_Overflow\"]);\n assert.equal(reader.deleted!.$meta.op, \"Updated\");\n assert.equal(reader.deleted!.$meta.stage, \"Old\");\n assert.equal(reader.deleted!.ECInstanceId, id);\n assert.equal(rwIModel.getClassNameFromId(reader.deleted!.ECClassId), \"BisCore:GeometricElement2d\");\n\n assertedOnOverflowTable = true;\n }\n\n assert.isTrue(assertedOnOverflowTable, \"Expected at least one row from the overflow table\");\n });\n});\n\ndescribe(\"ChangesetReader: instance reused with a different class (class change in Updated row)\", () => {\n it(\"openFile() correctly identifies ECClassId change from T1 to T2 in a buggy changeset\", async () => {\n /**\n * Same scenario as ChangesetReader.test.ts: \"Instance update to a different class (bug)\".\n * Verifies ChangesetReader behaviour when an instance ID is reused with a different class.\n *\n * Steps:\n * 1. Import schema with two classes (T1 and T2) that inherit from GraphicalElement2d.\n * - T1 has property 'p' of type string\n * - T2 has property 'p' of type long\n * 2. Insert a T1 element, push changeset #1.\n * 3. Delete the T1 element, reset the ID sequence to force ID reuse, insert T2 with same ID, push changeset #2.\n *\n * ChangesetReader should:\n * - Report op=Updated for bis_Element and bis_GeometricElement2d rows.\n * - inserted.ECClassId resolves to T2, deleted.ECClassId resolves to T1.\n * - Property p: inserted carries the T2 integer value (1111), deleted carries the T1 string value (\"wwww\").\n */\n HubMock.startup(\"ChangesetReaderClassChange\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n\n const modelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"classChange\", description: \"ClassChange\", accessToken: adminToken });\n assert.isNotEmpty(modelId);\n\n let b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: modelId, accessToken: adminToken });\n let txn = startTestTxn(b1, \"class change test\");\n\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"T1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"T2\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p\" typeName=\"long\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n await importSchemaStrings(txn, [schema]);\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 1: insert T1 element\n await b1.locks.acquireLocks({ shared: drawingModelId });\n const elId = txn.insertElement({\n classFullName: \"TestDomain:T1\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n p: \"wwww\",\n } as any);\n assert.isTrue(Id64.isValidId64(elId));\n txn.saveChanges();\n await b1.pushChanges({ description: \"insert element\" });\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the delete txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Push 2: delete T1 element, reset ID sequence to force same ID, insert T2\n await b1.locks.acquireLocks({ shared: drawingModelId, exclusive: elId });\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n txn.deleteElement(elId);\n txn.saveChanges();\n\n // Force ID sequence so the next insert reuses elId\n const bid = BigInt(elId) - 1n;\n b1[_nativeDb].saveLocalValue(\"bis_elementidsequence\", bid.toString());\n txn.saveChanges();\n const fileName = b1[_nativeDb].getFilePath();\n txn.end();\n b1.close();\n\n b1 = await BriefcaseDb.open({ fileName });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n txn = startTestTxn(b1, \"class change test reopened\");\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the INSERT txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n const elId2 = txn.insertElement({\n classFullName: \"TestDomain:T2\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n p: 1111,\n } as any);\n expect(elId2).to.equal(elId);\n txn.saveChanges();\n await b1.pushChanges({ description: \"buggy changeset\" });\n\n const targetDir = path.join(KnownTestLocations.outputDir, modelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: modelId, targetDir });\n expect(changesets.length).to.equal(2);\n expect(changesets[0].description).to.equal(\"insert element\");\n expect(changesets[1].description).to.equal(\"buggy changeset\");\n\n // ChangesetReader reads ECClassId from the changeset data for each stage,\n // so it correctly sees T2 for the new (inserted) side and T1 for the old (deleted) side.\n let bisElementAsserted = false;\n let bisGeomElement2dAsserted = false;\n\n using reader = ChangesetReader.openFile({ db: b1, fileName: changesets[1].pathname });\n while (reader.step()) {\n if (reader.tableName === \"bis_Element\" && reader.op === \"Updated\") {\n bisElementAsserted = true;\n expect(reader.inserted).to.exist;\n expect(reader.deleted).to.exist;\n // ECInstanceId: PK was not changed in the update — only available on the Old side\n assert.equal(reader.deleted!.ECInstanceId, elId);\n // ECClassId correctly reflects the class change\n assert.equal(b1.getClassNameFromId(reader.inserted!.ECClassId), \"TestDomain:T2\");\n assert.equal(b1.getClassNameFromId(reader.deleted!.ECClassId), \"TestDomain:T1\");\n }\n if (reader.tableName === \"bis_GeometricElement2d\" && reader.op === \"Updated\") {\n bisGeomElement2dAsserted = true;\n expect(reader.inserted).to.exist;\n expect(reader.deleted).to.exist;\n // ECClassId correctly reflects the class change\n assert.equal(b1.getClassNameFromId(reader.inserted!.ECClassId), \"TestDomain:T2\");\n assert.equal(b1.getClassNameFromId(reader.deleted!.ECClassId), \"TestDomain:T1\");\n // Property 'p': T2 declares it as long (integer), T1 as string\n assert.equal(reader.inserted!.p, 1111);\n assert.equal(reader.deleted!.p, \"wwww\");\n }\n }\n\n assert.isTrue(bisElementAsserted, \"Expected an Updated row in bis_Element\");\n assert.isTrue(bisGeomElement2dAsserted, \"Expected an Updated row in bis_GeometricElement2d\");\n\n txn.end();\n b1.close();\n HubMock.shutdown();\n });\n});\n\ndescribe(\"ChangesetReader: overflow table insert and update and delete\", () => {\n let rwIModel: BriefcaseDb;\n let elementId: Id64String;\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let insertTxnId: string;\n let updateTxnId: string;\n let txn: EditTxn;\n\n const nProps = 36;\n const propName = (i: number) => `p${i}`;\n const insertVal = (i: number) => `insert-${i}`;\n const updateVal = (i: number) => `updated-${i}`;\n\n before(async () => {\n HubMock.startup(\"ECChangesetOverflowInsertUpdate\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"overflowInsertUpdate\", description: \"overflowInsertUpdate\", accessToken: adminToken });\n rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n txn = startTestTxn(rwIModel, \"ChangesetReader overflow insert/update\");\n\n // 36 string properties — enough to spill columns into bis_GeometricElement2d_Overflow\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"OverflowElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array.from({ length: nProps }, (_, i) => `<ECProperty propertyName=\"${propName(i)}\" typeName=\"string\"/>`).join(\"\\n \")}\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"OverflowDrawing\";\n [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n const foundCat = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"OverflowCat\");\n drawingCategoryId = foundCat ?? DrawingCategory.insert(txn, IModel.dictionaryId, \"OverflowCat\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(0,128,0)\").toJSON() }));\n txn.saveChanges(\"setup\");\n\n // Txn 2: insert element with every property populated\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const geom: GeometryStreamProps = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n ].map((a) => IModelJson.Writer.toIModelJson(a));\n const insertProps = Object.fromEntries(Array.from({ length: nProps }, (_, i) => [propName(i), insertVal(i)]));\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the insert txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n elementId = txn.insertElement({\n classFullName: \"TestDomain:OverflowElement\",\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom,\n ...insertProps,\n } as any);\n txn.saveChanges(\"insert overflow element\");\n insertTxnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the UPDATE txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n // Txn 3: update only the overflow-table properties (p34, p35 — the last two)\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.updateElement({\n ...rwIModel.elements.getElementProps(elementId),\n [propName(34)]: updateVal(34),\n [propName(35)]: updateVal(35),\n });\n txn.saveChanges(\"update overflow props\");\n updateTxnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n });\n\n after(() => {\n txn.end();\n rwIModel?.close();\n HubMock.shutdown();\n });\n\n it(\"txn | bis_GeometricElement2d_Overflow rows merged; overflow props correct in New and Old\", async () => {\n // --- update txn ---\n const updateInstances = readTxn(rwIModel, updateTxnId, undefined, { classIdsToClassNames: true });\n assert.equal(updateInstances.length, 4);\n\n // DrawingModel Updated New (indirect side-effect)\n const updateModelNew = updateInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"New\");\n expect(updateModelNew).to.exist;\n assert.equal(updateModelNew!.$meta.op, \"Updated\");\n assert.isString(updateModelNew!.LastMod);\n assert.deepEqual(Object.keys(updateModelNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual([...updateModelNew!.$meta.tables], [\"bis_Model\"]);\n assert.deepEqual([...updateModelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.deepEqual(updateModelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(updateModelNew!.$meta.isIndirectChange, true);\n\n // DrawingModel Updated Old\n const updateModelOld = updateInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"Old\");\n expect(updateModelOld).to.exist;\n assert.equal(updateModelOld!.$meta.op, \"Updated\");\n assert.isString(updateModelOld!.LastMod);\n assert.deepEqual(Object.keys(updateModelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\"].sort());\n assert.deepEqual([...updateModelOld!.$meta.tables], [\"bis_Model\"]);\n assert.deepEqual([...updateModelOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\"].sort());\n assert.equal(updateModelOld!.$meta.isIndirectChange, true);\n\n // OverflowElement Updated New\n const elemNew = updateInstances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(elemNew).to.exist;\n assert.equal(elemNew!.ECClassId, \"TestDomain.OverflowElement\");\n assert.equal(elemNew!.$meta.op, \"Updated\");\n assert.equal(elemNew!.$meta.isIndirectChange, false);\n assert.deepEqual(elemNew!.$meta.rowOptions, { classIdsToClassNames: true });\n // Only bis_Element (LastMod) and bis_GeometricElement2d_Overflow (p34, p35) were touched\n assert.deepEqual([...elemNew!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d_Overflow\"].sort());\n assert.deepEqual([...elemNew!.$meta.changeIndexes].sort(), [1, 2].sort());\n // changeFetchedPropNames: only the props that changed\n assert.deepEqual([...elemNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"p34\", \"p35\"].sort());\n // New stage has updated values for the two overflow props\n assert.equal(elemNew![propName(34)], updateVal(34));\n assert.equal(elemNew![propName(35)], updateVal(35));\n // Other props (p0–p33) are not present — not part of the delta\n assert.isUndefined(elemNew![propName(0)]);\n assert.deepEqual(Object.keys(elemNew!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"p34\", \"p35\", \"$meta\"].sort());\n\n // OverflowElement Updated Old\n const elemOld = updateInstances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(elemOld).to.exist;\n assert.equal(elemOld!.ECClassId, \"TestDomain.OverflowElement\");\n assert.equal(elemOld!.$meta.op, \"Updated\");\n assert.equal(elemOld!.$meta.isIndirectChange, false);\n assert.deepEqual([...elemOld!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d_Overflow\"].sort());\n assert.deepEqual([...elemOld!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"p34\", \"p35\"].sort());\n // Old stage has the pre-update (insert) values for the two overflow props\n assert.equal(elemOld![propName(34)], insertVal(34));\n assert.equal(elemOld![propName(35)], insertVal(35));\n assert.isUndefined(elemOld![propName(0)]);\n assert.deepEqual(Object.keys(elemOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"p34\", \"p35\", \"$meta\"].sort());\n\n // --- insert txn ---\n const insertInstances = readTxn(rwIModel, insertTxnId, undefined, { classIdsToClassNames: true });\n assert.equal(insertInstances.length, 3);\n\n // DrawingModel Updated New (indirect side-effect of inserting into the model)\n const modelNew = insertInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"New\");\n expect(modelNew).to.exist;\n assert.equal(modelNew!.$meta.op, \"Updated\");\n assert.isString(modelNew!.LastMod);\n assert.isString(modelNew!.GeometryGuid);\n assert.deepEqual([...modelNew!.$meta.tables], [\"bis_Model\"]);\n assert.deepEqual([...modelNew!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(modelNew!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(modelNew!.$meta.isIndirectChange, true);\n\n // DrawingModel Updated Old\n const modelOld = insertInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"Old\");\n expect(modelOld).to.exist;\n assert.equal(modelOld!.$meta.op, \"Updated\");\n assert.deepEqual(Object.keys(modelOld!).sort(), [\"ECInstanceId\", \"ECClassId\", \"$meta\"].sort());\n assert.deepEqual([...modelOld!.$meta.tables], [\"bis_Model\"]);\n assert.equal(modelOld!.$meta.isIndirectChange, true);\n\n // OverflowElement Inserted New — key assertions\n const insertElem = insertInstances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"New\");\n expect(insertElem).to.exist;\n assert.equal(insertElem!.ECClassId, \"TestDomain.OverflowElement\");\n assert.equal(insertElem!.$meta.op, \"Inserted\");\n assert.equal(insertElem!.$meta.stage, \"New\");\n assert.equal(insertElem!.$meta.isIndirectChange, false);\n assert.deepEqual(insertElem!.$meta.rowOptions, { classIdsToClassNames: true });\n\n // All three physical tables (including overflow) contributed to this insert\n assert.deepEqual([...insertElem!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\", \"bis_GeometricElement2d_Overflow\"].sort());\n assert.deepEqual([...insertElem!.$meta.changeIndexes].sort(), [1, 2, 3].sort());\n\n // changeFetchedPropNames includes all 36 domain props\n const fetchedProps = [...insertElem!.$meta.changeFetchedPropNames];\n for (let i = 0; i < nProps; i++) {\n assert.include(fetchedProps, propName(i), `changeFetchedPropNames should contain p${i}`);\n }\n\n // All 36 domain props carry the insert values\n for (let i = 0; i < nProps; i++) {\n assert.equal(insertElem![propName(i)], insertVal(i), `p${i} should be '${insertVal(i)}'`);\n }\n\n // Spot-check BIS properties\n assert.equal(insertElem!.Model.Id, drawingModelId);\n assert.equal(insertElem!.Model.RelECClassId, \"BisCore.ModelContainsElements\");\n assert.equal(insertElem!.Category.Id, drawingCategoryId);\n assert.equal(insertElem!.Category.RelECClassId, \"BisCore.GeometricElement2dIsInCategory\");\n assert.equal(insertElem!.CodeSpec.Id, \"0x1\");\n assert.equal(insertElem!.CodeSpec.RelECClassId, \"BisCore.CodeSpecSpecifiesCode\");\n assert.equal(insertElem!.CodeScope.Id, \"0x1\");\n assert.equal(insertElem!.CodeScope.RelECClassId, \"BisCore.ElementScopesCode\");\n assert.isString(insertElem!.FederationGuid);\n assert.isString(insertElem!.LastMod);\n assert.deepEqual(insertElem!.Origin, { X: 0, Y: 0 });\n assert.equal(insertElem!.Rotation, 0);\n assert.deepEqual(insertElem!.BBoxLow, { X: -5, Y: -5 });\n assert.deepEqual(insertElem!.BBoxHigh, { X: 5, Y: 5 });\n assert.include(String(insertElem!.GeometryStream), \"\\\"bytes\\\"\");\n\n // --- delete txn ---\n // Wait so that LastMod on bis_Model gets a distinct timestamp before the delete txn\n await new Promise((resolve) => setTimeout(resolve, 300));\n await rwIModel.locks.acquireLocks({ exclusive: elementId });\n txn.deleteElement(elementId);\n txn.saveChanges(\"delete overflow element\");\n const deleteTxnId = rwIModel.txns.getLastSavedTxnProps()!.id;\n\n const deleteInstances = readTxn(rwIModel, deleteTxnId, undefined, { classIdsToClassNames: true });\n // DrawingModel Updated New + Old (indirect) + OverflowElement Deleted Old\n assert.equal(deleteInstances.length, 3);\n\n // DrawingModel Updated New (indirect side-effect)\n const updateModelNewForDelete = deleteInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"New\");\n expect(updateModelNewForDelete).to.exist;\n assert.equal(updateModelNewForDelete!.$meta.op, \"Updated\");\n assert.isString(updateModelNewForDelete!.LastMod);\n assert.isString(updateModelNewForDelete!.GeometryGuid);\n assert.deepEqual(Object.keys(updateModelNewForDelete!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\", \"GeometryGuid\"].sort());\n assert.deepEqual([...updateModelNewForDelete!.$meta.tables], [\"bis_Model\"]);\n assert.deepEqual([...updateModelNewForDelete!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.deepEqual(updateModelNewForDelete!.$meta.rowOptions, { classIdsToClassNames: true });\n assert.equal(updateModelNewForDelete!.$meta.isIndirectChange, true);\n\n // DrawingModel Updated Old\n const updateModelOldForDelete = deleteInstances.find((i) => i.ECClassId === \"BisCore.DrawingModel\" && i.$meta.stage === \"Old\");\n expect(updateModelOldForDelete).to.exist;\n assert.equal(updateModelOldForDelete!.$meta.op, \"Updated\");\n assert.isString(updateModelOldForDelete!.LastMod);\n assert.isString(updateModelNewForDelete!.GeometryGuid);\n assert.deepEqual(Object.keys(updateModelOldForDelete!).sort(), [\"ECInstanceId\", \"ECClassId\", \"LastMod\", \"$meta\", \"GeometryGuid\"].sort());\n assert.deepEqual([...updateModelOldForDelete!.$meta.tables], [\"bis_Model\"]);\n assert.deepEqual([...updateModelOldForDelete!.$meta.changeFetchedPropNames].sort(), [\"ECInstanceId\", \"LastMod\", \"GeometryGuid\"].sort());\n assert.equal(updateModelOldForDelete!.$meta.isIndirectChange, true);\n\n // OverflowElement Deleted Old\n const deletedElemOld = deleteInstances.find((i) => i.ECInstanceId === elementId && i.$meta.stage === \"Old\");\n expect(deletedElemOld).to.exist;\n assert.equal(deletedElemOld!.ECClassId, \"TestDomain.OverflowElement\");\n assert.equal(deletedElemOld!.$meta.op, \"Deleted\");\n assert.equal(deletedElemOld!.$meta.stage, \"Old\");\n assert.equal(deletedElemOld!.$meta.isIndirectChange, false);\n assert.deepEqual(deletedElemOld!.$meta.rowOptions, { classIdsToClassNames: true });\n\n // All three physical tables contributed to the delete row\n assert.deepEqual([...deletedElemOld!.$meta.tables].sort(), [\"bis_Element\", \"bis_GeometricElement2d\", \"bis_GeometricElement2d_Overflow\"].sort());\n\n // All 36 domain props are recorded in changeFetchedPropNames\n const deleteFetchedProps = [...deletedElemOld!.$meta.changeFetchedPropNames];\n for (let i = 0; i < nProps; i++) {\n assert.include(deleteFetchedProps, propName(i), `changeFetchedPropNames should contain p${i}`);\n }\n\n // p0–p33 still carry the original insert values; p34/p35 carry the updated values\n for (let i = 0; i < 34; i++) {\n assert.equal(deletedElemOld![propName(i)], insertVal(i), `p${i} should be '${insertVal(i)}'`);\n }\n assert.equal(deletedElemOld![propName(34)], updateVal(34));\n assert.equal(deletedElemOld![propName(35)], updateVal(35));\n\n // Spot-check BIS properties\n assert.equal(deletedElemOld!.Model.Id, drawingModelId);\n assert.equal(deletedElemOld!.Model.RelECClassId, \"BisCore.ModelContainsElements\");\n assert.equal(deletedElemOld!.Category.Id, drawingCategoryId);\n assert.equal(deletedElemOld!.Category.RelECClassId, \"BisCore.GeometricElement2dIsInCategory\");\n assert.equal(deletedElemOld!.CodeSpec.Id, \"0x1\");\n assert.equal(deletedElemOld!.CodeSpec.RelECClassId, \"BisCore.CodeSpecSpecifiesCode\");\n assert.equal(deletedElemOld!.CodeScope.Id, \"0x1\");\n assert.equal(deletedElemOld!.CodeScope.RelECClassId, \"BisCore.ElementScopesCode\");\n assert.isString(deletedElemOld!.FederationGuid);\n assert.isString(deletedElemOld!.LastMod);\n assert.deepEqual(deletedElemOld!.Origin, { X: 0, Y: 0 });\n assert.equal(deletedElemOld!.Rotation, 0);\n assert.deepEqual(deletedElemOld!.BBoxLow, { X: -5, Y: -5 });\n assert.deepEqual(deletedElemOld!.BBoxHigh, { X: 5, Y: 5 });\n assert.include(String(deletedElemOld!.GeometryStream), \"\\\"bytes\\\"\");\n });\n});\n\ndescribe(\"ChangesetReader: invalid inputs\", () => {\n let iModel: BriefcaseDb;\n let txn: EditTxn;\n let validChangesetPath: string;\n\n before(async () => {\n HubMock.startup(\"ChangesetReaderInvalidInputs\", KnownTestLocations.outputDir);\n const adminToken = \"super manager token\";\n const iTwinId = HubMock.iTwinId;\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: \"invalidInputs\", accessToken: adminToken });\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\n txn = startTestTxn(iModel, \"ChangesetReader invalid inputs setup\");\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Push one changeset so we have a valid .changeset file to reference.\n await iModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, Code.createEmpty(), true);\n txn.saveChanges(\"setup\");\n await iModel.pushChanges({ description: \"setup\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, iModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId, targetDir });\n assert.isAtLeast(changesets.length, 1);\n validChangesetPath = changesets[0].pathname;\n });\n\n after(() => {\n txn.end();\n iModel?.close();\n HubMock.shutdown();\n });\n\n // --- openFile ---\n\n it(\"openFile: non-existent file path throws\", () => {\n expect(() =>\n ChangesetReader.openFile({ db: iModel, fileName: \"/does/not/exist.changeset\" }),\n ).to.throw();\n });\n\n it(\"openFile: empty file name throws\", () => {\n expect(() =>\n ChangesetReader.openFile({ db: iModel, fileName: \"\" }),\n ).to.throw();\n });\n\n it(\"openFile: path points to a directory throws\", () => {\n expect(() =>\n ChangesetReader.openFile({ db: iModel, fileName: KnownTestLocations.outputDir }),\n ).to.throw();\n });\n\n it(\"openFile: path points to a plain text file (not .changeset) throws\", () => {\n const txtFile = path.join(KnownTestLocations.outputDir, \"not_a_changeset.txt\");\n // Write a small non-changeset file and expect the reader to reject it.\n fs.writeFileSync(txtFile, \"this is not a changeset\");\n\n using reader = ChangesetReader.openFile({ db: iModel, fileName: txtFile });\n assert.equal(reader.step(), false, \"Expected step() to return false for an invalid changeset file\");\n assert.equal(reader.step(), false, \"Expected step() to return false for an invalid changeset file\");\n assert.equal(reader.step(), false, \"Expected step() to return false for an invalid changeset file\");\n assert.equal(reader.step(), false, \"Expected step() to return false for an invalid changeset file\");\n });\n\n // --- openGroup ---\n\n it(\"openGroup: empty changesetFiles array throws synchronously\", () => {\n expect(() =>\n ChangesetReader.openGroup({ db: iModel, changesetFiles: [] }),\n ).to.throw();\n });\n\n it(\"openGroup: single non-existent path throws\", () => {\n expect(() =>\n ChangesetReader.openGroup({ db: iModel, changesetFiles: [\"/does/not/exist.changeset\"] }),\n ).to.throw();\n });\n\n it(\"openGroup: first file valid, second file non-existent throws\", () => {\n expect(() =>\n ChangesetReader.openGroup({ db: iModel, changesetFiles: [validChangesetPath, \"/does/not/exist.changeset\"] }),\n ).to.throw();\n });\n\n it(\"openGroup: file list containing an empty string throws\", () => {\n expect(() =>\n ChangesetReader.openGroup({ db: iModel, changesetFiles: [\"\"] }),\n ).to.throw();\n });\n\n it(\"openGroup: duplicate paths reads the same changeset twice without throwing\", () => {\n // Passing the same changeset file twice is unusual but not necessarily an error at open time.\n // The reader should open and step without throwing; the caller is responsible for any semantic issues.\n expect(() => {\n using reader = ChangesetReader.openGroup({ db: iModel, changesetFiles: [validChangesetPath, validChangesetPath] });\n while (reader.step()) { /* drain */ }\n }).to.not.throw();\n });\n\n // --- openTxn ---\n\n it(\"openTxn: non-existent txn id throws\", () => {\n expect(() =>\n ChangesetReader.openTxn({ db: iModel, txnId: \"0xdeadbeef\" }),\n ).to.throw();\n });\n\n it(\"openTxn: empty string txn id throws\", () => {\n expect(() =>\n ChangesetReader.openTxn({ db: iModel, txnId: \"\" }),\n ).to.throw();\n });\n\n // --- property accessors before step() ---\n\n it(\"accessing tableName before step() throws\", () => {\n using reader = ChangesetReader.openFile({ db: iModel, fileName: validChangesetPath });\n expect(() => reader.tableName).to.throw();\n });\n\n it(\"accessing isECTable before step() throws\", () => {\n using reader = ChangesetReader.openFile({ db: iModel, fileName: validChangesetPath });\n expect(() => reader.isECTable).to.throw();\n });\n\n it(\"accessing isIndirectChange before step() throws\", () => {\n using reader = ChangesetReader.openFile({ db: iModel, fileName: validChangesetPath });\n expect(() => reader.isIndirectChange).to.throw();\n });\n});\n\n"]}