@itwin/core-backend 5.9.0-dev.9 → 5.10.0-dev.1

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 (539) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseManager.js +6 -3
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/CatalogDb.js.map +1 -1
  10. package/lib/cjs/Category.js.map +1 -1
  11. package/lib/cjs/ChangeSummaryManager.js +2 -2
  12. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  13. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  16. package/lib/cjs/ChangesetECAdaptor.js +255 -249
  17. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  18. package/lib/cjs/ChangesetReader.d.ts +186 -0
  19. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  20. package/lib/cjs/ChangesetReader.js +372 -0
  21. package/lib/cjs/ChangesetReader.js.map +1 -0
  22. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  23. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  24. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  25. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  26. package/lib/cjs/ChannelControl.js.map +1 -1
  27. package/lib/cjs/CheckpointManager.js.map +1 -1
  28. package/lib/cjs/ClassRegistry.js +5 -5
  29. package/lib/cjs/ClassRegistry.js.map +1 -1
  30. package/lib/cjs/CloudSqlite.d.ts +1 -1
  31. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  32. package/lib/cjs/CloudSqlite.js +68 -13
  33. package/lib/cjs/CloudSqlite.js.map +1 -1
  34. package/lib/cjs/CodeService.js.map +1 -1
  35. package/lib/cjs/CodeSpecs.js.map +1 -1
  36. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  37. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  38. package/lib/cjs/DevTools.js.map +1 -1
  39. package/lib/cjs/DisplayStyle.js.map +1 -1
  40. package/lib/cjs/ECDb.js.map +1 -1
  41. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  42. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  43. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  44. package/lib/cjs/ECSqlStatement.js.map +1 -1
  45. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  46. package/lib/cjs/EditTxn.d.ts +55 -1
  47. package/lib/cjs/EditTxn.d.ts.map +1 -1
  48. package/lib/cjs/EditTxn.js +43 -1
  49. package/lib/cjs/EditTxn.js.map +1 -1
  50. package/lib/cjs/Element.d.ts +69 -0
  51. package/lib/cjs/Element.d.ts.map +1 -1
  52. package/lib/cjs/Element.js +36 -0
  53. package/lib/cjs/Element.js.map +1 -1
  54. package/lib/cjs/ElementAspect.js.map +1 -1
  55. package/lib/cjs/ElementGraphics.js.map +1 -1
  56. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  57. package/lib/cjs/Entity.js.map +1 -1
  58. package/lib/cjs/EntityReferences.js.map +1 -1
  59. package/lib/cjs/ExportGraphics.js.map +1 -1
  60. package/lib/cjs/ExternalSource.js.map +1 -1
  61. package/lib/cjs/FontFile.js.map +1 -1
  62. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  63. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  64. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  65. package/lib/cjs/GeographicCRSServices.js +13 -4
  66. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  67. package/lib/cjs/GeometrySummary.js +47 -47
  68. package/lib/cjs/GeometrySummary.js.map +1 -1
  69. package/lib/cjs/IModelDb.d.ts +9 -1
  70. package/lib/cjs/IModelDb.d.ts.map +1 -1
  71. package/lib/cjs/IModelDb.js +32 -13
  72. package/lib/cjs/IModelDb.js.map +1 -1
  73. package/lib/cjs/IModelDbFonts.js.map +1 -1
  74. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  75. package/lib/cjs/IModelHost.js.map +1 -1
  76. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  77. package/lib/cjs/IModelJsFs.js.map +1 -1
  78. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  79. package/lib/cjs/IpcHost.d.ts.map +1 -1
  80. package/lib/cjs/IpcHost.js +20 -9
  81. package/lib/cjs/IpcHost.js.map +1 -1
  82. package/lib/cjs/LineStyle.js.map +1 -1
  83. package/lib/cjs/LocalHub.js +1 -1
  84. package/lib/cjs/LocalHub.js.map +1 -1
  85. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  86. package/lib/cjs/LockControl.js.map +1 -1
  87. package/lib/cjs/Material.js.map +1 -1
  88. package/lib/cjs/Model.d.ts +34 -0
  89. package/lib/cjs/Model.d.ts.map +1 -1
  90. package/lib/cjs/Model.js +24 -0
  91. package/lib/cjs/Model.js.map +1 -1
  92. package/lib/cjs/NativeAppStorage.js.map +1 -1
  93. package/lib/cjs/NativeHost.js.map +1 -1
  94. package/lib/cjs/NavigationRelationship.js.map +1 -1
  95. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  96. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  97. package/lib/cjs/PartialChangeUnifier.js +234 -0
  98. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  99. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  100. package/lib/cjs/PropertyStore.js.map +1 -1
  101. package/lib/cjs/Relationship.js.map +1 -1
  102. package/lib/cjs/RpcBackend.js.map +1 -1
  103. package/lib/cjs/SQLiteDb.js.map +1 -1
  104. package/lib/cjs/Schema.js.map +1 -1
  105. package/lib/cjs/SchemaSync.js.map +1 -1
  106. package/lib/cjs/SchemaUtils.js.map +1 -1
  107. package/lib/cjs/SheetIndex.js.map +1 -1
  108. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  109. package/lib/cjs/SqliteChangesetReader.js +1 -1
  110. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  111. package/lib/cjs/SqliteStatement.js.map +1 -1
  112. package/lib/cjs/StashManager.js.map +1 -1
  113. package/lib/cjs/Texture.js.map +1 -1
  114. package/lib/cjs/TileStorage.js.map +1 -1
  115. package/lib/cjs/TxnManager.d.ts +14 -0
  116. package/lib/cjs/TxnManager.d.ts.map +1 -1
  117. package/lib/cjs/TxnManager.js +25 -0
  118. package/lib/cjs/TxnManager.js.map +1 -1
  119. package/lib/cjs/ViewDefinition.d.ts +19 -7
  120. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  121. package/lib/cjs/ViewDefinition.js +77 -25
  122. package/lib/cjs/ViewDefinition.js.map +1 -1
  123. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  124. package/lib/cjs/ViewStore.d.ts.map +1 -1
  125. package/lib/cjs/ViewStore.js +63 -21
  126. package/lib/cjs/ViewStore.js.map +1 -1
  127. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  128. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  129. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  130. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  131. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  132. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  133. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  134. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  135. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  136. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  137. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  138. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  139. package/lib/cjs/core-backend.d.ts +3 -0
  140. package/lib/cjs/core-backend.d.ts.map +1 -1
  141. package/lib/cjs/core-backend.js +3 -0
  142. package/lib/cjs/core-backend.js.map +1 -1
  143. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  144. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  145. package/lib/cjs/domains/GenericElements.js.map +1 -1
  146. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  147. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  148. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  149. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  150. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  151. package/lib/cjs/internal/HubMock.js.map +1 -1
  152. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  153. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  154. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  155. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  156. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  157. package/lib/cjs/internal/NoLocks.js.map +1 -1
  158. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  159. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  160. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  161. package/lib/cjs/internal/Symbols.js.map +1 -1
  162. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  163. package/lib/cjs/internal/cross-package.js.map +1 -1
  164. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  165. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  166. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  167. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  168. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  169. package/lib/cjs/rpc/multipart.js.map +1 -1
  170. package/lib/cjs/rpc/tracing.js.map +1 -1
  171. package/lib/cjs/rpc/web/logging.js.map +1 -1
  172. package/lib/cjs/rpc/web/request.js.map +1 -1
  173. package/lib/cjs/rpc/web/response.js.map +1 -1
  174. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  175. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  176. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  177. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  178. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  179. package/lib/cjs/workspace/Settings.d.ts +6 -4
  180. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  181. package/lib/cjs/workspace/Settings.js.map +1 -1
  182. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  183. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  184. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  185. package/lib/cjs/workspace/Workspace.js.map +1 -1
  186. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  187. package/lib/esm/BackendHubAccess.js.map +1 -1
  188. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  189. package/lib/esm/BisCoreSchema.js.map +1 -1
  190. package/lib/esm/BlobContainerService.js.map +1 -1
  191. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  192. package/lib/esm/BriefcaseManager.js +6 -3
  193. package/lib/esm/BriefcaseManager.js.map +1 -1
  194. package/lib/esm/CatalogDb.js.map +1 -1
  195. package/lib/esm/Category.js.map +1 -1
  196. package/lib/esm/ChangeSummaryManager.js +2 -2
  197. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  198. package/lib/esm/ChangedElementsDb.js.map +1 -1
  199. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  200. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  201. package/lib/esm/ChangesetECAdaptor.js +255 -249
  202. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  203. package/lib/esm/ChangesetReader.d.ts +186 -0
  204. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  205. package/lib/esm/ChangesetReader.js +368 -0
  206. package/lib/esm/ChangesetReader.js.map +1 -0
  207. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  208. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  209. package/lib/esm/ChangesetReaderTypes.js +20 -0
  210. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  211. package/lib/esm/ChannelControl.js.map +1 -1
  212. package/lib/esm/CheckpointManager.js.map +1 -1
  213. package/lib/esm/ClassRegistry.js +5 -5
  214. package/lib/esm/ClassRegistry.js.map +1 -1
  215. package/lib/esm/CloudSqlite.d.ts +1 -1
  216. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  217. package/lib/esm/CloudSqlite.js +69 -14
  218. package/lib/esm/CloudSqlite.js.map +1 -1
  219. package/lib/esm/CodeService.js.map +1 -1
  220. package/lib/esm/CodeSpecs.js.map +1 -1
  221. package/lib/esm/ConcurrentQuery.js.map +1 -1
  222. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  223. package/lib/esm/DevTools.js.map +1 -1
  224. package/lib/esm/DisplayStyle.js.map +1 -1
  225. package/lib/esm/ECDb.js.map +1 -1
  226. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  227. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  228. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  229. package/lib/esm/ECSqlStatement.js.map +1 -1
  230. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  231. package/lib/esm/EditTxn.d.ts +55 -1
  232. package/lib/esm/EditTxn.d.ts.map +1 -1
  233. package/lib/esm/EditTxn.js +43 -1
  234. package/lib/esm/EditTxn.js.map +1 -1
  235. package/lib/esm/Element.d.ts +69 -0
  236. package/lib/esm/Element.d.ts.map +1 -1
  237. package/lib/esm/Element.js +36 -0
  238. package/lib/esm/Element.js.map +1 -1
  239. package/lib/esm/ElementAspect.js.map +1 -1
  240. package/lib/esm/ElementGraphics.js.map +1 -1
  241. package/lib/esm/ElementTreeWalker.js.map +1 -1
  242. package/lib/esm/Entity.js.map +1 -1
  243. package/lib/esm/EntityReferences.js.map +1 -1
  244. package/lib/esm/ExportGraphics.js.map +1 -1
  245. package/lib/esm/ExternalSource.js.map +1 -1
  246. package/lib/esm/FontFile.js.map +1 -1
  247. package/lib/esm/GeoCoordConfig.js.map +1 -1
  248. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  249. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  250. package/lib/esm/GeographicCRSServices.js +12 -4
  251. package/lib/esm/GeographicCRSServices.js.map +1 -1
  252. package/lib/esm/GeometrySummary.js +47 -47
  253. package/lib/esm/GeometrySummary.js.map +1 -1
  254. package/lib/esm/IModelDb.d.ts +9 -1
  255. package/lib/esm/IModelDb.d.ts.map +1 -1
  256. package/lib/esm/IModelDb.js +33 -14
  257. package/lib/esm/IModelDb.js.map +1 -1
  258. package/lib/esm/IModelDbFonts.js.map +1 -1
  259. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  260. package/lib/esm/IModelHost.js.map +1 -1
  261. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  262. package/lib/esm/IModelJsFs.js.map +1 -1
  263. package/lib/esm/ImageSourceConversion.js.map +1 -1
  264. package/lib/esm/IpcHost.d.ts.map +1 -1
  265. package/lib/esm/IpcHost.js +20 -9
  266. package/lib/esm/IpcHost.js.map +1 -1
  267. package/lib/esm/LineStyle.js.map +1 -1
  268. package/lib/esm/LocalHub.js +1 -1
  269. package/lib/esm/LocalHub.js.map +1 -1
  270. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  271. package/lib/esm/LockControl.js.map +1 -1
  272. package/lib/esm/Material.js.map +1 -1
  273. package/lib/esm/Model.d.ts +34 -0
  274. package/lib/esm/Model.d.ts.map +1 -1
  275. package/lib/esm/Model.js +24 -0
  276. package/lib/esm/Model.js.map +1 -1
  277. package/lib/esm/NativeAppStorage.js.map +1 -1
  278. package/lib/esm/NativeHost.js.map +1 -1
  279. package/lib/esm/NavigationRelationship.js.map +1 -1
  280. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  281. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  282. package/lib/esm/PartialChangeUnifier.js +230 -0
  283. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  284. package/lib/esm/PromiseMemoizer.js.map +1 -1
  285. package/lib/esm/PropertyStore.js.map +1 -1
  286. package/lib/esm/Relationship.js.map +1 -1
  287. package/lib/esm/RpcBackend.js.map +1 -1
  288. package/lib/esm/SQLiteDb.js.map +1 -1
  289. package/lib/esm/Schema.js.map +1 -1
  290. package/lib/esm/SchemaSync.js.map +1 -1
  291. package/lib/esm/SchemaUtils.js.map +1 -1
  292. package/lib/esm/SheetIndex.js.map +1 -1
  293. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  294. package/lib/esm/SqliteChangesetReader.js +1 -1
  295. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  296. package/lib/esm/SqliteStatement.js.map +1 -1
  297. package/lib/esm/StashManager.js.map +1 -1
  298. package/lib/esm/Texture.js.map +1 -1
  299. package/lib/esm/TileStorage.js.map +1 -1
  300. package/lib/esm/TxnManager.d.ts +14 -0
  301. package/lib/esm/TxnManager.d.ts.map +1 -1
  302. package/lib/esm/TxnManager.js +25 -0
  303. package/lib/esm/TxnManager.js.map +1 -1
  304. package/lib/esm/ViewDefinition.d.ts +19 -7
  305. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  306. package/lib/esm/ViewDefinition.js +78 -26
  307. package/lib/esm/ViewDefinition.js.map +1 -1
  308. package/lib/esm/ViewStateHydrator.js.map +1 -1
  309. package/lib/esm/ViewStore.d.ts.map +1 -1
  310. package/lib/esm/ViewStore.js +64 -22
  311. package/lib/esm/ViewStore.js.map +1 -1
  312. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  313. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  314. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  315. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  316. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  317. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  318. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  319. package/lib/esm/core-backend.d.ts +3 -0
  320. package/lib/esm/core-backend.d.ts.map +1 -1
  321. package/lib/esm/core-backend.js +3 -0
  322. package/lib/esm/core-backend.js.map +1 -1
  323. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  324. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  325. package/lib/esm/domains/GenericElements.js.map +1 -1
  326. package/lib/esm/domains/GenericSchema.js.map +1 -1
  327. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  328. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  329. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  330. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  331. package/lib/esm/internal/HubMock.js.map +1 -1
  332. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  333. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  334. package/lib/esm/internal/IntegrityCheck.js +22 -22
  335. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  336. package/lib/esm/internal/NativePlatform.js.map +1 -1
  337. package/lib/esm/internal/NoLocks.js.map +1 -1
  338. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  339. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  340. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  341. package/lib/esm/internal/Symbols.js.map +1 -1
  342. package/lib/esm/internal/annotations/fields.js.map +1 -1
  343. package/lib/esm/internal/cross-package.js.map +1 -1
  344. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  345. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  346. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  347. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  348. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  349. package/lib/esm/rpc/multipart.js.map +1 -1
  350. package/lib/esm/rpc/tracing.js.map +1 -1
  351. package/lib/esm/rpc/web/logging.js.map +1 -1
  352. package/lib/esm/rpc/web/request.js.map +1 -1
  353. package/lib/esm/rpc/web/response.js.map +1 -1
  354. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  355. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  356. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  357. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  358. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  359. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  360. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  361. package/lib/esm/test/AttachDb.test.js +11 -11
  362. package/lib/esm/test/AttachDb.test.js.map +1 -1
  363. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  364. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  365. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  366. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  367. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  368. package/lib/esm/test/IModelHost.test.js.map +1 -1
  369. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  370. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  371. package/lib/esm/test/IModelTestUtils.js +5 -0
  372. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  373. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  374. package/lib/esm/test/IpcHost.test.js +112 -0
  375. package/lib/esm/test/IpcHost.test.js.map +1 -1
  376. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  377. package/lib/esm/test/PrintElementTree.js.map +1 -1
  378. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  379. package/lib/esm/test/RevisionUtility.js.map +1 -1
  380. package/lib/esm/test/SchemaUtils.test.js +25 -25
  381. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  382. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  383. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  384. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  385. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  386. package/lib/esm/test/TestEditTxn.js.map +1 -1
  387. package/lib/esm/test/TestUtils.js.map +1 -1
  388. package/lib/esm/test/annotations/Fields.test.js +53 -53
  389. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  390. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  391. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  392. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  393. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  394. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  395. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  396. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  397. package/lib/esm/test/categories/Category.test.js.map +1 -1
  398. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  399. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  400. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  401. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  402. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  403. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  404. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  405. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  406. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  407. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  408. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  409. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  410. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  411. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  412. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  413. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  414. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  415. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  416. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  417. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  418. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  419. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  420. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  421. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  422. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  423. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  424. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  425. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  426. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  427. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  428. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  429. package/lib/esm/test/element/ElementRoundTrip.test.js +283 -142
  430. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  431. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  432. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  433. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  434. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  435. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  436. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  437. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  438. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  439. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  440. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  441. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  442. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  443. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  444. package/lib/esm/test/hubaccess/Rebase.test.js +57 -57
  445. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  446. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  447. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  448. package/lib/esm/test/imageData.js.map +1 -1
  449. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  450. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  451. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  452. package/lib/esm/test/imodel/IModel.test.js +45 -45
  453. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  454. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  455. package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
  456. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  457. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  458. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  459. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  460. package/lib/esm/test/index.js.map +1 -1
  461. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  462. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  463. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  464. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  465. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  466. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  467. package/lib/esm/test/rpc/response.test.js.map +1 -1
  468. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  469. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  470. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  471. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  472. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  473. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  474. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  475. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  476. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  477. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  478. package/lib/esm/test/standalone/ChangesetReader.test.js +4201 -1671
  479. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  480. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  481. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  482. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  483. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  484. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  485. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  486. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  487. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  488. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  490. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  491. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  492. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  493. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  494. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  495. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  496. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  497. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  498. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  499. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  500. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  501. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  502. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  503. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  504. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  505. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  506. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  507. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  508. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  509. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  510. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  511. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  512. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  513. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  514. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  515. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  516. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  517. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  518. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  519. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  520. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  521. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  522. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  523. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  524. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  525. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  526. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  527. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  528. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  529. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  530. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  531. package/lib/esm/workspace/Settings.d.ts +6 -4
  532. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  533. package/lib/esm/workspace/Settings.js.map +1 -1
  534. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  535. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  536. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  537. package/lib/esm/workspace/Workspace.js.map +1 -1
  538. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  539. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"IModelDbFontsImpl.js","sourceRoot":"","sources":["../../../src/internal/IModelDbFontsImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { FontFamilyDescriptor, FontFamilySelector, FontId, FontProps, FontType } from \"@itwin/core-common\";\nimport { _faceProps, _getData, _implementationProhibited, _key, _nativeDb } from \"./Symbols\";\nimport { IModelDb } from \"../IModelDb\";\nimport { EmbedFontFileArgs, IModelDbFonts, QueryMappedFamiliesArgs } from \"../IModelDbFonts\";\nimport { EmbeddedFontFile } from \"./FontFileImpl\";\nimport { assert, DbResult, Logger } from \"@itwin/core-bentley\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { FontFile } from \"../FontFile\";\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\n\nclass IModelDbFontsImpl implements IModelDbFonts {\n public readonly [_implementationProhibited] = undefined;\n readonly #db: IModelDb;\n\n public constructor(iModel: IModelDb) {\n this.#db = iModel;\n }\n\n public queryMappedFamilies(args?: QueryMappedFamiliesArgs): Iterable<FontProps> {\n const fontProps = this.#queryFontTable();\n if (args?.includeNonEmbedded) {\n return fontProps;\n }\n\n const fontNames = this.#getEmbeddedFontNames();\n return fontProps.filter((x) => fontNames.includes(x.name));\n }\n\n public queryEmbeddedFontFiles(): Iterable<FontFile> {\n const files: FontFile[] = [];\n this.#db.withSqliteStatement(`SELECT Id,StrData FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n let faces;\n try {\n faces = JSON.parse(stmt.getValueString(1)) as IModelJsNative.FontFaceProps[];\n } catch (e) {\n Logger.logError(BackendLoggerCategory.IModelDb, e);\n }\n\n if (!Array.isArray(faces) || faces.length === 0) {\n continue;\n }\n\n let type = faces[0].type;\n if (type !== FontType.Rsc && type !== FontType.Shx) {\n type = FontType.TrueType;\n }\n\n files.push(new EmbeddedFontFile(this.#db, stmt.getValueInteger(0), type, faces));\n }\n });\n\n return files;\n }\n\n public async embedFontFile(args: EmbedFontFileArgs): Promise<void> {\n this.#requireWritable();\n\n if (!args.file.isEmbeddable) {\n throw new Error(\"Font does not permit embedding\");\n }\n\n const file = args.file;\n for (const existing of this.queryEmbeddedFontFiles()) {\n if (existing[_key] === file[_key]) {\n // Already embedded - it's a no-op.\n return;\n }\n }\n\n let id = 0;\n const codes = this.#db.codeService?.internalCodes;\n if (codes) {\n id = await codes.writeLocker.reserveEmbeddedFaceDataId(args.file[_key]);\n } else {\n // CodeService not configured - schema lock required to prevent conflicting Ids in be_Prop table.\n await this.#db.acquireSchemaLock();\n const sql = `SELECT MAX(Id) FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`;\n id = this.#db.withSqliteStatement(sql, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\n }\n\n assert(id > 0);\n const data = file[_getData]();\n this.#db[_nativeDb].embedFontFile(id, file[_faceProps], data, true);\n\n if (!args.skipFontIdAllocation) {\n const familyNames = new Set<string>(args.file.faces.map((x) => x.familyName));\n const acquireIds = Array.from(familyNames).map(async (x) => this.#acquireId({ name: x, type: args.file.type }, true).catch());\n await Promise.allSettled(acquireIds);\n }\n\n this.#db.clearFontMap();\n }\n\n public findId(selector: FontFamilySelector): FontId | undefined {\n let id;\n const sqlPostlude = undefined === selector.type ? \" ORDER BY Type ASC\" : \" AND Type=?\";\n const sql = `SELECT Id FROM dgn_Font WHERE Name=?${sqlPostlude}`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, selector.name);\n if (undefined !== selector.type) {\n stmt.bindInteger(2, selector.type);\n }\n\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\n id = stmt.getValueInteger(0);\n }\n });\n\n return id;\n }\n\n public findDescriptor(id: FontId): FontFamilyDescriptor | undefined {\n let name, type;\n this.#db.withPreparedSqliteStatement(\"SELECT Name,Type FROM dgn_Font WHERE Id=?\", (stmt) => {\n stmt.bindInteger(1, id);\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const stmtName = stmt.getValueString(0);\n if (stmtName.length > 0) {\n name = stmtName;\n const typeCode = stmt.getValueInteger(1);\n type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\n }\n }\n });\n\n return undefined !== name && undefined !== type ? { name, type } : undefined;\n }\n\n public async acquireId(descriptor: FontFamilyDescriptor): Promise<FontId> {\n this.#requireWritable();\n return this.#acquireId(descriptor, false);\n }\n\n async #acquireId(descriptor: FontFamilyDescriptor, embeddingFaceData: boolean): Promise<FontId> {\n let id = this.findId(descriptor);\n if (undefined !== id) {\n return id;\n }\n\n const codes = this.#db.codeService?.internalCodes;\n if (codes) {\n id = await codes.writeLocker.reserveFontId({ fontName: descriptor.name, fontType: descriptor.type });\n } else {\n // If we're being called from `embedFontFile` then the schema lock is already held, don't bother re-acquiring it.\n if (!embeddingFaceData) {\n // No CodeService configured. We must obtain the schema lock and use the next available Id.\n await this.#db.acquireSchemaLock();\n }\n\n id = this.#db.withSqliteStatement(`SELECT MAX(Id) FROM dgn_Font`, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\n }\n\n this.#db.withSqliteStatement(`INSERT INTO dgn_Font (Id,Type,Name) VALUES (?,?,?)`, (stmt) => {\n stmt.bindInteger(1, id);\n stmt.bindInteger(2, descriptor.type);\n stmt.bindString(3, descriptor.name);\n\n if (DbResult.BE_SQLITE_DONE !== stmt.step()) {\n throw new Error(\"Failed to insert font Id mapping\");\n }\n });\n\n this.#db.clearFontMap();\n\n return id;\n }\n\n #requireWritable(): void {\n if (this.#db.isReadonly) {\n throw new Error(\"iModel is read-only\");\n }\n }\n\n #getEmbeddedFontNames(): string[] {\n const names: string[] = [];\n\n const sql = `select DISTINCT json_extract(face.value, '$.familyName') from be_Prop, json_each(be_Prop.StrData) as face where namespace=\"dgn_Font\" and name=\"EmbeddedFaceData\"`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n names.push(stmt.getValueString(0));\n }\n });\n\n return names;\n }\n\n #queryFontTable(): Array<FontProps> {\n const fonts: FontProps[] = [];\n const sql = `SELECT Id,Name,Type FROM dgn_Font`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const name = stmt.getValueString(1);\n const typeCode = stmt.getValueInteger(2);\n const type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\n if (name.length > 0) {\n fonts.push({\n name,\n type,\n id: stmt.getValueInteger(0),\n });\n }\n }\n });\n\n return fonts;\n }\n}\n\nexport function createIModelDbFonts(db: IModelDb): IModelDbFonts {\n return new IModelDbFontsImpl(db);\n}\n"]}
