@itwin/core-backend 5.15.0-dev.2 → 5.15.0-dev.20

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 (272) hide show
  1. package/CHANGELOG.md +52 -1
  2. package/lib/cjs/BlobContainerService.d.ts +2 -0
  3. package/lib/cjs/BlobContainerService.d.ts.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.d.ts +4 -3
  6. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseManager.js +39 -9
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/ChangeUnifier.d.ts +82 -0
  10. package/lib/cjs/ChangeUnifier.d.ts.map +1 -0
  11. package/lib/cjs/ChangeUnifier.js +163 -0
  12. package/lib/cjs/ChangeUnifier.js.map +1 -0
  13. package/lib/cjs/ChangesetReader.d.ts +21 -2
  14. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  15. package/lib/cjs/ChangesetReader.js +37 -1
  16. package/lib/cjs/ChangesetReader.js.map +1 -1
  17. package/lib/cjs/ChangesetReaderTypes.d.ts +1 -1
  18. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  19. package/lib/cjs/CloudSqlite.d.ts +15 -0
  20. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  21. package/lib/cjs/CloudSqlite.js.map +1 -1
  22. package/lib/cjs/ECDb.d.ts +1 -0
  23. package/lib/cjs/ECDb.d.ts.map +1 -1
  24. package/lib/cjs/ECDb.js +4 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSqlRowExecutor.d.ts +3 -3
  27. package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -1
  28. package/lib/cjs/ECSqlRowExecutor.js +2 -2
  29. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.d.ts +5 -0
  31. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  32. package/lib/cjs/ECSqlStatement.js +15 -2
  33. package/lib/cjs/ECSqlStatement.js.map +1 -1
  34. package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
  35. package/lib/cjs/ECSqlSyncReader.js +2 -2
  36. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  37. package/lib/cjs/EditTxn.d.ts +61 -19
  38. package/lib/cjs/EditTxn.d.ts.map +1 -1
  39. package/lib/cjs/EditTxn.js +84 -29
  40. package/lib/cjs/EditTxn.js.map +1 -1
  41. package/lib/cjs/Element.d.ts +29 -2
  42. package/lib/cjs/Element.d.ts.map +1 -1
  43. package/lib/cjs/Element.js +38 -2
  44. package/lib/cjs/Element.js.map +1 -1
  45. package/lib/cjs/GeoCoordConfig.d.ts +1 -0
  46. package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
  47. package/lib/cjs/GeoCoordConfig.js +12 -8
  48. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  49. package/lib/cjs/GeographicCRSServices.d.ts +50 -2
  50. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  51. package/lib/cjs/GeographicCRSServices.js +11 -1
  52. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  53. package/lib/cjs/IModelDb.d.ts +22 -9
  54. package/lib/cjs/IModelDb.d.ts.map +1 -1
  55. package/lib/cjs/IModelDb.js +54 -12
  56. package/lib/cjs/IModelDb.js.map +1 -1
  57. package/lib/cjs/NativeHost.d.ts.map +1 -1
  58. package/lib/cjs/NativeHost.js +5 -1
  59. package/lib/cjs/NativeHost.js.map +1 -1
  60. package/lib/cjs/Relationship.d.ts +28 -0
  61. package/lib/cjs/Relationship.d.ts.map +1 -1
  62. package/lib/cjs/Relationship.js +78 -0
  63. package/lib/cjs/Relationship.js.map +1 -1
  64. package/lib/cjs/SchemaSync.d.ts.map +1 -1
  65. package/lib/cjs/SchemaSync.js +1 -0
  66. package/lib/cjs/SchemaSync.js.map +1 -1
  67. package/lib/cjs/TxnManager.d.ts +126 -89
  68. package/lib/cjs/TxnManager.d.ts.map +1 -1
  69. package/lib/cjs/TxnManager.js +114 -76
  70. package/lib/cjs/TxnManager.js.map +1 -1
  71. package/lib/cjs/ViewStateHydrator.d.ts.map +1 -1
  72. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  73. package/lib/cjs/ViewStore.d.ts.map +1 -1
  74. package/lib/cjs/ViewStore.js +62 -19
  75. package/lib/cjs/ViewStore.js.map +1 -1
  76. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  77. package/lib/cjs/annotations/LeaderGeometry.js +3 -0
  78. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  79. package/lib/cjs/core-backend.d.ts +1 -0
  80. package/lib/cjs/core-backend.d.ts.map +1 -1
  81. package/lib/cjs/core-backend.js +1 -0
  82. package/lib/cjs/core-backend.js.map +1 -1
  83. package/lib/cjs/internal/BriefcaseUtils.d.ts +19 -0
  84. package/lib/cjs/internal/BriefcaseUtils.d.ts.map +1 -0
  85. package/lib/cjs/internal/BriefcaseUtils.js +65 -0
  86. package/lib/cjs/internal/BriefcaseUtils.js.map +1 -0
  87. package/lib/cjs/internal/QueryMetadataCache.d.ts +44 -0
  88. package/lib/cjs/internal/QueryMetadataCache.d.ts.map +1 -0
  89. package/lib/cjs/internal/QueryMetadataCache.js +107 -0
  90. package/lib/cjs/internal/QueryMetadataCache.js.map +1 -0
  91. package/lib/cjs/internal/Symbols.d.ts +9 -0
  92. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  93. package/lib/cjs/internal/Symbols.js +10 -1
  94. package/lib/cjs/internal/Symbols.js.map +1 -1
  95. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  96. package/lib/cjs/internal/workspace/WorkspaceImpl.js +20 -6
  97. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  98. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +6 -6
  99. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  100. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  101. package/lib/cjs/workspace/SettingsEditor.d.ts +4 -3
  102. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
  103. package/lib/cjs/workspace/SettingsEditor.js +7 -5
  104. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  105. package/lib/esm/BlobContainerService.d.ts +2 -0
  106. package/lib/esm/BlobContainerService.d.ts.map +1 -1
  107. package/lib/esm/BlobContainerService.js.map +1 -1
  108. package/lib/esm/BriefcaseManager.d.ts +4 -3
  109. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  110. package/lib/esm/BriefcaseManager.js +40 -10
  111. package/lib/esm/BriefcaseManager.js.map +1 -1
  112. package/lib/esm/ChangeUnifier.d.ts +82 -0
  113. package/lib/esm/ChangeUnifier.d.ts.map +1 -0
  114. package/lib/esm/ChangeUnifier.js +159 -0
  115. package/lib/esm/ChangeUnifier.js.map +1 -0
  116. package/lib/esm/ChangesetReader.d.ts +21 -2
  117. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  118. package/lib/esm/ChangesetReader.js +38 -2
  119. package/lib/esm/ChangesetReader.js.map +1 -1
  120. package/lib/esm/ChangesetReaderTypes.d.ts +1 -1
  121. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  122. package/lib/esm/CloudSqlite.d.ts +15 -0
  123. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  124. package/lib/esm/CloudSqlite.js.map +1 -1
  125. package/lib/esm/ECDb.d.ts +1 -0
  126. package/lib/esm/ECDb.d.ts.map +1 -1
  127. package/lib/esm/ECDb.js +4 -1
  128. package/lib/esm/ECDb.js.map +1 -1
  129. package/lib/esm/ECSqlRowExecutor.d.ts +3 -3
  130. package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -1
  131. package/lib/esm/ECSqlRowExecutor.js +2 -2
  132. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  133. package/lib/esm/ECSqlStatement.d.ts +5 -0
  134. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  135. package/lib/esm/ECSqlStatement.js +15 -2
  136. package/lib/esm/ECSqlStatement.js.map +1 -1
  137. package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
  138. package/lib/esm/ECSqlSyncReader.js +3 -3
  139. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  140. package/lib/esm/EditTxn.d.ts +61 -19
  141. package/lib/esm/EditTxn.d.ts.map +1 -1
  142. package/lib/esm/EditTxn.js +85 -30
  143. package/lib/esm/EditTxn.js.map +1 -1
  144. package/lib/esm/Element.d.ts +29 -2
  145. package/lib/esm/Element.d.ts.map +1 -1
  146. package/lib/esm/Element.js +41 -5
  147. package/lib/esm/Element.js.map +1 -1
  148. package/lib/esm/GeoCoordConfig.d.ts +1 -0
  149. package/lib/esm/GeoCoordConfig.d.ts.map +1 -1
  150. package/lib/esm/GeoCoordConfig.js +12 -8
  151. package/lib/esm/GeoCoordConfig.js.map +1 -1
  152. package/lib/esm/GeographicCRSServices.d.ts +50 -2
  153. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  154. package/lib/esm/GeographicCRSServices.js +10 -1
  155. package/lib/esm/GeographicCRSServices.js.map +1 -1
  156. package/lib/esm/IModelDb.d.ts +22 -9
  157. package/lib/esm/IModelDb.d.ts.map +1 -1
  158. package/lib/esm/IModelDb.js +56 -14
  159. package/lib/esm/IModelDb.js.map +1 -1
  160. package/lib/esm/NativeHost.d.ts.map +1 -1
  161. package/lib/esm/NativeHost.js +5 -1
  162. package/lib/esm/NativeHost.js.map +1 -1
  163. package/lib/esm/Relationship.d.ts +28 -0
  164. package/lib/esm/Relationship.d.ts.map +1 -1
  165. package/lib/esm/Relationship.js +78 -0
  166. package/lib/esm/Relationship.js.map +1 -1
  167. package/lib/esm/SchemaSync.d.ts.map +1 -1
  168. package/lib/esm/SchemaSync.js +1 -0
  169. package/lib/esm/SchemaSync.js.map +1 -1
  170. package/lib/esm/TxnManager.d.ts +126 -89
  171. package/lib/esm/TxnManager.d.ts.map +1 -1
  172. package/lib/esm/TxnManager.js +116 -78
  173. package/lib/esm/TxnManager.js.map +1 -1
  174. package/lib/esm/ViewStateHydrator.d.ts.map +1 -1
  175. package/lib/esm/ViewStateHydrator.js.map +1 -1
  176. package/lib/esm/ViewStore.d.ts.map +1 -1
  177. package/lib/esm/ViewStore.js +62 -19
  178. package/lib/esm/ViewStore.js.map +1 -1
  179. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  180. package/lib/esm/annotations/LeaderGeometry.js +3 -0
  181. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  182. package/lib/esm/core-backend.d.ts +1 -0
  183. package/lib/esm/core-backend.d.ts.map +1 -1
  184. package/lib/esm/core-backend.js +1 -0
  185. package/lib/esm/core-backend.js.map +1 -1
  186. package/lib/esm/internal/BriefcaseUtils.d.ts +19 -0
  187. package/lib/esm/internal/BriefcaseUtils.d.ts.map +1 -0
  188. package/lib/esm/internal/BriefcaseUtils.js +61 -0
  189. package/lib/esm/internal/BriefcaseUtils.js.map +1 -0
  190. package/lib/esm/internal/QueryMetadataCache.d.ts +44 -0
  191. package/lib/esm/internal/QueryMetadataCache.d.ts.map +1 -0
  192. package/lib/esm/internal/QueryMetadataCache.js +103 -0
  193. package/lib/esm/internal/QueryMetadataCache.js.map +1 -0
  194. package/lib/esm/internal/Symbols.d.ts +9 -0
  195. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  196. package/lib/esm/internal/Symbols.js +9 -0
  197. package/lib/esm/internal/Symbols.js.map +1 -1
  198. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  199. package/lib/esm/internal/workspace/WorkspaceImpl.js +20 -6
  200. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  201. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +6 -6
  202. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  203. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  204. package/lib/esm/test/annotations/LeaderGeometry.test.js +15 -1
  205. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  206. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +144 -30
  207. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  208. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +140 -0
  209. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  210. package/lib/esm/test/ecdb/QueryMetadataCache.test.d.ts +2 -0
  211. package/lib/esm/test/ecdb/QueryMetadataCache.test.d.ts.map +1 -0
  212. package/lib/esm/test/ecdb/QueryMetadataCache.test.js +630 -0
  213. package/lib/esm/test/ecdb/QueryMetadataCache.test.js.map +1 -0
  214. package/lib/esm/test/element/DeleteDefinitionElements.test.js +403 -249
  215. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  216. package/lib/esm/test/element/ElementSubModelInsert.test.d.ts +2 -0
  217. package/lib/esm/test/element/ElementSubModelInsert.test.d.ts.map +1 -0
  218. package/lib/esm/test/element/ElementSubModelInsert.test.js +183 -0
  219. package/lib/esm/test/element/ElementSubModelInsert.test.js.map +1 -0
  220. package/lib/esm/test/element/RelationshipBatchLookup.test.d.ts +2 -0
  221. package/lib/esm/test/element/RelationshipBatchLookup.test.d.ts.map +1 -0
  222. package/lib/esm/test/element/RelationshipBatchLookup.test.js +202 -0
  223. package/lib/esm/test/element/RelationshipBatchLookup.test.js.map +1 -0
  224. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +187 -1
  225. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  226. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.d.ts +2 -0
  227. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.d.ts.map +1 -0
  228. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.js +142 -0
  229. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.js.map +1 -0
  230. package/lib/esm/test/imodel/IModelGeolocation.test.js +13 -11
  231. package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -1
  232. package/lib/esm/test/imodel/IModelProps.test.d.ts +2 -0
  233. package/lib/esm/test/imodel/IModelProps.test.d.ts.map +1 -0
  234. package/lib/esm/test/imodel/IModelProps.test.js +411 -0
  235. package/lib/esm/test/imodel/IModelProps.test.js.map +1 -0
  236. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.d.ts +2 -0
  237. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.d.ts.map +1 -0
  238. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.js +240 -0
  239. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.js.map +1 -0
  240. package/lib/esm/test/schema/SchemaViewValidation.test.js +2 -8
  241. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  242. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.d.ts +2 -0
  243. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.d.ts.map +1 -0
  244. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.js +159 -0
  245. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.js.map +1 -0
  246. package/lib/esm/test/standalone/ChangeUnifier.test.d.ts +2 -0
  247. package/lib/esm/test/standalone/ChangeUnifier.test.d.ts.map +1 -0
  248. package/lib/esm/test/standalone/ChangeUnifier.test.js +732 -0
  249. package/lib/esm/test/standalone/ChangeUnifier.test.js.map +1 -0
  250. package/lib/esm/test/standalone/DeleteElements.test.js +962 -83
  251. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  252. package/lib/esm/test/standalone/EditTxn.test.js +72 -1
  253. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  254. package/lib/esm/test/standalone/GeoCoordConfig.test.d.ts +2 -0
  255. package/lib/esm/test/standalone/GeoCoordConfig.test.d.ts.map +1 -0
  256. package/lib/esm/test/standalone/GeoCoordConfig.test.js +158 -0
  257. package/lib/esm/test/standalone/GeoCoordConfig.test.js.map +1 -0
  258. package/lib/esm/test/standalone/SessionApplyIndirect.test.d.ts +2 -0
  259. package/lib/esm/test/standalone/SessionApplyIndirect.test.d.ts.map +1 -0
  260. package/lib/esm/test/standalone/SessionApplyIndirect.test.js +211 -0
  261. package/lib/esm/test/standalone/SessionApplyIndirect.test.js.map +1 -0
  262. package/lib/esm/test/standalone/ViewStoreDb.test.js +53 -0
  263. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  264. package/lib/esm/test/workspace/SettingsContainers.test.d.ts +2 -0
  265. package/lib/esm/test/workspace/SettingsContainers.test.d.ts.map +1 -0
  266. package/lib/esm/test/workspace/SettingsContainers.test.js +95 -0
  267. package/lib/esm/test/workspace/SettingsContainers.test.js.map +1 -0
  268. package/lib/esm/workspace/SettingsEditor.d.ts +4 -3
  269. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  270. package/lib/esm/workspace/SettingsEditor.js +7 -5
  271. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  272. package/package.json +18 -18
