@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
@@ -52,6 +52,7 @@ const NoReservations_1 = require("./internal/NoReservations");
52
52
  const IModelDbFontsImpl_1 = require("./internal/IModelDbFontsImpl");
53
53
  const SchemaSyncReservations_1 = require("./internal/SchemaSyncReservations");
54
54
  const Symbols_1 = require("./internal/Symbols");
55
+ const QueryMetadataCache_1 = require("./internal/QueryMetadataCache");
55
56
  const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
56
57
  const Schema_1 = require("./Schema");
57
58
  const ElementLRUCache_1 = require("./internal/ElementLRUCache");
@@ -78,6 +79,7 @@ class ImplicitWriteTxn extends EditTxn_1.EditTxn {
78
79
  throw new Error("ImplicitWriteTxn cannot be ended");
79
80
  }
80
81
  verifyWriteable() {
82
+ this.iModel[Symbols_1._verifyTxnWrite]();
81
83
  const enforcement = EditTxn_1.EditTxn.implicitWriteEnforcement;
82
84
  if (enforcement === "allow")
83
85
  return;
@@ -148,6 +150,7 @@ var DataTransformationStrategy;
148
150
  */
149
151
  class IModelDb extends core_common_1.IModel {
150
152
  _initialized = false;
153
+ _lastUpdatedGeographicCoordinateSystem;
151
154
  /** Keep track of open imodels to support `tryFind` for RPC purposes */
152
155
  static _openDbs = new Map();
153
156
  static defaultLimit = 1000; // default limit for batching queries
@@ -162,6 +165,7 @@ class IModelDb extends core_common_1.IModel {
162
165
  // eslint-disable-next-line @typescript-eslint/no-deprecated
163
166
  _statementCache = new SqliteStatement_1.StatementCache();
164
167
  _sqliteStatementCache = new SqliteStatement_1.StatementCache();
168
+ _queryMetadataCache = new QueryMetadataCache_1.QueryMetadataCache();
165
169
  _codeSpecs;
166
170
  // eslint-disable-next-line @typescript-eslint/no-deprecated
167
171
  _classMetaDataRegistry;
@@ -405,8 +409,10 @@ class IModelDb extends core_common_1.IModel {
405
409
  abandonSchemaChanges() {
406
410
  if (!this[Symbols_1._nativeDb].hasUnsavedChanges())
407
411
  return;
408
- this.clearCaches({ instanceCachesOnly: true });
412
+ // Unsaved changes here can include schema changes, e.g. after a failed schema import.
413
+ this.clearCaches();
409
414
  this[Symbols_1._nativeDb].abandonChanges();
415
+ this[Symbols_1._refreshGeographicCoordinateSystem]();
410
416
  }
411
417
  /** Optimize this iModel by vacuuming, and analyzing.
412
418
  *
@@ -513,6 +519,7 @@ class IModelDb extends core_common_1.IModel {
513
519
  /** @internal */
514
520
  initializeIModelDb(when) {
515
521
  const props = this[Symbols_1._nativeDb].getIModelProps(when);
522
+ this._lastUpdatedGeographicCoordinateSystem = props.geographicCoordinateSystem ? new core_common_1.GeographicCRS(props.geographicCoordinateSystem) : undefined;
516
523
  super.initialize(props.rootSubject.name, props);
517
524
  if (this._initialized)
518
525
  return;
@@ -527,6 +534,40 @@ class IModelDb extends core_common_1.IModel {
527
534
  db.onEcefLocationChanged.addListener(() => IpcHost_1.IpcHost.notifyTxns(db, "notifyEcefLocationChanged", db.ecefLocation?.toJSON()));
528
535
  db.onGeographicCoordinateSystemChanged.addListener(() => IpcHost_1.IpcHost.notifyTxns(db, "notifyGeographicCoordinateSystemChanged", db.geographicCoordinateSystem?.toJSON()));
529
536
  }
537
+ /** Reload the cached iModel properties (extents, geolocation, name, etc.) from the database, e.g. after changesets were merged.
538
+ * @internal
539
+ */
540
+ [Symbols_1._refreshIModelProps]() {
541
+ this.initializeIModelDb("pullMerge");
542
+ }
543
+ /** @internal */
544
+ [Symbols_1._refreshGeographicCoordinateSystem]() {
545
+ const wasRefreshing = this._isRefreshingGeographicCoordinateSystem;
546
+ this._isRefreshingGeographicCoordinateSystem = true;
547
+ try {
548
+ const props = this[Symbols_1._nativeDb].getIModelProps().geographicCoordinateSystem;
549
+ this._lastUpdatedGeographicCoordinateSystem = props ? new core_common_1.GeographicCRS(props) : undefined;
550
+ this.geographicCoordinateSystem = props ? new core_common_1.GeographicCRS(props) : undefined;
551
+ }
552
+ finally {
553
+ this._isRefreshingGeographicCoordinateSystem = wasRefreshing;
554
+ }
555
+ }
556
+ _isRefreshingGeographicCoordinateSystem = false;
557
+ /** @internal */
558
+ [Symbols_1._verifyTxnWrite]() {
559
+ if (this._isRefreshingGeographicCoordinateSystem)
560
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadRequest, "Cannot write while restoring the geographic coordinate system");
561
+ }
562
+ /** @internal */
563
+ [Symbols_1._updateIModelProps]() {
564
+ const { geographicCoordinateSystem, ...props } = this.toJSON();
565
+ const gcs = geographicCoordinateSystem ? new core_common_1.GeographicCRS(geographicCoordinateSystem) : undefined;
566
+ const gcsChanged = gcs !== undefined && !this._lastUpdatedGeographicCoordinateSystem?.equals(gcs);
567
+ this[Symbols_1._nativeDb].updateIModelProps(gcsChanged ? { ...props, geographicCoordinateSystem } : props);
568
+ if (gcsChanged)
569
+ this._lastUpdatedGeographicCoordinateSystem = gcs;
570
+ }
530
571
  /** Returns true if this is a BriefcaseDb
531
572
  * @see [[BriefcaseDb.open]]
532
573
  */
@@ -637,7 +678,7 @@ class IModelDb extends core_common_1.IModel {
637
678
  throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR_NOTOPEN, "db not open");
638
679
  const executor = {
639
680
  execute: async (request) => {
640
- return ConcurrentQuery_1.ConcurrentQuery.executeQueryRequest(this[Symbols_1._nativeDb], request);
681
+ return this._queryMetadataCache.executeCachedQueryRequest(request, async (req) => ConcurrentQuery_1.ConcurrentQuery.executeQueryRequest(this[Symbols_1._nativeDb], req));
641
682
  },
642
683
  };
643
684
  return new core_common_1.ECSqlReader(executor, ecsql, params, config);
@@ -839,6 +880,7 @@ class IModelDb extends core_common_1.IModel {
839
880
  clearCaches(params) {
840
881
  if (!params?.instanceCachesOnly) {
841
882
  this._statementCache.clear();
883
+ this._queryMetadataCache.clear();
842
884
  this._sqliteStatementCache.clear();
843
885
  this._classMetaDataRegistry = undefined;
844
886
  this._jsClassMap = undefined;
@@ -1130,6 +1172,7 @@ class IModelDb extends core_common_1.IModel {
1130
1172
  const status = this[Symbols_1._nativeDb].cancelTo(txnBeforeAdopt, true);
1131
1173
  if (core_bentley_1.IModelStatus.Success !== status)
1132
1174
  core_bentley_1.Logger.logError(loggerCategory, `Failed to roll back the adopted schema rows after a failed import: ${core_bentley_1.IModelStatus[status] ?? status}`);
1175
+ this.clearCaches();
1133
1176
  }
1134
1177
  throw err;
1135
1178
  }
@@ -2193,8 +2236,6 @@ function processSchemaWriteStatus(status) {
2193
2236
  }
2194
2237
  else if (modelIdArg.code) {
2195
2238
  const modelId = this._iModel.elements.getElementProps({ code: modelIdArg.code }).id;
2196
- if (!modelId)
2197
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `Model not found with code: [spec:${modelIdArg.code.spec}, scope:${modelIdArg.code.scope}, value:${modelIdArg.code.value}])`);
2198
2239
  args = { partialKey: { id: modelId, baseClassName } };
2199
2240
  }
2200
2241
  else {
@@ -2220,7 +2261,7 @@ function processSchemaWriteStatus(status) {
2220
2261
  */
2221
2262
  getSubModel(modeledElementId, modelClass) {
2222
2263
  const modeledElementProps = this._iModel.elements.getElementProps(modeledElementId);
2223
- if (undefined === modeledElementProps.id || modeledElementProps.id === core_common_1.IModel.rootSubjectId)
2264
+ if (modeledElementProps.id === core_common_1.IModel.rootSubjectId)
2224
2265
  throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "Root subject does not have a sub-model");
2225
2266
  return this.getModel(modeledElementProps.id, modelClass);
2226
2267
  }
@@ -2233,7 +2274,7 @@ function processSchemaWriteStatus(status) {
2233
2274
  */
2234
2275
  tryGetSubModel(modeledElementId, modelClass) {
2235
2276
  const modeledElementProps = this._iModel.elements.tryGetElementProps(modeledElementId);
2236
- if (undefined === modeledElementProps?.id || (core_common_1.IModel.rootSubjectId === modeledElementProps.id))
2277
+ if (undefined === modeledElementProps || core_common_1.IModel.rootSubjectId === modeledElementProps.id)
2237
2278
  return undefined;
2238
2279
  return this.tryGetModel(modeledElementProps.id, modelClass);
2239
2280
  }
@@ -2530,14 +2571,15 @@ function processSchemaWriteStatus(status) {
2530
2571
  this._iModel[Symbols_1._implicitTxn].deleteElement(ids);
2531
2572
  }
2532
2573
  /**
2533
- * Delete multiple elements from the iModel.
2574
+ * Delete multiple elements from the iModel in a single bulk operation. See [[EditTxn.deleteElements]].
2534
2575
  * @param ids The ids of the elements to delete. All ids must be well-formed and valid [[Id64String]]s.
2535
- * @param deleteOptions Options for the delete operation.
2536
- * @returns A result object containing information about the deletion operation success and the element ids that failed to delete (if any).
2576
+ * @param deleteOptions Deprecated and ignored; kept for backward compatibility of the signature.
2577
+ * @returns A result object describing the outcome of the operation and the elements that block it (if any).
2537
2578
  * @throws [[ITwinError]] if any of the supplied ids are not well-formed/valid [[Id64String]]s.
2538
2579
  * @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.
2539
2580
  * @beta
2540
2581
  */
2582
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2541
2583
  deleteElements(ids, deleteOptions) {
2542
2584
  return this._iModel[Symbols_1._implicitTxn].deleteElements(ids, deleteOptions);
2543
2585
  }
@@ -3351,7 +3393,8 @@ class BriefcaseDb extends IModelDb {
3351
3393
  touch.sync(briefcaseDb.watchFilePathName);
3352
3394
  // Restart default txn to trigger events when watch file is changed by some other process.
3353
3395
  const watcher = fs.watch(briefcaseDb.watchFilePathName, { persistent: false }, () => {
3354
- nativeDb.clearECDbCache();
3396
+ // The other connection may have changed the schema, so drop everything prepared against the old one.
3397
+ briefcaseDb.clearCaches();
3355
3398
  nativeDb.restartDefaultTxn();
3356
3399
  briefcaseDb.changeset = briefcaseDb[Symbols_1._nativeDb].getCurrentChangeset();
3357
3400
  });
@@ -3606,7 +3649,7 @@ class BriefcaseDb extends IModelDb {
3606
3649
  await this.executeWritable(async () => {
3607
3650
  await BriefcaseManager_1.BriefcaseManager.pullAndApplyChangesets(this, arg ?? {});
3608
3651
  SchemaSync_1.SchemaSync.updateDbSchema(this);
3609
- this.initializeIModelDb("pullMerge");
3652
+ this[Symbols_1._refreshIModelProps]();
3610
3653
  });
3611
3654
  // If this pull enabled or disabled SchemaSync for this briefcase, its reservations must now be re-initialized
3612
3655
  if (this.reservations.isServerBased !== SchemaSync_1.SchemaSync.isEnabled(this))
@@ -3783,7 +3826,6 @@ class BriefcaseDb extends IModelDb {
3783
3826
  // pushing changes requires a writeable briefcase
3784
3827
  await this.executeWritable(async () => {
3785
3828
  await BriefcaseManager_1.BriefcaseManager.pullMergePush(this, arg);
3786
- this.initializeIModelDb("pullMerge");
3787
3829
  });
3788
3830
  // If this pull enabled or disabled SchemaSync for this briefcase, its reservations must now be re-initialized
3789
3831
  if (this.reservations.isServerBased !== SchemaSync_1.SchemaSync.isEnabled(this))