1
+ {"version":3,"file":"IModelDbFontsImpl.js","sourceRoot":"","sources":["../../../src/internal/IModelDbFontsImpl.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAA+D,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,yBAAyB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,iBAAiB;IACL,CAAC,yBAAyB,CAAC,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAW;IAEvB,YAAmB,MAAgB;QACjC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;IACpB,CAAC;IAEM,mBAAmB,CAAC,IAA8B;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,IAAI,EAAE,kBAAkB,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEM,sBAAsB;QAC3B,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,uFAAuF,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7H,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,IAAI,KAAK,CAAC;gBACV,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAmC,CAAC;gBAC/E,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzB,IAAI,IAAI,KAAK,QAAQ,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACnD,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAC3B,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,IAAuB;QAChD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACrD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,mCAAmC;gBACnC,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,iGAAiG;YACjG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,oFAAoF,CAAC;YACjG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9H,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,QAA4B;QACxC,IAAI,EAAE,CAAC;QACP,MAAM,WAAW,GAAG,SAAS,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC;QACvF,MAAM,GAAG,GAAG,uCAAuC,WAAW,EAAE,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACjD,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,SAAS,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,cAAc,CAAC,EAAU;QAC9B,IAAI,IAAI,EAAE,IAAI,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,2CAA2C,EAAE,CAAC,IAAI,EAAE,EAAE;YACzF,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,GAAG,QAAQ,CAAC;oBAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBACzC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACjG,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,UAAgC;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAgC,EAAE,iBAA0B;QAC3E,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,iHAAiH;YACjH,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,2FAA2F;gBAC3F,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACrC,CAAC;YAED,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChI,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,oDAAoD,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1F,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,GAAG,GAAG,kKAAkK,CAAC;QAC/K,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACjD,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe;QACb,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,mCAAmC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACjD,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACrG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI;wBACJ,IAAI;wBACJ,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAY;IAC9C,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { FontFamilyDescriptor, FontFamilySelector, FontId, FontProps, FontType } from \"@itwin/core-common\";\r\nimport { _faceProps, _getData, _implementationProhibited, _key, _nativeDb } from \"./Symbols\";\r\nimport { IModelDb } from \"../IModelDb\";\r\nimport { EmbedFontFileArgs, IModelDbFonts, QueryMappedFamiliesArgs } from \"../IModelDbFonts\";\r\nimport { EmbeddedFontFile } from \"./FontFileImpl\";\r\nimport { assert, DbResult, Logger } from \"@itwin/core-bentley\";\r\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { FontFile } from \"../FontFile\";\r\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\r\n\r\nclass IModelDbFontsImpl implements IModelDbFonts {\r\n public readonly [_implementationProhibited] = undefined;\r\n readonly #db: IModelDb;\r\n\r\n public constructor(iModel: IModelDb) {\r\n this.#db = iModel;\r\n }\r\n\r\n public queryMappedFamilies(args?: QueryMappedFamiliesArgs): Iterable<FontProps> {\r\n const fontProps = this.#queryFontTable();\r\n if (args?.includeNonEmbedded) {\r\n return fontProps;\r\n }\r\n\r\n const fontNames = this.#getEmbeddedFontNames();\r\n return fontProps.filter((x) => fontNames.includes(x.name));\r\n }\r\n\r\n public queryEmbeddedFontFiles(): Iterable<FontFile> {\r\n const files: FontFile[] = [];\r\n this.#db.withSqliteStatement(`SELECT Id,StrData FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n let faces;\r\n try {\r\n faces = JSON.parse(stmt.getValueString(1)) as IModelJsNative.FontFaceProps[];\r\n } catch (e) {\r\n Logger.logError(BackendLoggerCategory.IModelDb, e);\r\n }\r\n\r\n if (!Array.isArray(faces) || faces.length === 0) {\r\n continue;\r\n }\r\n\r\n let type = faces[0].type;\r\n if (type !== FontType.Rsc && type !== FontType.Shx) {\r\n type = FontType.TrueType;\r\n }\r\n\r\n files.push(new EmbeddedFontFile(this.#db, stmt.getValueInteger(0), type, faces));\r\n }\r\n });\r\n\r\n return files;\r\n }\r\n\r\n public async embedFontFile(args: EmbedFontFileArgs): Promise<void> {\r\n this.#requireWritable();\r\n\r\n if (!args.file.isEmbeddable) {\r\n throw new Error(\"Font does not permit embedding\");\r\n }\r\n\r\n const file = args.file;\r\n for (const existing of this.queryEmbeddedFontFiles()) {\r\n if (existing[_key] === file[_key]) {\r\n // Already embedded - it's a no-op.\r\n return;\r\n }\r\n }\r\n\r\n let id = 0;\r\n const codes = this.#db.codeService?.internalCodes;\r\n if (codes) {\r\n id = await codes.writeLocker.reserveEmbeddedFaceDataId(args.file[_key]);\r\n } else {\r\n // CodeService not configured - schema lock required to prevent conflicting Ids in be_Prop table.\r\n await this.#db.acquireSchemaLock();\r\n const sql = `SELECT MAX(Id) FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`;\r\n id = this.#db.withSqliteStatement(sql, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\r\n }\r\n\r\n assert(id > 0);\r\n const data = file[_getData]();\r\n this.#db[_nativeDb].embedFontFile(id, file[_faceProps], data, true);\r\n\r\n if (!args.skipFontIdAllocation) {\r\n const familyNames = new Set<string>(args.file.faces.map((x) => x.familyName));\r\n const acquireIds = Array.from(familyNames).map(async (x) => this.#acquireId({ name: x, type: args.file.type }, true).catch());\r\n await Promise.allSettled(acquireIds);\r\n }\r\n\r\n this.#db.clearFontMap();\r\n }\r\n\r\n public findId(selector: FontFamilySelector): FontId | undefined {\r\n let id;\r\n const sqlPostlude = undefined === selector.type ? \" ORDER BY Type ASC\" : \" AND Type=?\";\r\n const sql = `SELECT Id FROM dgn_Font WHERE Name=?${sqlPostlude}`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindString(1, selector.name);\r\n if (undefined !== selector.type) {\r\n stmt.bindInteger(2, selector.type);\r\n }\r\n\r\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n id = stmt.getValueInteger(0);\r\n }\r\n });\r\n\r\n return id;\r\n }\r\n\r\n public findDescriptor(id: FontId): FontFamilyDescriptor | undefined {\r\n let name, type;\r\n this.#db.withPreparedSqliteStatement(\"SELECT Name,Type FROM dgn_Font WHERE Id=?\", (stmt) => {\r\n stmt.bindInteger(1, id);\r\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const stmtName = stmt.getValueString(0);\r\n if (stmtName.length > 0) {\r\n name = stmtName;\r\n const typeCode = stmt.getValueInteger(1);\r\n type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\r\n }\r\n }\r\n });\r\n\r\n return undefined !== name && undefined !== type ? { name, type } : undefined;\r\n }\r\n\r\n public async acquireId(descriptor: FontFamilyDescriptor): Promise<FontId> {\r\n this.#requireWritable();\r\n return this.#acquireId(descriptor, false);\r\n }\r\n\r\n async #acquireId(descriptor: FontFamilyDescriptor, embeddingFaceData: boolean): Promise<FontId> {\r\n let id = this.findId(descriptor);\r\n if (undefined !== id) {\r\n return id;\r\n }\r\n\r\n const codes = this.#db.codeService?.internalCodes;\r\n if (codes) {\r\n id = await codes.writeLocker.reserveFontId({ fontName: descriptor.name, fontType: descriptor.type });\r\n } else {\r\n // If we're being called from `embedFontFile` then the schema lock is already held, don't bother re-acquiring it.\r\n if (!embeddingFaceData) {\r\n // No CodeService configured. We must obtain the schema lock and use the next available Id.\r\n await this.#db.acquireSchemaLock();\r\n }\r\n\r\n id = this.#db.withSqliteStatement(`SELECT MAX(Id) FROM dgn_Font`, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\r\n }\r\n\r\n this.#db.withSqliteStatement(`INSERT INTO dgn_Font (Id,Type,Name) VALUES (?,?,?)`, (stmt) => {\r\n stmt.bindInteger(1, id);\r\n stmt.bindInteger(2, descriptor.type);\r\n stmt.bindString(3, descriptor.name);\r\n\r\n if (DbResult.BE_SQLITE_DONE !== stmt.step()) {\r\n throw new Error(\"Failed to insert font Id mapping\");\r\n }\r\n });\r\n\r\n this.#db.clearFontMap();\r\n\r\n return id;\r\n }\r\n\r\n #requireWritable(): void {\r\n if (this.#db.isReadonly) {\r\n throw new Error(\"iModel is read-only\");\r\n }\r\n }\r\n\r\n #getEmbeddedFontNames(): string[] {\r\n const names: string[] = [];\r\n\r\n const sql = `select DISTINCT json_extract(face.value, '$.familyName') from be_Prop, json_each(be_Prop.StrData) as face where namespace=\"dgn_Font\" and name=\"EmbeddedFaceData\"`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n names.push(stmt.getValueString(0));\r\n }\r\n });\r\n\r\n return names;\r\n }\r\n\r\n #queryFontTable(): Array<FontProps> {\r\n const fonts: FontProps[] = [];\r\n const sql = `SELECT Id,Name,Type FROM dgn_Font`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const name = stmt.getValueString(1);\r\n const typeCode = stmt.getValueInteger(2);\r\n const type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\r\n if (name.length > 0) {\r\n fonts.push({\r\n name,\r\n type,\r\n id: stmt.getValueInteger(0),\r\n });\r\n }\r\n }\r\n });\r\n\r\n return fonts;\r\n }\r\n}\r\n\r\nexport function createIModelDbFonts(db: IModelDb): IModelDbFonts {\r\n return new IModelDbFontsImpl(db);\r\n}\r\n"]}
@@ -8,61 +8,61 @@ export declare const integrityCheckTypeMap: {
8
8
  readonly name: "Check Data Columns";
9
9
  readonly resultType: "CheckDataColumnsResultRow";
10
10
  readonly sqlCommand: "check_data_columns";
11
- readonly sqlQuery: "PRAGMA integrity_check(check_data_columns) options enable_experimental_features";
11
+ readonly sqlQuery: "PRAGMA integrity_check(check_data_columns) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
12
12
  };