@@ -9,7 +9,7 @@ import * as fs from "fs";
9
9
  import { join } from "path";
10
10
  import * as touch from "touch";
11
11
  import { assert, BeEvent, BentleyStatus, ChangeSetStatus, DbChangeStage, DbConflictCause, DbConflictResolution, DbOpcode, DbResult, Guid, Id64, IModelStatus, JsonUtils, Logger, LogLevel, LRUMap, OpenMode } from "@itwin/core-bentley";
12
- import { Base64EncodedString, BriefcaseIdValue, Code, DomainOptions, ECJsNames, ECSqlReader, EditTxnError, EntityMetaData, FontMap, IModel, IModelError, IModelNotFoundResponse, ProfileOptions, QueryBinder, QueryRowFormat, resolveNavPropId, SchemaState, ViewStoreError, ViewStoreRpc } from "@itwin/core-common";
12
+ import { Base64EncodedString, BriefcaseIdValue, Code, DomainOptions, ECJsNames, ECSqlReader, EditTxnError, EntityMetaData, FontMap, GeographicCRS, IModel, IModelError, IModelNotFoundResponse, ProfileOptions, QueryBinder, QueryRowFormat, resolveNavPropId, SchemaState, ViewStoreError, ViewStoreRpc } from "@itwin/core-common";
13
13
  import { Range2d, Range3d } from "@itwin/core-geometry";
14
14
  import { BackendLoggerCategory } from "./BackendLoggerCategory";
15
15
  import { BriefcaseManager } from "./BriefcaseManager";
@@ -48,7 +48,8 @@ import { createNoOpLockControl } from "./internal/NoLocks";
48
48
  import { createNoOpReservations } from "./internal/NoReservations";
49
49
  import { createIModelDbFonts } from "./internal/IModelDbFontsImpl";
50
50
  import { createSchemaSyncReservations } from "./internal/SchemaSyncReservations";
51
- import { _activeTxn, _cache, _close, _hubAccess, _implicitTxn, _instanceKeyCache, _nativeDb, _releaseAllLocks, _resetIModelDb } from "./internal/Symbols";
51
+ import { _activeTxn, _cache, _close, _hubAccess, _implicitTxn, _instanceKeyCache, _nativeDb, _refreshGeographicCoordinateSystem, _refreshIModelProps, _releaseAllLocks, _resetIModelDb, _updateIModelProps, _verifyTxnWrite } from "./internal/Symbols";
52
+ import { QueryMetadataCache } from "./internal/QueryMetadataCache";
52
53
  import { ECVersion, SchemaContext, SchemaJsonLocater, SchemaManifest, SchemaViewManager } from "@itwin/ecschema-metadata";