13
13
  readonly checkECProfile: {
14
14
  readonly name: "Check EC Profile";
15
15
  readonly resultType: "CheckECProfileResultRow";
16
16
  readonly sqlCommand: "check_ec_profile";
17
- readonly sqlQuery: "PRAGMA integrity_check(check_ec_profile) options enable_experimental_features";
17
+ readonly sqlQuery: "PRAGMA integrity_check(check_ec_profile) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
18
18
  };
19
19
  readonly checkNavigationClassIds: {
20
20
  readonly name: "Check Navigation Class Ids";
21
21
  readonly resultType: "CheckNavClassIdsResultRow";
22
22
  readonly sqlCommand: "check_nav_class_ids";
23
- readonly sqlQuery: "PRAGMA integrity_check(check_nav_class_ids) options enable_experimental_features";
23
+ readonly sqlQuery: "PRAGMA integrity_check(check_nav_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
24
24
  };
25
25
  readonly checkNavigationIds: {
26
26
  readonly name: "Check Navigation Ids";
27
27
  readonly resultType: "CheckNavIdsResultRow";
28
28
  readonly sqlCommand: "check_nav_ids";
29
- readonly sqlQuery: "PRAGMA integrity_check(check_nav_ids) options enable_experimental_features";
29
+ readonly sqlQuery: "PRAGMA integrity_check(check_nav_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
30
30
  };