53
54
  import { SchemaMap } from "./Schema";
54
55
  import { ElementLRUCache, InstanceKeyLRUCache } from "./internal/ElementLRUCache";
@@ -75,6 +76,7 @@ class ImplicitWriteTxn extends EditTxn {
75
76
  throw new Error("ImplicitWriteTxn cannot be ended");
76
77
  }
77
78
  verifyWriteable() {
79
+ this.iModel[_verifyTxnWrite]();
78
80
  const enforcement = EditTxn.implicitWriteEnforcement;
79
81
  if (enforcement === "allow")
80
82
  return;
@@ -145,6 +147,7 @@ export var DataTransformationStrategy;
145
147
  */
146
148
  export class IModelDb extends IModel {
147
149
  _initialized = false;
150
+ _lastUpdatedGeographicCoordinateSystem;
148
151
  /** Keep track of open imodels to support `tryFind` for RPC purposes */
149
152
  static _openDbs = new Map();
150
153
  static defaultLimit = 1000; // default limit for batching queries
@@ -159,6 +162,7 @@ export class IModelDb extends IModel {
159
162
  // eslint-disable-next-line @typescript-eslint/no-deprecated
160
163
  _statementCache = new StatementCache();
161
164
  _sqliteStatementCache = new StatementCache();
165
+ _queryMetadataCache = new QueryMetadataCache();
162
166
  _codeSpecs;
163
167
  // eslint-disable-next-line @typescript-eslint/no-deprecated
164
168
  _classMetaDataRegistry;
@@ -402,8 +406,10 @@ export class IModelDb extends IModel {
402
406
  abandonSchemaChanges() {
403
407
  if (!this[_nativeDb].hasUnsavedChanges())
404
408
  return;
405
- this.clearCaches({ instanceCachesOnly: true });
409
+ // Unsaved changes here can include schema changes, e.g. after a failed schema import.
410
+ this.clearCaches();
406
411
  this[_nativeDb].abandonChanges();
412
+ this[_refreshGeographicCoordinateSystem]();
407
413
  }
408
414
  /** Optimize this iModel by vacuuming, and analyzing.
409
415
  *
@@ -510,6 +516,7 @@ export class IModelDb extends IModel {
510
516
  /** @internal */
511
517
  initializeIModelDb(when) {
512
518
  const props = this[_nativeDb].getIModelProps(when);
519
+ this._lastUpdatedGeographicCoordinateSystem = props.geographicCoordinateSystem ? new GeographicCRS(props.geographicCoordinateSystem) : undefined;
513
520
  super.initialize(props.rootSubject.name, props);
514
521
  if (this._initialized)
515
522
  return;
@@ -524,6 +531,40 @@ export class IModelDb extends IModel {
524
531
  db.onEcefLocationChanged.addListener(() => IpcHost.notifyTxns(db, "notifyEcefLocationChanged", db.ecefLocation?.toJSON()));
525
532
  db.onGeographicCoordinateSystemChanged.addListener(() => IpcHost.notifyTxns(db, "notifyGeographicCoordinateSystemChanged", db.geographicCoordinateSystem?.toJSON()));
526
533
  }
534
+ /** Reload the cached iModel properties (extents, geolocation, name, etc.) from the database, e.g. after changesets were merged.
535
+ * @internal
536
+ */
537
+ [_refreshIModelProps]() {
538
+ this.initializeIModelDb("pullMerge");
539
+ }
540
+ /** @internal */
541
+ [_refreshGeographicCoordinateSystem]() {
542
+ const wasRefreshing = this._isRefreshingGeographicCoordinateSystem;
543
+ this._isRefreshingGeographicCoordinateSystem = true;
544
+ try {
545
+ const props = this[_nativeDb].getIModelProps().geographicCoordinateSystem;
546
+ this._lastUpdatedGeographicCoordinateSystem = props ? new GeographicCRS(props) : undefined;
547
+ this.geographicCoordinateSystem = props ? new GeographicCRS(props) : undefined;
548
+ }
549
+ finally {
550
+ this._isRefreshingGeographicCoordinateSystem = wasRefreshing;
551
+ }
552
+ }
553
+ _isRefreshingGeographicCoordinateSystem = false;
554
+ /** @internal */
555
+ [_verifyTxnWrite]() {
556
+ if (this._isRefreshingGeographicCoordinateSystem)
557
+ throw new IModelError(IModelStatus.BadRequest, "Cannot write while restoring the geographic coordinate system");
558
+ }
559
+ /** @internal */
560
+ [_updateIModelProps]() {
561
+ const { geographicCoordinateSystem, ...props } = this.toJSON();
562
+ const gcs = geographicCoordinateSystem ? new GeographicCRS(geographicCoordinateSystem) : undefined;
563
+ const gcsChanged = gcs !== undefined && !this._lastUpdatedGeographicCoordinateSystem?.equals(gcs);
564
+ this[_nativeDb].updateIModelProps(gcsChanged ? { ...props, geographicCoordinateSystem } : props);
565
+ if (gcsChanged)
566
+ this._lastUpdatedGeographicCoordinateSystem = gcs;
567
+ }
527
568
  /** Returns true if this is a BriefcaseDb
528
569
  * @see [[BriefcaseDb.open]]
529
570
  */
@@ -634,7 +675,7 @@ export class IModelDb extends IModel {
634
675
  throw new IModelError(DbResult.BE_SQLITE_ERROR_NOTOPEN, "db not open");
635
676
  const executor = {
636
677
  execute: async (request) => {
637
- return ConcurrentQuery.executeQueryRequest(this[_nativeDb], request);
678
+ return this._queryMetadataCache.executeCachedQueryRequest(request, async (req) => ConcurrentQuery.executeQueryRequest(this[_nativeDb], req));
638
679
  },
639
680
  };
640
681
  return new ECSqlReader(executor, ecsql, params, config);
@@ -836,6 +877,7 @@ export class IModelDb extends IModel {
836
877
  clearCaches(params) {
837
878
  if (!params?.instanceCachesOnly) {
838
879
  this._statementCache.clear();
880
+ this._queryMetadataCache.clear();
839
881
  this._sqliteStatementCache.clear();
840
882
  this._classMetaDataRegistry = undefined;
841
883
  this._jsClassMap = undefined;
@@ -1127,6 +1169,7 @@ export class IModelDb extends IModel {
1127
1169
  const status = this[_nativeDb].cancelTo(txnBeforeAdopt, true);
1128
1170
  if (IModelStatus.Success !== status)
1129
1171
  Logger.logError(loggerCategory, `Failed to roll back the adopted schema rows after a failed import: ${IModelStatus[status] ?? status}`);
1172
+ this.clearCaches();
1130
1173
  }
1131
1174
  throw err;
1132
1175
  }
@@ -2189,8 +2232,6 @@ function processSchemaWriteStatus(status) {
2189
2232
  }
2190
2233
  else if (modelIdArg.code) {
2191
2234
  const modelId = this._iModel.elements.getElementProps({ code: modelIdArg.code }).id;
2192
- if (!modelId)
2193
- throw new IModelError(IModelStatus.NotFound, `Model not found with code: [spec:${modelIdArg.code.spec}, scope:${modelIdArg.code.scope}, value:${modelIdArg.code.value}])`);
2194
2235
  args = { partialKey: { id: modelId, baseClassName } };
2195
2236
  }
2196
2237
  else {
@@ -2216,7 +2257,7 @@ function processSchemaWriteStatus(status) {
2216
2257
  */
2217
2258
  getSubModel(modeledElementId, modelClass) {
2218
2259
  const modeledElementProps = this._iModel.elements.getElementProps(modeledElementId);
2219
- if (undefined === modeledElementProps.id || modeledElementProps.id === IModel.rootSubjectId)
2260
+ if (modeledElementProps.id === IModel.rootSubjectId)
2220
2261
  throw new IModelError(IModelStatus.NotFound, "Root subject does not have a sub-model");
2221
2262
  return this.getModel(modeledElementProps.id, modelClass);
2222
2263
  }
@@ -2229,7 +2270,7 @@ function processSchemaWriteStatus(status) {
2229
2270
  */
2230
2271
  tryGetSubModel(modeledElementId, modelClass) {
2231
2272
  const modeledElementProps = this._iModel.elements.tryGetElementProps(modeledElementId);
2232
- if (undefined === modeledElementProps?.id || (IModel.rootSubjectId === modeledElementProps.id))
2273
+ if (undefined === modeledElementProps || IModel.rootSubjectId === modeledElementProps.id)
2233
2274
  return undefined;
2234
2275
  return this.tryGetModel(modeledElementProps.id, modelClass);
2235
2276
  }
@@ -2526,14 +2567,15 @@ function processSchemaWriteStatus(status) {
2526
2567
  this._iModel[_implicitTxn].deleteElement(ids);
2527
2568
  }
2528
2569
  /**
2529
- * Delete multiple elements from the iModel.
2570
+ * Delete multiple elements from the iModel in a single bulk operation. See [[EditTxn.deleteElements]].
2530
2571
  * @param ids The ids of the elements to delete. All ids must be well-formed and valid [[Id64String]]s.
2531
- * @param deleteOptions Options for the delete operation.
2532
- * @returns A result object containing information about the deletion operation success and the element ids that failed to delete (if any).
2572
+ * @param deleteOptions Deprecated and ignored; kept for backward compatibility of the signature.
2573
+ * @returns A result object describing the outcome of the operation and the elements that block it (if any).
2533
2574
  * @throws [[ITwinError]] if any of the supplied ids are not well-formed/valid [[Id64String]]s.
2534
2575
  * @deprecated in 5.1.9 - might be removed in next major version. Use EditTxn.deleteElements instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help.
2535
2576
  * @beta
2536
2577
  */
2578
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2537
2579
  deleteElements(ids, deleteOptions) {
2538
2580
  return this._iModel[_implicitTxn].deleteElements(ids, deleteOptions);
2539
2581
  }
@@ -3347,7 +3389,8 @@ export class BriefcaseDb extends IModelDb {
3347
3389
  touch.sync(briefcaseDb.watchFilePathName);
3348
3390
  // Restart default txn to trigger events when watch file is changed by some other process.
3349
3391
  const watcher = fs.watch(briefcaseDb.watchFilePathName, { persistent: false }, () => {
3350
- nativeDb.clearECDbCache();
3392
+ // The other connection may have changed the schema, so drop everything prepared against the old one.
3393
+ briefcaseDb.clearCaches();
3351
3394
  nativeDb.restartDefaultTxn();
3352
3395
  briefcaseDb.changeset = briefcaseDb[_nativeDb].getCurrentChangeset();
3353
3396
  });
@@ -3602,7 +3645,7 @@ export class BriefcaseDb extends IModelDb {
3602
3645
  await this.executeWritable(async () => {
3603
3646
  await BriefcaseManager.pullAndApplyChangesets(this, arg ?? {});
3604
3647
  SchemaSync.updateDbSchema(this);
3605
- this.initializeIModelDb("pullMerge");
3648
+ this[_refreshIModelProps]();
3606
3649
  });
3607
3650
  // If this pull enabled or disabled SchemaSync for this briefcase, its reservations must now be re-initialized
3608
3651
  if (this.reservations.isServerBased !== SchemaSync.isEnabled(this))
@@ -3779,7 +3822,6 @@ export class BriefcaseDb extends IModelDb {
3779
3822
  // pushing changes requires a writeable briefcase
3780
3823
  await this.executeWritable(async () => {
3781
3824
  await BriefcaseManager.pullMergePush(this, arg);
3782
- this.initializeIModelDb("pullMerge");
3783
3825
  });
3784
3826
  // If this pull enabled or disabled SchemaSync for this briefcase, its reservations must now be re-initialized
3785
3827
  if (this.reservations.isServerBased !== SchemaSync.isEnabled(this))