31
31
  readonly checkLinktableForeignKeyClassIds: {
32
32
  readonly name: "Check Link Table Foreign Key Class Ids";
33
33
  readonly resultType: "CheckLinkTableFkClassIdsResultRow";
34
34
  readonly sqlCommand: "check_linktable_fk_class_ids";
35
- readonly sqlQuery: "PRAGMA integrity_check(check_linktable_fk_class_ids) options enable_experimental_features";
35
+ readonly sqlQuery: "PRAGMA integrity_check(check_linktable_fk_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
36
36
  };
37
37
  readonly checkLinktableForeignKeyIds: {
38
38
  readonly name: "Check Link Table Foreign Key Ids";
39
39
  readonly resultType: "CheckLinkTableFkIdsResultRow";
40
40
  readonly sqlCommand: "check_linktable_fk_ids";
41
- readonly sqlQuery: "PRAGMA integrity_check(check_linktable_fk_ids) options enable_experimental_features";
41
+ readonly sqlQuery: "PRAGMA integrity_check(check_linktable_fk_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
42
42
  };
43
43
  readonly checkClassIds: {
44
44
  readonly name: "Check Class Ids";
45
45
  readonly resultType: "CheckClassIdsResultRow";
46
46
  readonly sqlCommand: "check_class_ids";
47
- readonly sqlQuery: "PRAGMA integrity_check(check_class_ids) options enable_experimental_features";
47
+ readonly sqlQuery: "PRAGMA integrity_check(check_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
48
48
  };
49
49
  readonly checkDataSchema: {
50
50
  readonly name: "Check Data Schema";
51
51
  readonly resultType: "CheckDataSchemaResultRow";
52
52
  readonly sqlCommand: "check_data_schema";
53
- readonly sqlQuery: "PRAGMA integrity_check(check_data_schema) options enable_experimental_features";
53
+ readonly sqlQuery: "PRAGMA integrity_check(check_data_schema) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
54
54
  };
55
55
  readonly checkSchemaLoad: {
56
56
  readonly name: "Check Schema Load";
57
57
  readonly resultType: "CheckSchemaLoadResultRow";
58
58
  readonly sqlCommand: "check_schema_load";
59
- readonly sqlQuery: "PRAGMA integrity_check(check_schema_load) options enable_experimental_features";
59
+ readonly sqlQuery: "PRAGMA integrity_check(check_schema_load) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
60
60
  };
61
61
  readonly checkMissingChildRows: {
62
62
  readonly name: "Check Missing Child Rows";
63
63
  readonly resultType: "CheckMissingChildRowsResultRow";
64
64
  readonly sqlCommand: "check_missing_child_rows";
65
- readonly sqlQuery: "PRAGMA integrity_check(check_missing_child_rows) options enable_experimental_features";
65
+ readonly sqlQuery: "PRAGMA integrity_check(check_missing_child_rows) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
66
66
  };
67
67
  };
68
68
  /**
@@ -13,61 +13,61 @@ export const integrityCheckTypeMap = {
13
13
  name: "Check Data Columns",
14
14
  resultType: "CheckDataColumnsResultRow",
15
15
  sqlCommand: "check_data_columns",
16
- sqlQuery: `PRAGMA integrity_check(check_data_columns) options enable_experimental_features`,
16
+ sqlQuery: `PRAGMA integrity_check(check_data_columns) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
17
17
  },
18
18
  checkECProfile: {
19
19
  name: "Check EC Profile",
20
20
  resultType: "CheckECProfileResultRow",
21
21
  sqlCommand: "check_ec_profile",
22
- sqlQuery: `PRAGMA integrity_check(check_ec_profile) options enable_experimental_features`,
22
+ sqlQuery: `PRAGMA integrity_check(check_ec_profile) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
23
23
  },
24
24
  checkNavigationClassIds: {
25
25
  name: "Check Navigation Class Ids",
26
26
  resultType: "CheckNavClassIdsResultRow",
27
27
  sqlCommand: "check_nav_class_ids",
28
- sqlQuery: `PRAGMA integrity_check(check_nav_class_ids) options enable_experimental_features`,
28
+ sqlQuery: `PRAGMA integrity_check(check_nav_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
29
29
  },
30
30
  checkNavigationIds: {
31
31
  name: "Check Navigation Ids",
32
32
  resultType: "CheckNavIdsResultRow",
33
33
  sqlCommand: "check_nav_ids",
34
- sqlQuery: `PRAGMA integrity_check(check_nav_ids) options enable_experimental_features`,
34
+ sqlQuery: `PRAGMA integrity_check(check_nav_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
35
35
  },
36
36
  checkLinktableForeignKeyClassIds: {
37
37
  name: "Check Link Table Foreign Key Class Ids",
38
38
  resultType: "CheckLinkTableFkClassIdsResultRow",
39
39
  sqlCommand: "check_linktable_fk_class_ids",
40
- sqlQuery: `PRAGMA integrity_check(check_linktable_fk_class_ids) options enable_experimental_features`,
40
+ sqlQuery: `PRAGMA integrity_check(check_linktable_fk_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
41
41
  },
42
42
  checkLinktableForeignKeyIds: {
43
43
  name: "Check Link Table Foreign Key Ids",
44
44
  resultType: "CheckLinkTableFkIdsResultRow",
45
45
  sqlCommand: "check_linktable_fk_ids",
46
- sqlQuery: `PRAGMA integrity_check(check_linktable_fk_ids) options enable_experimental_features`,
46
+ sqlQuery: `PRAGMA integrity_check(check_linktable_fk_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
47
47
  },
48
48
  checkClassIds: {
49
49
  name: "Check Class Ids",
50
50
  resultType: "CheckClassIdsResultRow",
51
51
  sqlCommand: "check_class_ids",
52
- sqlQuery: `PRAGMA integrity_check(check_class_ids) options enable_experimental_features`,
52
+ sqlQuery: `PRAGMA integrity_check(check_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
53
53
  },
54
54
  checkDataSchema: {
55
55
  name: "Check Data Schema",
56
56
  resultType: "CheckDataSchemaResultRow",
57
57
  sqlCommand: "check_data_schema",
58
- sqlQuery: `PRAGMA integrity_check(check_data_schema) options enable_experimental_features`,
58
+ sqlQuery: `PRAGMA integrity_check(check_data_schema) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
59
59
  },
60
60
  checkSchemaLoad: {
61
61
  name: "Check Schema Load",
62
62
  resultType: "CheckSchemaLoadResultRow",
63
63
  sqlCommand: "check_schema_load",
64
- sqlQuery: `PRAGMA integrity_check(check_schema_load) options enable_experimental_features`,
64
+ sqlQuery: `PRAGMA integrity_check(check_schema_load) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
65
65
  },
66
66
  checkMissingChildRows: {
67
67
  name: "Check Missing Child Rows",
68
68
  resultType: "CheckMissingChildRowsResultRow",
69
69
  sqlCommand: "check_missing_child_rows",
70
- sqlQuery: `PRAGMA integrity_check(check_missing_child_rows) options enable_experimental_features`,
70
+ sqlQuery: `PRAGMA integrity_check(check_missing_child_rows) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,
71
71
  },
72
72
  };
73
73
  /**
@@ -100,9 +100,9 @@ export function getIntegrityCheckName(check) {
100
100
  * @internal
101
101
  */
102
102
  export async function performQuickIntegrityCheck(iModel) {
103
- const integrityCheckQuery = "PRAGMA integrity_check options enable_experimental_features";
103
+ const integrityCheckQuery = "PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES";
104
104
  const integrityCheckResults = [];
105
- for await (const row of iModel.createQueryReader(integrityCheckQuery)) {
105
+ for await (const row of iModel.createQueryReader(integrityCheckQuery, undefined, { usePrimaryConn: true })) {
106
106
  integrityCheckResults.push({ check: getIntegrityCheckName(row.check), passed: row.result, elapsedSeconds: row.elapsed_sec });
107
107
  }
108
108
  ;
@@ -112,70 +112,70 @@ export async function performSpecificIntegrityCheck(iModel, check) {
112
112
  switch (check) {
113
113
  case "checkDataColumns": {
114
114
  const results = [];
115
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataColumns.sqlQuery)) {
115
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataColumns.sqlQuery, undefined, { usePrimaryConn: true })) {
116
116
  results.push({ sno: row.sno, table: row.table, column: row.column });
117
117
  }
118
118
  return results;
119
119
  }
120
120
  case "checkECProfile": {
121
121
  const results = [];
122
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkECProfile.sqlQuery)) {
122
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkECProfile.sqlQuery, undefined, { usePrimaryConn: true })) {
123
123
  results.push({ sno: row.sno, type: row.type, name: row.name, issue: row.issue });
124
124
  }
125
125
  return results;
126
126
  }
127
127
  case "checkNavigationClassIds": {
128
128
  const results = [];
129
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationClassIds.sqlQuery)) {
129
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {
130
130
  results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, navClassId: row.nav_classId });
131
131
  }
132
132
  return results;
133
133
  }
134
134
  case "checkNavigationIds": {
135
135
  const results = [];
136
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationIds.sqlQuery)) {
136
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationIds.sqlQuery, undefined, { usePrimaryConn: true })) {
137
137
  results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, primaryClass: row.primary_class });
138
138
  }
139
139
  return results;
140
140
  }
141
141
  case "checkLinktableForeignKeyClassIds": {
142
142
  const results = [];
143
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyClassIds.sqlQuery)) {
143
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {
144
144
  results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, keyClassId: row.key_classId });
145
145
  }
146
146
  return results;
147
147
  }
148
148
  case "checkLinktableForeignKeyIds": {
149
149
  const results = [];
150
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyIds.sqlQuery)) {
150
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyIds.sqlQuery, undefined, { usePrimaryConn: true })) {
151
151
  results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, primaryClass: row.primary_class });
152
152
  }
153
153
  return results;
154
154
  }
155
155
  case "checkClassIds": {
156
156
  const results = [];
157
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkClassIds.sqlQuery)) {
157
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {
158
158
  results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, type: row.type });
159
159
  }
160
160
  return results;
161
161
  }
162
162
  case "checkDataSchema": {
163
163
  const results = [];
164
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataSchema.sqlQuery)) {
164
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataSchema.sqlQuery, undefined, { usePrimaryConn: true })) {
165
165
  results.push({ sno: row.sno, type: row.type, name: row.name });
166
166
  }
167
167
  return results;
168
168
  }
169
169
  case "checkSchemaLoad": {
170
170
  const results = [];
171
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkSchemaLoad.sqlQuery)) {
171
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkSchemaLoad.sqlQuery, undefined, { usePrimaryConn: true })) {
172
172
  results.push({ sno: row.sno, schema: row.schema });
173
173
  }
174
174
  return results;
175
175
  }
176
176
  case "checkMissingChildRows": {
177
177
  const results = [];
178
- for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkMissingChildRows.sqlQuery)) {
178
+ for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkMissingChildRows.sqlQuery, undefined, { usePrimaryConn: true })) {
179
179
  results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, missingRowInTables: row.MissingRowInTables });
180
180
  }
181
181
  return results;
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrityCheck.js","sourceRoot":"","sources":["../../../src/internal/IntegrityCheck.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { IModelStatus } from \"@itwin/core-bentley\";\nimport { IModelError } from \"@itwin/core-common\";\nimport { IModelDb } from \"../IModelDb\";\n\n/**\n * Information about each integrity check type, including the name, expected result type, and SQL query to execute\n * @internal\n */\nexport const integrityCheckTypeMap = {\n checkDataColumns: {\n name: \"Check Data Columns\",\n resultType: \"CheckDataColumnsResultRow\",\n sqlCommand: \"check_data_columns\",\n sqlQuery: `PRAGMA integrity_check(check_data_columns) options enable_experimental_features`,\n },\n checkECProfile: {\n name: \"Check EC Profile\",\n resultType: \"CheckECProfileResultRow\",\n sqlCommand: \"check_ec_profile\",\n sqlQuery: `PRAGMA integrity_check(check_ec_profile) options enable_experimental_features`,\n },\n checkNavigationClassIds: {\n name: \"Check Navigation Class Ids\",\n resultType: \"CheckNavClassIdsResultRow\",\n sqlCommand: \"check_nav_class_ids\",\n sqlQuery: `PRAGMA integrity_check(check_nav_class_ids) options enable_experimental_features`,\n },\n checkNavigationIds: {\n name: \"Check Navigation Ids\",\n resultType: \"CheckNavIdsResultRow\",\n sqlCommand: \"check_nav_ids\",\n sqlQuery: `PRAGMA integrity_check(check_nav_ids) options enable_experimental_features`,\n },\n checkLinktableForeignKeyClassIds: {\n name: \"Check Link Table Foreign Key Class Ids\",\n resultType: \"CheckLinkTableFkClassIdsResultRow\",\n sqlCommand: \"check_linktable_fk_class_ids\",\n sqlQuery: `PRAGMA integrity_check(check_linktable_fk_class_ids) options enable_experimental_features`,\n },\n checkLinktableForeignKeyIds: {\n name: \"Check Link Table Foreign Key Ids\",\n resultType: \"CheckLinkTableFkIdsResultRow\",\n sqlCommand: \"check_linktable_fk_ids\",\n sqlQuery: `PRAGMA integrity_check(check_linktable_fk_ids) options enable_experimental_features`,\n },\n checkClassIds: {\n name: \"Check Class Ids\",\n resultType: \"CheckClassIdsResultRow\",\n sqlCommand: \"check_class_ids\",\n sqlQuery: `PRAGMA integrity_check(check_class_ids) options enable_experimental_features`,\n },\n checkDataSchema: {\n name: \"Check Data Schema\",\n resultType: \"CheckDataSchemaResultRow\",\n sqlCommand: \"check_data_schema\",\n sqlQuery: `PRAGMA integrity_check(check_data_schema) options enable_experimental_features`,\n },\n checkSchemaLoad: {\n name: \"Check Schema Load\",\n resultType: \"CheckSchemaLoadResultRow\",\n sqlCommand: \"check_schema_load\",\n sqlQuery: `PRAGMA integrity_check(check_schema_load) options enable_experimental_features`,\n },\n checkMissingChildRows: {\n name: \"Check Missing Child Rows\",\n resultType: \"CheckMissingChildRowsResultRow\",\n sqlCommand: \"check_missing_child_rows\",\n sqlQuery: `PRAGMA integrity_check(check_missing_child_rows) options enable_experimental_features`,\n },\n} as const;\n\n/**\n * Type representing the keys of the integrityCheckType map, which correspond to the different types of integrity checks that can be performed.\n */\nexport type IntegrityCheckKey = keyof typeof integrityCheckTypeMap;\n\n/** Map of integrity check keys to their result row types */\ninterface IntegrityCheckResultTypeMap {\n checkDataColumns: CheckDataColumnsResultRow;\n checkECProfile: CheckECProfileResultRow;\n checkNavigationClassIds: CheckNavClassIdsResultRow;\n checkNavigationIds: CheckNavIdsResultRow;\n checkLinktableForeignKeyClassIds: CheckLinkTableFkClassIdsResultRow;\n checkLinktableForeignKeyIds: CheckLinkTableFkIdsResultRow;\n checkClassIds: CheckClassIdsResultRow;\n checkDataSchema: CheckDataSchemaResultRow;\n checkSchemaLoad: CheckSchemaLoadResultRow;\n checkMissingChildRows: CheckMissingChildRowsResultRow;\n}\n\n/** Checks the Map to give the return type of a specific integrity check */\ntype IntegrityCheckResultRow<K extends IntegrityCheckKey> = IntegrityCheckResultTypeMap[K];\n\n/**\n * Return type for quick integrity check\n */\nexport interface QuickIntegrityCheckResultRow {\n check: string;\n passed: boolean;\n elapsedSeconds: string;\n}\n\n/**\n * Return type for Check Data Columns integrity check\n */\nexport interface CheckDataColumnsResultRow {\n sno: number;\n table: string;\n column: string;\n}\n\n/**\n * Return type for Check EC Profile integrity check\n */\nexport interface CheckECProfileResultRow {\n sno: number;\n type: string;\n name: string;\n issue: string;\n}\n\n/**\n * Return type for Check Navigation Class Ids integrity check\n */\nexport interface CheckNavClassIdsResultRow {\n sno: number;\n id: string;\n class: string;\n property: string;\n navId: string;\n navClassId: string;\n}\n\n/**\n * Return type for Check Navigation Ids integrity check\n */\nexport interface CheckNavIdsResultRow {\n sno: number;\n id: string;\n class: string;\n property: string;\n navId: string;\n primaryClass: string;\n}\n\n/**\n * Return type for Check Link Table Foreign Key Class Ids integrity check\n */\nexport interface CheckLinkTableFkClassIdsResultRow {\n sno: number;\n id: string;\n relationship: string;\n property: string;\n keyId: string;\n keyClassId: string;\n}\n\n/**\n * Return type for Check Link Table Foreign Key Ids integrity check\n */\nexport interface CheckLinkTableFkIdsResultRow {\n sno: number;\n id: string;\n relationship: string;\n property: string;\n keyId: string;\n primaryClass: string;\n}\n\n/**\n * Return type for Check Class Ids integrity check\n */\nexport interface CheckClassIdsResultRow {\n sno: number;\n class: string;\n id: string;\n classId: string;\n type: string;\n}\n\n/**\n * Return type for Check Data Schema integrity check\n */\nexport interface CheckDataSchemaResultRow {\n sno: number;\n type: string;\n name: string;\n}\n\n/**\n * Return type for Check Schema Load integrity check\n */\nexport interface CheckSchemaLoadResultRow {\n sno: number;\n schema: string;\n}\n\n/**\n * Return type for Check Missing Child Rows integrity check\n */\nexport interface CheckMissingChildRowsResultRow {\n sno: number;\n class: string;\n id: string;\n classId: string;\n missingRowInTables: string;\n}\n\n/**\n * Return type for integrity check results, including the check name, whether it passed, and the specific results (if any)\n */\nexport interface IntegrityCheckResult {\n /** The name of the integrity check that was performed */\n check: string;\n /** Whether the integrity check passed (i.e. no issues were found = true) */\n passed: boolean;\n /** The specific results returned by the integrity check, which may include details about any issues that were found.\n * In the case where issues are found, this will be an array of result rows specific to the type of check that was performed,\n * or an array of quick integrity check results if it was a quick check. */\n results: IntegrityCheckResultRow<IntegrityCheckKey>[] | QuickIntegrityCheckResultRow[];\n}\n\n/**\n * Gets the user-friendly name of an integrity check based on its key or SQL command.\n * It first attempts to find a direct match for the key in the integrityCheckTypeMap. If not found, it searches for a match based on the SQL command.\n * If still not found, it returns the original check string.\n * @param check - The integrity check key or SQL command to get the name of\n * @returns The user-friendly name of the integrity check, or the original check string if no match is found\n * @internal\n */\nexport function getIntegrityCheckName(check: string): string {\n // First try direct lookup by key\n const directLookup = integrityCheckTypeMap[check as IntegrityCheckKey];\n if (directLookup) {\n return directLookup.name;\n }\n // If not found, search by sqlCommand\n for (const [, value] of Object.entries(integrityCheckTypeMap)) {\n if (value.sqlCommand === check) {\n return value.name;\n }\n }\n // Fallback to the original check string\n return check;\n}\n\n/**\n * Performs a quick integrity check on the given iModel.\n * @param iModel The IModelDb instance to perform the integrity check on\n * @returns An array of results for each check performed, including the check name, whether it passed, and the elapsed time in seconds\n * @internal\n */\nexport async function performQuickIntegrityCheck(iModel: IModelDb): Promise<QuickIntegrityCheckResultRow[]> {\n const integrityCheckQuery = \"PRAGMA integrity_check options enable_experimental_features\";\n const integrityCheckResults: QuickIntegrityCheckResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckQuery)) {\n integrityCheckResults.push({ check: getIntegrityCheckName(row.check), passed: row.result, elapsedSeconds: row.elapsed_sec});\n };\n return integrityCheckResults;\n}\n\n/**\n * Performs a specific integrity check on the given iModel based on the provided check key, and returns the results specific to that check type.\n * @param iModel The IModelDb instance to perform the integrity check on\n * @param check The key of the specific integrity check to perform\n * @return An array of results specific to the integrity check that was performed. The type of the result rows will depend on the check that was executed.\n * @throws IModelError with status BadRequest if an unknown integrity check key is provided\n * @internal\n */\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkDataColumns\"): Promise<IntegrityCheckResultRow<\"checkDataColumns\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkECProfile\"): Promise<IntegrityCheckResultRow<\"checkECProfile\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkNavigationClassIds\"): Promise<IntegrityCheckResultRow<\"checkNavigationClassIds\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkNavigationIds\"): Promise<IntegrityCheckResultRow<\"checkNavigationIds\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkLinktableForeignKeyClassIds\"): Promise<IntegrityCheckResultRow<\"checkLinktableForeignKeyClassIds\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkLinktableForeignKeyIds\"): Promise<IntegrityCheckResultRow<\"checkLinktableForeignKeyIds\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkClassIds\"): Promise<IntegrityCheckResultRow<\"checkClassIds\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkDataSchema\"): Promise<IntegrityCheckResultRow<\"checkDataSchema\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkSchemaLoad\"): Promise<IntegrityCheckResultRow<\"checkSchemaLoad\">[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkMissingChildRows\"): Promise<IntegrityCheckResultRow<\"checkMissingChildRows\">[]>;\nexport async function performSpecificIntegrityCheck<K extends IntegrityCheckKey>(iModel: IModelDb, check: K): Promise<IntegrityCheckResultRow<K>[]>;\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: IntegrityCheckKey): Promise<IntegrityCheckResultRow<IntegrityCheckKey>[]> {\n switch (check) {\n case \"checkDataColumns\": {\n const results: CheckDataColumnsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataColumns.sqlQuery)) {\n results.push({ sno: row.sno, table: row.table, column: row.column });\n }\n return results;\n }\n case \"checkECProfile\": {\n const results: CheckECProfileResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkECProfile.sqlQuery)) {\n results.push({ sno: row.sno, type: row.type, name: row.name, issue: row.issue });\n }\n return results;\n }\n case \"checkNavigationClassIds\": {\n const results: CheckNavClassIdsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationClassIds.sqlQuery)) {\n results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, navClassId: row.nav_classId });\n }\n return results;\n }\n case \"checkNavigationIds\": {\n const results: CheckNavIdsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationIds.sqlQuery)) {\n results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, primaryClass: row.primary_class });\n }\n return results;\n }\n case \"checkLinktableForeignKeyClassIds\": {\n const results: CheckLinkTableFkClassIdsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyClassIds.sqlQuery)) {\n results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, keyClassId: row.key_classId });\n }\n return results;\n }\n case \"checkLinktableForeignKeyIds\": {\n const results: CheckLinkTableFkIdsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyIds.sqlQuery)) {\n results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, primaryClass: row.primary_class });\n }\n return results;\n }\n case \"checkClassIds\": {\n const results: CheckClassIdsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkClassIds.sqlQuery)) {\n results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, type: row.type });\n }\n return results;\n }\n case \"checkDataSchema\": {\n const results: CheckDataSchemaResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataSchema.sqlQuery)) {\n results.push({ sno: row.sno, type: row.type, name: row.name });\n }\n return results;\n }\n case \"checkSchemaLoad\": {\n const results: CheckSchemaLoadResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkSchemaLoad.sqlQuery)) {\n results.push({ sno: row.sno, schema: row.schema });\n }\n return results;\n }\n case \"checkMissingChildRows\": {\n const results: CheckMissingChildRowsResultRow[] = [];\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkMissingChildRows.sqlQuery)) {\n results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, missingRowInTables: row.MissingRowInTables });\n }\n return results;\n }\n default:\n throw new IModelError(IModelStatus.BadRequest, `Unknown integrity check type`);\n }\n}"]}
1
+ {"version":3,"file":"IntegrityCheck.js","sourceRoot":"","sources":["../../../src/internal/IntegrityCheck.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\n\r\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError } from \"@itwin/core-common\";\r\nimport { IModelDb } from \"../IModelDb\";\r\n\r\n/**\r\n * Information about each integrity check type, including the name, expected result type, and SQL query to execute\r\n * @internal\r\n */\r\nexport const integrityCheckTypeMap = {\r\n checkDataColumns: {\r\n name: \"Check Data Columns\",\r\n resultType: \"CheckDataColumnsResultRow\",\r\n sqlCommand: \"check_data_columns\",\r\n sqlQuery: `PRAGMA integrity_check(check_data_columns) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkECProfile: {\r\n name: \"Check EC Profile\",\r\n resultType: \"CheckECProfileResultRow\",\r\n sqlCommand: \"check_ec_profile\",\r\n sqlQuery: `PRAGMA integrity_check(check_ec_profile) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkNavigationClassIds: {\r\n name: \"Check Navigation Class Ids\",\r\n resultType: \"CheckNavClassIdsResultRow\",\r\n sqlCommand: \"check_nav_class_ids\",\r\n sqlQuery: `PRAGMA integrity_check(check_nav_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkNavigationIds: {\r\n name: \"Check Navigation Ids\",\r\n resultType: \"CheckNavIdsResultRow\",\r\n sqlCommand: \"check_nav_ids\",\r\n sqlQuery: `PRAGMA integrity_check(check_nav_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkLinktableForeignKeyClassIds: {\r\n name: \"Check Link Table Foreign Key Class Ids\",\r\n resultType: \"CheckLinkTableFkClassIdsResultRow\",\r\n sqlCommand: \"check_linktable_fk_class_ids\",\r\n sqlQuery: `PRAGMA integrity_check(check_linktable_fk_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkLinktableForeignKeyIds: {\r\n name: \"Check Link Table Foreign Key Ids\",\r\n resultType: \"CheckLinkTableFkIdsResultRow\",\r\n sqlCommand: \"check_linktable_fk_ids\",\r\n sqlQuery: `PRAGMA integrity_check(check_linktable_fk_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkClassIds: {\r\n name: \"Check Class Ids\",\r\n resultType: \"CheckClassIdsResultRow\",\r\n sqlCommand: \"check_class_ids\",\r\n sqlQuery: `PRAGMA integrity_check(check_class_ids) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkDataSchema: {\r\n name: \"Check Data Schema\",\r\n resultType: \"CheckDataSchemaResultRow\",\r\n sqlCommand: \"check_data_schema\",\r\n sqlQuery: `PRAGMA integrity_check(check_data_schema) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkSchemaLoad: {\r\n name: \"Check Schema Load\",\r\n resultType: \"CheckSchemaLoadResultRow\",\r\n sqlCommand: \"check_schema_load\",\r\n sqlQuery: `PRAGMA integrity_check(check_schema_load) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n checkMissingChildRows: {\r\n name: \"Check Missing Child Rows\",\r\n resultType: \"CheckMissingChildRowsResultRow\",\r\n sqlCommand: \"check_missing_child_rows\",\r\n sqlQuery: `PRAGMA integrity_check(check_missing_child_rows) ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`,\r\n },\r\n} as const;\r\n\r\n/**\r\n * Type representing the keys of the integrityCheckType map, which correspond to the different types of integrity checks that can be performed.\r\n */\r\nexport type IntegrityCheckKey = keyof typeof integrityCheckTypeMap;\r\n\r\n/** Map of integrity check keys to their result row types */\r\ninterface IntegrityCheckResultTypeMap {\r\n checkDataColumns: CheckDataColumnsResultRow;\r\n checkECProfile: CheckECProfileResultRow;\r\n checkNavigationClassIds: CheckNavClassIdsResultRow;\r\n checkNavigationIds: CheckNavIdsResultRow;\r\n checkLinktableForeignKeyClassIds: CheckLinkTableFkClassIdsResultRow;\r\n checkLinktableForeignKeyIds: CheckLinkTableFkIdsResultRow;\r\n checkClassIds: CheckClassIdsResultRow;\r\n checkDataSchema: CheckDataSchemaResultRow;\r\n checkSchemaLoad: CheckSchemaLoadResultRow;\r\n checkMissingChildRows: CheckMissingChildRowsResultRow;\r\n}\r\n\r\n/** Checks the Map to give the return type of a specific integrity check */\r\ntype IntegrityCheckResultRow<K extends IntegrityCheckKey> = IntegrityCheckResultTypeMap[K];\r\n\r\n/**\r\n * Return type for quick integrity check\r\n */\r\nexport interface QuickIntegrityCheckResultRow {\r\n check: string;\r\n passed: boolean;\r\n elapsedSeconds: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Data Columns integrity check\r\n */\r\nexport interface CheckDataColumnsResultRow {\r\n sno: number;\r\n table: string;\r\n column: string;\r\n}\r\n\r\n/**\r\n * Return type for Check EC Profile integrity check\r\n */\r\nexport interface CheckECProfileResultRow {\r\n sno: number;\r\n type: string;\r\n name: string;\r\n issue: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Navigation Class Ids integrity check\r\n */\r\nexport interface CheckNavClassIdsResultRow {\r\n sno: number;\r\n id: string;\r\n class: string;\r\n property: string;\r\n navId: string;\r\n navClassId: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Navigation Ids integrity check\r\n */\r\nexport interface CheckNavIdsResultRow {\r\n sno: number;\r\n id: string;\r\n class: string;\r\n property: string;\r\n navId: string;\r\n primaryClass: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Link Table Foreign Key Class Ids integrity check\r\n */\r\nexport interface CheckLinkTableFkClassIdsResultRow {\r\n sno: number;\r\n id: string;\r\n relationship: string;\r\n property: string;\r\n keyId: string;\r\n keyClassId: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Link Table Foreign Key Ids integrity check\r\n */\r\nexport interface CheckLinkTableFkIdsResultRow {\r\n sno: number;\r\n id: string;\r\n relationship: string;\r\n property: string;\r\n keyId: string;\r\n primaryClass: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Class Ids integrity check\r\n */\r\nexport interface CheckClassIdsResultRow {\r\n sno: number;\r\n class: string;\r\n id: string;\r\n classId: string;\r\n type: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Data Schema integrity check\r\n */\r\nexport interface CheckDataSchemaResultRow {\r\n sno: number;\r\n type: string;\r\n name: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Schema Load integrity check\r\n */\r\nexport interface CheckSchemaLoadResultRow {\r\n sno: number;\r\n schema: string;\r\n}\r\n\r\n/**\r\n * Return type for Check Missing Child Rows integrity check\r\n */\r\nexport interface CheckMissingChildRowsResultRow {\r\n sno: number;\r\n class: string;\r\n id: string;\r\n classId: string;\r\n missingRowInTables: string;\r\n}\r\n\r\n/**\r\n * Return type for integrity check results, including the check name, whether it passed, and the specific results (if any)\r\n */\r\nexport interface IntegrityCheckResult {\r\n /** The name of the integrity check that was performed */\r\n check: string;\r\n /** Whether the integrity check passed (i.e. no issues were found = true) */\r\n passed: boolean;\r\n /** The specific results returned by the integrity check, which may include details about any issues that were found.\r\n * In the case where issues are found, this will be an array of result rows specific to the type of check that was performed,\r\n * or an array of quick integrity check results if it was a quick check. */\r\n results: IntegrityCheckResultRow<IntegrityCheckKey>[] | QuickIntegrityCheckResultRow[];\r\n}\r\n\r\n/**\r\n * Gets the user-friendly name of an integrity check based on its key or SQL command.\r\n * It first attempts to find a direct match for the key in the integrityCheckTypeMap. If not found, it searches for a match based on the SQL command.\r\n * If still not found, it returns the original check string.\r\n * @param check - The integrity check key or SQL command to get the name of\r\n * @returns The user-friendly name of the integrity check, or the original check string if no match is found\r\n * @internal\r\n */\r\nexport function getIntegrityCheckName(check: string): string {\r\n // First try direct lookup by key\r\n const directLookup = integrityCheckTypeMap[check as IntegrityCheckKey];\r\n if (directLookup) {\r\n return directLookup.name;\r\n }\r\n // If not found, search by sqlCommand\r\n for (const [, value] of Object.entries(integrityCheckTypeMap)) {\r\n if (value.sqlCommand === check) {\r\n return value.name;\r\n }\r\n }\r\n // Fallback to the original check string\r\n return check;\r\n}\r\n\r\n/**\r\n * Performs a quick integrity check on the given iModel.\r\n * @param iModel The IModelDb instance to perform the integrity check on\r\n * @returns An array of results for each check performed, including the check name, whether it passed, and the elapsed time in seconds\r\n * @internal\r\n */\r\nexport async function performQuickIntegrityCheck(iModel: IModelDb): Promise<QuickIntegrityCheckResultRow[]> {\r\n const integrityCheckQuery = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\r\n const integrityCheckResults: QuickIntegrityCheckResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckQuery, undefined, { usePrimaryConn: true })) {\r\n integrityCheckResults.push({ check: getIntegrityCheckName(row.check), passed: row.result, elapsedSeconds: row.elapsed_sec});\r\n };\r\n return integrityCheckResults;\r\n}\r\n\r\n/**\r\n * Performs a specific integrity check on the given iModel based on the provided check key, and returns the results specific to that check type.\r\n * @param iModel The IModelDb instance to perform the integrity check on\r\n * @param check The key of the specific integrity check to perform\r\n * @return An array of results specific to the integrity check that was performed. The type of the result rows will depend on the check that was executed.\r\n * @throws IModelError with status BadRequest if an unknown integrity check key is provided\r\n * @internal\r\n */\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkDataColumns\"): Promise<IntegrityCheckResultRow<\"checkDataColumns\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkECProfile\"): Promise<IntegrityCheckResultRow<\"checkECProfile\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkNavigationClassIds\"): Promise<IntegrityCheckResultRow<\"checkNavigationClassIds\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkNavigationIds\"): Promise<IntegrityCheckResultRow<\"checkNavigationIds\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkLinktableForeignKeyClassIds\"): Promise<IntegrityCheckResultRow<\"checkLinktableForeignKeyClassIds\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkLinktableForeignKeyIds\"): Promise<IntegrityCheckResultRow<\"checkLinktableForeignKeyIds\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkClassIds\"): Promise<IntegrityCheckResultRow<\"checkClassIds\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkDataSchema\"): Promise<IntegrityCheckResultRow<\"checkDataSchema\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkSchemaLoad\"): Promise<IntegrityCheckResultRow<\"checkSchemaLoad\">[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: \"checkMissingChildRows\"): Promise<IntegrityCheckResultRow<\"checkMissingChildRows\">[]>;\r\nexport async function performSpecificIntegrityCheck<K extends IntegrityCheckKey>(iModel: IModelDb, check: K): Promise<IntegrityCheckResultRow<K>[]>;\r\nexport async function performSpecificIntegrityCheck(iModel: IModelDb, check: IntegrityCheckKey): Promise<IntegrityCheckResultRow<IntegrityCheckKey>[]> {\r\n switch (check) {\r\n case \"checkDataColumns\": {\r\n const results: CheckDataColumnsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataColumns.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, table: row.table, column: row.column });\r\n }\r\n return results;\r\n }\r\n case \"checkECProfile\": {\r\n const results: CheckECProfileResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkECProfile.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, type: row.type, name: row.name, issue: row.issue });\r\n }\r\n return results;\r\n }\r\n case \"checkNavigationClassIds\": {\r\n const results: CheckNavClassIdsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, navClassId: row.nav_classId });\r\n }\r\n return results;\r\n }\r\n case \"checkNavigationIds\": {\r\n const results: CheckNavIdsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkNavigationIds.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, id: row.id, class: row.class, property: row.property, navId: row.nav_id, primaryClass: row.primary_class });\r\n }\r\n return results;\r\n }\r\n case \"checkLinktableForeignKeyClassIds\": {\r\n const results: CheckLinkTableFkClassIdsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, keyClassId: row.key_classId });\r\n }\r\n return results;\r\n }\r\n case \"checkLinktableForeignKeyIds\": {\r\n const results: CheckLinkTableFkIdsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkLinktableForeignKeyIds.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, id: row.id, relationship: row.relationship, property: row.property, keyId: row.key_id, primaryClass: row.primary_class });\r\n }\r\n return results;\r\n }\r\n case \"checkClassIds\": {\r\n const results: CheckClassIdsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkClassIds.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, type: row.type });\r\n }\r\n return results;\r\n }\r\n case \"checkDataSchema\": {\r\n const results: CheckDataSchemaResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkDataSchema.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, type: row.type, name: row.name });\r\n }\r\n return results;\r\n }\r\n case \"checkSchemaLoad\": {\r\n const results: CheckSchemaLoadResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkSchemaLoad.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, schema: row.schema });\r\n }\r\n return results;\r\n }\r\n case \"checkMissingChildRows\": {\r\n const results: CheckMissingChildRowsResultRow[] = [];\r\n for await (const row of iModel.createQueryReader(integrityCheckTypeMap.checkMissingChildRows.sqlQuery, undefined, { usePrimaryConn: true })) {\r\n results.push({ sno: row.sno, class: row.class, id: row.id, classId: row.class_id, missingRowInTables: row.MissingRowInTables });\r\n }\r\n return results;\r\n }\r\n default:\r\n throw new IModelError(IModelStatus.BadRequest, `Unknown integrity check type`);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NativePlatform.js","sourceRoot":"","sources":["../../../src/internal/NativePlatform.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAkB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9D,IAAI,cAAiD,CAAC;AAEtD,IAAI,2BAAqD,CAAC;AAE1D,SAAS,mBAAmB;IAC1B,IAAI,2BAA2B,EAAE,CAAC;QAChC,2BAA2B,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IAChB,MAAM,KAAK,QAAQ;QACxB,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB;IAChC,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACjC,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAE,OAAe,CAAC,cAAc,CAAC,gBAAgB,CAA0B,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACxJ,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,2BAA2B,CAAC,IAAiB;IAC3D,2BAA2B,GAAG,IAAI,CAAC;AACrC,CAAC","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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module IModelHost\n */\n\nimport { IModelJsNative, NativeLibrary } from \"@bentley/imodeljs-native\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\n\nlet nativePlatform: typeof IModelJsNative | undefined;\n\nlet syncNativeLogLevelsOverride: (() => void) | undefined;\n\nfunction syncNativeLogLevels() {\n if (syncNativeLogLevelsOverride) {\n syncNativeLogLevelsOverride();\n } else {\n nativePlatform?.clearLogLevelCache();\n }\n}\n\n/** Provides access to the internal APIs defined in @bentley/imodeljs-native.\n * @internal\n */\nexport class IModelNative {\n public static get platform(): typeof IModelJsNative {\n if (undefined === nativePlatform) {\n throw new Error(\"IModelHost.startup must be called first\");\n }\n\n return nativePlatform;\n }\n}\n\n/** @internal Strictly to be called by IModelHost.startup. */\nexport function loadNativePlatform(): void {\n if (undefined === nativePlatform) {\n nativePlatform = ProcessDetector.isMobileAppBackend ? (process as any)._linkedBinding(\"iModelJsNative\") as typeof IModelJsNative : NativeLibrary.load();\n nativePlatform.logger = Logger;\n Logger.onLogLevelChanged.addListener(() => syncNativeLogLevels());\n }\n}\n\n/** @internal Strictly for tests. */\nexport function overrideSyncNativeLogLevels(func?: () => void): void {\n syncNativeLogLevelsOverride = func;\n}\n"]}
1
+ {"version":3,"file":"NativePlatform.js","sourceRoot":"","sources":["../../../src/internal/NativePlatform.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAkB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9D,IAAI,cAAiD,CAAC;AAEtD,IAAI,2BAAqD,CAAC;AAE1D,SAAS,mBAAmB;IAC1B,IAAI,2BAA2B,EAAE,CAAC;QAChC,2BAA2B,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IAChB,MAAM,KAAK,QAAQ;QACxB,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB;IAChC,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACjC,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAE,OAAe,CAAC,cAAc,CAAC,gBAAgB,CAA0B,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACxJ,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,2BAA2B,CAAC,IAAiB;IAC3D,2BAA2B,GAAG,IAAI,CAAC;AACrC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module IModelHost\r\n */\r\n\r\nimport { IModelJsNative, NativeLibrary } from \"@bentley/imodeljs-native\";\r\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\r\n\r\nlet nativePlatform: typeof IModelJsNative | undefined;\r\n\r\nlet syncNativeLogLevelsOverride: (() => void) | undefined;\r\n\r\nfunction syncNativeLogLevels() {\r\n if (syncNativeLogLevelsOverride) {\r\n syncNativeLogLevelsOverride();\r\n } else {\r\n nativePlatform?.clearLogLevelCache();\r\n }\r\n}\r\n\r\n/** Provides access to the internal APIs defined in @bentley/imodeljs-native.\r\n * @internal\r\n */\r\nexport class IModelNative {\r\n public static get platform(): typeof IModelJsNative {\r\n if (undefined === nativePlatform) {\r\n throw new Error(\"IModelHost.startup must be called first\");\r\n }\r\n\r\n return nativePlatform;\r\n }\r\n}\r\n\r\n/** @internal Strictly to be called by IModelHost.startup. */\r\nexport function loadNativePlatform(): void {\r\n if (undefined === nativePlatform) {\r\n nativePlatform = ProcessDetector.isMobileAppBackend ? (process as any)._linkedBinding(\"iModelJsNative\") as typeof IModelJsNative : NativeLibrary.load();\r\n nativePlatform.logger = Logger;\r\n Logger.onLogLevelChanged.addListener(() => syncNativeLogLevels());\r\n }\r\n}\r\n\r\n/** @internal Strictly for tests. */\r\nexport function overrideSyncNativeLogLevels(func?: () => void): void {\r\n syncNativeLogLevelsOverride = func;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NoLocks.js","sourceRoot":"","sources":["../../../src/internal/NoLocks.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpG,yJAAyJ;AACzJ,MAAM,OAAO;IACK,CAAC,yBAAyB,CAAC,GAAG,SAAS,CAAC;IACxD,IAAW,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,MAAM,CAAC,KAAW,CAAC;IACpB,aAAa,KAAW,CAAC;IACzB,kBAAkB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC/C,eAAe,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,kBAAkB,KAAW,CAAC;IAC9B,eAAe,KAAW,CAAC;IAC3B,CAAC,kBAAkB,CAAC,KAAW,CAAC;IAChC,KAAK,CAAC,YAAY,KAAK,CAAC;IACxB,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAoB,CAAC;IAC7C,KAAK,CAAC,eAAe,KAAoB,CAAC;IAC1C,KAAK,CAAC,eAAe,KAAoB,CAAC;IAC1C,KAAK,CAAC,0BAA0B,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,gCAAgC,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,6BAA6B,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IACzE,oCAAoC,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAChE,mBAAmB,KAAW,CAAC;CACvC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,EAAE,CAAC;AACvB,CAAC","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*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { LockControl } from \"../LockControl\";\nimport { _close, _elementWasCreated, _implementationProhibited, _releaseAllLocks } from \"./Symbols\";\n\n/** A null-implementation of LockControl that does not attempt to limit access between briefcases. This relies on change-merging to resolve conflicts. */\nclass NoLocks implements LockControl {\n public readonly [_implementationProhibited] = undefined;\n public get isServerBased() { return false; }\n public [_close](): void { }\n public clearAllLocks(): void { }\n public holdsExclusiveLock(): boolean { return false; }\n public holdsSharedLock(): boolean { return false; }\n public checkExclusiveLock(): void { }\n public checkSharedLock(): void { }\n public [_elementWasCreated](): void { }\n public async acquireLocks() { }\n public async [_releaseAllLocks](): Promise<void> { }\n public async releaseAllLocks(): Promise<void> { }\n public async abandonAllLocks(): Promise<void> { }\n public async abandonLocksForReversedTxn(): Promise<boolean> { return false; }\n public async abandonLocksForCurrentUnsavedTxn(): Promise<boolean> { return false; }\n public async acquireLocksForReinstatingTxn(): Promise<boolean> { return false; }\n public holdsNecessaryLocksForReinstatingTxn(): boolean { return true; }\n public clearTxnLockRecords(): void { }\n}\n\nexport function createNoOpLockControl(): LockControl {\n return new NoLocks();\n}\n"]}
1
+ {"version":3,"file":"NoLocks.js","sourceRoot":"","sources":["../../../src/internal/NoLocks.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpG,yJAAyJ;AACzJ,MAAM,OAAO;IACK,CAAC,yBAAyB,CAAC,GAAG,SAAS,CAAC;IACxD,IAAW,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,MAAM,CAAC,KAAW,CAAC;IACpB,aAAa,KAAW,CAAC;IACzB,kBAAkB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC/C,eAAe,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,kBAAkB,KAAW,CAAC;IAC9B,eAAe,KAAW,CAAC;IAC3B,CAAC,kBAAkB,CAAC,KAAW,CAAC;IAChC,KAAK,CAAC,YAAY,KAAK,CAAC;IACxB,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAoB,CAAC;IAC7C,KAAK,CAAC,eAAe,KAAoB,CAAC;IAC1C,KAAK,CAAC,eAAe,KAAoB,CAAC;IAC1C,KAAK,CAAC,0BAA0B,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,gCAAgC,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,6BAA6B,KAAuB,OAAO,KAAK,CAAC,CAAC,CAAC;IACzE,oCAAoC,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAChE,mBAAmB,KAAW,CAAC;CACvC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,EAAE,CAAC;AACvB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { LockControl } from \"../LockControl\";\r\nimport { _close, _elementWasCreated, _implementationProhibited, _releaseAllLocks } from \"./Symbols\";\r\n\r\n/** A null-implementation of LockControl that does not attempt to limit access between briefcases. This relies on change-merging to resolve conflicts. */\r\nclass NoLocks implements LockControl {\r\n public readonly [_implementationProhibited] = undefined;\r\n public get isServerBased() { return false; }\r\n public [_close](): void { }\r\n public clearAllLocks(): void { }\r\n public holdsExclusiveLock(): boolean { return false; }\r\n public holdsSharedLock(): boolean { return false; }\r\n public checkExclusiveLock(): void { }\r\n public checkSharedLock(): void { }\r\n public [_elementWasCreated](): void { }\r\n public async acquireLocks() { }\r\n public async [_releaseAllLocks](): Promise<void> { }\r\n public async releaseAllLocks(): Promise<void> { }\r\n public async abandonAllLocks(): Promise<void> { }\r\n public async abandonLocksForReversedTxn(): Promise<boolean> { return false; }\r\n public async abandonLocksForCurrentUnsavedTxn(): Promise<boolean> { return false; }\r\n public async acquireLocksForReinstatingTxn(): Promise<boolean> { return false; }\r\n public holdsNecessaryLocksForReinstatingTxn(): boolean { return true; }\r\n public clearTxnLockRecords(): void { }\r\n}\r\n\r\nexport function createNoOpLockControl(): LockControl {\r\n return new NoLocks();\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/internal/OnlineStatus.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,IAAI,QAAQ,GAAG,IAAI,CAAC;AAEpB;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC","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*--------------------------------------------------------------------------------------------*/\n\nlet isOnline = true;\n\n/**\n * Sets the online status of the backend that will be returned by `getOnlineStatus`.\n * @param online The new online status.\n * @internal\n */\nexport function setOnlineStatus(online: boolean) {\n isOnline = online;\n}\n\n/**\n * Determine whether the backend is currently considered online.\n * @note This only works if `setOnlineStatus` has been called by something to update the status.\n * `NativeHost` does this whenever the connectivity changes. If `setOnlineStatus` has never been\n * called, this will return `true`.\n * @internal\n */\nexport function getOnlineStatus(): boolean {\n return isOnline;\n}\n"]}
1
+ {"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/internal/OnlineStatus.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,IAAI,QAAQ,GAAG,IAAI,CAAC;AAEpB;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nlet isOnline = true;\r\n\r\n/**\r\n * Sets the online status of the backend that will be returned by `getOnlineStatus`.\r\n * @param online The new online status.\r\n * @internal\r\n */\r\nexport function setOnlineStatus(online: boolean) {\r\n isOnline = online;\r\n}\r\n\r\n/**\r\n * Determine whether the backend is currently considered online.\r\n * @note This only works if `setOnlineStatus` has been called by something to update the status.\r\n * `NativeHost` does this whenever the connectivity changes. If `setOnlineStatus` has never been\r\n * called, this will return `true`.\r\n * @internal\r\n */\r\nexport function getOnlineStatus(): boolean {\r\n return isOnline;\r\n}\r\n"]}
@@ -29,13 +29,13 @@ export class ServerBasedLocks {
29
29
  // Tracks the locks that are actively held.
30
30
  this.lockDb.executeSQL("CREATE TABLE IF NOT EXISTS locks(id INTEGER PRIMARY KEY NOT NULL,state INTEGER NOT NULL,origin INTEGER)");
31
31
  // Tracks the locks that are required by each Txn. They may or may not currently be held.
32
- this.lockDb.executeSQL(`
33
- CREATE TABLE IF NOT EXISTS txn_locks(
34
- txnId INTEGER NOT NULL,
35
- elementId INTEGER NOT NULL,
36
- state INTEGER NOT NULL,
37
- origin INTEGER NOT NULL,
38
- abandoned BOOLEAN NOT NULL,
32
+ this.lockDb.executeSQL(`
33
+ CREATE TABLE IF NOT EXISTS txn_locks(
34
+ txnId INTEGER NOT NULL,
35
+ elementId INTEGER NOT NULL,
36
+ state INTEGER NOT NULL,
37
+ origin INTEGER NOT NULL,
38
+ abandoned BOOLEAN NOT NULL,
39
39
  PRIMARY KEY (txnId, elementId))`);
40
40
  this.lockDb.saveChanges();
41
41
  this._removeOnCommitListener = this.briefcase.txns.onCommit.addListener(() => {
@@ -134,13 +134,13 @@ export class ServerBasedLocks {
134
134
  // So use a placeholder txn id for now, and we'll update to the real txn id on commit.
135
135
  // This is important to distinguish new locks acquired in the current txn from locks acquired in previous reversed txns, which will only
136
136
  // be cleared (no longer reinstateable) on commit.
137
- this.lockDb.withPreparedSqliteStatement(`
138
- INSERT INTO txn_locks(txnId,elementId,state,origin,abandoned)
139
- VALUES (?,?,?,?,FALSE)
140
- ON CONFLICT(txnId,elementId)
141
- DO UPDATE SET
142
- state=excluded.state,
143
- origin=excluded.origin,
137
+ this.lockDb.withPreparedSqliteStatement(`
138
+ INSERT INTO txn_locks(txnId,elementId,state,origin,abandoned)
139
+ VALUES (?,?,?,?,FALSE)
140
+ ON CONFLICT(txnId,elementId)
141
+ DO UPDATE SET
142
+ state=excluded.state,
143
+ origin=excluded.origin,
144
144
  abandoned=excluded.abandoned`, (stmt) => {
145
145
  stmt.bindId(1, this._unsavedChangesTxnId);
146
146
  stmt.bindId(2, id);
@@ -273,25 +273,25 @@ export class ServerBasedLocks {
273
273
  // Exclusive lock, we should restore the Shared lock.
274
274
  const allTxnLocks = new Map();
275
275
  const locksToRelease = new Map();
276
- this.lockDb.withPreparedSqliteStatement(`
277
- SELECT
278
- current.elementId,
279
- current.origin,
280
- IFNULL(
281
- (SELECT previous.state
282
- FROM txn_locks previous
283
- WHERE previous.elementId = current.elementId
284
- AND previous.txnId < ?2
285
- AND previous.abandoned=FALSE
286
- ORDER BY previous.txnId DESC
287
- LIMIT 1
288
- ),
289
- ?1
290
- ) AS previousState
291
- FROM txn_locks current
292
- WHERE current.txnId>=?2
293
- AND current.abandoned=FALSE
294
- ORDER BY current.txnId DESC
276
+ this.lockDb.withPreparedSqliteStatement(`
277
+ SELECT
278
+ current.elementId,
279
+ current.origin,
280
+ IFNULL(
281
+ (SELECT previous.state
282
+ FROM txn_locks previous
283
+ WHERE previous.elementId = current.elementId
284
+ AND previous.txnId < ?2
285
+ AND previous.abandoned=FALSE
286
+ ORDER BY previous.txnId DESC
287
+ LIMIT 1
288
+ ),
289
+ ?1
290
+ ) AS previousState
291
+ FROM txn_locks current
292
+ WHERE current.txnId>=?2
293
+ AND current.abandoned=FALSE
294
+ ORDER BY current.txnId DESC
295
295
  `, (stmt) => {
296
296
  stmt.bindInteger(1, LockState.None);
297
297
  stmt.bindId(2, txnId);