@itwin/core-backend 5.0.0-dev.1 → 5.0.0-dev.100

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 (1081) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +15 -35
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js +2 -0
  5. package/lib/cjs/BackendHubAccess.js.map +1 -1
  6. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  7. package/lib/cjs/BisCoreSchema.d.ts.map +1 -1
  8. package/lib/cjs/BisCoreSchema.js +2 -0
  9. package/lib/cjs/BisCoreSchema.js.map +1 -1
  10. package/lib/cjs/BlobContainerService.d.ts +26 -5
  11. package/lib/cjs/BlobContainerService.d.ts.map +1 -1
  12. package/lib/cjs/BlobContainerService.js.map +1 -1
  13. package/lib/cjs/BriefcaseManager.d.ts +10 -0
  14. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  15. package/lib/cjs/BriefcaseManager.js +63 -20
  16. package/lib/cjs/BriefcaseManager.js.map +1 -1
  17. package/lib/cjs/Category.js +6 -1
  18. package/lib/cjs/Category.js.map +1 -1
  19. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  20. package/lib/cjs/ChangeSummaryManager.js +104 -29
  21. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  22. package/lib/cjs/ChangedElementsDb.d.ts +3 -3
  23. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -1
  24. package/lib/cjs/ChangedElementsDb.js +8 -7
  25. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  26. package/lib/cjs/ChangesetECAdaptor.d.ts +3 -3
  27. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  28. package/lib/cjs/ChangesetECAdaptor.js +274 -261
  29. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  30. package/lib/cjs/ChannelControl.js.map +1 -1
  31. package/lib/cjs/CheckpointManager.d.ts +16 -15
  32. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  33. package/lib/cjs/CheckpointManager.js +55 -69
  34. package/lib/cjs/CheckpointManager.js.map +1 -1
  35. package/lib/cjs/ClassRegistry.d.ts +46 -2
  36. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  37. package/lib/cjs/ClassRegistry.js +98 -42
  38. package/lib/cjs/ClassRegistry.js.map +1 -1
  39. package/lib/cjs/CloudSqlite.d.ts +2 -1
  40. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  41. package/lib/cjs/CloudSqlite.js +16 -9
  42. package/lib/cjs/CloudSqlite.js.map +1 -1
  43. package/lib/cjs/CodeService.d.ts +2 -0
  44. package/lib/cjs/CodeService.d.ts.map +1 -1
  45. package/lib/cjs/CodeService.js +4 -0
  46. package/lib/cjs/CodeService.js.map +1 -1
  47. package/lib/cjs/CodeSpecs.js +3 -2
  48. package/lib/cjs/CodeSpecs.js.map +1 -1
  49. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  50. package/lib/cjs/CustomViewState3dCreator.js +7 -6
  51. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  52. package/lib/cjs/DevTools.js +16 -16
  53. package/lib/cjs/DevTools.js.map +1 -1
  54. package/lib/cjs/DisplayStyle.js +2 -0
  55. package/lib/cjs/DisplayStyle.js.map +1 -1
  56. package/lib/cjs/ECDb.d.ts +53 -60
  57. package/lib/cjs/ECDb.d.ts.map +1 -1
  58. package/lib/cjs/ECDb.js +115 -73
  59. package/lib/cjs/ECDb.js.map +1 -1
  60. package/lib/cjs/ECSchemaXmlContext.js +1 -0
  61. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  62. package/lib/cjs/ECSqlStatement.d.ts +185 -4
  63. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  64. package/lib/cjs/ECSqlStatement.js +237 -9
  65. package/lib/cjs/ECSqlStatement.js.map +1 -1
  66. package/lib/cjs/Element.d.ts +29 -26
  67. package/lib/cjs/Element.d.ts.map +1 -1
  68. package/lib/cjs/Element.js +173 -48
  69. package/lib/cjs/Element.js.map +1 -1
  70. package/lib/cjs/ElementAspect.d.ts +0 -5
  71. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  72. package/lib/cjs/ElementAspect.js +25 -16
  73. package/lib/cjs/ElementAspect.js.map +1 -1
  74. package/lib/cjs/ElementGraphics.js.map +1 -1
  75. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  76. package/lib/cjs/ElementTreeWalker.js +17 -12
  77. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  78. package/lib/cjs/Entity.d.ts +46 -10
  79. package/lib/cjs/Entity.d.ts.map +1 -1
  80. package/lib/cjs/Entity.js +79 -16
  81. package/lib/cjs/Entity.js.map +1 -1
  82. package/lib/cjs/EntityReferences.js.map +1 -1
  83. package/lib/cjs/ExportGraphics.js +4 -0
  84. package/lib/cjs/ExportGraphics.js.map +1 -1
  85. package/lib/cjs/ExternalSource.js +22 -0
  86. package/lib/cjs/ExternalSource.js.map +1 -1
  87. package/lib/cjs/FontFile.d.ts +68 -0
  88. package/lib/cjs/FontFile.d.ts.map +1 -0
  89. package/lib/cjs/FontFile.js +36 -0
  90. package/lib/cjs/FontFile.js.map +1 -0
  91. package/lib/cjs/GeoCoordConfig.js +8 -8
  92. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  93. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  94. package/lib/cjs/GeometrySummary.js +53 -50
  95. package/lib/cjs/GeometrySummary.js.map +1 -1
  96. package/lib/cjs/IModelDb.d.ts +208 -73
  97. package/lib/cjs/IModelDb.d.ts.map +1 -1
  98. package/lib/cjs/IModelDb.js +375 -175
  99. package/lib/cjs/IModelDb.js.map +1 -1
  100. package/lib/cjs/IModelDbFonts.d.ts +54 -0
  101. package/lib/cjs/IModelDbFonts.d.ts.map +1 -0
  102. package/lib/cjs/{IModelCloneContext.js → IModelDbFonts.js} +2 -7
  103. package/lib/cjs/IModelDbFonts.js.map +1 -0
  104. package/lib/cjs/IModelElementCloneContext.d.ts +2 -0
  105. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  106. package/lib/cjs/IModelElementCloneContext.js +12 -1
  107. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  108. package/lib/cjs/IModelHost.d.ts +14 -14
  109. package/lib/cjs/IModelHost.d.ts.map +1 -1
  110. package/lib/cjs/IModelHost.js +76 -45
  111. package/lib/cjs/IModelHost.js.map +1 -1
  112. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  113. package/lib/cjs/IModelJsFs.js +17 -1
  114. package/lib/cjs/IModelJsFs.js.map +1 -1
  115. package/lib/cjs/ImageSourceConversion.d.ts +49 -0
  116. package/lib/cjs/ImageSourceConversion.d.ts.map +1 -0
  117. package/lib/cjs/ImageSourceConversion.js +37 -0
  118. package/lib/cjs/ImageSourceConversion.js.map +1 -0
  119. package/lib/cjs/IpcHost.d.ts.map +1 -1
  120. package/lib/cjs/IpcHost.js +28 -33
  121. package/lib/cjs/IpcHost.js.map +1 -1
  122. package/lib/cjs/LineStyle.js.map +1 -1
  123. package/lib/cjs/LocalHub.js +9 -3
  124. package/lib/cjs/LocalHub.js.map +1 -1
  125. package/lib/cjs/LocalhostIpcHost.js +5 -6
  126. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  127. package/lib/cjs/LockControl.js.map +1 -1
  128. package/lib/cjs/Material.js +40 -0
  129. package/lib/cjs/Material.js.map +1 -1
  130. package/lib/cjs/Model.d.ts +1 -1
  131. package/lib/cjs/Model.d.ts.map +1 -1
  132. package/lib/cjs/Model.js +27 -2
  133. package/lib/cjs/Model.js.map +1 -1
  134. package/lib/cjs/NativeAppStorage.js +5 -3
  135. package/lib/cjs/NativeAppStorage.js.map +1 -1
  136. package/lib/cjs/NativeHost.js +6 -3
  137. package/lib/cjs/NativeHost.js.map +1 -1
  138. package/lib/cjs/NavigationRelationship.js +25 -25
  139. package/lib/cjs/NavigationRelationship.js.map +1 -1
  140. package/lib/cjs/PromiseMemoizer.d.ts +2 -3
  141. package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
  142. package/lib/cjs/PromiseMemoizer.js +12 -5
  143. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  144. package/lib/cjs/PropertyStore.js +1 -4
  145. package/lib/cjs/PropertyStore.js.map +1 -1
  146. package/lib/cjs/Relationship.d.ts.map +1 -1
  147. package/lib/cjs/Relationship.js +15 -1
  148. package/lib/cjs/Relationship.js.map +1 -1
  149. package/lib/cjs/RpcBackend.js.map +1 -1
  150. package/lib/cjs/SQLiteDb.d.ts +6 -4
  151. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  152. package/lib/cjs/SQLiteDb.js +74 -15
  153. package/lib/cjs/SQLiteDb.js.map +1 -1
  154. package/lib/cjs/Schema.d.ts +25 -1
  155. package/lib/cjs/Schema.d.ts.map +1 -1
  156. package/lib/cjs/Schema.js +44 -8
  157. package/lib/cjs/Schema.js.map +1 -1
  158. package/lib/cjs/SchemaSync.js +1 -4
  159. package/lib/cjs/SchemaSync.js.map +1 -1
  160. package/lib/cjs/SchemaUtils.js.map +1 -1
  161. package/lib/cjs/SheetIndex.js +6 -0
  162. package/lib/cjs/SheetIndex.js.map +1 -1
  163. package/lib/cjs/SqliteChangesetReader.d.ts +11 -3
  164. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  165. package/lib/cjs/SqliteChangesetReader.js +21 -5
  166. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  167. package/lib/cjs/SqliteStatement.d.ts +4 -2
  168. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  169. package/lib/cjs/SqliteStatement.js +13 -1
  170. package/lib/cjs/SqliteStatement.js.map +1 -1
  171. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  172. package/lib/cjs/TextAnnotationGeometry.d.ts.map +1 -1
  173. package/lib/cjs/TextAnnotationGeometry.js +38 -11
  174. package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
  175. package/lib/cjs/TextAnnotationLayout.d.ts +10 -3
  176. package/lib/cjs/TextAnnotationLayout.d.ts.map +1 -1
  177. package/lib/cjs/TextAnnotationLayout.js +57 -19
  178. package/lib/cjs/TextAnnotationLayout.js.map +1 -1
  179. package/lib/cjs/Texture.js +3 -0
  180. package/lib/cjs/Texture.js.map +1 -1
  181. package/lib/cjs/TileStorage.js +6 -1
  182. package/lib/cjs/TileStorage.js.map +1 -1
  183. package/lib/cjs/TxnManager.d.ts +55 -4
  184. package/lib/cjs/TxnManager.d.ts.map +1 -1
  185. package/lib/cjs/TxnManager.js +234 -58
  186. package/lib/cjs/TxnManager.js.map +1 -1
  187. package/lib/cjs/ViewDefinition.d.ts +6 -6
  188. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  189. package/lib/cjs/ViewDefinition.js +81 -26
  190. package/lib/cjs/ViewDefinition.js.map +1 -1
  191. package/lib/cjs/ViewStateHydrator.d.ts +0 -1
  192. package/lib/cjs/ViewStateHydrator.d.ts.map +1 -1
  193. package/lib/cjs/ViewStateHydrator.js +1 -11
  194. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  195. package/lib/cjs/ViewStore.d.ts.map +1 -1
  196. package/lib/cjs/ViewStore.js +5 -2
  197. package/lib/cjs/ViewStore.js.map +1 -1
  198. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  199. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  200. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  201. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  202. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  203. package/lib/cjs/core-backend.d.ts +7 -2
  204. package/lib/cjs/core-backend.d.ts.map +1 -1
  205. package/lib/cjs/core-backend.js +7 -2
  206. package/lib/cjs/core-backend.js.map +1 -1
  207. package/lib/cjs/domains/FunctionalElements.js +1 -1
  208. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  209. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  210. package/lib/cjs/domains/GenericElements.js.map +1 -1
  211. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  212. package/lib/cjs/internal/ChangesetConflictArgs.d.ts +40 -2
  213. package/lib/cjs/internal/ChangesetConflictArgs.d.ts.map +1 -1
  214. package/lib/cjs/internal/ChangesetConflictArgs.js +101 -0
  215. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  216. package/lib/cjs/internal/ChannelAdmin.d.ts +1 -1
  217. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  218. package/lib/cjs/internal/ChannelAdmin.js +16 -13
  219. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  220. package/lib/cjs/internal/FontFileImpl.d.ts +34 -0
  221. package/lib/cjs/internal/FontFileImpl.d.ts.map +1 -0
  222. package/lib/cjs/internal/FontFileImpl.js +143 -0
  223. package/lib/cjs/internal/FontFileImpl.js.map +1 -0
  224. package/lib/cjs/{HubMock.d.ts → internal/HubMock.d.ts} +6 -7
  225. package/lib/cjs/internal/HubMock.d.ts.map +1 -0
  226. package/lib/cjs/{HubMock.js → internal/HubMock.js} +40 -15
  227. package/lib/cjs/internal/HubMock.js.map +1 -0
  228. package/lib/cjs/internal/IModelDbFontsImpl.d.ts +7 -0
  229. package/lib/cjs/internal/IModelDbFontsImpl.d.ts.map +1 -0
  230. package/lib/cjs/internal/IModelDbFontsImpl.js +186 -0
  231. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -0
  232. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  233. package/lib/cjs/internal/NoLocks.js +2 -5
  234. package/lib/cjs/internal/NoLocks.js.map +1 -1
  235. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  236. package/lib/cjs/internal/ServerBasedLocks.js +6 -6
  237. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  238. package/lib/cjs/internal/Symbols.d.ts +11 -0
  239. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  240. package/lib/cjs/internal/Symbols.js +12 -1
  241. package/lib/cjs/internal/Symbols.js.map +1 -1
  242. package/lib/cjs/internal/cross-package.js.map +1 -1
  243. package/lib/cjs/internal/workspace/SettingsImpl.js +6 -9
  244. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  245. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +8 -12
  246. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  247. package/lib/cjs/internal/workspace/WorkspaceImpl.js +22 -17
  248. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  249. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js +1 -4
  250. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  251. package/lib/cjs/rpc/multipart.d.ts.map +1 -1
  252. package/lib/cjs/rpc/multipart.js +2 -1
  253. package/lib/cjs/rpc/multipart.js.map +1 -1
  254. package/lib/cjs/rpc/tracing.js +2 -2
  255. package/lib/cjs/rpc/tracing.js.map +1 -1
  256. package/lib/cjs/rpc/web/logging.js.map +1 -1
  257. package/lib/cjs/rpc/web/request.d.ts.map +1 -1
  258. package/lib/cjs/rpc/web/request.js +2 -1
  259. package/lib/cjs/rpc/web/request.js.map +1 -1
  260. package/lib/cjs/rpc/web/response.js.map +1 -1
  261. package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +1 -1
  262. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +1 -1
  263. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  264. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  265. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +6 -2
  266. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  267. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +5 -3
  268. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  269. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  270. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +15 -25
  271. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  272. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -0
  273. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +1 -1
  274. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -0
  275. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  276. package/lib/cjs/workspace/Settings.js.map +1 -1
  277. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  278. package/lib/cjs/workspace/Workspace.js.map +1 -1
  279. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  280. package/lib/esm/BackendHubAccess.d.ts +209 -0
  281. package/lib/esm/BackendHubAccess.d.ts.map +1 -0
  282. package/lib/esm/BackendHubAccess.js +41 -0
  283. package/lib/esm/BackendHubAccess.js.map +1 -0
  284. package/lib/esm/BackendLoggerCategory.d.ts +88 -0
  285. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -0
  286. package/lib/esm/BackendLoggerCategory.js +93 -0
  287. package/lib/esm/BackendLoggerCategory.js.map +1 -0
  288. package/lib/esm/BisCoreSchema.d.ts +22 -0
  289. package/lib/esm/BisCoreSchema.d.ts.map +1 -0
  290. package/lib/esm/BisCoreSchema.js +61 -0
  291. package/lib/esm/BisCoreSchema.js.map +1 -0
  292. package/lib/esm/BlobContainerService.d.ts +159 -0
  293. package/lib/esm/BlobContainerService.d.ts.map +1 -0
  294. package/lib/esm/BlobContainerService.js +15 -0
  295. package/lib/esm/BlobContainerService.js.map +1 -0
  296. package/lib/esm/BriefcaseManager.d.ts +213 -0
  297. package/lib/esm/BriefcaseManager.d.ts.map +1 -0
  298. package/lib/esm/BriefcaseManager.js +520 -0
  299. package/lib/esm/BriefcaseManager.js.map +1 -0
  300. package/lib/esm/Category.d.ts +136 -0
  301. package/lib/esm/Category.d.ts.map +1 -0
  302. package/lib/esm/Category.js +224 -0
  303. package/lib/esm/Category.js.map +1 -0
  304. package/lib/esm/ChangeSummaryManager.d.ts +161 -0
  305. package/lib/esm/ChangeSummaryManager.d.ts.map +1 -0
  306. package/lib/esm/ChangeSummaryManager.js +421 -0
  307. package/lib/esm/ChangeSummaryManager.js.map +1 -0
  308. package/lib/esm/ChangedElementsDb.d.ts +101 -0
  309. package/lib/esm/ChangedElementsDb.d.ts.map +1 -0
  310. package/lib/esm/ChangedElementsDb.js +165 -0
  311. package/lib/esm/ChangedElementsDb.js.map +1 -0
  312. package/lib/esm/ChangesetECAdaptor.d.ts +203 -0
  313. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -0
  314. package/lib/esm/ChangesetECAdaptor.js +815 -0
  315. package/lib/esm/ChangesetECAdaptor.js.map +1 -0
  316. package/lib/esm/ChannelControl.d.ts +68 -0
  317. package/lib/esm/ChannelControl.d.ts.map +1 -0
  318. package/lib/esm/ChannelControl.js +15 -0
  319. package/lib/esm/ChannelControl.js.map +1 -0
  320. package/lib/esm/CheckpointManager.d.ts +124 -0
  321. package/lib/esm/CheckpointManager.d.ts.map +1 -0
  322. package/lib/esm/CheckpointManager.js +359 -0
  323. package/lib/esm/CheckpointManager.js.map +1 -0
  324. package/lib/esm/ClassRegistry.d.ts +134 -0
  325. package/lib/esm/ClassRegistry.d.ts.map +1 -0
  326. package/lib/esm/ClassRegistry.js +324 -0
  327. package/lib/esm/ClassRegistry.js.map +1 -0
  328. package/lib/esm/CloudSqlite.d.ts +682 -0
  329. package/lib/esm/CloudSqlite.d.ts.map +1 -0
  330. package/lib/esm/CloudSqlite.js +511 -0
  331. package/lib/esm/CloudSqlite.js.map +1 -0
  332. package/lib/esm/CodeService.d.ts +402 -0
  333. package/lib/esm/CodeService.d.ts.map +1 -0
  334. package/lib/esm/CodeService.js +65 -0
  335. package/lib/esm/CodeService.js.map +1 -0
  336. package/lib/esm/CodeSpecs.d.ts +59 -0
  337. package/lib/esm/CodeSpecs.d.ts.map +1 -0
  338. package/lib/esm/CodeSpecs.js +152 -0
  339. package/lib/esm/CodeSpecs.js.map +1 -0
  340. package/lib/esm/ConcurrentQuery.d.ts +14 -0
  341. package/lib/esm/ConcurrentQuery.d.ts.map +1 -0
  342. package/lib/esm/ConcurrentQuery.js +33 -0
  343. package/lib/esm/ConcurrentQuery.js.map +1 -0
  344. package/lib/esm/CustomViewState3dCreator.d.ts +22 -0
  345. package/lib/esm/CustomViewState3dCreator.d.ts.map +1 -0
  346. package/lib/esm/CustomViewState3dCreator.js +78 -0
  347. package/lib/esm/CustomViewState3dCreator.js.map +1 -0
  348. package/lib/esm/DevTools.d.ts +73 -0
  349. package/lib/esm/DevTools.d.ts.map +1 -0
  350. package/lib/esm/DevTools.js +153 -0
  351. package/lib/esm/DevTools.js.map +1 -0
  352. package/lib/esm/DisplayStyle.d.ts +99 -0
  353. package/lib/esm/DisplayStyle.d.ts.map +1 -0
  354. package/lib/esm/DisplayStyle.js +264 -0
  355. package/lib/esm/DisplayStyle.js.map +1 -0
  356. package/lib/esm/ECDb.d.ts +206 -0
  357. package/lib/esm/ECDb.d.ts.map +1 -0
  358. package/lib/esm/ECDb.js +410 -0
  359. package/lib/esm/ECDb.js.map +1 -0
  360. package/lib/esm/ECSchemaXmlContext.d.ts +46 -0
  361. package/lib/esm/ECSchemaXmlContext.d.ts.map +1 -0
  362. package/lib/esm/ECSchemaXmlContext.js +66 -0
  363. package/lib/esm/ECSchemaXmlContext.js.map +1 -0
  364. package/lib/esm/ECSqlStatement.d.ts +671 -0
  365. package/lib/esm/ECSqlStatement.d.ts.map +1 -0
  366. package/lib/esm/ECSqlStatement.js +1028 -0
  367. package/lib/esm/ECSqlStatement.js.map +1 -0
  368. package/lib/esm/Element.d.ts +999 -0
  369. package/lib/esm/Element.d.ts.map +1 -0
  370. package/lib/esm/Element.js +1375 -0
  371. package/lib/esm/Element.js.map +1 -0
  372. package/lib/esm/ElementAspect.d.ts +164 -0
  373. package/lib/esm/ElementAspect.d.ts.map +1 -0
  374. package/lib/esm/ElementAspect.js +205 -0
  375. package/lib/esm/ElementAspect.js.map +1 -0
  376. package/lib/esm/ElementGraphics.d.ts +7 -0
  377. package/lib/esm/ElementGraphics.d.ts.map +1 -0
  378. package/lib/esm/ElementGraphics.js +36 -0
  379. package/lib/esm/ElementGraphics.js.map +1 -0
  380. package/lib/esm/ElementTreeWalker.d.ts +182 -0
  381. package/lib/esm/ElementTreeWalker.d.ts.map +1 -0
  382. package/lib/esm/ElementTreeWalker.js +425 -0
  383. package/lib/esm/ElementTreeWalker.js.map +1 -0
  384. package/lib/esm/Entity.d.ts +142 -0
  385. package/lib/esm/Entity.d.ts.map +1 -0
  386. package/lib/esm/Entity.js +186 -0
  387. package/lib/esm/Entity.js.map +1 -0
  388. package/lib/esm/EntityReferences.d.ts +50 -0
  389. package/lib/esm/EntityReferences.d.ts.map +1 -0
  390. package/lib/esm/EntityReferences.js +92 -0
  391. package/lib/esm/EntityReferences.js.map +1 -0
  392. package/lib/esm/ExportGraphics.d.ts +318 -0
  393. package/lib/esm/ExportGraphics.d.ts.map +1 -0
  394. package/lib/esm/ExportGraphics.js +209 -0
  395. package/lib/esm/ExportGraphics.js.map +1 -0
  396. package/lib/esm/ExternalSource.d.ts +89 -0
  397. package/lib/esm/ExternalSource.d.ts.map +1 -0
  398. package/lib/esm/ExternalSource.js +139 -0
  399. package/lib/esm/ExternalSource.js.map +1 -0
  400. package/lib/esm/FontFile.d.ts +68 -0
  401. package/lib/esm/FontFile.d.ts.map +1 -0
  402. package/lib/esm/FontFile.js +33 -0
  403. package/lib/esm/FontFile.js.map +1 -0
  404. package/lib/esm/GeoCoordConfig.d.ts +30 -0
  405. package/lib/esm/GeoCoordConfig.d.ts.map +1 -0
  406. package/lib/esm/GeoCoordConfig.js +78 -0
  407. package/lib/esm/GeoCoordConfig.js.map +1 -0
  408. package/lib/esm/GeographicCRSServices.d.ts +40 -0
  409. package/lib/esm/GeographicCRSServices.d.ts.map +1 -0
  410. package/lib/esm/GeographicCRSServices.js +17 -0
  411. package/lib/esm/GeographicCRSServices.js.map +1 -0
  412. package/lib/esm/GeometrySummary.d.ts +5 -0
  413. package/lib/esm/GeometrySummary.d.ts.map +1 -0
  414. package/lib/esm/GeometrySummary.js +381 -0
  415. package/lib/esm/GeometrySummary.js.map +1 -0
  416. package/lib/esm/IModelDb.d.ts +1402 -0
  417. package/lib/esm/IModelDb.d.ts.map +1 -0
  418. package/lib/esm/IModelDb.js +3260 -0
  419. package/lib/esm/IModelDb.js.map +1 -0
  420. package/lib/esm/IModelDbFonts.d.ts +54 -0
  421. package/lib/esm/IModelDbFonts.d.ts.map +1 -0
  422. package/lib/esm/IModelDbFonts.js +9 -0
  423. package/lib/esm/IModelDbFonts.js.map +1 -0
  424. package/lib/esm/IModelElementCloneContext.d.ts +92 -0
  425. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -0
  426. package/lib/esm/IModelElementCloneContext.js +168 -0
  427. package/lib/esm/IModelElementCloneContext.js.map +1 -0
  428. package/lib/esm/IModelHost.d.ts +387 -0
  429. package/lib/esm/IModelHost.d.ts.map +1 -0
  430. package/lib/esm/IModelHost.js +502 -0
  431. package/lib/esm/IModelHost.js.map +1 -0
  432. package/lib/esm/IModelJsFs.d.ts +62 -0
  433. package/lib/esm/IModelJsFs.d.ts.map +1 -0
  434. package/lib/esm/IModelJsFs.js +151 -0
  435. package/lib/esm/IModelJsFs.js.map +1 -0
  436. package/lib/esm/ImageSourceConversion.d.ts +49 -0
  437. package/lib/esm/ImageSourceConversion.d.ts.map +1 -0
  438. package/lib/esm/ImageSourceConversion.js +33 -0
  439. package/lib/esm/ImageSourceConversion.js.map +1 -0
  440. package/lib/esm/IpcHost.d.ts +111 -0
  441. package/lib/esm/IpcHost.d.ts.map +1 -0
  442. package/lib/esm/IpcHost.js +292 -0
  443. package/lib/esm/IpcHost.js.map +1 -0
  444. package/lib/esm/LineStyle.d.ts +312 -0
  445. package/lib/esm/LineStyle.d.ts.map +1 -0
  446. package/lib/esm/LineStyle.js +293 -0
  447. package/lib/esm/LineStyle.js.map +1 -0
  448. package/lib/esm/LocalHub.d.ts +163 -0
  449. package/lib/esm/LocalHub.d.ts.map +1 -0
  450. package/lib/esm/LocalHub.js +583 -0
  451. package/lib/esm/LocalHub.js.map +1 -0
  452. package/lib/esm/LocalhostIpcHost.d.ts +22 -0
  453. package/lib/esm/LocalhostIpcHost.d.ts.map +1 -0
  454. package/lib/esm/LocalhostIpcHost.js +74 -0
  455. package/lib/esm/LocalhostIpcHost.js.map +1 -0
  456. package/lib/esm/LockControl.d.ts +73 -0
  457. package/lib/esm/LockControl.d.ts.map +1 -0
  458. package/lib/esm/LockControl.js +9 -0
  459. package/lib/esm/LockControl.js.map +1 -0
  460. package/lib/esm/Material.d.ts +131 -0
  461. package/lib/esm/Material.d.ts.map +1 -0
  462. package/lib/esm/Material.js +235 -0
  463. package/lib/esm/Material.js.map +1 -0
  464. package/lib/esm/Model.d.ts +375 -0
  465. package/lib/esm/Model.d.ts.map +1 -0
  466. package/lib/esm/Model.js +484 -0
  467. package/lib/esm/Model.js.map +1 -0
  468. package/lib/esm/NativeAppStorage.d.ts +52 -0
  469. package/lib/esm/NativeAppStorage.d.ts.map +1 -0
  470. package/lib/esm/NativeAppStorage.js +205 -0
  471. package/lib/esm/NativeAppStorage.js.map +1 -0
  472. package/lib/esm/NativeHost.d.ts +53 -0
  473. package/lib/esm/NativeHost.d.ts.map +1 -0
  474. package/lib/esm/NativeHost.js +158 -0
  475. package/lib/esm/NativeHost.js.map +1 -0
  476. package/lib/esm/NavigationRelationship.d.ts +185 -0
  477. package/lib/esm/NavigationRelationship.d.ts.map +1 -0
  478. package/lib/esm/NavigationRelationship.js +238 -0
  479. package/lib/esm/NavigationRelationship.js.map +1 -0
  480. package/lib/esm/PromiseMemoizer.d.ts +48 -0
  481. package/lib/esm/PromiseMemoizer.d.ts.map +1 -0
  482. package/lib/esm/PromiseMemoizer.js +101 -0
  483. package/lib/esm/PromiseMemoizer.js.map +1 -0
  484. package/lib/esm/PropertyStore.d.ts +134 -0
  485. package/lib/esm/PropertyStore.d.ts.map +1 -0
  486. package/lib/esm/PropertyStore.js +177 -0
  487. package/lib/esm/PropertyStore.js.map +1 -0
  488. package/lib/esm/Relationship.d.ts +399 -0
  489. package/lib/esm/Relationship.d.ts.map +1 -0
  490. package/lib/esm/Relationship.js +476 -0
  491. package/lib/esm/Relationship.js.map +1 -0
  492. package/lib/esm/RpcBackend.d.ts +6 -0
  493. package/lib/esm/RpcBackend.d.ts.map +1 -0
  494. package/lib/esm/RpcBackend.js +28 -0
  495. package/lib/esm/RpcBackend.js.map +1 -0
  496. package/lib/esm/SQLiteDb.d.ts +324 -0
  497. package/lib/esm/SQLiteDb.d.ts.map +1 -0
  498. package/lib/esm/SQLiteDb.js +379 -0
  499. package/lib/esm/SQLiteDb.js.map +1 -0
  500. package/lib/esm/Schema.d.ts +79 -0
  501. package/lib/esm/Schema.d.ts.map +1 -0
  502. package/lib/esm/Schema.js +113 -0
  503. package/lib/esm/Schema.js.map +1 -0
  504. package/lib/esm/SchemaSync.d.ts +47 -0
  505. package/lib/esm/SchemaSync.d.ts.map +1 -0
  506. package/lib/esm/SchemaSync.js +148 -0
  507. package/lib/esm/SchemaSync.js.map +1 -0
  508. package/lib/esm/SchemaUtils.d.ts +19 -0
  509. package/lib/esm/SchemaUtils.d.ts.map +1 -0
  510. package/lib/esm/SchemaUtils.js +37 -0
  511. package/lib/esm/SchemaUtils.js.map +1 -0
  512. package/lib/esm/SheetIndex.d.ts +148 -0
  513. package/lib/esm/SheetIndex.d.ts.map +1 -0
  514. package/lib/esm/SheetIndex.js +228 -0
  515. package/lib/esm/SheetIndex.js.map +1 -0
  516. package/lib/esm/SqliteChangesetReader.d.ts +278 -0
  517. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -0
  518. package/lib/esm/SqliteChangesetReader.js +337 -0
  519. package/lib/esm/SqliteChangesetReader.js.map +1 -0
  520. package/lib/esm/SqliteStatement.d.ts +375 -0
  521. package/lib/esm/SqliteStatement.d.ts.map +1 -0
  522. package/lib/esm/SqliteStatement.js +615 -0
  523. package/lib/esm/SqliteStatement.js.map +1 -0
  524. package/lib/esm/TextAnnotationElement.d.ts +54 -0
  525. package/lib/esm/TextAnnotationElement.d.ts.map +1 -0
  526. package/lib/esm/TextAnnotationElement.js +89 -0
  527. package/lib/esm/TextAnnotationElement.js.map +1 -0
  528. package/lib/esm/TextAnnotationGeometry.d.ts +32 -0
  529. package/lib/esm/TextAnnotationGeometry.d.ts.map +1 -0
  530. package/lib/esm/TextAnnotationGeometry.js +181 -0
  531. package/lib/esm/TextAnnotationGeometry.js.map +1 -0
  532. package/lib/esm/TextAnnotationLayout.d.ts +177 -0
  533. package/lib/esm/TextAnnotationLayout.d.ts.map +1 -0
  534. package/lib/esm/TextAnnotationLayout.js +513 -0
  535. package/lib/esm/TextAnnotationLayout.js.map +1 -0
  536. package/lib/esm/Texture.d.ts +58 -0
  537. package/lib/esm/Texture.d.ts.map +1 -0
  538. package/lib/esm/Texture.js +81 -0
  539. package/lib/esm/Texture.js.map +1 -0
  540. package/lib/esm/TileStorage.d.ts +59 -0
  541. package/lib/esm/TileStorage.d.ts.map +1 -0
  542. package/lib/esm/TileStorage.js +158 -0
  543. package/lib/esm/TileStorage.js.map +1 -0
  544. package/lib/esm/TxnManager.d.ts +296 -0
  545. package/lib/esm/TxnManager.d.ts.map +1 -0
  546. package/lib/esm/TxnManager.js +619 -0
  547. package/lib/esm/TxnManager.js.map +1 -0
  548. package/lib/esm/ViewDefinition.d.ts +392 -0
  549. package/lib/esm/ViewDefinition.d.ts.map +1 -0
  550. package/lib/esm/ViewDefinition.js +638 -0
  551. package/lib/esm/ViewDefinition.js.map +1 -0
  552. package/lib/esm/ViewStateHydrator.d.ts +14 -0
  553. package/lib/esm/ViewStateHydrator.d.ts.map +1 -0
  554. package/lib/esm/ViewStateHydrator.js +89 -0
  555. package/lib/esm/ViewStateHydrator.js.map +1 -0
  556. package/lib/esm/ViewStore.d.ts +502 -0
  557. package/lib/esm/ViewStore.d.ts.map +1 -0
  558. package/lib/esm/ViewStore.js +1260 -0
  559. package/lib/esm/ViewStore.js.map +1 -0
  560. package/lib/esm/core-backend.d.ts +182 -0
  561. package/lib/esm/core-backend.d.ts.map +1 -0
  562. package/lib/esm/core-backend.js +186 -0
  563. package/lib/esm/core-backend.js.map +1 -0
  564. package/lib/esm/domains/FunctionalElements.d.ts +86 -0
  565. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -0
  566. package/lib/esm/domains/FunctionalElements.js +117 -0
  567. package/lib/esm/domains/FunctionalElements.js.map +1 -0
  568. package/lib/esm/domains/FunctionalSchema.d.ts +14 -0
  569. package/lib/esm/domains/FunctionalSchema.d.ts.map +1 -0
  570. package/lib/esm/domains/FunctionalSchema.js +37 -0
  571. package/lib/esm/domains/FunctionalSchema.js.map +1 -0
  572. package/lib/esm/domains/GenericElements.d.ts +160 -0
  573. package/lib/esm/domains/GenericElements.d.ts.map +1 -0
  574. package/lib/esm/domains/GenericElements.js +225 -0
  575. package/lib/esm/domains/GenericElements.js.map +1 -0
  576. package/lib/esm/domains/GenericSchema.d.ts +11 -0
  577. package/lib/esm/domains/GenericSchema.d.ts.map +1 -0
  578. package/lib/esm/domains/GenericSchema.js +25 -0
  579. package/lib/esm/domains/GenericSchema.js.map +1 -0
  580. package/lib/esm/internal/ChangesetConflictArgs.d.ts +62 -0
  581. package/lib/esm/internal/ChangesetConflictArgs.d.ts.map +1 -0
  582. package/lib/esm/internal/ChangesetConflictArgs.js +104 -0
  583. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -0
  584. package/lib/esm/internal/ChannelAdmin.d.ts +34 -0
  585. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -0
  586. package/lib/esm/internal/ChannelAdmin.js +116 -0
  587. package/lib/esm/internal/ChannelAdmin.js.map +1 -0
  588. package/lib/esm/internal/FontFileImpl.d.ts +34 -0
  589. package/lib/esm/internal/FontFileImpl.d.ts.map +1 -0
  590. package/lib/esm/internal/FontFileImpl.js +135 -0
  591. package/lib/esm/internal/FontFileImpl.js.map +1 -0
  592. package/lib/esm/internal/HubMock.d.ts +94 -0
  593. package/lib/esm/internal/HubMock.d.ts.map +1 -0
  594. package/lib/esm/internal/HubMock.js +242 -0
  595. package/lib/esm/internal/HubMock.js.map +1 -0
  596. package/lib/esm/internal/IModelDbFontsImpl.d.ts +7 -0
  597. package/lib/esm/internal/IModelDbFontsImpl.d.ts.map +1 -0
  598. package/lib/esm/internal/IModelDbFontsImpl.js +183 -0
  599. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -0
  600. package/lib/esm/internal/NativePlatform.d.ts +15 -0
  601. package/lib/esm/internal/NativePlatform.d.ts.map +1 -0
  602. package/lib/esm/internal/NativePlatform.js +43 -0
  603. package/lib/esm/internal/NativePlatform.js.map +1 -0
  604. package/lib/esm/internal/NoLocks.d.ts +6 -0
  605. package/lib/esm/internal/NoLocks.d.ts.map +1 -0
  606. package/lib/esm/internal/NoLocks.js +24 -0
  607. package/lib/esm/internal/NoLocks.js.map +1 -0
  608. package/lib/esm/internal/ServerBasedLocks.d.ts +52 -0
  609. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -0
  610. package/lib/esm/internal/ServerBasedLocks.js +175 -0
  611. package/lib/esm/internal/ServerBasedLocks.js.map +1 -0
  612. package/lib/esm/internal/Symbols.d.ts +22 -0
  613. package/lib/esm/internal/Symbols.d.ts.map +1 -0
  614. package/lib/esm/internal/Symbols.js +29 -0
  615. package/lib/esm/internal/Symbols.js.map +1 -0
  616. package/lib/esm/internal/cross-package.d.ts +4 -0
  617. package/lib/esm/internal/cross-package.d.ts.map +1 -0
  618. package/lib/esm/internal/cross-package.js +8 -0
  619. package/lib/esm/internal/cross-package.js.map +1 -0
  620. package/lib/esm/internal/workspace/SettingsImpl.d.ts +43 -0
  621. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -0
  622. package/lib/esm/internal/workspace/SettingsImpl.js +154 -0
  623. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -0
  624. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts +6 -0
  625. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -0
  626. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +268 -0
  627. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -0
  628. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +41 -0
  629. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -0
  630. package/lib/esm/internal/workspace/WorkspaceImpl.js +691 -0
  631. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -0
  632. package/lib/esm/internal/workspace/WorkspaceSqliteDb.d.ts +10 -0
  633. package/lib/esm/internal/workspace/WorkspaceSqliteDb.d.ts.map +1 -0
  634. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js +35 -0
  635. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -0
  636. package/lib/esm/rpc/multipart.d.ts +12 -0
  637. package/lib/esm/rpc/multipart.d.ts.map +1 -0
  638. package/lib/esm/rpc/multipart.js +67 -0
  639. package/lib/esm/rpc/multipart.js.map +1 -0
  640. package/lib/esm/rpc/tracing.d.ts +29 -0
  641. package/lib/esm/rpc/tracing.d.ts.map +1 -0
  642. package/lib/esm/rpc/tracing.js +71 -0
  643. package/lib/esm/rpc/tracing.js.map +1 -0
  644. package/lib/esm/rpc/web/logging.d.ts +10 -0
  645. package/lib/esm/rpc/web/logging.d.ts.map +1 -0
  646. package/lib/esm/rpc/web/logging.js +41 -0
  647. package/lib/esm/rpc/web/logging.js.map +1 -0
  648. package/lib/esm/rpc/web/request.d.ts +7 -0
  649. package/lib/esm/rpc/web/request.d.ts.map +1 -0
  650. package/lib/esm/rpc/web/request.js +71 -0
  651. package/lib/esm/rpc/web/request.js.map +1 -0
  652. package/lib/esm/rpc/web/response.d.ts +7 -0
  653. package/lib/esm/rpc/web/response.d.ts.map +1 -0
  654. package/lib/esm/rpc/web/response.js +136 -0
  655. package/lib/esm/rpc/web/response.js.map +1 -0
  656. package/lib/esm/rpc-impl/DevToolsRpcImpl.d.ts +16 -0
  657. package/lib/esm/rpc-impl/DevToolsRpcImpl.d.ts.map +1 -0
  658. package/lib/esm/rpc-impl/DevToolsRpcImpl.js +29 -0
  659. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -0
  660. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +51 -0
  661. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -0
  662. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +314 -0
  663. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -0
  664. package/lib/esm/rpc-impl/IModelTileRpcImpl.d.ts +21 -0
  665. package/lib/esm/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -0
  666. package/lib/esm/rpc-impl/IModelTileRpcImpl.js +193 -0
  667. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -0
  668. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +45 -0
  669. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -0
  670. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js +155 -0
  671. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -0
  672. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +18 -0
  673. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +1 -0
  674. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +41 -0
  675. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -0
  676. package/lib/esm/test/AdvancedEqual.d.ts +38 -0
  677. package/lib/esm/test/AdvancedEqual.d.ts.map +1 -0
  678. package/lib/esm/test/AdvancedEqual.js +67 -0
  679. package/lib/esm/test/AdvancedEqual.js.map +1 -0
  680. package/lib/esm/test/AttachDb.test.d.ts +2 -0
  681. package/lib/esm/test/AttachDb.test.d.ts.map +1 -0
  682. package/lib/esm/test/AttachDb.test.js +157 -0
  683. package/lib/esm/test/AttachDb.test.js.map +1 -0
  684. package/lib/esm/test/GeometryTestUtil.d.ts +7 -0
  685. package/lib/esm/test/GeometryTestUtil.d.ts.map +1 -0
  686. package/lib/esm/test/GeometryTestUtil.js +25 -0
  687. package/lib/esm/test/GeometryTestUtil.js.map +1 -0
  688. package/lib/esm/test/IModelHost.test.d.ts +2 -0
  689. package/lib/esm/test/IModelHost.test.d.ts.map +1 -0
  690. package/lib/esm/test/IModelHost.test.js +187 -0
  691. package/lib/esm/test/IModelHost.test.js.map +1 -0
  692. package/lib/esm/test/IModelTestUtils.d.ts +173 -0
  693. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -0
  694. package/lib/esm/test/IModelTestUtils.js +1125 -0
  695. package/lib/esm/test/IModelTestUtils.js.map +1 -0
  696. package/lib/esm/test/ImageSourceConversion.test.d.ts +2 -0
  697. package/lib/esm/test/ImageSourceConversion.test.d.ts.map +1 -0
  698. package/lib/esm/test/ImageSourceConversion.test.js +171 -0
  699. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -0
  700. package/lib/esm/test/IpcHost.test.d.ts +2 -0
  701. package/lib/esm/test/IpcHost.test.d.ts.map +1 -0
  702. package/lib/esm/test/IpcHost.test.js +55 -0
  703. package/lib/esm/test/IpcHost.test.js.map +1 -0
  704. package/lib/esm/test/KnownTestLocations.d.ts +7 -0
  705. package/lib/esm/test/KnownTestLocations.d.ts.map +1 -0
  706. package/lib/esm/test/KnownTestLocations.js +27 -0
  707. package/lib/esm/test/KnownTestLocations.js.map +1 -0
  708. package/lib/esm/test/PrintElementTree.d.ts +7 -0
  709. package/lib/esm/test/PrintElementTree.d.ts.map +1 -0
  710. package/lib/esm/test/PrintElementTree.js +36 -0
  711. package/lib/esm/test/PrintElementTree.js.map +1 -0
  712. package/lib/esm/test/PropertyDb.test.d.ts +2 -0
  713. package/lib/esm/test/PropertyDb.test.d.ts.map +1 -0
  714. package/lib/esm/test/PropertyDb.test.js +71 -0
  715. package/lib/esm/test/PropertyDb.test.js.map +1 -0
  716. package/lib/esm/test/RevisionUtility.d.ts +33 -0
  717. package/lib/esm/test/RevisionUtility.d.ts.map +1 -0
  718. package/lib/esm/test/RevisionUtility.js +52 -0
  719. package/lib/esm/test/RevisionUtility.js.map +1 -0
  720. package/lib/esm/test/SchemaUtils.test.d.ts +2 -0
  721. package/lib/esm/test/SchemaUtils.test.d.ts.map +1 -0
  722. package/lib/esm/test/SchemaUtils.test.js +99 -0
  723. package/lib/esm/test/SchemaUtils.test.js.map +1 -0
  724. package/lib/esm/test/SequentialLogMatcher.d.ts +35 -0
  725. package/lib/esm/test/SequentialLogMatcher.d.ts.map +1 -0
  726. package/lib/esm/test/SequentialLogMatcher.js +130 -0
  727. package/lib/esm/test/SequentialLogMatcher.js.map +1 -0
  728. package/lib/esm/test/TestChangeSetUtility.d.ts +23 -0
  729. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -0
  730. package/lib/esm/test/TestChangeSetUtility.js +65 -0
  731. package/lib/esm/test/TestChangeSetUtility.js.map +1 -0
  732. package/lib/esm/test/TestUtils.d.ts +38 -0
  733. package/lib/esm/test/TestUtils.d.ts.map +1 -0
  734. package/lib/esm/test/TestUtils.js +99 -0
  735. package/lib/esm/test/TestUtils.js.map +1 -0
  736. package/lib/esm/test/annotations/TextAnnotation.test.d.ts +2 -0
  737. package/lib/esm/test/annotations/TextAnnotation.test.d.ts.map +1 -0
  738. package/lib/esm/test/annotations/TextAnnotation.test.js +1135 -0
  739. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -0
  740. package/lib/esm/test/categories/Category.test.d.ts +2 -0
  741. package/lib/esm/test/categories/Category.test.d.ts.map +1 -0
  742. package/lib/esm/test/categories/Category.test.js +51 -0
  743. package/lib/esm/test/categories/Category.test.js.map +1 -0
  744. package/lib/esm/test/codespec/CodeSpec.test.d.ts +2 -0
  745. package/lib/esm/test/codespec/CodeSpec.test.d.ts.map +1 -0
  746. package/lib/esm/test/codespec/CodeSpec.test.js +51 -0
  747. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -0
  748. package/lib/esm/test/ecdb/CTE.test.d.ts +2 -0
  749. package/lib/esm/test/ecdb/CTE.test.d.ts.map +1 -0
  750. package/lib/esm/test/ecdb/CTE.test.js +177 -0
  751. package/lib/esm/test/ecdb/CTE.test.js.map +1 -0
  752. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.d.ts +2 -0
  753. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.d.ts.map +1 -0
  754. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +167 -0
  755. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -0
  756. package/lib/esm/test/ecdb/ECDb.test.d.ts +2 -0
  757. package/lib/esm/test/ecdb/ECDb.test.d.ts.map +1 -0
  758. package/lib/esm/test/ecdb/ECDb.test.js +653 -0
  759. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -0
  760. package/lib/esm/test/ecdb/ECDbTestHelper.d.ts +5 -0
  761. package/lib/esm/test/ecdb/ECDbTestHelper.d.ts.map +1 -0
  762. package/lib/esm/test/ecdb/ECDbTestHelper.js +28 -0
  763. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -0
  764. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.d.ts +2 -0
  765. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.d.ts.map +1 -0
  766. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js +63 -0
  767. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -0
  768. package/lib/esm/test/ecdb/ECSqlAst.test.d.ts +5 -0
  769. package/lib/esm/test/ecdb/ECSqlAst.test.d.ts.map +1 -0
  770. package/lib/esm/test/ecdb/ECSqlAst.test.js +972 -0
  771. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -0
  772. package/lib/esm/test/ecdb/ECSqlQuery.test.d.ts +2 -0
  773. package/lib/esm/test/ecdb/ECSqlQuery.test.d.ts.map +1 -0
  774. package/lib/esm/test/ecdb/ECSqlQuery.test.js +776 -0
  775. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -0
  776. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts +2 -0
  777. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts.map +1 -0
  778. package/lib/esm/test/ecdb/ECSqlReader.test.js +669 -0
  779. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -0
  780. package/lib/esm/test/ecdb/ECSqlStatement.test.d.ts +2 -0
  781. package/lib/esm/test/ecdb/ECSqlStatement.test.d.ts.map +1 -0
  782. package/lib/esm/test/ecdb/ECSqlStatement.test.js +3329 -0
  783. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -0
  784. package/lib/esm/test/ecdb/SqliteStatement.test.d.ts +2 -0
  785. package/lib/esm/test/ecdb/SqliteStatement.test.d.ts.map +1 -0
  786. package/lib/esm/test/ecdb/SqliteStatement.test.js +510 -0
  787. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -0
  788. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts +4 -0
  789. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -0
  790. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +127 -0
  791. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -0
  792. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.d.ts +2 -0
  793. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.d.ts.map +1 -0
  794. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +197 -0
  795. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -0
  796. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts +66 -0
  797. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -0
  798. package/lib/esm/test/ecsql/src/ECSqlTestParser.js +420 -0
  799. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -0
  800. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.d.ts +2 -0
  801. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.d.ts.map +1 -0
  802. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +369 -0
  803. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -0
  804. package/lib/esm/test/element/DeleteDefinitionElements.test.d.ts +2 -0
  805. package/lib/esm/test/element/DeleteDefinitionElements.test.d.ts.map +1 -0
  806. package/lib/esm/test/element/DeleteDefinitionElements.test.js +208 -0
  807. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -0
  808. package/lib/esm/test/element/ElementAspect.test.d.ts +2 -0
  809. package/lib/esm/test/element/ElementAspect.test.d.ts.map +1 -0
  810. package/lib/esm/test/element/ElementAspect.test.js +363 -0
  811. package/lib/esm/test/element/ElementAspect.test.js.map +1 -0
  812. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts +2 -0
  813. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -0
  814. package/lib/esm/test/element/ElementDependencyGraph.test.js +383 -0
  815. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -0
  816. package/lib/esm/test/element/ElementRoundTrip.test.d.ts +2 -0
  817. package/lib/esm/test/element/ElementRoundTrip.test.d.ts.map +1 -0
  818. package/lib/esm/test/element/ElementRoundTrip.test.js +926 -0
  819. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -0
  820. package/lib/esm/test/element/ExcludedElements.test.d.ts +2 -0
  821. package/lib/esm/test/element/ExcludedElements.test.d.ts.map +1 -0
  822. package/lib/esm/test/element/ExcludedElements.test.js +57 -0
  823. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -0
  824. package/lib/esm/test/element/ExternalSource.test.d.ts +2 -0
  825. package/lib/esm/test/element/ExternalSource.test.d.ts.map +1 -0
  826. package/lib/esm/test/element/ExternalSource.test.js +107 -0
  827. package/lib/esm/test/element/ExternalSource.test.js.map +1 -0
  828. package/lib/esm/test/element/NullStructArray.test.d.ts +2 -0
  829. package/lib/esm/test/element/NullStructArray.test.d.ts.map +1 -0
  830. package/lib/esm/test/element/NullStructArray.test.js +77 -0
  831. package/lib/esm/test/element/NullStructArray.test.js.map +1 -0
  832. package/lib/esm/test/element/UrlLink.test.d.ts +2 -0
  833. package/lib/esm/test/element/UrlLink.test.d.ts.map +1 -0
  834. package/lib/esm/test/element/UrlLink.test.js +36 -0
  835. package/lib/esm/test/element/UrlLink.test.js.map +1 -0
  836. package/lib/esm/test/font/FontFile.test.d.ts +2 -0
  837. package/lib/esm/test/font/FontFile.test.d.ts.map +1 -0
  838. package/lib/esm/test/font/FontFile.test.js +139 -0
  839. package/lib/esm/test/font/FontFile.test.js.map +1 -0
  840. package/lib/esm/test/font/IModelDbFonts.test.d.ts +2 -0
  841. package/lib/esm/test/font/IModelDbFonts.test.d.ts.map +1 -0
  842. package/lib/esm/test/font/IModelDbFonts.test.js +266 -0
  843. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -0
  844. package/lib/esm/test/hubaccess/BriefcaseManager.test.d.ts +2 -0
  845. package/lib/esm/test/hubaccess/BriefcaseManager.test.d.ts.map +1 -0
  846. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +176 -0
  847. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -0
  848. package/lib/esm/test/hubaccess/CheckpointManager.test.d.ts +2 -0
  849. package/lib/esm/test/hubaccess/CheckpointManager.test.d.ts.map +1 -0
  850. package/lib/esm/test/hubaccess/CheckpointManager.test.js +51 -0
  851. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -0
  852. package/lib/esm/test/imageData.d.ts +9 -0
  853. package/lib/esm/test/imageData.d.ts.map +1 -0
  854. package/lib/esm/test/imageData.js +16 -0
  855. package/lib/esm/test/imageData.js.map +1 -0
  856. package/lib/esm/test/imodel/ElementTreeWalker.test.d.ts +2 -0
  857. package/lib/esm/test/imodel/ElementTreeWalker.test.d.ts.map +1 -0
  858. package/lib/esm/test/imodel/ElementTreeWalker.test.js +383 -0
  859. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -0
  860. package/lib/esm/test/imodel/GetTextureImage.test.d.ts +2 -0
  861. package/lib/esm/test/imodel/GetTextureImage.test.d.ts.map +1 -0
  862. package/lib/esm/test/imodel/GetTextureImage.test.js +29 -0
  863. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -0
  864. package/lib/esm/test/imodel/IModel.test.d.ts +2 -0
  865. package/lib/esm/test/imodel/IModel.test.d.ts.map +1 -0
  866. package/lib/esm/test/imodel/IModel.test.js +2615 -0
  867. package/lib/esm/test/imodel/IModel.test.js.map +1 -0
  868. package/lib/esm/test/imodel/ProjectExtents.test.d.ts +2 -0
  869. package/lib/esm/test/imodel/ProjectExtents.test.d.ts.map +1 -0
  870. package/lib/esm/test/imodel/ProjectExtents.test.js +66 -0
  871. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -0
  872. package/lib/esm/test/imodel/SchemaXmlImport.test.d.ts +2 -0
  873. package/lib/esm/test/imodel/SchemaXmlImport.test.d.ts.map +1 -0
  874. package/lib/esm/test/imodel/SchemaXmlImport.test.js +74 -0
  875. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -0
  876. package/lib/esm/test/index.d.ts +7 -0
  877. package/lib/esm/test/index.d.ts.map +1 -0
  878. package/lib/esm/test/index.js +11 -0
  879. package/lib/esm/test/index.js.map +1 -0
  880. package/lib/esm/test/misc/DevTools.test.d.ts +2 -0
  881. package/lib/esm/test/misc/DevTools.test.d.ts.map +1 -0
  882. package/lib/esm/test/misc/DevTools.test.js +72 -0
  883. package/lib/esm/test/misc/DevTools.test.js.map +1 -0
  884. package/lib/esm/test/misc/EntitySubClasses.test.d.ts +2 -0
  885. package/lib/esm/test/misc/EntitySubClasses.test.d.ts.map +1 -0
  886. package/lib/esm/test/misc/EntitySubClasses.test.js +106 -0
  887. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -0
  888. package/lib/esm/test/misc/GeoServices.test.d.ts +2 -0
  889. package/lib/esm/test/misc/GeoServices.test.d.ts.map +1 -0
  890. package/lib/esm/test/misc/GeoServices.test.js +850 -0
  891. package/lib/esm/test/misc/GeoServices.test.js.map +1 -0
  892. package/lib/esm/test/misc/PromiseMemoizer.test.d.ts +2 -0
  893. package/lib/esm/test/misc/PromiseMemoizer.test.d.ts.map +1 -0
  894. package/lib/esm/test/misc/PromiseMemoizer.test.js +111 -0
  895. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -0
  896. package/lib/esm/test/native/DgnDbWorker.test.d.ts +2 -0
  897. package/lib/esm/test/native/DgnDbWorker.test.d.ts.map +1 -0
  898. package/lib/esm/test/native/DgnDbWorker.test.js +159 -0
  899. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -0
  900. package/lib/esm/test/rpc/response.test.d.ts +2 -0
  901. package/lib/esm/test/rpc/response.test.d.ts.map +1 -0
  902. package/lib/esm/test/rpc/response.test.js +112 -0
  903. package/lib/esm/test/rpc/response.test.js.map +1 -0
  904. package/lib/esm/test/schema/ClassRegistry.test.d.ts +2 -0
  905. package/lib/esm/test/schema/ClassRegistry.test.d.ts.map +1 -0
  906. package/lib/esm/test/schema/ClassRegistry.test.js +679 -0
  907. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -0
  908. package/lib/esm/test/schema/FunctionalDomain.test.d.ts +2 -0
  909. package/lib/esm/test/schema/FunctionalDomain.test.d.ts.map +1 -0
  910. package/lib/esm/test/schema/FunctionalDomain.test.js +490 -0
  911. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -0
  912. package/lib/esm/test/schema/GenericDomain.test.d.ts +2 -0
  913. package/lib/esm/test/schema/GenericDomain.test.d.ts.map +1 -0
  914. package/lib/esm/test/schema/GenericDomain.test.js +133 -0
  915. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -0
  916. package/lib/esm/test/schema/IModelSchemaContext.test.d.ts +2 -0
  917. package/lib/esm/test/schema/IModelSchemaContext.test.d.ts.map +1 -0
  918. package/lib/esm/test/schema/IModelSchemaContext.test.js +95 -0
  919. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -0
  920. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +4 -0
  921. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -0
  922. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -0
  923. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -0
  924. package/lib/esm/test/standalone/ChangeMerge.test.d.ts +2 -0
  925. package/lib/esm/test/standalone/ChangeMerge.test.d.ts.map +1 -0
  926. package/lib/esm/test/standalone/ChangeMerge.test.js +409 -0
  927. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -0
  928. package/lib/esm/test/standalone/ChangesetReader.test.d.ts +2 -0
  929. package/lib/esm/test/standalone/ChangesetReader.test.d.ts.map +1 -0
  930. package/lib/esm/test/standalone/ChangesetReader.test.js +891 -0
  931. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -0
  932. package/lib/esm/test/standalone/CustomViewState3dCreator.test.d.ts +2 -0
  933. package/lib/esm/test/standalone/CustomViewState3dCreator.test.d.ts.map +1 -0
  934. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js +49 -0
  935. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -0
  936. package/lib/esm/test/standalone/DisplayStyle.test.d.ts +2 -0
  937. package/lib/esm/test/standalone/DisplayStyle.test.d.ts.map +1 -0
  938. package/lib/esm/test/standalone/DisplayStyle.test.js +136 -0
  939. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -0
  940. package/lib/esm/test/standalone/Drawing.test.d.ts +2 -0
  941. package/lib/esm/test/standalone/Drawing.test.d.ts.map +1 -0
  942. package/lib/esm/test/standalone/Drawing.test.js +120 -0
  943. package/lib/esm/test/standalone/Drawing.test.js.map +1 -0
  944. package/lib/esm/test/standalone/ElementGraphics.test.d.ts +2 -0
  945. package/lib/esm/test/standalone/ElementGraphics.test.d.ts.map +1 -0
  946. package/lib/esm/test/standalone/ElementGraphics.test.js +127 -0
  947. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -0
  948. package/lib/esm/test/standalone/ElementMesh.test.d.ts +2 -0
  949. package/lib/esm/test/standalone/ElementMesh.test.d.ts.map +1 -0
  950. package/lib/esm/test/standalone/ElementMesh.test.js +142 -0
  951. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -0
  952. package/lib/esm/test/standalone/ExportGraphics.test.d.ts +2 -0
  953. package/lib/esm/test/standalone/ExportGraphics.test.d.ts.map +1 -0
  954. package/lib/esm/test/standalone/ExportGraphics.test.js +1040 -0
  955. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -0
  956. package/lib/esm/test/standalone/GeometryChangeEvents.test.d.ts +2 -0
  957. package/lib/esm/test/standalone/GeometryChangeEvents.test.d.ts.map +1 -0
  958. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +139 -0
  959. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -0
  960. package/lib/esm/test/standalone/GeometryStream.test.d.ts +2 -0
  961. package/lib/esm/test/standalone/GeometryStream.test.d.ts.map +1 -0
  962. package/lib/esm/test/standalone/GeometryStream.test.js +2869 -0
  963. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -0
  964. package/lib/esm/test/standalone/HubMock.test.d.ts +2 -0
  965. package/lib/esm/test/standalone/HubMock.test.d.ts.map +1 -0
  966. package/lib/esm/test/standalone/HubMock.test.js +343 -0
  967. package/lib/esm/test/standalone/HubMock.test.js.map +1 -0
  968. package/lib/esm/test/standalone/IModelWrite.test.d.ts +7 -0
  969. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -0
  970. package/lib/esm/test/standalone/IModelWrite.test.js +907 -0
  971. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -0
  972. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.d.ts +2 -0
  973. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.d.ts.map +1 -0
  974. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +417 -0
  975. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -0
  976. package/lib/esm/test/standalone/MergeConflict.test.d.ts +7 -0
  977. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -0
  978. package/lib/esm/test/standalone/MergeConflict.test.js +345 -0
  979. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -0
  980. package/lib/esm/test/standalone/NativeAppStorage.test.d.ts +2 -0
  981. package/lib/esm/test/standalone/NativeAppStorage.test.d.ts.map +1 -0
  982. package/lib/esm/test/standalone/NativeAppStorage.test.js +121 -0
  983. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -0
  984. package/lib/esm/test/standalone/RenderMaterialElement.test.d.ts +2 -0
  985. package/lib/esm/test/standalone/RenderMaterialElement.test.d.ts.map +1 -0
  986. package/lib/esm/test/standalone/RenderMaterialElement.test.js +399 -0
  987. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -0
  988. package/lib/esm/test/standalone/RenderTimeline.test.d.ts +2 -0
  989. package/lib/esm/test/standalone/RenderTimeline.test.d.ts.map +1 -0
  990. package/lib/esm/test/standalone/RenderTimeline.test.js +71 -0
  991. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -0
  992. package/lib/esm/test/standalone/SQLiteDb.test.d.ts +2 -0
  993. package/lib/esm/test/standalone/SQLiteDb.test.d.ts.map +1 -0
  994. package/lib/esm/test/standalone/SQLiteDb.test.js +63 -0
  995. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -0
  996. package/lib/esm/test/standalone/SchemaUtils.test.d.ts +2 -0
  997. package/lib/esm/test/standalone/SchemaUtils.test.d.ts.map +1 -0
  998. package/lib/esm/test/standalone/SchemaUtils.test.js +25 -0
  999. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -0
  1000. package/lib/esm/test/standalone/SectionDrawing.test.d.ts +2 -0
  1001. package/lib/esm/test/standalone/SectionDrawing.test.d.ts.map +1 -0
  1002. package/lib/esm/test/standalone/SectionDrawing.test.js +83 -0
  1003. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -0
  1004. package/lib/esm/test/standalone/ServerBasedLocks.test.d.ts +2 -0
  1005. package/lib/esm/test/standalone/ServerBasedLocks.test.d.ts.map +1 -0
  1006. package/lib/esm/test/standalone/ServerBasedLocks.test.js +279 -0
  1007. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -0
  1008. package/lib/esm/test/standalone/Setting.test.d.ts +2 -0
  1009. package/lib/esm/test/standalone/Setting.test.d.ts.map +1 -0
  1010. package/lib/esm/test/standalone/Setting.test.js +76 -0
  1011. package/lib/esm/test/standalone/Setting.test.js.map +1 -0
  1012. package/lib/esm/test/standalone/Settings.test.d.ts +2 -0
  1013. package/lib/esm/test/standalone/Settings.test.d.ts.map +1 -0
  1014. package/lib/esm/test/standalone/Settings.test.js +349 -0
  1015. package/lib/esm/test/standalone/Settings.test.js.map +1 -0
  1016. package/lib/esm/test/standalone/SettingsSchemas.test.d.ts +2 -0
  1017. package/lib/esm/test/standalone/SettingsSchemas.test.d.ts.map +1 -0
  1018. package/lib/esm/test/standalone/SettingsSchemas.test.js +31 -0
  1019. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -0
  1020. package/lib/esm/test/standalone/SnapshotDb.test.d.ts +2 -0
  1021. package/lib/esm/test/standalone/SnapshotDb.test.d.ts.map +1 -0
  1022. package/lib/esm/test/standalone/SnapshotDb.test.js +154 -0
  1023. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -0
  1024. package/lib/esm/test/standalone/Texture.test.d.ts +2 -0
  1025. package/lib/esm/test/standalone/Texture.test.d.ts.map +1 -0
  1026. package/lib/esm/test/standalone/Texture.test.js +90 -0
  1027. package/lib/esm/test/standalone/Texture.test.js.map +1 -0
  1028. package/lib/esm/test/standalone/TileCache.test.d.ts +9 -0
  1029. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -0
  1030. package/lib/esm/test/standalone/TileCache.test.js +127 -0
  1031. package/lib/esm/test/standalone/TileCache.test.js.map +1 -0
  1032. package/lib/esm/test/standalone/TileTree.test.d.ts +2 -0
  1033. package/lib/esm/test/standalone/TileTree.test.d.ts.map +1 -0
  1034. package/lib/esm/test/standalone/TileTree.test.js +241 -0
  1035. package/lib/esm/test/standalone/TileTree.test.js.map +1 -0
  1036. package/lib/esm/test/standalone/TxnManager.test.d.ts +2 -0
  1037. package/lib/esm/test/standalone/TxnManager.test.d.ts.map +1 -0
  1038. package/lib/esm/test/standalone/TxnManager.test.js +878 -0
  1039. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -0
  1040. package/lib/esm/test/standalone/ViewDefinition.test.d.ts +2 -0
  1041. package/lib/esm/test/standalone/ViewDefinition.test.d.ts.map +1 -0
  1042. package/lib/esm/test/standalone/ViewDefinition.test.js +279 -0
  1043. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -0
  1044. package/lib/esm/test/standalone/ViewStoreDb.test.d.ts +2 -0
  1045. package/lib/esm/test/standalone/ViewStoreDb.test.d.ts.map +1 -0
  1046. package/lib/esm/test/standalone/ViewStoreDb.test.js +288 -0
  1047. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -0
  1048. package/lib/esm/test/standalone/Workspace.test.d.ts +2 -0
  1049. package/lib/esm/test/standalone/Workspace.test.d.ts.map +1 -0
  1050. package/lib/esm/test/standalone/Workspace.test.js +161 -0
  1051. package/lib/esm/test/standalone/Workspace.test.js.map +1 -0
  1052. package/lib/esm/workspace/Settings.d.ts +216 -0
  1053. package/lib/esm/workspace/Settings.d.ts.map +1 -0
  1054. package/lib/esm/workspace/Settings.js +83 -0
  1055. package/lib/esm/workspace/Settings.js.map +1 -0
  1056. package/lib/esm/workspace/SettingsSchemas.d.ts +135 -0
  1057. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -0
  1058. package/lib/esm/workspace/SettingsSchemas.js +9 -0
  1059. package/lib/esm/workspace/SettingsSchemas.js.map +1 -0
  1060. package/lib/esm/workspace/Workspace.d.ts +507 -0
  1061. package/lib/esm/workspace/Workspace.d.ts.map +1 -0
  1062. package/lib/esm/workspace/Workspace.js +97 -0
  1063. package/lib/esm/workspace/Workspace.js.map +1 -0
  1064. package/lib/esm/workspace/WorkspaceEditor.d.ts +245 -0
  1065. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -0
  1066. package/lib/esm/workspace/WorkspaceEditor.js +31 -0
  1067. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -0
  1068. package/package.json +38 -30
  1069. package/lib/cjs/ChangedElementsManager.d.ts +0 -42
  1070. package/lib/cjs/ChangedElementsManager.d.ts.map +0 -1
  1071. package/lib/cjs/ChangedElementsManager.js +0 -91
  1072. package/lib/cjs/ChangedElementsManager.js.map +0 -1
  1073. package/lib/cjs/HubMock.d.ts.map +0 -1
  1074. package/lib/cjs/HubMock.js.map +0 -1
  1075. package/lib/cjs/IModelCloneContext.d.ts +0 -9
  1076. package/lib/cjs/IModelCloneContext.d.ts.map +0 -1
  1077. package/lib/cjs/IModelCloneContext.js.map +0 -1
  1078. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +0 -17
  1079. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts.map +0 -1
  1080. package/lib/cjs/rpc-impl/WipRpcImpl.js +0 -40
  1081. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +0 -1
@@ -0,0 +1,3329 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ /*---------------------------------------------------------------------------------------------
54
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
55
+ * See LICENSE.md in the project root for license terms and full copyright notice.
56
+ *--------------------------------------------------------------------------------------------*/
57
+ import { assert } from "chai";
58
+ import { DbResult, Guid, Id64 } from "@itwin/core-bentley";
59
+ import { QueryBinder, QueryOptionsBuilder, QueryRowFormat } from "@itwin/core-common";
60
+ import { Point2d, Point3d, Range3d } from "@itwin/core-geometry";
61
+ import { _nativeDb, SnapshotDb } from "../../core-backend";
62
+ import { IModelTestUtils } from "../IModelTestUtils";
63
+ import { KnownTestLocations } from "../KnownTestLocations";
64
+ import { SequentialLogMatcher } from "../SequentialLogMatcher";
65
+ import { ECDbTestHelper } from "./ECDbTestHelper";
66
+ import { ConcurrentQuery } from "../../ConcurrentQuery";
67
+ /* eslint-disable @typescript-eslint/naming-convention */
68
+ const selectSingleRow = new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();
69
+ async function query(ecdb, ecsql, params, config, callback) {
70
+ ecdb.saveChanges();
71
+ let rowCount = 0;
72
+ for await (const queryRow of ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames })) {
73
+ rowCount++;
74
+ if (callback)
75
+ callback(queryRow.toRow());
76
+ }
77
+ return rowCount;
78
+ }
79
+ async function queryRows(ecdb, ecsql, params, config) {
80
+ ecdb.saveChanges();
81
+ const reader = ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames });
82
+ return reader.toArray();
83
+ }
84
+ async function queryCount(ecdb, ecsql, params, config) {
85
+ ecdb.saveChanges();
86
+ for await (const row of ecdb.createQueryReader(`SELECT COUNT(*) FROM (${ecsql})`, params, { ...config, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes })) {
87
+ return row[0];
88
+ }
89
+ return -1;
90
+ }
91
+ function blobEqual(lhs, rhs) {
92
+ if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))
93
+ throw new Error("expecting uint8array");
94
+ if (lhs.byteLength !== rhs.byteLength)
95
+ return false;
96
+ for (let i = 0; i < lhs.byteLength; i++) {
97
+ if (lhs[i] !== rhs[i])
98
+ return false;
99
+ }
100
+ return true;
101
+ }
102
+ describe("ECSqlStatement", () => {
103
+ const outDir = KnownTestLocations.outputDir;
104
+ const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);
105
+ const blobVal = new Uint8Array(testRange.toFloat64Array().buffer);
106
+ const abbreviatedBlobVal = `{"bytes":${blobVal.byteLength}}`;
107
+ it("check asynchronous step and stepForInsert methods", async () => {
108
+ const env_1 = { stack: [], error: void 0, hasError: false };
109
+ try {
110
+ const ecdb = __addDisposableResource(env_1, ECDbTestHelper.createECDb(outDir, "asyncmethodtest.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
111
+ <ECEntityClass typeName="Foo" modifier="Sealed">
112
+ <ECProperty propertyName="n" typeName="int"/>
113
+ <ECProperty propertyName="dt" typeName="dateTime"/>
114
+ <ECProperty propertyName="fooId" typeName="long" extendedTypeName="Id"/>
115
+ </ECEntityClass>
116
+ </ECSchema>`), false);
117
+ assert.isTrue(ecdb.isOpen);
118
+ const r = await ecdb.withCachedWriteStatement("INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)", async (stmt) => {
119
+ return stmt.stepForInsert();
120
+ });
121
+ ecdb.saveChanges();
122
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
123
+ assert.equal(r.id, "0x1");
124
+ }
125
+ catch (e_1) {
126
+ env_1.error = e_1;
127
+ env_1.hasError = true;
128
+ }
129
+ finally {
130
+ __disposeResources(env_1);
131
+ }
132
+ });
133
+ it("concurrent query get meta data", async () => {
134
+ const env_2 = { stack: [], error: void 0, hasError: false };
135
+ try {
136
+ const ecdb = __addDisposableResource(env_2, ECDbTestHelper.createECDb(outDir, "asyncmethodtest.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
137
+ <ECEntityClass typeName="Foo" modifier="Sealed">
138
+ <ECProperty propertyName="n" typeName="int"/>
139
+ <ECProperty propertyName="dt" typeName="dateTime"/>
140
+ <ECProperty propertyName="fooId" typeName="long" extendedTypeName="Id"/>
141
+ </ECEntityClass>
142
+ </ECSchema>`), false);
143
+ assert.isTrue(ecdb.isOpen);
144
+ await ecdb.withCachedWriteStatement("INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)", async (stmt) => {
145
+ stmt.stepForInsert();
146
+ });
147
+ await ecdb.withCachedWriteStatement("INSERT INTO ts.Foo(n,dt,fooId) VALUES(30,TIMESTAMP '2019-10-18T12:00:00Z',30)", async (stmt) => {
148
+ stmt.stepForInsert();
149
+ });
150
+ ecdb.saveChanges();
151
+ const reader = ecdb.createQueryReader("SELECT * FROM ts.Foo");
152
+ let props = await reader.getMetaData();
153
+ assert.equal(props.length, 5);
154
+ let rows = 0;
155
+ while (await reader.step()) {
156
+ rows++;
157
+ }
158
+ assert.equal(rows, 2);
159
+ props = await reader.getMetaData();
160
+ assert.equal(props.length, 5);
161
+ }
162
+ catch (e_2) {
163
+ env_2.error = e_2;
164
+ env_2.hasError = true;
165
+ }
166
+ finally {
167
+ __disposeResources(env_2);
168
+ }
169
+ });
170
+ it("null string accessor", async () => {
171
+ const env_3 = { stack: [], error: void 0, hasError: false };
172
+ try {
173
+ const ecdb = __addDisposableResource(env_3, ECDbTestHelper.createECDb(outDir, "nullstring.ecdb"), false);
174
+ assert.isTrue(ecdb.isOpen);
175
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
176
+ await ecdb.withPreparedStatement(`VALUES(NULL)`, async (stmt) => {
177
+ stmt.step();
178
+ const str = stmt.getValue(0).getString();
179
+ assert.equal(str, "");
180
+ });
181
+ }
182
+ catch (e_3) {
183
+ env_3.error = e_3;
184
+ env_3.hasError = true;
185
+ }
186
+ finally {
187
+ __disposeResources(env_3);
188
+ }
189
+ });
190
+ it("should page results", async () => {
191
+ const env_4 = { stack: [], error: void 0, hasError: false };
192
+ try {
193
+ const ecdb = __addDisposableResource(env_4, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
194
+ <ECEntityClass typeName="Foo" modifier="Sealed">
195
+ <ECProperty propertyName="n" typeName="int"/>
196
+ </ECEntityClass>
197
+ </ECSchema>`), false);
198
+ assert.isTrue(ecdb.isOpen);
199
+ const ROW_COUNT = 27;
200
+ // insert test rows
201
+ for (let i = 1; i <= ROW_COUNT; i++) {
202
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
203
+ return stmt.stepForInsert();
204
+ });
205
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
206
+ }
207
+ ecdb.saveChanges();
208
+ for (let i = 1; i < ROW_COUNT; i++) {
209
+ const rowCount = await queryCount(ecdb, "SELECT ECInstanceId, ECClassId, n FROM ts.Foo WHERE n <= ?", new QueryBinder().bindInt(1, i));
210
+ assert.equal(rowCount, i);
211
+ }
212
+ const temp = await queryRows(ecdb, "SELECT ECInstanceId FROM ONLY ts.Foo");
213
+ assert.equal(temp.length, ROW_COUNT);
214
+ // query page by page
215
+ const PAGE_SIZE = 5;
216
+ const QUERY = "SELECT n FROM ts.Foo";
217
+ const EXPECTED_ROW_COUNT = [5, 5, 5, 5, 5, 2];
218
+ const ready = [];
219
+ for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {
220
+ ready.push(queryRows(ecdb, QUERY, undefined, new QueryOptionsBuilder().setLimit({ offset: i * PAGE_SIZE, count: PAGE_SIZE }).getOptions()));
221
+ }
222
+ // verify if each page has right count of rows
223
+ const results = await Promise.all(ready);
224
+ for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {
225
+ assert.equal(results[i].length, EXPECTED_ROW_COUNT[i]);
226
+ }
227
+ }
228
+ catch (e_4) {
229
+ env_4.error = e_4;
230
+ env_4.hasError = true;
231
+ }
232
+ finally {
233
+ __disposeResources(env_4);
234
+ }
235
+ });
236
+ it("paging use cache statement queryRows()", async () => {
237
+ const env_5 = { stack: [], error: void 0, hasError: false };
238
+ try {
239
+ const ecdb = __addDisposableResource(env_5, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
240
+ <ECEntityClass typeName="Foo" modifier="Sealed">
241
+ <ECProperty propertyName="n" typeName="int"/>
242
+ </ECEntityClass>
243
+ </ECSchema>`), false);
244
+ assert.isTrue(ecdb.isOpen);
245
+ const ROW_COUNT = 100;
246
+ // insert test rows
247
+ for (let i = 1; i <= ROW_COUNT; i++) {
248
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
249
+ return stmt.stepForInsert();
250
+ });
251
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
252
+ }
253
+ ecdb.saveChanges();
254
+ // check if varying page number does not require prepare new statements
255
+ ecdb.clearStatementCache();
256
+ const rca = await queryRows(ecdb, "SELECT count(*) as nRows FROM ts.Foo");
257
+ assert.equal(rca[0].nRows, 100); // expe
258
+ const rc = await queryCount(ecdb, "SELECT * FROM ts.Foo");
259
+ assert.equal(rc, 100); // expe
260
+ let rowNo = 0;
261
+ for await (const row of ecdb.createQueryReader("SELECT * FROM ts.Foo", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
262
+ assert.equal(row.n, rowNo + 1);
263
+ rowNo = rowNo + 1;
264
+ }
265
+ assert.equal(rowNo, 100); // expect all rows
266
+ }
267
+ catch (e_5) {
268
+ env_5.error = e_5;
269
+ env_5.hasError = true;
270
+ }
271
+ finally {
272
+ __disposeResources(env_5);
273
+ }
274
+ });
275
+ it("should restart query", async () => {
276
+ const env_6 = { stack: [], error: void 0, hasError: false };
277
+ try {
278
+ const ecdb = __addDisposableResource(env_6, ECDbTestHelper.createECDb(outDir, "cancelquery.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
279
+ <ECEntityClass typeName="Foo" modifier="Sealed">
280
+ <ECProperty propertyName="n" typeName="int"/>
281
+ </ECEntityClass>
282
+ </ECSchema>`), false);
283
+ assert.isTrue(ecdb.isOpen);
284
+ const ROW_COUNT = 100;
285
+ // insert test rows
286
+ for (let i = 1; i <= ROW_COUNT; i++) {
287
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
288
+ return stmt.stepForInsert();
289
+ });
290
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
291
+ }
292
+ ecdb.saveChanges();
293
+ ConcurrentQuery.resetConfig(ecdb[_nativeDb], { globalQuota: { time: 1 }, ignoreDelay: false });
294
+ let cancelled = 0;
295
+ let successful = 0;
296
+ let rowCount = 0;
297
+ const scheduleQuery = async (delay) => {
298
+ return new Promise(async (resolve, reject) => {
299
+ try {
300
+ const options = new QueryOptionsBuilder();
301
+ options.setDelay(delay);
302
+ options.setRowFormat(QueryRowFormat.UseJsPropertyNames);
303
+ options.setRestartToken("tag");
304
+ for await (const _row of ecdb.createQueryReader("SELECT * FROM ts.Foo", undefined, options.getOptions())) {
305
+ rowCount++;
306
+ }
307
+ successful++;
308
+ resolve();
309
+ }
310
+ catch (err) {
311
+ // we expect query to be cancelled
312
+ if (err.errorNumber === DbResult.BE_SQLITE_INTERRUPT) {
313
+ cancelled++;
314
+ resolve();
315
+ }
316
+ else {
317
+ reject(new Error("rejected"));
318
+ }
319
+ }
320
+ });
321
+ };
322
+ const queries = [];
323
+ queries.push(scheduleQuery(5000));
324
+ queries.push(scheduleQuery(0));
325
+ await Promise.all(queries);
326
+ // We expect at least one query to be cancelled
327
+ assert.isAtLeast(cancelled, 1);
328
+ assert.isAtLeast(successful, 1);
329
+ assert.isAtLeast(rowCount, 1);
330
+ }
331
+ catch (e_6) {
332
+ env_6.error = e_6;
333
+ env_6.hasError = true;
334
+ }
335
+ finally {
336
+ __disposeResources(env_6);
337
+ }
338
+ });
339
+ it("should use cache statement for query()", async () => {
340
+ const env_7 = { stack: [], error: void 0, hasError: false };
341
+ try {
342
+ const ecdb = __addDisposableResource(env_7, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
343
+ <ECEntityClass typeName="Foo" modifier="Sealed">
344
+ <ECProperty propertyName="n" typeName="int"/>
345
+ </ECEntityClass>
346
+ </ECSchema>`), false);
347
+ assert.isTrue(ecdb.isOpen);
348
+ const ROW_COUNT = 27;
349
+ // insert test rows
350
+ for (let i = 1; i <= ROW_COUNT; i++) {
351
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
352
+ return stmt.stepForInsert();
353
+ });
354
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
355
+ }
356
+ ecdb.saveChanges();
357
+ // check if varying page number does not require prepare new statements
358
+ ecdb.clearStatementCache();
359
+ for (const _testPageSize of [1, 2, 4, 5, 6, 7, 10, ROW_COUNT]) {
360
+ let rowNo = 1;
361
+ for await (const row of ecdb.createQueryReader("SELECT n FROM ts.Foo WHERE n != ? and ECInstanceId < ?", new QueryBinder().bindInt(1, 123).bindInt(2, 30), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
362
+ assert.equal(row.n, rowNo);
363
+ rowNo = rowNo + 1;
364
+ }
365
+ assert.equal(rowNo, 28); // expect all rows
366
+ assert.equal(0, ecdb.getCachedStatementCount()); // there must be single cached statement used with different size pages.
367
+ }
368
+ }
369
+ catch (e_7) {
370
+ env_7.error = e_7;
371
+ env_7.hasError = true;
372
+ }
373
+ finally {
374
+ __disposeResources(env_7);
375
+ }
376
+ });
377
+ it("concurrent query binding", async () => {
378
+ const env_8 = { stack: [], error: void 0, hasError: false };
379
+ try {
380
+ const ecdb = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
381
+ <ECEntityClass typeName="Foo" modifier="Sealed">
382
+ <ECProperty propertyName="n" typeName="int"/>
383
+ </ECEntityClass>
384
+ </ECSchema>`), false);
385
+ assert.isTrue(ecdb.isOpen);
386
+ for (let i = 1; i <= 5; i++) {
387
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
388
+ return stmt.stepForInsert();
389
+ });
390
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
391
+ }
392
+ ecdb.saveChanges();
393
+ for await (const row of ecdb.createQueryReader("SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)", new QueryBinder().bindInt("a", 1).bindInt("b", 2).bindInt("c", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
394
+ assert.equal(row.cnt, 3);
395
+ }
396
+ for await (const row of ecdb.createQueryReader("SELECT count(*) as cnt FROM ts.Foo WHERE n in (?, ?, ?)", new QueryBinder().bindInt(1, 1).bindInt(2, 2).bindInt(3, 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
397
+ assert.equal(row.cnt, 3);
398
+ }
399
+ const slm = new SequentialLogMatcher();
400
+ slm.append().error().category("ECDb").message("No parameter index found for parameter name: d.");
401
+ try {
402
+ for await (const row of ecdb.createQueryReader("SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)", new QueryBinder().bindInt("a", 1).bindInt("b", 2).bindInt("c", 3).bindInt("d", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
403
+ assert.equal(row.cnt, 3);
404
+ }
405
+ assert.isFalse(true);
406
+ }
407
+ catch (e) {
408
+ assert.isNotNull(e);
409
+ }
410
+ assert.isTrue(slm.finishAndDispose());
411
+ }
412
+ catch (e_8) {
413
+ env_8.error = e_8;
414
+ env_8.hasError = true;
415
+ }
416
+ finally {
417
+ __disposeResources(env_8);
418
+ }
419
+ });
420
+ it("check HextoId() and IdToHex() ecsql functions", async () => {
421
+ const env_9 = { stack: [], error: void 0, hasError: false };
422
+ try {
423
+ const ecdb = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
424
+ <ECEntityClass typeName="Foo" modifier="Sealed">
425
+ <ECProperty propertyName="n" typeName="int"/>
426
+ </ECEntityClass>
427
+ </ECSchema>`), false);
428
+ assert.isTrue(ecdb.isOpen);
429
+ for (let i = 1; i <= 2; i++) {
430
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt) => {
431
+ return stmt.stepForInsert();
432
+ });
433
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
434
+ }
435
+ ecdb.saveChanges();
436
+ for await (const row of ecdb.createQueryReader("SELECT IdToHex(ECInstanceId) as hexId, ECInstanceId, HexToId('0x1') as idhex FROM ts.Foo WHERE n = ?", new QueryBinder().bindInt(1, 1), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
437
+ assert.equal(row.hexId, row.id);
438
+ assert.equal(row.hexId, row.idhex);
439
+ }
440
+ }
441
+ catch (e_9) {
442
+ env_9.error = e_9;
443
+ env_9.hasError = true;
444
+ }
445
+ finally {
446
+ __disposeResources(env_9);
447
+ }
448
+ });
449
+ it("should bind BeGuid", async () => {
450
+ const env_10 = { stack: [], error: void 0, hasError: false };
451
+ try {
452
+ const ecdb = __addDisposableResource(env_10, ECDbTestHelper.createECDb(outDir, "pagingresultset.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
453
+ <ECEntityClass typeName="Foo" modifier="Sealed">
454
+ <ECProperty propertyName="guid" typeName="binary" extendedTypeName="BeGuid"/>
455
+ </ECEntityClass>
456
+ </ECSchema>`), false);
457
+ assert.isTrue(ecdb.isOpen);
458
+ const maxRows = 10;
459
+ const guids = [];
460
+ for (let i = 0; i < maxRows; i++) {
461
+ const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(guid) values(?)`, async (stmt) => {
462
+ guids.push(Guid.createValue());
463
+ stmt.bindGuid(1, guids[i]);
464
+ return stmt.stepForInsert();
465
+ });
466
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
467
+ }
468
+ ecdb.saveChanges();
469
+ const uint8arrayToGuid = (guidArray) => {
470
+ if (!(guidArray instanceof Uint8Array))
471
+ throw new Error("Expecting a Uint8Array type argument");
472
+ if (guidArray.byteLength !== 16)
473
+ throw new Error("Expecting a Uint8Array of length 16");
474
+ let guidStr = "";
475
+ const part = [0, 4, 6, 8, 10, 16];
476
+ for (let z = 0; z < part.length - 1; z++) {
477
+ guidArray.subarray(part[z], part[z + 1]).forEach((c) => {
478
+ guidStr += (`00${c.toString(16)}`).slice(-2);
479
+ });
480
+ if (z < part.length - 2)
481
+ guidStr += "-";
482
+ }
483
+ return guidStr;
484
+ };
485
+ const guidToUint8Array = (v) => {
486
+ if (v.length !== 36)
487
+ throw new Error("Guid is expected to have 36 characters xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
488
+ const ar = new Uint8Array(16);
489
+ const t = v.split("-").join("");
490
+ let i = 0;
491
+ for (let z = 0; z < 32; z += 2) {
492
+ ar[i++] = parseInt(t.substring(z, z + 2), 16);
493
+ }
494
+ return ar;
495
+ };
496
+ const testGuid = "74da899a-6dde-406c-bf45-f4547d948f00";
497
+ assert.equal(testGuid, uint8arrayToGuid(guidToUint8Array(testGuid)));
498
+ let k = 0;
499
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo ORDER BY ECInstanceId", undefined, undefined, (row) => {
500
+ assert.equal(row.guid, guids[k++]);
501
+ }), maxRows);
502
+ // following will not return any guid BLOB ? = STRING
503
+ for (const guid of guids) {
504
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo WHERE guid=?", new QueryBinder().bindString(1, guid), undefined, (row) => {
505
+ assert.equal(row.guid, guid);
506
+ }), 1);
507
+ assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid='${guid}'`, undefined, undefined, (row) => {
508
+ assert.equal(row.guid, guid);
509
+ }), 0);
510
+ assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid=StrToGuid('${guid}')`, undefined, undefined, (row) => {
511
+ assert.equal(row.guid, guid);
512
+ }), 1);
513
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)", new QueryBinder().bindString(1, guid), undefined, (row) => {
514
+ assert.equal(row.guid, guid);
515
+ }), 1);
516
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo WHERE GuidToStr(guid)=?", new QueryBinder().bindString(1, guid), undefined, (row) => {
517
+ assert.equal(row.guid, guid);
518
+ }), 1);
519
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo WHERE guid=?", new QueryBinder().bindBlob(1, guidToUint8Array(guid)), undefined, (row) => {
520
+ assert.equal(row.guid, guid);
521
+ }), 1);
522
+ assert.equal(await query(ecdb, "SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)", new QueryBinder().bindString(1, guid), undefined, (row) => {
523
+ assert.equal(row.guid, guid);
524
+ }), 1);
525
+ assert.equal(await query(ecdb, "SELECT GuidToStr(guid) as gstr FROM ts.Foo WHERE guid=StrToGuid(?)", new QueryBinder().bindString(1, guid), undefined, (row) => {
526
+ assert.equal(row.gstr, guid);
527
+ }), 1);
528
+ }
529
+ }
530
+ catch (e_10) {
531
+ env_10.error = e_10;
532
+ env_10.hasError = true;
533
+ }
534
+ finally {
535
+ __disposeResources(env_10);
536
+ }
537
+ });
538
+ it("should bind Ids", async () => {
539
+ const env_11 = { stack: [], error: void 0, hasError: false };
540
+ try {
541
+ const ecdb = __addDisposableResource(env_11, ECDbTestHelper.createECDb(outDir, "bindids.ecdb"), false);
542
+ assert.isTrue(ecdb.isOpen);
543
+ const verify = async (ecdbToVerify, actualRes, expectedECInstanceId) => {
544
+ if (!expectedECInstanceId) {
545
+ assert.notEqual(actualRes.status, DbResult.BE_SQLITE_DONE);
546
+ assert.isUndefined(actualRes.id);
547
+ return;
548
+ }
549
+ assert.equal(actualRes.status, DbResult.BE_SQLITE_DONE);
550
+ assert.isDefined(actualRes.id);
551
+ assert.equal(actualRes.id, expectedECInstanceId);
552
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
553
+ ecdbToVerify.withPreparedStatement("SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?", (stmt) => {
554
+ stmt.bindId(1, expectedId);
555
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
556
+ const row = stmt.getRow();
557
+ assert.equal(row.id, expectedECInstanceId);
558
+ assert.equal(row.className, "ECDbFileInfo.ExternalFileInfo");
559
+ assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);
560
+ });
561
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?", new QueryBinder().bindString(1, expectedId), new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).getOptions(), (row) => {
562
+ assert.equal(row.id, expectedECInstanceId);
563
+ assert.equal(row.className, "ECDbFileInfo.ExternalFileInfo");
564
+ assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);
565
+ }), 1);
566
+ };
567
+ let expectedId = Id64.fromLocalAndBriefcaseIds(4444, 0);
568
+ let r = ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)", (stmt) => {
569
+ stmt.bindId(1, expectedId);
570
+ stmt.bindString(2, "4444.txt");
571
+ return stmt.stepForInsert();
572
+ });
573
+ await verify(ecdb, r, expectedId);
574
+ expectedId = Id64.fromLocalAndBriefcaseIds(4445, 0);
575
+ r = ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)", (stmt) => {
576
+ stmt.bindId("id", expectedId);
577
+ stmt.bindString("name", "4445.txt");
578
+ return stmt.stepForInsert();
579
+ });
580
+ await verify(ecdb, r, expectedId);
581
+ expectedId = Id64.fromLocalAndBriefcaseIds(4446, 0);
582
+ r = ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)", (stmt) => {
583
+ stmt.bindValues([expectedId, "4446.txt"]);
584
+ return stmt.stepForInsert();
585
+ });
586
+ await verify(ecdb, r, expectedId);
587
+ expectedId = Id64.fromLocalAndBriefcaseIds(4447, 0);
588
+ r = ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)", (stmt) => {
589
+ stmt.bindValues({ id: expectedId, name: "4447.txt" });
590
+ return stmt.stepForInsert();
591
+ });
592
+ await verify(ecdb, r, expectedId);
593
+ }
594
+ catch (e_11) {
595
+ env_11.error = e_11;
596
+ env_11.hasError = true;
597
+ }
598
+ finally {
599
+ __disposeResources(env_11);
600
+ }
601
+ });
602
+ it("should bind numeric and date strings", async () => {
603
+ const env_12 = { stack: [], error: void 0, hasError: false };
604
+ try {
605
+ const slm = new SequentialLogMatcher();
606
+ slm.append().error().category("ECDb").message("Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.");
607
+ slm.append().error().category("ECDb").message("Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.");
608
+ slm.append().error().category("ECDb").message("Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.");
609
+ slm.append().error().category("ECDb").message("Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.");
610
+ slm.append().error().category("ECDb").message("Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.");
611
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
612
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
613
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
614
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
615
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
616
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
617
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
618
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
619
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
620
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
621
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
622
+ slm.append().error().category("ECDb").message(/String must be a valid ISO 8601 date, time or timestamp/gm);
623
+ slm.append().error().category("ECDb").message(/only BindDateTime or BindText can be called for a column of the DateTime type/gm);
624
+ const ecdb = __addDisposableResource(env_12, ECDbTestHelper.createECDb(outDir, "bindnumericanddatestrings.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
625
+ <ECEntityClass typeName="Foo" modifier="Sealed">
626
+ <ECProperty propertyName="n" typeName="int"/>
627
+ <ECProperty propertyName="dt" typeName="dateTime"/>
628
+ <ECProperty propertyName="fooId" typeName="long" extendedTypeName="Id"/>
629
+ </ECEntityClass>
630
+ </ECSchema>`), false);
631
+ assert.isTrue(ecdb.isOpen);
632
+ const r = ecdb.withCachedWriteStatement("INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)", (stmt) => {
633
+ return stmt.stepForInsert();
634
+ });
635
+ ecdb.saveChanges();
636
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
637
+ const ecsqln = "SELECT 1 FROM ts.Foo WHERE n=?";
638
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
639
+ await ecdb.withPreparedStatement(ecsqln, async (stmt) => {
640
+ const nNum = 20;
641
+ const nStr = "20";
642
+ const nDt = "2019-01-21T12:00:00Z";
643
+ const nHexStr = "0x14";
644
+ stmt.bindInteger(1, nNum);
645
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
646
+ stmt.reset();
647
+ stmt.clearBindings();
648
+ assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindInt(1, nNum), selectSingleRow), 1);
649
+ stmt.bindValue(1, nNum);
650
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
651
+ stmt.reset();
652
+ stmt.clearBindings();
653
+ stmt.getBinder(1).bind(nNum);
654
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
655
+ stmt.reset();
656
+ stmt.clearBindings();
657
+ stmt.bindValues([nNum]);
658
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
659
+ stmt.reset();
660
+ stmt.clearBindings();
661
+ stmt.bindString(1, nStr);
662
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
663
+ stmt.reset();
664
+ stmt.clearBindings();
665
+ assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nStr), selectSingleRow), 1);
666
+ stmt.bindValue(1, nStr);
667
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
668
+ stmt.reset();
669
+ stmt.clearBindings();
670
+ stmt.getBinder(1).bind(nStr);
671
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
672
+ stmt.reset();
673
+ stmt.clearBindings();
674
+ stmt.bindValues([nStr]);
675
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
676
+ stmt.reset();
677
+ stmt.clearBindings();
678
+ stmt.bindString(1, nDt);
679
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Date time string is not parsed. SQLite just converts it to something which does not match");
680
+ stmt.reset();
681
+ stmt.clearBindings();
682
+ assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nDt), selectSingleRow), 0);
683
+ stmt.bindValue(1, nDt);
684
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Date time string is not parsed. SQLite just converts it to something which does not match");
685
+ stmt.reset();
686
+ stmt.clearBindings();
687
+ stmt.getBinder(1).bind(nDt);
688
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Date time string is not parsed. SQLite just converts it to something which does not match");
689
+ stmt.reset();
690
+ stmt.clearBindings();
691
+ stmt.bindValues([nDt]);
692
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Date time string is not parsed. SQLite just converts it to something which does not match");
693
+ stmt.reset();
694
+ stmt.clearBindings();
695
+ stmt.bindString(1, nHexStr);
696
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Hex string is not parsed. SQLite just converts it to something which does not match");
697
+ stmt.reset();
698
+ stmt.clearBindings();
699
+ assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nHexStr), selectSingleRow), 0);
700
+ stmt.bindValue(1, nHexStr);
701
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Hex string is not parsed. SQLite just converts it to something which does not match");
702
+ stmt.reset();
703
+ stmt.clearBindings();
704
+ stmt.getBinder(1).bind(nHexStr);
705
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Hex string is not parsed. SQLite just converts it to something which does not match");
706
+ stmt.reset();
707
+ stmt.clearBindings();
708
+ stmt.bindValues([nHexStr]);
709
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "Hex string is not parsed. SQLite just converts it to something which does not match");
710
+ stmt.reset();
711
+ stmt.clearBindings();
712
+ });
713
+ const ecsqldt = "SELECT 1 FROM ts.Foo WHERE dt=?";
714
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
715
+ await ecdb.withPreparedStatement(ecsqldt, async (stmt) => {
716
+ const dtStr = "2018-10-18T12:00:00Z";
717
+ const num = 2458410;
718
+ const str = "2458410";
719
+ const hexStr = "0x25832a";
720
+ stmt.bindDateTime(1, dtStr);
721
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
722
+ stmt.reset();
723
+ stmt.clearBindings();
724
+ assert.equal(await queryCount(ecdb, ecsqldt, new QueryBinder().bindString(1, dtStr)), 1);
725
+ stmt.bindString(1, dtStr);
726
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
727
+ stmt.reset();
728
+ stmt.clearBindings();
729
+ stmt.bindValue(1, dtStr);
730
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
731
+ stmt.reset();
732
+ stmt.clearBindings();
733
+ stmt.getBinder(1).bind(dtStr);
734
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
735
+ stmt.reset();
736
+ stmt.clearBindings();
737
+ stmt.bindValues([dtStr]);
738
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
739
+ stmt.reset();
740
+ stmt.clearBindings();
741
+ assert.throw(() => stmt.bindInteger(1, num));
742
+ stmt.clearBindings();
743
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);
744
+ assert.throw(() => stmt.bindValue(1, num));
745
+ stmt.clearBindings();
746
+ assert.throw(() => stmt.getBinder(1).bind(num));
747
+ stmt.clearBindings();
748
+ assert.throw(() => stmt.bindValues([num]));
749
+ stmt.clearBindings();
750
+ assert.throw(() => stmt.bindString(1, str));
751
+ stmt.clearBindings();
752
+ assert.throw(() => stmt.bindValue(1, str));
753
+ stmt.clearBindings();
754
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);
755
+ assert.throw(() => stmt.getBinder(1).bind(str));
756
+ stmt.clearBindings();
757
+ assert.throw(() => stmt.bindValues([str]));
758
+ stmt.clearBindings();
759
+ assert.throw(() => stmt.bindString(1, hexStr));
760
+ stmt.clearBindings();
761
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);
762
+ assert.throw(() => stmt.bindValue(1, hexStr));
763
+ stmt.clearBindings();
764
+ assert.throw(() => stmt.getBinder(1).bind(hexStr));
765
+ stmt.clearBindings();
766
+ assert.throw(() => stmt.bindValues([hexStr]));
767
+ stmt.clearBindings();
768
+ });
769
+ const ecsqlfooId = "SELECT 1 FROM ts.Foo WHERE fooId=?";
770
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
771
+ await ecdb.withPreparedStatement(ecsqlfooId, async (stmt) => {
772
+ const num = 20;
773
+ const str = "20";
774
+ const dt = "2019-01-21T12:00:00Z";
775
+ const hexStr = "0x14";
776
+ stmt.bindId(1, hexStr);
777
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
778
+ stmt.reset();
779
+ stmt.clearBindings();
780
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);
781
+ stmt.bindValues([hexStr]);
782
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
783
+ stmt.reset();
784
+ stmt.clearBindings();
785
+ stmt.bindString(1, hexStr);
786
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
787
+ stmt.reset();
788
+ stmt.clearBindings();
789
+ stmt.bindValue(1, hexStr);
790
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
791
+ stmt.reset();
792
+ stmt.clearBindings();
793
+ stmt.getBinder(1).bind(hexStr);
794
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
795
+ stmt.reset();
796
+ stmt.clearBindings();
797
+ stmt.bindValues([hexStr]);
798
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
799
+ stmt.reset();
800
+ stmt.clearBindings();
801
+ stmt.bindString(1, str);
802
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
803
+ stmt.reset();
804
+ stmt.clearBindings();
805
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);
806
+ stmt.bindValue(1, str);
807
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
808
+ stmt.reset();
809
+ stmt.clearBindings();
810
+ stmt.getBinder(1).bind(str);
811
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
812
+ stmt.reset();
813
+ stmt.clearBindings();
814
+ stmt.bindValues([str]);
815
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
816
+ stmt.reset();
817
+ stmt.clearBindings();
818
+ stmt.bindInteger(1, num);
819
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
820
+ stmt.reset();
821
+ stmt.clearBindings();
822
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);
823
+ stmt.bindValue(1, num);
824
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
825
+ stmt.reset();
826
+ stmt.clearBindings();
827
+ stmt.getBinder(1).bind(num);
828
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
829
+ stmt.reset();
830
+ stmt.clearBindings();
831
+ stmt.bindValues([num]);
832
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
833
+ stmt.reset();
834
+ stmt.clearBindings();
835
+ stmt.bindString(1, dt);
836
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here");
837
+ stmt.reset();
838
+ stmt.clearBindings();
839
+ assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([dt])), 0);
840
+ stmt.bindValue(1, dt);
841
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here");
842
+ stmt.reset();
843
+ stmt.clearBindings();
844
+ stmt.getBinder(1).bind(dt);
845
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here");
846
+ stmt.reset();
847
+ stmt.clearBindings();
848
+ stmt.bindValues([dt]);
849
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, "DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here");
850
+ stmt.reset();
851
+ stmt.clearBindings();
852
+ });
853
+ assert.isTrue(slm.finishAndDispose());
854
+ }
855
+ catch (e_12) {
856
+ env_12.error = e_12;
857
+ env_12.hasError = true;
858
+ }
859
+ finally {
860
+ __disposeResources(env_12);
861
+ }
862
+ });
863
+ it("should bind numbers", async () => {
864
+ const env_13 = { stack: [], error: void 0, hasError: false };
865
+ try {
866
+ const ecdb = __addDisposableResource(env_13, ECDbTestHelper.createECDb(outDir, "bindnumbers.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
867
+ <ECEntityClass typeName="Foo" modifier="Sealed">
868
+ <ECProperty propertyName="D" typeName="double"/>
869
+ <ECProperty propertyName="I" typeName="int"/>
870
+ <ECProperty propertyName="L" typeName="long"/>
871
+ <ECProperty propertyName="S" typeName="string"/>
872
+ <ECProperty propertyName="Description" typeName="string"/>
873
+ </ECEntityClass>
874
+ </ECSchema>`), false);
875
+ assert.isTrue(ecdb.isOpen);
876
+ const doubleVal = 3.5;
877
+ let id = await ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindDouble')", async (stmt) => {
878
+ stmt.bindDouble(1, doubleVal);
879
+ stmt.bindDouble(2, doubleVal);
880
+ stmt.bindDouble(3, doubleVal);
881
+ stmt.bindDouble(4, doubleVal);
882
+ const r = stmt.stepForInsert();
883
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
884
+ return r.id;
885
+ });
886
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
887
+ await ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", async (stmt) => {
888
+ stmt.bindId(1, id);
889
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
890
+ const row = stmt.getRow();
891
+ assert.equal(row.d, doubleVal);
892
+ assert.equal(row.i, 3);
893
+ assert.equal(row.l, 3);
894
+ assert.equal(row.s, "3.5");
895
+ });
896
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), { limit: { count: 1 } }, (row) => {
897
+ assert.equal(row.d, doubleVal);
898
+ assert.equal(row.i, 3);
899
+ assert.equal(row.l, 3);
900
+ assert.equal(row.s, "3.5");
901
+ }), 1);
902
+ const smallIntVal = 3;
903
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, small int')", (stmt) => {
904
+ stmt.bindInteger(1, smallIntVal);
905
+ stmt.bindInteger(2, smallIntVal);
906
+ stmt.bindInteger(3, smallIntVal);
907
+ stmt.bindInteger(4, smallIntVal);
908
+ const r = stmt.stepForInsert();
909
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
910
+ return r.id;
911
+ });
912
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
913
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
914
+ stmt.bindId(1, id);
915
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
916
+ const row = stmt.getRow();
917
+ assert.equal(row.d, smallIntVal);
918
+ assert.equal(row.i, smallIntVal);
919
+ assert.equal(row.l, smallIntVal);
920
+ assert.equal(row.s, "3");
921
+ });
922
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
923
+ assert.equal(row.d, smallIntVal);
924
+ assert.equal(row.i, smallIntVal);
925
+ assert.equal(row.l, smallIntVal);
926
+ assert.equal(row.s, "3");
927
+ }), 1);
928
+ const largeUnsafeNumber = 12312312312312323654; // too large for int64, but fits into uint64
929
+ assert.isFalse(Number.isSafeInteger(largeUnsafeNumber));
930
+ const largeUnsafeNumberStr = "12312312312312323654";
931
+ const largeUnsafeNumberHexStr = "0xaade1ed08b0b5e46";
932
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as string')", (stmt) => {
933
+ stmt.bindInteger(1, largeUnsafeNumberStr);
934
+ stmt.bindInteger(2, largeUnsafeNumberStr);
935
+ stmt.bindInteger(3, largeUnsafeNumberStr);
936
+ stmt.bindInteger(4, largeUnsafeNumberStr);
937
+ const r = stmt.stepForInsert();
938
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
939
+ return r.id;
940
+ });
941
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
942
+ ecdb.withPreparedStatement("SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
943
+ stmt.bindId(1, id);
944
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
945
+ const row = stmt.getRow();
946
+ assert.equal(row.si, largeUnsafeNumberStr);
947
+ assert.equal(row.hi, largeUnsafeNumberHexStr);
948
+ assert.equal(row.sl, largeUnsafeNumberStr);
949
+ assert.equal(row.hl, largeUnsafeNumberHexStr);
950
+ });
951
+ // assert.equal(await query(ecdb, "SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?", [id], 1, (row: any) => {
952
+ // assert.equal(row.si, largeUnsafeNumberStr);
953
+ // assert.equal(row.hi, largeUnsafeNumberHexStr);
954
+ // assert.equal(row.sl, largeUnsafeNumberStr);
955
+ // assert.equal(row.hl, largeUnsafeNumberHexStr);
956
+ // }), 1);
957
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as hexstring')", (stmt) => {
958
+ stmt.bindInteger(1, largeUnsafeNumberHexStr);
959
+ stmt.bindInteger(2, largeUnsafeNumberHexStr);
960
+ stmt.bindInteger(3, largeUnsafeNumberHexStr);
961
+ stmt.bindInteger(4, largeUnsafeNumberHexStr);
962
+ const r = stmt.stepForInsert();
963
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
964
+ return r.id;
965
+ });
966
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
967
+ ecdb.withPreparedStatement("SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
968
+ stmt.bindId(1, id);
969
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
970
+ const row = stmt.getRow();
971
+ assert.equal(row.si, largeUnsafeNumberStr);
972
+ assert.equal(row.hi, largeUnsafeNumberHexStr);
973
+ assert.equal(row.sl, largeUnsafeNumberStr);
974
+ assert.equal(row.hl, largeUnsafeNumberHexStr);
975
+ });
976
+ // assert.equal(await query(ecdb, "SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?", [id], 1, (row: any) => {
977
+ // assert.equal(row.si, largeUnsafeNumberStr);
978
+ // assert.equal(row.hi, largeUnsafeNumberHexStr);
979
+ // assert.equal(row.sl, largeUnsafeNumberStr);
980
+ // assert.equal(row.hl, largeUnsafeNumberHexStr);
981
+ // }), 1);
982
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as string')", (stmt) => {
983
+ stmt.bindString(1, largeUnsafeNumberStr);
984
+ stmt.bindString(2, largeUnsafeNumberStr);
985
+ stmt.bindString(3, largeUnsafeNumberStr);
986
+ stmt.bindString(4, largeUnsafeNumberStr);
987
+ const r = stmt.stepForInsert();
988
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
989
+ return r.id;
990
+ });
991
+ // uint64 cannot be bound as string in SQLite. They get converted to reals
992
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
993
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
994
+ stmt.bindId(1, id);
995
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
996
+ const row = stmt.getRow();
997
+ assert.isNumber(row.d);
998
+ assert.isNumber(row.i);
999
+ assert.isNumber(row.l);
1000
+ assert.equal(row.s, largeUnsafeNumberStr);
1001
+ });
1002
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1003
+ assert.isNumber(row.d);
1004
+ assert.isNumber(row.i);
1005
+ assert.isNumber(row.l);
1006
+ assert.equal(row.s, largeUnsafeNumberStr);
1007
+ }), 1);
1008
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as hexstring')", (stmt) => {
1009
+ stmt.bindString(1, largeUnsafeNumberHexStr);
1010
+ stmt.bindString(2, largeUnsafeNumberHexStr);
1011
+ stmt.bindString(3, largeUnsafeNumberHexStr);
1012
+ stmt.bindString(4, largeUnsafeNumberHexStr);
1013
+ const r = stmt.stepForInsert();
1014
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1015
+ return r.id;
1016
+ });
1017
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1018
+ ecdb.withPreparedStatement("SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1019
+ stmt.bindId(1, id);
1020
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1021
+ const row = stmt.getRow();
1022
+ assert.equal(row.d, largeUnsafeNumberHexStr);
1023
+ assert.equal(row.i, largeUnsafeNumberHexStr);
1024
+ assert.equal(row.l, largeUnsafeNumberHexStr);
1025
+ assert.equal(row.s, largeUnsafeNumberHexStr);
1026
+ });
1027
+ assert.equal(await query(ecdb, "SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1028
+ assert.equal(row.d, largeUnsafeNumberHexStr);
1029
+ assert.equal(row.i, largeUnsafeNumberHexStr);
1030
+ assert.equal(row.l, largeUnsafeNumberHexStr);
1031
+ assert.equal(row.s, largeUnsafeNumberHexStr);
1032
+ }), 1);
1033
+ const largeNegUnsafeNumber = -123123123123123236;
1034
+ assert.isFalse(Number.isSafeInteger(largeNegUnsafeNumber));
1035
+ const largeNegUnsafeNumberStr = "-123123123123123236";
1036
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative unsafe number as string')", (stmt) => {
1037
+ stmt.bindInteger(1, largeNegUnsafeNumberStr);
1038
+ stmt.bindInteger(2, largeNegUnsafeNumberStr);
1039
+ stmt.bindInteger(3, largeNegUnsafeNumberStr);
1040
+ stmt.bindInteger(4, largeNegUnsafeNumberStr);
1041
+ const r = stmt.stepForInsert();
1042
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1043
+ return r.id;
1044
+ });
1045
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1046
+ ecdb.withPreparedStatement("SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1047
+ stmt.bindId(1, id);
1048
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1049
+ const row = stmt.getRow();
1050
+ assert.equal(row.i, largeNegUnsafeNumberStr);
1051
+ assert.equal(row.l, largeNegUnsafeNumberStr);
1052
+ assert.equal(row.s, largeNegUnsafeNumberStr);
1053
+ });
1054
+ assert.equal(await query(ecdb, "SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1055
+ assert.equal(row.i, largeNegUnsafeNumberStr);
1056
+ assert.equal(row.l, largeNegUnsafeNumberStr);
1057
+ assert.equal(row.s, largeNegUnsafeNumberStr);
1058
+ }), 1);
1059
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative unsafe number as string')", (stmt) => {
1060
+ stmt.bindString(1, largeNegUnsafeNumberStr);
1061
+ stmt.bindString(2, largeNegUnsafeNumberStr);
1062
+ stmt.bindString(3, largeNegUnsafeNumberStr);
1063
+ stmt.bindString(4, largeNegUnsafeNumberStr);
1064
+ const r = stmt.stepForInsert();
1065
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1066
+ return r.id;
1067
+ });
1068
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1069
+ ecdb.withPreparedStatement("SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1070
+ stmt.bindId(1, id);
1071
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1072
+ const row = stmt.getRow();
1073
+ assert.equal(row.i, largeNegUnsafeNumberStr);
1074
+ assert.equal(row.l, largeNegUnsafeNumberStr);
1075
+ assert.equal(row.s, largeNegUnsafeNumberStr);
1076
+ });
1077
+ assert.equal(await query(ecdb, "SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1078
+ assert.equal(row.i, largeNegUnsafeNumberStr);
1079
+ assert.equal(row.l, largeNegUnsafeNumberStr);
1080
+ assert.equal(row.s, largeNegUnsafeNumberStr);
1081
+ }), 1);
1082
+ const largeSafeNumber = 1231231231231232;
1083
+ assert.isTrue(Number.isSafeInteger(largeSafeNumber));
1084
+ const largeSafeNumberStr = largeSafeNumber.toString();
1085
+ const largeSafeNumberHexStr = "0x45fcc5c2c8500";
1086
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number')", (stmt) => {
1087
+ stmt.bindInteger(1, largeSafeNumber);
1088
+ stmt.bindInteger(2, largeSafeNumber);
1089
+ stmt.bindInteger(3, largeSafeNumber);
1090
+ stmt.bindInteger(4, largeSafeNumber);
1091
+ const r = stmt.stepForInsert();
1092
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1093
+ return r.id;
1094
+ });
1095
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1096
+ ecdb.withPreparedStatement("SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1097
+ stmt.bindId(1, id);
1098
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1099
+ const row = stmt.getRow();
1100
+ assert.equal(row.d, largeSafeNumber);
1101
+ assert.equal(row.i, largeSafeNumber);
1102
+ assert.equal(row.si, largeSafeNumberStr);
1103
+ assert.equal(row.hi, largeSafeNumberHexStr);
1104
+ assert.equal(row.l, largeSafeNumber);
1105
+ assert.equal(row.sl, largeSafeNumberStr);
1106
+ assert.equal(row.hl, largeSafeNumberHexStr);
1107
+ assert.equal(row.s, largeSafeNumberStr);
1108
+ });
1109
+ // await query(ecdb, "SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?", [id], 1, (row: any) => {
1110
+ // assert.equal(row.d, largeSafeNumber);
1111
+ // assert.equal(row.i, largeSafeNumber);
1112
+ // assert.equal(row.si, largeSafeNumberStr);
1113
+ // assert.equal(row.hi, largeSafeNumberHexStr);
1114
+ // assert.equal(row.l, largeSafeNumber);
1115
+ // assert.equal(row.sl, largeSafeNumberStr);
1116
+ // assert.equal(row.hl, largeSafeNumberHexStr);
1117
+ // assert.equal(row.s, largeSafeNumberStr);
1118
+ // });
1119
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as string')", (stmt) => {
1120
+ stmt.bindInteger(1, largeSafeNumberStr);
1121
+ stmt.bindInteger(2, largeSafeNumberStr);
1122
+ stmt.bindInteger(3, largeSafeNumberStr);
1123
+ stmt.bindInteger(4, largeSafeNumberStr);
1124
+ const r = stmt.stepForInsert();
1125
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1126
+ return r.id;
1127
+ });
1128
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1129
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1130
+ stmt.bindId(1, id);
1131
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1132
+ const row = stmt.getRow();
1133
+ assert.equal(row.d, largeSafeNumber);
1134
+ assert.equal(row.i, largeSafeNumber);
1135
+ assert.equal(row.l, largeSafeNumber);
1136
+ assert.equal(row.s, largeSafeNumberStr);
1137
+ });
1138
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1139
+ assert.equal(row.d, largeSafeNumber);
1140
+ assert.equal(row.i, largeSafeNumber);
1141
+ assert.equal(row.l, largeSafeNumber);
1142
+ assert.equal(row.s, largeSafeNumberStr);
1143
+ }), 1);
1144
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as hexstring')", (stmt) => {
1145
+ stmt.bindInteger(1, largeSafeNumberHexStr);
1146
+ stmt.bindInteger(2, largeSafeNumberHexStr);
1147
+ stmt.bindInteger(3, largeSafeNumberHexStr);
1148
+ stmt.bindInteger(4, largeSafeNumberHexStr);
1149
+ const r = stmt.stepForInsert();
1150
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1151
+ return r.id;
1152
+ });
1153
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1154
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1155
+ stmt.bindId(1, id);
1156
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1157
+ const row = stmt.getRow();
1158
+ assert.equal(row.d, largeSafeNumber);
1159
+ assert.equal(row.i, largeSafeNumber);
1160
+ assert.equal(row.l, largeSafeNumber);
1161
+ assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting
1162
+ });
1163
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1164
+ assert.equal(row.d, largeSafeNumber);
1165
+ assert.equal(row.i, largeSafeNumber);
1166
+ assert.equal(row.l, largeSafeNumber);
1167
+ assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting
1168
+ }), 1);
1169
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as string')", (stmt) => {
1170
+ stmt.bindString(1, largeSafeNumberStr);
1171
+ stmt.bindString(2, largeSafeNumberStr);
1172
+ stmt.bindString(3, largeSafeNumberStr);
1173
+ stmt.bindString(4, largeSafeNumberStr);
1174
+ const r = stmt.stepForInsert();
1175
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1176
+ return r.id;
1177
+ });
1178
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1179
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1180
+ stmt.bindId(1, id);
1181
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1182
+ const row = stmt.getRow();
1183
+ assert.equal(row.d, largeSafeNumber);
1184
+ assert.equal(row.i, largeSafeNumber);
1185
+ assert.equal(row.l, largeSafeNumber);
1186
+ assert.equal(row.s, largeSafeNumberStr);
1187
+ });
1188
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1189
+ assert.equal(row.d, largeSafeNumber);
1190
+ assert.equal(row.i, largeSafeNumber);
1191
+ assert.equal(row.l, largeSafeNumber);
1192
+ assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting
1193
+ }), 1);
1194
+ // SQLite does not parse hex strs bound as strings.
1195
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as hexstring')", (stmt) => {
1196
+ stmt.bindString(1, largeSafeNumberHexStr);
1197
+ stmt.bindString(2, largeSafeNumberHexStr);
1198
+ stmt.bindString(3, largeSafeNumberHexStr);
1199
+ stmt.bindString(4, largeSafeNumberHexStr);
1200
+ const r = stmt.stepForInsert();
1201
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1202
+ return r.id;
1203
+ });
1204
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1205
+ ecdb.withPreparedStatement("SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1206
+ stmt.bindId(1, id);
1207
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1208
+ const row = stmt.getRow();
1209
+ assert.equal(row.d, largeSafeNumberHexStr);
1210
+ assert.equal(row.i, largeSafeNumberHexStr);
1211
+ assert.equal(row.l, largeSafeNumberHexStr);
1212
+ assert.equal(row.s, largeSafeNumberHexStr);
1213
+ });
1214
+ assert.equal(await query(ecdb, "SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1215
+ assert.equal(row.d, largeSafeNumberHexStr);
1216
+ assert.equal(row.i, largeSafeNumberHexStr);
1217
+ assert.equal(row.l, largeSafeNumberHexStr);
1218
+ assert.equal(row.s, largeSafeNumberHexStr);
1219
+ }), 1);
1220
+ const largeNegSafeNumber = -1231231231231232;
1221
+ assert.isTrue(Number.isSafeInteger(largeNegSafeNumber));
1222
+ const largeNegSafeNumberStr = largeNegSafeNumber.toString();
1223
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number')", (stmt) => {
1224
+ stmt.bindInteger(1, largeNegSafeNumber);
1225
+ stmt.bindInteger(2, largeNegSafeNumber);
1226
+ stmt.bindInteger(3, largeNegSafeNumber);
1227
+ stmt.bindInteger(4, largeNegSafeNumber);
1228
+ const r = stmt.stepForInsert();
1229
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1230
+ return r.id;
1231
+ });
1232
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1233
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1234
+ stmt.bindId(1, id);
1235
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1236
+ const row = stmt.getRow();
1237
+ assert.equal(row.d, largeNegSafeNumber);
1238
+ assert.equal(row.i, largeNegSafeNumber);
1239
+ assert.equal(row.l, largeNegSafeNumber);
1240
+ assert.equal(row.s, largeNegSafeNumberStr);
1241
+ });
1242
+ assert.equal(await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1243
+ assert.equal(row.d, largeNegSafeNumber);
1244
+ assert.equal(row.i, largeNegSafeNumber);
1245
+ assert.equal(row.l, largeNegSafeNumber);
1246
+ assert.equal(row.s, largeNegSafeNumberStr);
1247
+ }), 1);
1248
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number as string')", (stmt) => {
1249
+ stmt.bindInteger(1, largeNegSafeNumberStr);
1250
+ stmt.bindInteger(2, largeNegSafeNumberStr);
1251
+ stmt.bindInteger(3, largeNegSafeNumberStr);
1252
+ stmt.bindInteger(4, largeNegSafeNumberStr);
1253
+ const r = stmt.stepForInsert();
1254
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1255
+ return r.id;
1256
+ });
1257
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1258
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1259
+ stmt.bindId(1, id);
1260
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1261
+ const row = stmt.getRow();
1262
+ assert.equal(row.d, largeNegSafeNumber);
1263
+ assert.equal(row.i, largeNegSafeNumber);
1264
+ assert.equal(row.l, largeNegSafeNumber);
1265
+ assert.equal(row.s, largeNegSafeNumberStr);
1266
+ });
1267
+ await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1268
+ assert.equal(row.d, largeNegSafeNumber);
1269
+ assert.equal(row.i, largeNegSafeNumber);
1270
+ assert.equal(row.l, largeNegSafeNumber);
1271
+ assert.equal(row.s, largeNegSafeNumberStr);
1272
+ });
1273
+ id = ecdb.withCachedWriteStatement("INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative safe number as string')", (stmt) => {
1274
+ stmt.bindString(1, largeNegSafeNumberStr);
1275
+ stmt.bindString(2, largeNegSafeNumberStr);
1276
+ stmt.bindString(3, largeNegSafeNumberStr);
1277
+ stmt.bindString(4, largeNegSafeNumberStr);
1278
+ const r = stmt.stepForInsert();
1279
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1280
+ return r.id;
1281
+ });
1282
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1283
+ ecdb.withPreparedStatement("SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", (stmt) => {
1284
+ stmt.bindId(1, id);
1285
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1286
+ const row = stmt.getRow();
1287
+ assert.equal(row.d, largeNegSafeNumber);
1288
+ assert.equal(row.i, largeNegSafeNumber);
1289
+ assert.equal(row.l, largeNegSafeNumber);
1290
+ assert.equal(row.s, largeNegSafeNumberStr);
1291
+ });
1292
+ await query(ecdb, "SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), selectSingleRow, (row) => {
1293
+ assert.equal(row.d, largeNegSafeNumber);
1294
+ assert.equal(row.i, largeNegSafeNumber);
1295
+ assert.equal(row.l, largeNegSafeNumber);
1296
+ assert.equal(row.s, largeNegSafeNumberStr);
1297
+ });
1298
+ }
1299
+ catch (e_13) {
1300
+ env_13.error = e_13;
1301
+ env_13.hasError = true;
1302
+ }
1303
+ finally {
1304
+ __disposeResources(env_13);
1305
+ }
1306
+ });
1307
+ it("should bind primitives", async () => {
1308
+ const env_14 = { stack: [], error: void 0, hasError: false };
1309
+ try {
1310
+ const ecdb = __addDisposableResource(env_14, ECDbTestHelper.createECDb(outDir, "bindprimitives.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
1311
+ <ECStructClass typeName="MyStruct" modifier="Sealed">
1312
+ <ECProperty propertyName="Bl" typeName="binary"/>
1313
+ <ECProperty propertyName="Bo" typeName="boolean"/>
1314
+ <ECProperty propertyName="D" typeName="double"/>
1315
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
1316
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
1317
+ <ECProperty propertyName="I" typeName="int"/>
1318
+ <ECProperty propertyName="L" typeName="long"/>
1319
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
1320
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
1321
+ <ECProperty propertyName="S" typeName="string"/>
1322
+ </ECStructClass>
1323
+ <ECEntityClass typeName="Foo" modifier="Sealed">
1324
+ <ECProperty propertyName="Bl" typeName="binary"/>
1325
+ <ECProperty propertyName="Bo" typeName="boolean"/>
1326
+ <ECProperty propertyName="D" typeName="double"/>
1327
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
1328
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
1329
+ <ECProperty propertyName="I" typeName="int"/>
1330
+ <ECProperty propertyName="L" typeName="long"/>
1331
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
1332
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
1333
+ <ECProperty propertyName="S" typeName="string"/>
1334
+ <ECStructProperty propertyName="Struct" typeName="MyStruct"/>
1335
+ </ECEntityClass>
1336
+ </ECSchema>`), false);
1337
+ assert.isTrue(ecdb.isOpen);
1338
+ const boolVal = true;
1339
+ const doubleVal = 3.5;
1340
+ const dtVal = "2018-01-23T12:24:00.000";
1341
+ const intVal = 3;
1342
+ const p2dVal = new Point2d(1, 2);
1343
+ const p3dVal = new Point3d(1, 2, 3);
1344
+ const strVal = "Hello world";
1345
+ const verify = async (expectedId) => {
1346
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1347
+ await ecdb.withPreparedStatement("SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?", async (stmt) => {
1348
+ stmt.bindId(1, expectedId);
1349
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1350
+ const row = stmt.getRow();
1351
+ assert.deepEqual(row.bl, blobVal);
1352
+ const f64 = new Float64Array(row.bl.buffer);
1353
+ const r2 = new Range3d(...f64);
1354
+ assert.deepEqual(r2, testRange);
1355
+ assert.equal(row.bo, boolVal);
1356
+ assert.equal(row.d, doubleVal);
1357
+ assert.equal(row.dt, dtVal);
1358
+ assert.equal(row.i, intVal);
1359
+ assert.equal(row.p2d.x, p2dVal.x);
1360
+ assert.equal(row.p2d.y, p2dVal.y);
1361
+ assert.equal(row.p3d.x, p3dVal.x);
1362
+ assert.equal(row.p3d.y, p3dVal.y);
1363
+ assert.equal(row.p3d.z, p3dVal.z);
1364
+ assert.equal(row.s, strVal);
1365
+ assert.deepEqual(row.s_bl, blobVal);
1366
+ assert.equal(row.s_bo, boolVal);
1367
+ assert.equal(row.s_d, doubleVal);
1368
+ assert.equal(row.s_dt, dtVal);
1369
+ assert.equal(row.s_i, intVal);
1370
+ assert.equal(row.s_p2d.x, p2dVal.x);
1371
+ assert.equal(row.s_p2d.y, p2dVal.y);
1372
+ assert.equal(row.s_p3d.x, p3dVal.x);
1373
+ assert.equal(row.s_p3d.y, p3dVal.y);
1374
+ assert.equal(row.s_p3d.z, p3dVal.z);
1375
+ assert.equal(row.s_s, strVal);
1376
+ assert.equal(await query(ecdb, "SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([expectedId]), selectSingleRow, (row1) => {
1377
+ assert.deepEqual(row1.bl, blobVal);
1378
+ const f64a = new Float64Array(row1.bl.buffer);
1379
+ const r2a = new Range3d(...f64a);
1380
+ assert.deepEqual(r2a, testRange);
1381
+ assert.equal(row1.bo, boolVal);
1382
+ assert.equal(row1.d, doubleVal);
1383
+ assert.equal(row1.dt, dtVal);
1384
+ assert.equal(row1.i, intVal);
1385
+ assert.equal(row1.p2d.x, p2dVal.x);
1386
+ assert.equal(row1.p2d.y, p2dVal.y);
1387
+ assert.equal(row1.p3d.x, p3dVal.x);
1388
+ assert.equal(row1.p3d.y, p3dVal.y);
1389
+ assert.equal(row1.p3d.z, p3dVal.z);
1390
+ assert.equal(row1.s, strVal);
1391
+ assert.deepEqual(row1.s_bl, blobVal);
1392
+ assert.equal(row1.s_bo, boolVal);
1393
+ assert.equal(row1.s_d, doubleVal);
1394
+ assert.equal(row1.s_dt, dtVal);
1395
+ assert.equal(row1.s_i, intVal);
1396
+ assert.equal(row1.s_p2d.x, p2dVal.x);
1397
+ assert.equal(row1.s_p2d.y, p2dVal.y);
1398
+ assert.equal(row1.s_p3d.x, p3dVal.x);
1399
+ assert.equal(row1.s_p3d.y, p3dVal.y);
1400
+ assert.equal(row1.s_p3d.z, p3dVal.z);
1401
+ assert.equal(row1.s_s, strVal);
1402
+ }), 1);
1403
+ });
1404
+ };
1405
+ const ids = new Array();
1406
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1407
+ ecdb.withPreparedStatement("INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (stmt) => {
1408
+ stmt.bindBlob(1, blobVal);
1409
+ stmt.bindBoolean(2, boolVal);
1410
+ stmt.bindDouble(3, doubleVal);
1411
+ stmt.bindDateTime(4, dtVal);
1412
+ stmt.bindInteger(5, intVal);
1413
+ stmt.bindPoint2d(6, p2dVal);
1414
+ stmt.bindPoint3d(7, p3dVal);
1415
+ stmt.bindString(8, strVal);
1416
+ stmt.bindBlob(9, blobVal);
1417
+ stmt.bindBoolean(10, boolVal);
1418
+ stmt.bindDouble(11, doubleVal);
1419
+ stmt.bindDateTime(12, dtVal);
1420
+ stmt.bindInteger(13, intVal);
1421
+ stmt.bindPoint2d(14, p2dVal);
1422
+ stmt.bindPoint3d(15, p3dVal);
1423
+ stmt.bindString(16, strVal);
1424
+ let res = stmt.stepForInsert();
1425
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1426
+ ids.push(res.id);
1427
+ stmt.reset();
1428
+ stmt.clearBindings();
1429
+ stmt.bindValues([blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal, blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal]);
1430
+ res = stmt.stepForInsert();
1431
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1432
+ ids.push(res.id);
1433
+ });
1434
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1435
+ ecdb.withPreparedStatement("INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(:bl,:bo,:d,:dt,:i,:p2d,:p3d,:s,:s_bl,:s_bo,:s_d,:s_dt,:s_i,:s_p2d,:s_p3d,:s_s)", (stmt) => {
1436
+ stmt.bindBlob("bl", blobVal);
1437
+ stmt.bindBoolean("bo", boolVal);
1438
+ stmt.bindDouble("d", doubleVal);
1439
+ stmt.bindDateTime("dt", dtVal);
1440
+ stmt.bindInteger("i", intVal);
1441
+ stmt.bindPoint2d("p2d", p2dVal);
1442
+ stmt.bindPoint3d("p3d", p3dVal);
1443
+ stmt.bindString("s", strVal);
1444
+ stmt.bindBlob("s_bl", blobVal);
1445
+ stmt.bindBoolean("s_bo", boolVal);
1446
+ stmt.bindDouble("s_d", doubleVal);
1447
+ stmt.bindDateTime("s_dt", dtVal);
1448
+ stmt.bindInteger("s_i", intVal);
1449
+ stmt.bindPoint2d("s_p2d", p2dVal);
1450
+ stmt.bindPoint3d("s_p3d", p3dVal);
1451
+ stmt.bindString("s_s", strVal);
1452
+ let res = stmt.stepForInsert();
1453
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1454
+ ids.push(res.id);
1455
+ stmt.reset();
1456
+ stmt.clearBindings();
1457
+ stmt.bindValues({
1458
+ bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal,
1459
+ i: intVal, p2d: p2dVal, p3d: p3dVal, s: strVal,
1460
+ s_bl: blobVal, s_bo: boolVal, s_d: doubleVal, s_dt: dtVal,
1461
+ s_i: intVal, s_p2d: p2dVal, s_p3d: p3dVal, s_s: strVal,
1462
+ });
1463
+ res = stmt.stepForInsert();
1464
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1465
+ ids.push(res.id);
1466
+ });
1467
+ for (const id of ids) {
1468
+ await verify(id);
1469
+ }
1470
+ }
1471
+ catch (e_14) {
1472
+ env_14.error = e_14;
1473
+ env_14.hasError = true;
1474
+ }
1475
+ finally {
1476
+ __disposeResources(env_14);
1477
+ }
1478
+ });
1479
+ it("should bind structs", async () => {
1480
+ const env_15 = { stack: [], error: void 0, hasError: false };
1481
+ try {
1482
+ const ecdb = __addDisposableResource(env_15, ECDbTestHelper.createECDb(outDir, "bindstructs.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
1483
+ <ECStructClass typeName="MyStruct" modifier="Sealed">
1484
+ <ECProperty propertyName="Bl" typeName="binary"/>
1485
+ <ECProperty propertyName="Bo" typeName="boolean"/>
1486
+ <ECProperty propertyName="D" typeName="double"/>
1487
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
1488
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
1489
+ <ECProperty propertyName="I" typeName="int"/>
1490
+ <ECProperty propertyName="L" typeName="long"/>
1491
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
1492
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
1493
+ <ECProperty propertyName="S" typeName="string"/>
1494
+ </ECStructClass>
1495
+ <ECEntityClass typeName="Foo" modifier="Sealed">
1496
+ <ECStructProperty propertyName="Struct" typeName="MyStruct"/>
1497
+ </ECEntityClass>
1498
+ </ECSchema>`), false);
1499
+ assert.isTrue(ecdb.isOpen);
1500
+ const structVal = {
1501
+ bl: blobVal, bo: true, d: 3.5,
1502
+ dt: "2018-01-23T12:24:00.000",
1503
+ i: 3, p2d: new Point2d(1, 2), p3d: new Point3d(1, 2, 3), s: "Hello World",
1504
+ };
1505
+ const verify = async (expectedId) => {
1506
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1507
+ await ecdb.withPreparedStatement("SELECT Struct FROM test.Foo WHERE ECInstanceId=?", async (stmt) => {
1508
+ stmt.bindId(1, expectedId);
1509
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1510
+ const row = stmt.getRow();
1511
+ assert.isTrue(blobEqual(row.struct.bl, structVal.bl));
1512
+ assert.equal(row.struct.bo, structVal.bo);
1513
+ assert.equal(row.struct.d, structVal.d);
1514
+ assert.equal(row.struct.dt, structVal.dt);
1515
+ assert.equal(row.struct.i, structVal.i);
1516
+ assert.equal(row.struct.p2d.x, structVal.p2d.x);
1517
+ assert.equal(row.struct.p2d.y, structVal.p2d.y);
1518
+ assert.equal(row.struct.p3d.x, structVal.p3d.x);
1519
+ assert.equal(row.struct.p3d.y, structVal.p3d.y);
1520
+ assert.equal(row.struct.p3d.z, structVal.p3d.z);
1521
+ assert.equal(row.struct.s, structVal.s);
1522
+ assert.equal(await query(ecdb, "SELECT Struct FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([expectedId]), selectSingleRow, (row1) => {
1523
+ assert.isTrue(blobEqual(row1.struct.bl, structVal.bl));
1524
+ assert.equal(row1.struct.bo, structVal.bo);
1525
+ assert.equal(row1.struct.d, structVal.d);
1526
+ assert.equal(row1.struct.dt, structVal.dt);
1527
+ assert.equal(row1.struct.i, structVal.i);
1528
+ assert.equal(row1.struct.p2d.x, structVal.p2d.x);
1529
+ assert.equal(row1.struct.p2d.y, structVal.p2d.y);
1530
+ assert.equal(row1.struct.p3d.x, structVal.p3d.x);
1531
+ assert.equal(row1.struct.p3d.y, structVal.p3d.y);
1532
+ assert.equal(row1.struct.p3d.z, structVal.p3d.z);
1533
+ assert.equal(row1.struct.s, structVal.s);
1534
+ }), 1);
1535
+ });
1536
+ };
1537
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Struct) VALUES(?)", async (stmt) => {
1538
+ stmt.bindStruct(1, structVal);
1539
+ const res = stmt.stepForInsert();
1540
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1541
+ assert.isDefined(res.id);
1542
+ await verify(res.id);
1543
+ });
1544
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Struct) VALUES(?)", async (stmt) => {
1545
+ stmt.bindValues([structVal]);
1546
+ const res = stmt.stepForInsert();
1547
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1548
+ assert.isDefined(res.id);
1549
+ await verify(res.id);
1550
+ });
1551
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Struct) VALUES(:str)", async (stmt) => {
1552
+ stmt.bindStruct("str", structVal);
1553
+ const res = stmt.stepForInsert();
1554
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1555
+ assert.isDefined(res.id);
1556
+ await verify(res.id);
1557
+ });
1558
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Struct) VALUES(:str)", async (stmt) => {
1559
+ stmt.bindValues({ str: structVal });
1560
+ const res = stmt.stepForInsert();
1561
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1562
+ assert.isDefined(res.id);
1563
+ await verify(res.id);
1564
+ });
1565
+ }
1566
+ catch (e_15) {
1567
+ env_15.error = e_15;
1568
+ env_15.hasError = true;
1569
+ }
1570
+ finally {
1571
+ __disposeResources(env_15);
1572
+ }
1573
+ });
1574
+ it("should bind arrays", async () => {
1575
+ const env_16 = { stack: [], error: void 0, hasError: false };
1576
+ try {
1577
+ const ecdb = __addDisposableResource(env_16, ECDbTestHelper.createECDb(outDir, "bindarrays.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
1578
+ <ECStructClass typeName="Location" modifier="Sealed">
1579
+ <ECProperty propertyName="City" typeName="string"/>
1580
+ <ECProperty propertyName="Zip" typeName="int"/>
1581
+ </ECStructClass>
1582
+ <ECEntityClass typeName="Foo" modifier="Sealed">
1583
+ <ECArrayProperty propertyName="I_Array" typeName="int"/>
1584
+ <ECArrayProperty propertyName="Dt_Array" typeName="dateTime"/>
1585
+ <ECStructArrayProperty propertyName="Addresses" typeName="Location"/>
1586
+ </ECEntityClass>
1587
+ </ECSchema>`), false);
1588
+ assert.isTrue(ecdb.isOpen);
1589
+ const intArray = [1, 2, 3];
1590
+ const dtArray = ["2018-01-23T00:00:00.000", "2018-01-23T16:39:00.000"];
1591
+ const addressArray = [{ city: "London", zip: 10000 }, { city: "Manchester", zip: 20000 }, { city: "Edinburgh", zip: 30000 }];
1592
+ const verify = async (expectedId) => {
1593
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1594
+ await ecdb.withPreparedStatement("SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?", async (stmt) => {
1595
+ stmt.bindId(1, expectedId);
1596
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1597
+ const row = stmt.getRow();
1598
+ // don't know why assert.equal doesn't work on arrays directly
1599
+ assert.equal(row.i_Array.length, intArray.length);
1600
+ for (let i = 0; i < intArray.length; i++) {
1601
+ assert.equal(row.i_Array[i], intArray[i]);
1602
+ }
1603
+ assert.equal(row.dt_Array.length, dtArray.length);
1604
+ for (let i = 0; i < dtArray.length; i++) {
1605
+ assert.equal(row.dt_Array[i], dtArray[i]);
1606
+ }
1607
+ assert.equal(row.addresses.length, addressArray.length);
1608
+ for (let i = 0; i < addressArray.length; i++) {
1609
+ assert.equal(row.addresses[i].city, addressArray[i].city);
1610
+ assert.equal(row.addresses[i].zip, addressArray[i].zip);
1611
+ }
1612
+ });
1613
+ assert.equal(await query(ecdb, "SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([expectedId]), selectSingleRow, (row) => {
1614
+ // don't know why assert.equal doesn't work on arrays directly
1615
+ assert.equal(row.i_Array.length, intArray.length);
1616
+ for (let i = 0; i < intArray.length; i++) {
1617
+ assert.equal(row.i_Array[i], intArray[i]);
1618
+ }
1619
+ assert.equal(row.dt_Array.length, dtArray.length);
1620
+ for (let i = 0; i < dtArray.length; i++) {
1621
+ assert.equal(row.dt_Array[i], dtArray[i]);
1622
+ }
1623
+ assert.equal(row.addresses.length, addressArray.length);
1624
+ for (let i = 0; i < addressArray.length; i++) {
1625
+ assert.equal(row.addresses[i].city, addressArray[i].city);
1626
+ assert.equal(row.addresses[i].zip, addressArray[i].zip);
1627
+ }
1628
+ }), 1);
1629
+ };
1630
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)", async (stmt) => {
1631
+ stmt.bindArray(1, intArray);
1632
+ stmt.bindArray(2, dtArray);
1633
+ stmt.bindArray(3, addressArray);
1634
+ const res = stmt.stepForInsert();
1635
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1636
+ assert.isDefined(res.id);
1637
+ await verify(res.id);
1638
+ });
1639
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)", async (stmt) => {
1640
+ stmt.bindValues([intArray, dtArray, addressArray]);
1641
+ const res = stmt.stepForInsert();
1642
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1643
+ assert.isDefined(res.id);
1644
+ await verify(res.id);
1645
+ });
1646
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)", async (stmt) => {
1647
+ stmt.bindArray("iarray", intArray);
1648
+ stmt.bindArray("dtarray", dtArray);
1649
+ stmt.bindArray("addresses", addressArray);
1650
+ const res = stmt.stepForInsert();
1651
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1652
+ assert.isDefined(res.id);
1653
+ await verify(res.id);
1654
+ });
1655
+ await ecdb.withCachedWriteStatement("INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)", async (stmt) => {
1656
+ stmt.bindValues({ iarray: intArray, dtarray: dtArray, addresses: addressArray });
1657
+ const res = stmt.stepForInsert();
1658
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1659
+ assert.isDefined(res.id);
1660
+ await verify(res.id);
1661
+ });
1662
+ }
1663
+ catch (e_16) {
1664
+ env_16.error = e_16;
1665
+ env_16.hasError = true;
1666
+ }
1667
+ finally {
1668
+ __disposeResources(env_16);
1669
+ }
1670
+ });
1671
+ it("should bind navigation", async () => {
1672
+ const env_17 = { stack: [], error: void 0, hasError: false };
1673
+ try {
1674
+ const ecdb = __addDisposableResource(env_17, ECDbTestHelper.createECDb(outDir, "bindnavigation.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
1675
+ <ECEntityClass typeName="Parent" modifier="Sealed">
1676
+ <ECProperty propertyName="Code" typeName="string"/>
1677
+ </ECEntityClass>
1678
+ <ECEntityClass typeName="Child" modifier="Sealed">
1679
+ <ECProperty propertyName="Name" typeName="string"/>
1680
+ <ECNavigationProperty propertyName="Parent" relationshipName="ParentHasChildren" direction="backward"/>
1681
+ </ECEntityClass>
1682
+ <ECRelationshipClass typeName="ParentHasChildren" modifier="None" strength="embedding">
1683
+ <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
1684
+ <Class class="Parent"/>
1685
+ </Source>
1686
+ <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
1687
+ <Class class="Child"/>
1688
+ </Target>
1689
+ </ECRelationshipClass>
1690
+ </ECSchema>`), false);
1691
+ assert.isTrue(ecdb.isOpen);
1692
+ const parentId = ecdb.withCachedWriteStatement("INSERT INTO test.Parent(Code) VALUES('Parent 1')", (stmt) => {
1693
+ const res = stmt.stepForInsert();
1694
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1695
+ assert.isDefined(res.id);
1696
+ return res.id;
1697
+ });
1698
+ const childIds = new Array();
1699
+ ecdb.withCachedWriteStatement("INSERT INTO test.Child(Name,Parent) VALUES(?,?)", (stmt) => {
1700
+ stmt.bindString(1, "Child 1");
1701
+ stmt.bindNavigation(2, { id: parentId, relClassName: "Test.ParentHasChildren" });
1702
+ let res = stmt.stepForInsert();
1703
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1704
+ assert.isDefined(res.id);
1705
+ childIds.push(res.id);
1706
+ stmt.reset();
1707
+ stmt.clearBindings();
1708
+ stmt.bindValues(["Child 2", { id: parentId, relClassName: "Test.ParentHasChildren" }]);
1709
+ res = stmt.stepForInsert();
1710
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1711
+ assert.isDefined(res.id);
1712
+ childIds.push(res.id);
1713
+ });
1714
+ ecdb.withCachedWriteStatement("INSERT INTO test.Child(Name,Parent) VALUES(:name,:parent)", (stmt) => {
1715
+ stmt.bindString("name", "Child 3");
1716
+ stmt.bindNavigation("parent", { id: parentId, relClassName: "Test.ParentHasChildren" });
1717
+ let res = stmt.stepForInsert();
1718
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1719
+ assert.isDefined(res.id);
1720
+ childIds.push(res.id);
1721
+ stmt.reset();
1722
+ stmt.clearBindings();
1723
+ stmt.bindValues({ name: "Child 4", parent: { id: parentId, relClassName: "Test.ParentHasChildren" } });
1724
+ res = stmt.stepForInsert();
1725
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1726
+ assert.isDefined(res.id);
1727
+ childIds.push(res.id);
1728
+ });
1729
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1730
+ ecdb.withPreparedStatement("SELECT Name,Parent FROM test.Child ORDER BY Name", (stmt) => {
1731
+ let rowCount = 0;
1732
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
1733
+ rowCount++;
1734
+ const row = stmt.getRow();
1735
+ assert.equal(row.name, `Child ${rowCount}`);
1736
+ const parent = row.parent;
1737
+ assert.equal(parent.id, parentId);
1738
+ assert.equal(parent.relClassName, "Test.ParentHasChildren");
1739
+ }
1740
+ assert.equal(rowCount, 4);
1741
+ });
1742
+ let rowCount2 = 0;
1743
+ assert.equal(await query(ecdb, "SELECT Name,Parent FROM test.Child ORDER BY Name", QueryBinder.from([]), undefined, (row) => {
1744
+ rowCount2++;
1745
+ assert.equal(row.name, `Child ${rowCount2}`);
1746
+ const parent = row.parent;
1747
+ assert.equal(parent.id, parentId);
1748
+ assert.equal(parent.relClassName, "Test.ParentHasChildren");
1749
+ }), 4);
1750
+ }
1751
+ catch (e_17) {
1752
+ env_17.error = e_17;
1753
+ env_17.hasError = true;
1754
+ }
1755
+ finally {
1756
+ __disposeResources(env_17);
1757
+ }
1758
+ });
1759
+ it("should bind Range3d for parameter in spatial sql function", async () => {
1760
+ const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile("ECSqlStatement", "BindRange3d.bim"), { rootSubject: { name: "BindRange3d" } });
1761
+ try {
1762
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1763
+ iModel.withPreparedStatement("SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId",
1764
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1765
+ (stmt) => {
1766
+ stmt.bindRange3d(1, new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0));
1767
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);
1768
+ });
1769
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1770
+ iModel.withPreparedStatement("SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId",
1771
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1772
+ (stmt) => {
1773
+ stmt.bindValues([new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0)]);
1774
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);
1775
+ });
1776
+ }
1777
+ finally {
1778
+ iModel.saveChanges();
1779
+ iModel.close();
1780
+ }
1781
+ });
1782
+ it("should bind Range3d", async () => {
1783
+ const env_18 = { stack: [], error: void 0, hasError: false };
1784
+ try {
1785
+ const ecdb = __addDisposableResource(env_18, ECDbTestHelper.createECDb(outDir, "bindrange3d.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
1786
+ <ECEntityClass typeName="Foo" modifier="Sealed">
1787
+ <ECProperty propertyName="Range3d" typeName="binary"/>
1788
+ </ECEntityClass>
1789
+ </ECSchema>`), false);
1790
+ assert.isTrue(ecdb.isOpen);
1791
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.Foo([Range3d]) VALUES(?)", (stmt) => {
1792
+ stmt.bindRange3d(1, testRange);
1793
+ const res = stmt.stepForInsert();
1794
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
1795
+ assert.isDefined(res.id);
1796
+ return res.id;
1797
+ });
1798
+ ecdb.saveChanges();
1799
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1800
+ ecdb.withPreparedStatement("SELECT [Range3d] FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
1801
+ stmt.bindId(1, id);
1802
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
1803
+ const rangeBlob = stmt.getValue(0).getBlob();
1804
+ const rangeFloatArray = new Float64Array(rangeBlob.buffer);
1805
+ assert.equal(rangeFloatArray.length, 6);
1806
+ const actualRange = new Range3d(...rangeFloatArray);
1807
+ assert.isTrue(actualRange.isAlmostEqual(testRange));
1808
+ });
1809
+ }
1810
+ catch (e_18) {
1811
+ env_18.error = e_18;
1812
+ env_18.hasError = true;
1813
+ }
1814
+ finally {
1815
+ __disposeResources(env_18);
1816
+ }
1817
+ });
1818
+ it("should bind IdSets", async () => {
1819
+ const env_19 = { stack: [], error: void 0, hasError: false };
1820
+ try {
1821
+ const ecdb = __addDisposableResource(env_19, ECDbTestHelper.createECDb(outDir, "bindids.ecdb"), false);
1822
+ assert.isTrue(ecdb.isOpen);
1823
+ const idNumbers = [4444, 4545, 1234, 6758, 1312];
1824
+ ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)", (stmt) => {
1825
+ idNumbers.forEach((idNum) => {
1826
+ const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);
1827
+ stmt.bindId(1, expectedId);
1828
+ stmt.bindString(2, `${idNum}.txt`);
1829
+ const r = stmt.stepForInsert();
1830
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1831
+ assert.isDefined(r.id);
1832
+ assert.equal(r.id, expectedId);
1833
+ ecdb.saveChanges();
1834
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1835
+ ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt) => {
1836
+ assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);
1837
+ const row = confstmt.getRow();
1838
+ assert.equal(row.id, expectedId);
1839
+ assert.equal(row.className, "ECDbFileInfo.ExternalFileInfo");
1840
+ assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);
1841
+ });
1842
+ stmt.reset();
1843
+ stmt.clearBindings();
1844
+ });
1845
+ });
1846
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1847
+ ecdb.withPreparedStatement("SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)", (stmt) => {
1848
+ let idSet = [];
1849
+ stmt.bindIdSet(1, idSet);
1850
+ let result = stmt.step();
1851
+ assert.equal(result, DbResult.BE_SQLITE_DONE);
1852
+ stmt.reset();
1853
+ stmt.clearBindings();
1854
+ idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];
1855
+ stmt.bindIdSet(1, idSet);
1856
+ result = stmt.step();
1857
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1858
+ let row = stmt.getRow();
1859
+ assert.equal(row.name, `${idNumbers[2]}.txt`);
1860
+ stmt.reset();
1861
+ stmt.clearBindings();
1862
+ idSet.push(idNumbers[0].toString());
1863
+ stmt.bindIdSet(1, idSet);
1864
+ result = stmt.step();
1865
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1866
+ row = stmt.getRow();
1867
+ assert.equal(row.name, `${idNumbers[2]}.txt`);
1868
+ result = stmt.step();
1869
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1870
+ row = stmt.getRow();
1871
+ assert.equal(row.name, `${idNumbers[0]}.txt`);
1872
+ });
1873
+ }
1874
+ catch (e_19) {
1875
+ env_19.error = e_19;
1876
+ env_19.hasError = true;
1877
+ }
1878
+ finally {
1879
+ __disposeResources(env_19);
1880
+ }
1881
+ });
1882
+ it("should bind IdSets to IdSet Virtual Table", async () => {
1883
+ const env_20 = { stack: [], error: void 0, hasError: false };
1884
+ try {
1885
+ const ecdb = __addDisposableResource(env_20, ECDbTestHelper.createECDb(outDir, "bindids.ecdb"), false);
1886
+ assert.isTrue(ecdb.isOpen);
1887
+ const idNumbers = [4444, 4545, 1234, 6758, 1312];
1888
+ ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)", (stmt) => {
1889
+ idNumbers.forEach((idNum) => {
1890
+ const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);
1891
+ stmt.bindId(1, expectedId);
1892
+ stmt.bindString(2, `${idNum}.txt`);
1893
+ const r = stmt.stepForInsert();
1894
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1895
+ assert.isDefined(r.id);
1896
+ assert.equal(r.id, expectedId);
1897
+ ecdb.saveChanges();
1898
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1899
+ ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt) => {
1900
+ assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);
1901
+ const row = confstmt.getRow();
1902
+ assert.equal(row.id, expectedId);
1903
+ assert.equal(row.className, "ECDbFileInfo.ExternalFileInfo");
1904
+ assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);
1905
+ });
1906
+ stmt.reset();
1907
+ stmt.clearBindings();
1908
+ });
1909
+ });
1910
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1911
+ ecdb.withPreparedStatement("SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES", (stmt) => {
1912
+ let idSet = [];
1913
+ stmt.bindIdSet(1, idSet);
1914
+ let result = stmt.step();
1915
+ assert.equal(result, DbResult.BE_SQLITE_DONE);
1916
+ stmt.reset();
1917
+ stmt.clearBindings();
1918
+ idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];
1919
+ stmt.bindIdSet(1, idSet);
1920
+ result = stmt.step();
1921
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1922
+ let row = stmt.getRow();
1923
+ assert.equal(row.name, `${idNumbers[2]}.txt`);
1924
+ stmt.reset();
1925
+ stmt.clearBindings();
1926
+ idSet.push(idNumbers[0].toString());
1927
+ stmt.bindIdSet(1, idSet);
1928
+ result = stmt.step();
1929
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1930
+ row = stmt.getRow();
1931
+ assert.equal(row.name, `${idNumbers[2]}.txt`);
1932
+ result = stmt.step();
1933
+ assert.equal(result, DbResult.BE_SQLITE_ROW);
1934
+ row = stmt.getRow();
1935
+ assert.equal(row.name, `${idNumbers[0]}.txt`);
1936
+ });
1937
+ }
1938
+ catch (e_20) {
1939
+ env_20.error = e_20;
1940
+ env_20.hasError = true;
1941
+ }
1942
+ finally {
1943
+ __disposeResources(env_20);
1944
+ }
1945
+ });
1946
+ it("Error Checking For binding to IdSet statements", async () => {
1947
+ const env_21 = { stack: [], error: void 0, hasError: false };
1948
+ try {
1949
+ const ecdb = __addDisposableResource(env_21, ECDbTestHelper.createECDb(outDir, "bindids.ecdb"), false);
1950
+ assert.isTrue(ecdb.isOpen);
1951
+ const idNumbers = [4444, 4545, 1234, 6758, 1312];
1952
+ ecdb.withCachedWriteStatement("INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)", (stmt) => {
1953
+ idNumbers.forEach((idNum) => {
1954
+ const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);
1955
+ stmt.bindId(1, expectedId);
1956
+ stmt.bindString(2, `${idNum}.txt`);
1957
+ const r = stmt.stepForInsert();
1958
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
1959
+ assert.isDefined(r.id);
1960
+ assert.equal(r.id, expectedId);
1961
+ ecdb.saveChanges();
1962
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1963
+ ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt) => {
1964
+ assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);
1965
+ const row = confstmt.getRow();
1966
+ assert.equal(row.id, expectedId);
1967
+ assert.equal(row.className, "ECDbFileInfo.ExternalFileInfo");
1968
+ assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);
1969
+ });
1970
+ stmt.reset();
1971
+ stmt.clearBindings();
1972
+ });
1973
+ });
1974
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1975
+ ecdb.withPreparedStatement("SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, ECVLib.IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES", (stmt) => {
1976
+ let idSet = [];
1977
+ stmt.bindIdSet(1, idSet);
1978
+ let result = stmt.step();
1979
+ assert.equal(result, DbResult.BE_SQLITE_DONE);
1980
+ stmt.reset();
1981
+ stmt.clearBindings();
1982
+ idSet = ["0X1", "ABC"];
1983
+ try {
1984
+ stmt.bindIdSet(1, idSet);
1985
+ }
1986
+ catch (err) {
1987
+ assert.equal(err.message, "Error binding id set");
1988
+ }
1989
+ result = stmt.step();
1990
+ assert.equal(result, DbResult.BE_SQLITE_DONE);
1991
+ stmt.reset();
1992
+ stmt.clearBindings();
1993
+ try {
1994
+ stmt.bindId(1, idNumbers[0].toString());
1995
+ }
1996
+ catch (err) {
1997
+ assert.equal(err.message, "Error binding Id");
1998
+ }
1999
+ result = stmt.step();
2000
+ assert.equal(result, DbResult.BE_SQLITE_DONE);
2001
+ });
2002
+ }
2003
+ catch (e_21) {
2004
+ env_21.error = e_21;
2005
+ env_21.hasError = true;
2006
+ }
2007
+ finally {
2008
+ __disposeResources(env_21);
2009
+ }
2010
+ });
2011
+ /* This test doesn't do anything specific with the binder life time but just runs a few scenarios
2012
+ with and without statement cache to test that stuff works fine */
2013
+ it("check ECSqlBinder life time", async () => {
2014
+ const env_22 = { stack: [], error: void 0, hasError: false };
2015
+ try {
2016
+ const ecdb = __addDisposableResource(env_22, ECDbTestHelper.createECDb(outDir, "ecsqlbinderlifetime.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2017
+ <ECStructClass typeName="Address" modifier="Sealed">
2018
+ <ECProperty propertyName="Street" typeName="string"/>
2019
+ <ECProperty propertyName="City" typeName="string"/>
2020
+ <ECProperty propertyName="Zip" typeName="int"/>
2021
+ </ECStructClass>
2022
+ <ECEntityClass typeName="Person" modifier="Sealed">
2023
+ <ECProperty propertyName="Name" typeName="string"/>
2024
+ <ECProperty propertyName="Age" typeName="int"/>
2025
+ <ECStructProperty propertyName="Location" typeName="Address"/>
2026
+ </ECEntityClass>
2027
+ </ECSchema>`), false);
2028
+ assert.isTrue(ecdb.isOpen);
2029
+ let id1 = "", id2 = "";
2030
+ // *** test without statement cache
2031
+ ecdb.withCachedWriteStatement("INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)", (stmt) => {
2032
+ stmt.bindString(1, "Mary Miller");
2033
+ stmt.bindInteger(2, 30);
2034
+ stmt.bindStruct(3, { Street: "2000 Main Street", City: "New York", Zip: 12311 });
2035
+ const res = stmt.stepForInsert();
2036
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2037
+ assert.isDefined(res.id);
2038
+ id1 = res.id;
2039
+ assert.isTrue(Id64.isValidId64(id1));
2040
+ });
2041
+ // *** test withstatement cache
2042
+ ecdb.withCachedWriteStatement("INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)", (stmt) => {
2043
+ stmt.bindString(1, "Mary Miller");
2044
+ stmt.bindInteger(2, 30);
2045
+ stmt.bindStruct(3, { Street: "2000 Main Street", City: "New York", Zip: 12311 });
2046
+ const res = stmt.stepForInsert();
2047
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2048
+ assert.isDefined(res.id);
2049
+ id2 = res.id;
2050
+ assert.isTrue(Id64.isValidId64(id2));
2051
+ });
2052
+ {
2053
+ const env_23 = { stack: [], error: void 0, hasError: false };
2054
+ try {
2055
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2056
+ const stmt = __addDisposableResource(env_23, ecdb.prepareStatement("SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId"), false);
2057
+ let rowCount = 0;
2058
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
2059
+ rowCount++;
2060
+ const row = stmt.getRow();
2061
+ if (rowCount === 1)
2062
+ assert.equal(row.id, id1);
2063
+ else
2064
+ assert.equal(row.id, id2);
2065
+ assert.equal(row.className, "Test.Person");
2066
+ assert.equal(row.name, "Mary Miller");
2067
+ assert.equal(row.age, 30);
2068
+ assert.equal(row.location.street, "2000 Main Street");
2069
+ assert.equal(row.location.city, "New York");
2070
+ assert.equal(row.location.zip, 12311);
2071
+ }
2072
+ assert.equal(rowCount, 2);
2073
+ }
2074
+ catch (e_22) {
2075
+ env_23.error = e_22;
2076
+ env_23.hasError = true;
2077
+ }
2078
+ finally {
2079
+ __disposeResources(env_23);
2080
+ }
2081
+ }
2082
+ let rowCount2 = 0;
2083
+ assert.equal(await query(ecdb, "SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId", QueryBinder.from([]), undefined, (row) => {
2084
+ rowCount2++;
2085
+ if (rowCount2 === 1)
2086
+ assert.equal(row.id, id1);
2087
+ else
2088
+ assert.equal(row.id, id2);
2089
+ assert.equal(row.className, "Test.Person");
2090
+ assert.equal(row.name, "Mary Miller");
2091
+ assert.equal(row.age, 30);
2092
+ assert.equal(row.location.street, "2000 Main Street");
2093
+ assert.equal(row.location.city, "New York");
2094
+ assert.equal(row.location.zip, 12311);
2095
+ }), 2);
2096
+ }
2097
+ catch (e_23) {
2098
+ env_22.error = e_23;
2099
+ env_22.hasError = true;
2100
+ }
2101
+ finally {
2102
+ __disposeResources(env_22);
2103
+ }
2104
+ });
2105
+ it("getRow() with primitives values", async () => {
2106
+ const env_24 = { stack: [], error: void 0, hasError: false };
2107
+ try {
2108
+ const ecdb = __addDisposableResource(env_24, ECDbTestHelper.createECDb(outDir, "getprimitives.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2109
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2110
+ <ECProperty propertyName="Bl" typeName="binary"/>
2111
+ <ECProperty propertyName="Bo" typeName="boolean"/>
2112
+ <ECProperty propertyName="D" typeName="double"/>
2113
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
2114
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
2115
+ <ECProperty propertyName="I" typeName="int"/>
2116
+ <ECProperty propertyName="L" typeName="long"/>
2117
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
2118
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
2119
+ <ECProperty propertyName="S" typeName="string"/>
2120
+ </ECEntityClass>
2121
+ </ECSchema>`), false);
2122
+ assert.isTrue(ecdb.isOpen);
2123
+ const boolVal = true;
2124
+ const doubleVal = 3.5;
2125
+ const dtVal = "2018-01-23T12:24:00.000";
2126
+ const intVal = 3;
2127
+ const p2dVal = new Point2d(1, 2);
2128
+ const p3dVal = new Point3d(1, 2, 3);
2129
+ const strVal = "Hello world";
2130
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S) VALUES(?,?,?,?,?,?,?,?)", (stmt) => {
2131
+ stmt.bindBlob(1, blobVal);
2132
+ stmt.bindBoolean(2, boolVal);
2133
+ stmt.bindDouble(3, doubleVal);
2134
+ stmt.bindDateTime(4, dtVal);
2135
+ stmt.bindInteger(5, intVal);
2136
+ stmt.bindPoint2d(6, p2dVal);
2137
+ stmt.bindPoint3d(7, p3dVal);
2138
+ stmt.bindString(8, strVal);
2139
+ const res = stmt.stepForInsert();
2140
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2141
+ return res.id;
2142
+ });
2143
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2144
+ ecdb.withPreparedStatement("SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2145
+ stmt.bindId(1, id);
2146
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2147
+ const row = stmt.getRow();
2148
+ assert.equal(row.id, id);
2149
+ assert.equal(row.className, "Test.Foo");
2150
+ assert.deepEqual(row.bl, blobVal);
2151
+ assert.equal(row.bo, boolVal);
2152
+ assert.equal(row.d, doubleVal);
2153
+ assert.equal(row.dt, dtVal);
2154
+ assert.equal(row.i, intVal);
2155
+ assert.equal(row.p2d.x, p2dVal.x);
2156
+ assert.equal(row.p2d.y, p2dVal.y);
2157
+ assert.equal(row.p3d.x, p3dVal.x);
2158
+ assert.equal(row.p3d.y, p3dVal.y);
2159
+ assert.equal(row.p3d.z, p3dVal.z);
2160
+ assert.equal(row.s, strVal);
2161
+ });
2162
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), { abbreviateBlobs: true, ...selectSingleRow }, (row) => {
2163
+ assert.equal(row.id, id);
2164
+ assert.equal(row.className, "Test.Foo");
2165
+ assert.deepEqual(row.bl, abbreviatedBlobVal);
2166
+ }), 1);
2167
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), { abbreviateBlobs: false, ...selectSingleRow }, (row) => {
2168
+ assert.equal(row.id, id);
2169
+ assert.equal(row.className, "Test.Foo");
2170
+ assert.deepEqual(row.bl, blobVal);
2171
+ }), 1);
2172
+ // assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?", [id], 1, (row: any) => {
2173
+ // assert.equal(row.id, id);
2174
+ // assert.equal(row.className, "Test.Foo");
2175
+ // assert.deepEqual(row.bl, blobVal);
2176
+ // assert.equal(row.bo, boolVal);
2177
+ // assert.equal(row.d, doubleVal);
2178
+ // assert.equal(row.dt, dtVal);
2179
+ // assert.equal(row.i, intVal);
2180
+ // assert.equal(row.p2d.x, p2dVal.x);
2181
+ // assert.equal(row.p2d.y, p2dVal.y);
2182
+ // assert.equal(row.p3d.x, p3dVal.x);
2183
+ // assert.equal(row.p3d.y, p3dVal.y);
2184
+ // assert.equal(row.p3d.z, p3dVal.z);
2185
+ // assert.equal(row.s, strVal);
2186
+ // }), 1);
2187
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2188
+ ecdb.withPreparedStatement("SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2189
+ stmt.bindId(1, id);
2190
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2191
+ const row = stmt.getRow();
2192
+ assert.deepEqual(row.blobby, blobVal);
2193
+ assert.equal(row["[I] + 10"], intVal + 10);
2194
+ assert.equal(row["lower([S])"], strVal.toLowerCase());
2195
+ assert.equal(row.capitalS, strVal.toUpperCase());
2196
+ });
2197
+ // assert.equal(await query(ecdb, "SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?", [id], 1, (row: any) => {
2198
+ // assert.deepEqual(row.blobby, blobVal);
2199
+ // assert.equal(row["[I] + 10"], intVal + 10);
2200
+ // assert.equal(row["lower([S])"], strVal.toLowerCase());
2201
+ // assert.equal(row.capitalS, strVal.toUpperCase());
2202
+ // }), 1);
2203
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2204
+ const testSchemaId = ecdb.withPreparedStatement("SELECT ECInstanceId FROM meta.ECSchemaDef WHERE Name='Test'", (stmt) => {
2205
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2206
+ const row = stmt.getRow();
2207
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);
2208
+ return Id64.fromJSON(row.id);
2209
+ });
2210
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2211
+ const fooClassId = ecdb.withPreparedStatement("SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Foo'", (stmt) => {
2212
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2213
+ const row = stmt.getRow();
2214
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);
2215
+ return Id64.fromJSON(row.id);
2216
+ });
2217
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2218
+ ecdb.withPreparedStatement("SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'", (stmt) => {
2219
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2220
+ const row = stmt.getRow();
2221
+ assert.equal(row.id, testSchemaId);
2222
+ assert.equal(row.id_1, fooClassId);
2223
+ });
2224
+ assert.equal(await query(ecdb, "SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'", QueryBinder.from([]), selectSingleRow, (row) => {
2225
+ assert.equal(row.id, testSchemaId);
2226
+ assert.equal(row.id_1, fooClassId);
2227
+ }), 1);
2228
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2229
+ ecdb.withPreparedStatement("SELECT count(*) cnt FROM meta.ECSchemaDef", (stmt) => {
2230
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2231
+ const row = stmt.getRow();
2232
+ assert.isDefined(row.cnt);
2233
+ assert.equal(typeof (row.cnt), "number");
2234
+ assert.equal(row.cnt, 6);
2235
+ });
2236
+ assert.equal(await query(ecdb, "SELECT count(*) cnt FROM meta.ECSchemaDef", QueryBinder.from([]), selectSingleRow, (row) => {
2237
+ assert.isDefined(row.cnt);
2238
+ assert.equal(typeof (row.cnt), "number");
2239
+ assert.equal(row.cnt, 6);
2240
+ }), 1);
2241
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2242
+ ecdb.withPreparedStatement("SELECT 1 FROM meta.ECSchemaDef LIMIT 1", (stmt) => {
2243
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2244
+ const row = stmt.getRow();
2245
+ assert.equal(typeof (row["1"]), "number");
2246
+ assert.equal(row["1"], 1);
2247
+ });
2248
+ assert.equal(await query(ecdb, "SELECT 1 FROM meta.ECSchemaDef LIMIT 1", QueryBinder.from([]), undefined, (row) => {
2249
+ assert.equal(typeof (row["1"]), "number");
2250
+ assert.equal(row["1"], 1);
2251
+ }), 1);
2252
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2253
+ ecdb.withPreparedStatement("SELECT NULL FROM meta.ECSchemaDef LIMIT 1", (stmt) => {
2254
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2255
+ const row = stmt.getRow();
2256
+ assert.equal(Object.entries(row).length, 0);
2257
+ });
2258
+ assert.equal(await query(ecdb, "SELECT NULL FROM meta.ECSchemaDef LIMIT 1", QueryBinder.from([]), undefined, (row) => {
2259
+ assert.equal(Object.entries(row).length, 0);
2260
+ }), 1);
2261
+ }
2262
+ catch (e_24) {
2263
+ env_24.error = e_24;
2264
+ env_24.hasError = true;
2265
+ }
2266
+ finally {
2267
+ __disposeResources(env_24);
2268
+ }
2269
+ });
2270
+ it("getRow() with abbreviated blobs", async () => {
2271
+ const env_25 = { stack: [], error: void 0, hasError: false };
2272
+ try {
2273
+ const ecdb = __addDisposableResource(env_25, ECDbTestHelper.createECDb(outDir, "getblobs.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2274
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2275
+ <ECProperty propertyName="Bl" typeName="binary"/>
2276
+ </ECEntityClass>
2277
+ </ECSchema>`), false);
2278
+ assert.isTrue(ecdb.isOpen);
2279
+ const singleBlobVal = blobVal.slice(0, 1);
2280
+ const abbreviatedSingleBlobVal = `{"bytes":${singleBlobVal.byteLength}}`;
2281
+ const emptyBlobVal = new Uint8Array();
2282
+ const fullId = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl) VALUES(?)", (stmt) => {
2283
+ stmt.bindBlob(1, blobVal);
2284
+ const res = stmt.stepForInsert();
2285
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2286
+ return res.id;
2287
+ });
2288
+ const singleId = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl) VALUES(?)", (stmt) => {
2289
+ stmt.bindBlob(1, singleBlobVal);
2290
+ const res = stmt.stepForInsert();
2291
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2292
+ return res.id;
2293
+ });
2294
+ const emptyId = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl) VALUES(?)", (stmt) => {
2295
+ stmt.bindBlob(1, emptyBlobVal);
2296
+ const res = stmt.stepForInsert();
2297
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2298
+ return res.id;
2299
+ });
2300
+ const nullId = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl) VALUES(?)", (stmt) => {
2301
+ stmt.bindNull(1);
2302
+ const res = stmt.stepForInsert();
2303
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2304
+ return res.id;
2305
+ });
2306
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([fullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row) => {
2307
+ assert.equal(row.id, fullId);
2308
+ assert.equal(row.className, "Test.Foo");
2309
+ assert.deepEqual(row.bl, abbreviatedBlobVal);
2310
+ }), 1);
2311
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([fullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row) => {
2312
+ assert.equal(row.id, fullId);
2313
+ assert.equal(row.className, "Test.Foo");
2314
+ assert.deepEqual(row.bl, blobVal);
2315
+ }), 1);
2316
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([fullId]), selectSingleRow, (row) => {
2317
+ assert.equal(row.id, fullId);
2318
+ assert.equal(row.className, "Test.Foo");
2319
+ assert.deepEqual(row.bl, blobVal);
2320
+ }), 1);
2321
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([singleId]), { abbreviateBlobs: true, ...selectSingleRow }, (row) => {
2322
+ assert.equal(row.id, singleId);
2323
+ assert.equal(row.className, "Test.Foo");
2324
+ assert.deepEqual(row.bl, abbreviatedSingleBlobVal);
2325
+ }), 1);
2326
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([singleId]), { abbreviateBlobs: false, ...selectSingleRow }, (row) => {
2327
+ assert.equal(row.id, singleId);
2328
+ assert.equal(row.className, "Test.Foo");
2329
+ assert.deepEqual(row.bl, singleBlobVal);
2330
+ }), 1);
2331
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([singleId]), { ...selectSingleRow }, (row) => {
2332
+ assert.equal(row.id, singleId);
2333
+ assert.equal(row.className, "Test.Foo");
2334
+ assert.deepEqual(row.bl, singleBlobVal);
2335
+ }), 1);
2336
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([emptyId]), { abbreviateBlobs: true, ...selectSingleRow }, (row) => {
2337
+ assert.equal(row.id, emptyId);
2338
+ assert.equal(row.className, "Test.Foo");
2339
+ assert.deepEqual(row.bl, "{\"bytes\":0}");
2340
+ }), 1);
2341
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([emptyId]), { abbreviateBlobs: false, ...selectSingleRow }, (row) => {
2342
+ assert.equal(row.id, emptyId);
2343
+ assert.equal(row.className, "Test.Foo");
2344
+ assert.deepEqual(row.bl.length, 0);
2345
+ }), 1);
2346
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([emptyId]), selectSingleRow, (row) => {
2347
+ assert.equal(row.id, emptyId);
2348
+ assert.equal(row.className, "Test.Foo");
2349
+ assert.deepEqual(row.bl.length, 0);
2350
+ }), 1);
2351
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([nullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row) => {
2352
+ assert.equal(row.id, nullId);
2353
+ assert.equal(row.className, "Test.Foo");
2354
+ assert.deepEqual(row.bl, undefined);
2355
+ }), 1);
2356
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([nullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row) => {
2357
+ assert.equal(row.id, nullId);
2358
+ assert.equal(row.className, "Test.Foo");
2359
+ assert.deepEqual(row.bl, undefined);
2360
+ }), 1);
2361
+ assert.equal(await query(ecdb, "SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([nullId]), selectSingleRow, (row) => {
2362
+ assert.equal(row.id, nullId);
2363
+ assert.equal(row.className, "Test.Foo");
2364
+ assert.deepEqual(row.bl, undefined);
2365
+ }), 1);
2366
+ }
2367
+ catch (e_25) {
2368
+ env_25.error = e_25;
2369
+ env_25.hasError = true;
2370
+ }
2371
+ finally {
2372
+ __disposeResources(env_25);
2373
+ }
2374
+ });
2375
+ it("getRow() with navigation properties and relationships", async () => {
2376
+ const env_26 = { stack: [], error: void 0, hasError: false };
2377
+ try {
2378
+ const ecdb = __addDisposableResource(env_26, ECDbTestHelper.createECDb(outDir, "getnavandrels.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2379
+ <ECEntityClass typeName="Parent" modifier="Sealed">
2380
+ <ECProperty propertyName="Code" typeName="string"/>
2381
+ </ECEntityClass>
2382
+ <ECEntityClass typeName="Child" modifier="Sealed">
2383
+ <ECProperty propertyName="Name" typeName="string"/>
2384
+ <ECNavigationProperty propertyName="Parent" relationshipName="ParentHasChildren" direction="backward"/>
2385
+ </ECEntityClass>
2386
+ <ECRelationshipClass typeName="ParentHasChildren" modifier="None" strength="embedding">
2387
+ <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
2388
+ <Class class="Parent"/>
2389
+ </Source>
2390
+ <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
2391
+ <Class class="Child"/>
2392
+ </Target>
2393
+ </ECRelationshipClass>
2394
+ </ECSchema>`), false);
2395
+ assert.isTrue(ecdb.isOpen);
2396
+ let rowCount;
2397
+ const parentId = ecdb.withCachedWriteStatement("INSERT INTO test.Parent(Code) VALUES('Parent 1')", (stmt) => {
2398
+ const res = stmt.stepForInsert();
2399
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2400
+ assert.isDefined(res.id);
2401
+ return res.id;
2402
+ });
2403
+ const childIds = new Array();
2404
+ ecdb.withCachedWriteStatement("INSERT INTO test.Child(Name,Parent) VALUES(?,?)", (stmt) => {
2405
+ stmt.bindString(1, "Child 1");
2406
+ stmt.bindNavigation(2, { id: parentId, relClassName: "Test.ParentHasChildren" });
2407
+ let res = stmt.stepForInsert();
2408
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2409
+ assert.isDefined(res.id);
2410
+ childIds.push(res.id);
2411
+ stmt.reset();
2412
+ stmt.clearBindings();
2413
+ stmt.bindValues(["Child 2", { id: parentId, relClassName: "Test.ParentHasChildren" }]);
2414
+ res = stmt.stepForInsert();
2415
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2416
+ assert.isDefined(res.id);
2417
+ childIds.push(res.id);
2418
+ });
2419
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2420
+ ecdb.withPreparedStatement("SELECT Name,Parent FROM test.Child ORDER BY Name", (stmt) => {
2421
+ rowCount = 0;
2422
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
2423
+ rowCount++;
2424
+ const row = stmt.getRow();
2425
+ assert.equal(row.name, `Child ${rowCount}`);
2426
+ assert.equal(row.parent.id, parentId);
2427
+ assert.equal(row.parent.relClassName, "Test.ParentHasChildren");
2428
+ }
2429
+ assert.equal(rowCount, 2);
2430
+ });
2431
+ rowCount = 0;
2432
+ assert.equal(await query(ecdb, "SELECT Name,Parent FROM test.Child ORDER BY Name", QueryBinder.from([]), undefined, (row) => {
2433
+ rowCount++;
2434
+ assert.equal(row.name, `Child ${rowCount}`);
2435
+ assert.equal(row.parent.id, parentId);
2436
+ assert.equal(row.parent.relClassName, "Test.ParentHasChildren");
2437
+ }), 2);
2438
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2439
+ ecdb.withPreparedStatement("SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name", (stmt) => {
2440
+ rowCount = 0;
2441
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
2442
+ rowCount++;
2443
+ const row = stmt.getRow();
2444
+ assert.equal(row.name, `Child ${rowCount}`);
2445
+ assert.equal(row["parent.id"], parentId);
2446
+ assert.equal(row["parent.relClassName"], "Test.ParentHasChildren");
2447
+ assert.equal(row.myParentId, parentId);
2448
+ assert.isTrue(Id64.isValidId64(row.myParentRelClassId));
2449
+ }
2450
+ assert.equal(rowCount, 2);
2451
+ });
2452
+ rowCount = 0;
2453
+ assert.equal(await query(ecdb, "SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name", QueryBinder.from([]), undefined, (row) => {
2454
+ rowCount++;
2455
+ assert.equal(row.name, `Child ${rowCount}`);
2456
+ assert.equal(row["parent.id"], parentId);
2457
+ assert.equal(row["parent.relClassName"], "Test.ParentHasChildren");
2458
+ assert.equal(row.myParentId, parentId);
2459
+ assert.isTrue(Id64.isValidId64(row.myParentRelClassId));
2460
+ }), 2);
2461
+ const childId = childIds[0];
2462
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2463
+ ecdb.withPreparedStatement("SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?", (stmt) => {
2464
+ stmt.bindId(1, childId);
2465
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2466
+ const row = stmt.getRow();
2467
+ assert.equal(row.id, childId);
2468
+ assert.equal(row.className, "Test.ParentHasChildren");
2469
+ assert.equal(row.sourceId, parentId);
2470
+ assert.equal(row.sourceClassName, "Test.Parent");
2471
+ assert.equal(row.targetId, childId);
2472
+ assert.equal(row.targetClassName, "Test.Child");
2473
+ });
2474
+ assert.equal(await query(ecdb, "SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?", QueryBinder.from([childId]), undefined, (row) => {
2475
+ assert.equal(row.id, childId);
2476
+ assert.equal(row.className, "Test.ParentHasChildren");
2477
+ assert.equal(row.sourceId, parentId);
2478
+ assert.equal(row.sourceClassName, "Test.Parent");
2479
+ assert.equal(row.targetId, childId);
2480
+ assert.equal(row.targetClassName, "Test.Child");
2481
+ }), 1);
2482
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2483
+ ecdb.withPreparedStatement("SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?", (stmt) => {
2484
+ stmt.bindId(1, childId);
2485
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2486
+ const row = stmt.getRow();
2487
+ assert.equal(row.myId, childId);
2488
+ assert.isTrue(Id64.isValidId64(row.myClassId));
2489
+ assert.equal(row.mySourceId, parentId);
2490
+ assert.isTrue(Id64.isValidId64(row.mySourceClassId));
2491
+ assert.equal(row.myTargetId, childId);
2492
+ assert.isTrue(Id64.isValidId64(row.myTargetClassId));
2493
+ });
2494
+ assert.equal(await query(ecdb, "SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?", QueryBinder.from([childId]), undefined, (row) => {
2495
+ rowCount++;
2496
+ assert.equal(row.myId, childId);
2497
+ assert.isTrue(Id64.isValidId64(row.myClassId));
2498
+ assert.equal(row.mySourceId, parentId);
2499
+ assert.isTrue(Id64.isValidId64(row.mySourceClassId));
2500
+ assert.equal(row.myTargetId, childId);
2501
+ assert.isTrue(Id64.isValidId64(row.myTargetClassId));
2502
+ }), 1);
2503
+ }
2504
+ catch (e_26) {
2505
+ env_26.error = e_26;
2506
+ env_26.hasError = true;
2507
+ }
2508
+ finally {
2509
+ __disposeResources(env_26);
2510
+ }
2511
+ });
2512
+ it("getRow() with structs", async () => {
2513
+ const env_27 = { stack: [], error: void 0, hasError: false };
2514
+ try {
2515
+ const ecdb = __addDisposableResource(env_27, ECDbTestHelper.createECDb(outDir, "getstructs.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2516
+ <ECStructClass typeName="MyStruct" modifier="Sealed">
2517
+ <ECProperty propertyName="Bl" typeName="binary"/>
2518
+ <ECProperty propertyName="Bo" typeName="boolean"/>
2519
+ <ECProperty propertyName="D" typeName="double"/>
2520
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
2521
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
2522
+ <ECProperty propertyName="I" typeName="int"/>
2523
+ <ECProperty propertyName="L" typeName="long"/>
2524
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
2525
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
2526
+ <ECProperty propertyName="S" typeName="string"/>
2527
+ </ECStructClass>
2528
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2529
+ <ECStructProperty propertyName="Struct" typeName="MyStruct"/>
2530
+ </ECEntityClass>
2531
+ </ECSchema>`), false);
2532
+ assert.isTrue(ecdb.isOpen);
2533
+ const boolVal = true;
2534
+ const doubleVal = 3.5;
2535
+ const dtVal = "2018-01-23T12:24:00.000";
2536
+ const intVal = 3;
2537
+ const p2dVal = { x: 1, y: 2 };
2538
+ const p3dVal = { x: 1, y: 2, z: 3 };
2539
+ const stringVal = "Hello World";
2540
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Struct) VALUES(?)", (stmt) => {
2541
+ stmt.bindStruct(1, { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal });
2542
+ const res = stmt.stepForInsert();
2543
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2544
+ assert.isDefined(res.id);
2545
+ return res.id;
2546
+ });
2547
+ const expectedStruct = { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal };
2548
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2549
+ ecdb.withPreparedStatement("SELECT Struct FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2550
+ stmt.bindId(1, id);
2551
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2552
+ const row = stmt.getRow();
2553
+ assert.deepEqual(row.struct.bl, expectedStruct.bl);
2554
+ assert.equal(row.struct.bo, expectedStruct.bo);
2555
+ assert.equal(row.struct.d, expectedStruct.d);
2556
+ assert.equal(row.struct.dt, expectedStruct.dt);
2557
+ assert.equal(row.struct.i, expectedStruct.i);
2558
+ assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);
2559
+ assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);
2560
+ assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);
2561
+ assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);
2562
+ assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);
2563
+ assert.equal(row.struct.s, expectedStruct.s);
2564
+ });
2565
+ assert.equal(await query(ecdb, "SELECT Struct FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), undefined, (row) => {
2566
+ assert.deepEqual(row.struct.bl, expectedStruct.bl);
2567
+ assert.equal(row.struct.bo, expectedStruct.bo);
2568
+ assert.equal(row.struct.d, expectedStruct.d);
2569
+ assert.equal(row.struct.dt, expectedStruct.dt);
2570
+ assert.equal(row.struct.i, expectedStruct.i);
2571
+ assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);
2572
+ assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);
2573
+ assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);
2574
+ assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);
2575
+ assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);
2576
+ assert.equal(row.struct.s, expectedStruct.s);
2577
+ }), 1);
2578
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2579
+ ecdb.withPreparedStatement("SELECT Struct FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2580
+ stmt.bindId(1, id);
2581
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2582
+ const actualStruct = stmt.getValue(0).getStruct();
2583
+ assert.deepEqual(actualStruct.bl, expectedStruct.bl);
2584
+ assert.equal(actualStruct.bo, expectedStruct.bo);
2585
+ assert.equal(actualStruct.d, expectedStruct.d);
2586
+ assert.equal(actualStruct.dt, expectedStruct.dt);
2587
+ assert.equal(actualStruct.i, expectedStruct.i);
2588
+ assert.equal(actualStruct.p2d.x, expectedStruct.p2d.x);
2589
+ assert.equal(actualStruct.p2d.y, expectedStruct.p2d.y);
2590
+ assert.equal(actualStruct.p3d.x, expectedStruct.p3d.x);
2591
+ assert.equal(actualStruct.p3d.y, expectedStruct.p3d.y);
2592
+ assert.equal(actualStruct.p3d.z, expectedStruct.p3d.z);
2593
+ assert.equal(actualStruct.s, expectedStruct.s);
2594
+ });
2595
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2596
+ ecdb.withPreparedStatement("SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2597
+ stmt.bindId(1, id);
2598
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2599
+ const row = stmt.getRow();
2600
+ assert.deepEqual(row["struct.Bl"], expectedStruct.bl);
2601
+ assert.equal(row["struct.Bo"], expectedStruct.bo);
2602
+ assert.equal(row["struct.D"], expectedStruct.d);
2603
+ assert.equal(row["struct.Dt"], expectedStruct.dt);
2604
+ assert.equal(row["struct.I"], expectedStruct.i);
2605
+ assert.equal(row["struct.P2d"].x, expectedStruct.p2d.x);
2606
+ assert.equal(row["struct.P2d"].y, expectedStruct.p2d.y);
2607
+ assert.equal(row["struct.P3d"].x, expectedStruct.p3d.x);
2608
+ assert.equal(row["struct.P3d"].y, expectedStruct.p3d.y);
2609
+ assert.equal(row["struct.P3d"].z, expectedStruct.p3d.z);
2610
+ assert.equal(row["struct.S"], expectedStruct.s);
2611
+ });
2612
+ assert.equal(await query(ecdb, "SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), undefined, (row) => {
2613
+ assert.deepEqual(row["struct.Bl"], expectedStruct.bl);
2614
+ assert.equal(row["struct.Bo"], expectedStruct.bo);
2615
+ assert.equal(row["struct.D"], expectedStruct.d);
2616
+ assert.equal(row["struct.Dt"], expectedStruct.dt);
2617
+ assert.equal(row["struct.I"], expectedStruct.i);
2618
+ assert.equal(row["struct.P2d"].x, expectedStruct.p2d.x);
2619
+ assert.equal(row["struct.P2d"].y, expectedStruct.p2d.y);
2620
+ assert.equal(row["struct.P3d"].x, expectedStruct.p3d.x);
2621
+ assert.equal(row["struct.P3d"].y, expectedStruct.p3d.y);
2622
+ assert.equal(row["struct.P3d"].z, expectedStruct.p3d.z);
2623
+ assert.equal(row["struct.S"], expectedStruct.s);
2624
+ }), 1);
2625
+ }
2626
+ catch (e_27) {
2627
+ env_27.error = e_27;
2628
+ env_27.hasError = true;
2629
+ }
2630
+ finally {
2631
+ __disposeResources(env_27);
2632
+ }
2633
+ });
2634
+ it("check HexStr() sql function", async () => {
2635
+ const env_28 = { stack: [], error: void 0, hasError: false };
2636
+ try {
2637
+ const slm = new SequentialLogMatcher();
2638
+ slm.append().error().category("ECDb").message(/Step failed for ECSQL/gm);
2639
+ slm.append().error().category("ECDb").message(/Step failed for ECSQL/gm);
2640
+ slm.append().error().category("ECDb").message(/Step failed for ECSQL/gm);
2641
+ slm.append().error().category("ECDb").message(/Failed to prepare function expression/gm);
2642
+ slm.append().error().category("ECDb").message(/Failed to prepare function expression/gm);
2643
+ slm.append().error().category("ECDb").message(/Step failed for ECSQL/gm);
2644
+ const ecdb = __addDisposableResource(env_28, ECDbTestHelper.createECDb(outDir, "hexstrfunction.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2645
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2646
+ <ECProperty propertyName="Bl" typeName="binary"/>
2647
+ <ECProperty propertyName="Bo" typeName="boolean"/>
2648
+ <ECProperty propertyName="D" typeName="double"/>
2649
+ <ECProperty propertyName="Dt" typeName="dateTime"/>
2650
+ <ECProperty propertyName="G" typeName="Bentley.Geometry.Common.IGeometry"/>
2651
+ <ECProperty propertyName="I" typeName="int"/>
2652
+ <ECProperty propertyName="L" typeName="long"/>
2653
+ <ECProperty propertyName="P2d" typeName="Point2d"/>
2654
+ <ECProperty propertyName="P3d" typeName="Point3d"/>
2655
+ <ECProperty propertyName="S" typeName="string"/>
2656
+ </ECEntityClass>
2657
+ </ECSchema>`), false);
2658
+ assert.isTrue(ecdb.isOpen);
2659
+ const expectedRow = {
2660
+ bl: blobVal, bo: true, d: 3.5, dt: "2018-01-23T12:24:00.000",
2661
+ i: 3, l: 12312312312312, p2d: { x: 1, y: 2 }, p3d: { x: 1, y: 2, z: 3 }, s: "Hello World",
2662
+ };
2663
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(Bl,Bo,D,Dt,I,L,P2d,P3d,S) VALUES(:bl,:bo,:d,:dt,:i,:l,:p2d,:p3d,:s)", (stmt) => {
2664
+ stmt.bindValues({
2665
+ bl: blobVal, bo: expectedRow.bo, d: expectedRow.d,
2666
+ dt: expectedRow.dt, i: expectedRow.i, l: expectedRow.l, p2d: expectedRow.p2d, p3d: expectedRow.p3d, s: expectedRow.s,
2667
+ });
2668
+ const res = stmt.stepForInsert();
2669
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2670
+ assert.isDefined(res.id);
2671
+ return res.id;
2672
+ });
2673
+ ecdb.saveChanges();
2674
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2675
+ ecdb.withPreparedStatement("SELECT I, HexStr(I) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2676
+ stmt.bindId(1, id);
2677
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2678
+ const row = stmt.getRow();
2679
+ assert.equal(row.i, expectedRow.i);
2680
+ assert.equal(row.hex, "0x3");
2681
+ });
2682
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2683
+ ecdb.withPreparedStatement("SELECT L, HexStr(L) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2684
+ stmt.bindId(1, id);
2685
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2686
+ const row = stmt.getRow();
2687
+ assert.equal(row.l, expectedRow.l);
2688
+ assert.equal(row.hex, "0xb32af0071f8");
2689
+ });
2690
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2691
+ ecdb.withPreparedStatement("SELECT Bl, HexStr(Bl) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2692
+ stmt.bindId(1, id);
2693
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);
2694
+ });
2695
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2696
+ ecdb.withPreparedStatement("SELECT Bo, HexStr(Bo) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2697
+ stmt.bindId(1, id);
2698
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2699
+ const row = stmt.getRow();
2700
+ assert.equal(row.bo, expectedRow.bo);
2701
+ assert.equal(row.hex, "0x1");
2702
+ });
2703
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2704
+ ecdb.withPreparedStatement("SELECT D, HexStr(D) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2705
+ stmt.bindId(1, id);
2706
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);
2707
+ });
2708
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2709
+ ecdb.withPreparedStatement("SELECT Dt, HexStr(Dt) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2710
+ stmt.bindId(1, id);
2711
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);
2712
+ });
2713
+ // SQL functions cannot take points. So here preparation already fails
2714
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2715
+ assert.throw(() => ecdb.withPreparedStatement("SELECT P2d, HexStr(P2d) hex FROM test.Foo WHERE ECInstanceId=?", () => {
2716
+ assert.fail();
2717
+ }));
2718
+ // SQL functions cannot take points. So here preparation already fails
2719
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2720
+ assert.throw(() => ecdb.withPreparedStatement("SELECT P3d, HexStr(P3d) hex FROM test.Foo WHERE ECInstanceId=?", () => {
2721
+ assert.fail();
2722
+ }));
2723
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2724
+ ecdb.withPreparedStatement("SELECT S, HexStr(S) hex FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2725
+ stmt.bindId(1, id);
2726
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);
2727
+ });
2728
+ assert.isTrue(slm.finishAndDispose());
2729
+ }
2730
+ catch (e_28) {
2731
+ env_28.error = e_28;
2732
+ env_28.hasError = true;
2733
+ }
2734
+ finally {
2735
+ __disposeResources(env_28);
2736
+ }
2737
+ });
2738
+ it("check ec enums", async () => {
2739
+ const env_29 = { stack: [], error: void 0, hasError: false };
2740
+ try {
2741
+ const ecdb = __addDisposableResource(env_29, ECDbTestHelper.createECDb(outDir, "ecenums.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
2742
+ <ECEnumeration typeName="Status" backingTypeName="int" isStrict="true">
2743
+ <ECEnumerator name="On" value="1" />
2744
+ <ECEnumerator name="Off" value="2" />
2745
+ </ECEnumeration>
2746
+ <ECEnumeration typeName="Domain" backingTypeName="string" isStrict="true">
2747
+ <ECEnumerator name="Org" value="Org" />
2748
+ <ECEnumerator name="Com" value="Com" />
2749
+ </ECEnumeration>
2750
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2751
+ <ECProperty propertyName="MyStat" typeName="Status"/>
2752
+ <ECArrayProperty propertyName="MyStats" typeName="Status"/>
2753
+ <ECProperty propertyName="MyDomain" typeName="Domain"/>
2754
+ <ECArrayProperty propertyName="MyDomains" typeName="Domain"/>
2755
+ </ECEntityClass>
2756
+ </ECSchema>`), false);
2757
+ assert.isTrue(ecdb.isOpen);
2758
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(MyStat,MyStats,MyDomain,MyDomains) VALUES(test.Status.[On],?,test.Domain.Org,?)", (stmt) => {
2759
+ stmt.bindValue(1, [1, 2]);
2760
+ stmt.bindValue(2, ["Org", "Com"]);
2761
+ const res = stmt.stepForInsert();
2762
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2763
+ assert.isDefined(res.id);
2764
+ return res.id;
2765
+ });
2766
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2767
+ ecdb.withPreparedStatement("SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2768
+ stmt.bindId(1, id);
2769
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2770
+ // getRow just returns the enum values
2771
+ const row = stmt.getRow();
2772
+ assert.equal(row.myStat, 1);
2773
+ assert.deepEqual(row.myStats, [1, 2]);
2774
+ assert.equal(row.myDomain, "Org");
2775
+ assert.deepEqual(row.myDomains, ["Org", "Com"]);
2776
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2777
+ const myStatVal = stmt.getValue(0);
2778
+ assert.isFalse(myStatVal.isNull);
2779
+ assert.isTrue(myStatVal.columnInfo.isEnum());
2780
+ assert.equal(myStatVal.getInteger(), 1);
2781
+ assert.deepEqual(myStatVal.getEnum(), [{ schema: "Test", name: "Status", key: "On", value: 1 }]);
2782
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2783
+ const myStatsVal = stmt.getValue(1);
2784
+ assert.isFalse(myStatsVal.isNull);
2785
+ assert.isTrue(myStatsVal.columnInfo.isEnum());
2786
+ assert.deepEqual(myStatsVal.getArray(), [1, 2]);
2787
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2788
+ const actualStatsEnums = [];
2789
+ for (const arrayElement of myStatsVal.getArrayIterator()) {
2790
+ actualStatsEnums.push(arrayElement.getEnum());
2791
+ }
2792
+ assert.equal(actualStatsEnums.length, 2);
2793
+ assert.deepEqual(actualStatsEnums[0], [{ schema: "Test", name: "Status", key: "On", value: 1 }]);
2794
+ assert.deepEqual(actualStatsEnums[1], [{ schema: "Test", name: "Status", key: "Off", value: 2 }]);
2795
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2796
+ const myDomainVal = stmt.getValue(2);
2797
+ assert.isFalse(myDomainVal.isNull);
2798
+ assert.isTrue(myDomainVal.columnInfo.isEnum());
2799
+ assert.equal(myDomainVal.getString(), "Org");
2800
+ assert.deepEqual(myDomainVal.getEnum(), [{ schema: "Test", name: "Domain", key: "Org", value: "Org" }]);
2801
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2802
+ const myDomainsVal = stmt.getValue(3);
2803
+ assert.isFalse(myDomainsVal.isNull);
2804
+ assert.isTrue(myDomainsVal.columnInfo.isEnum());
2805
+ assert.deepEqual(myDomainsVal.getArray(), ["Org", "Com"]);
2806
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2807
+ const actualDomainsEnums = [];
2808
+ for (const arrayElement of myDomainsVal.getArrayIterator()) {
2809
+ actualDomainsEnums.push(arrayElement.getEnum());
2810
+ }
2811
+ assert.equal(actualDomainsEnums.length, 2);
2812
+ assert.deepEqual(actualDomainsEnums[0], [{ schema: "Test", name: "Domain", key: "Org", value: "Org" }]);
2813
+ assert.deepEqual(actualDomainsEnums[1], [{ schema: "Test", name: "Domain", key: "Com", value: "Com" }]);
2814
+ });
2815
+ assert.equal(await query(ecdb, "SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([id]), undefined, (row) => {
2816
+ assert.equal(row.myStat, 1);
2817
+ assert.deepEqual(row.myStats, [1, 2]);
2818
+ assert.equal(row.myDomain, "Org");
2819
+ assert.deepEqual(row.myDomains, ["Org", "Com"]);
2820
+ }), 1);
2821
+ // test some enums in the built-in schemas
2822
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2823
+ ecdb.withPreparedStatement("SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'", (stmt) => {
2824
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2825
+ // getRow just returns the enum values
2826
+ const row = stmt.getRow();
2827
+ assert.deepEqual(row, { type: 0, modifier: 2 });
2828
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2829
+ const typeVal = stmt.getValue(0);
2830
+ assert.isFalse(typeVal.isNull);
2831
+ assert.isTrue(typeVal.columnInfo.isEnum());
2832
+ assert.equal(typeVal.getInteger(), 0);
2833
+ assert.deepEqual(typeVal.getEnum(), [{ schema: "ECDbMeta", name: "ECClassType", key: "Entity", value: 0 }]);
2834
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2835
+ const modifierVal = stmt.getValue(1);
2836
+ assert.isFalse(modifierVal.isNull);
2837
+ assert.isTrue(modifierVal.columnInfo.isEnum());
2838
+ assert.equal(modifierVal.getInteger(), 2);
2839
+ assert.deepEqual(modifierVal.getEnum(), [{ schema: "ECDbMeta", name: "ECClassModifier", key: "Sealed", value: 2 }]);
2840
+ });
2841
+ assert.equal(await query(ecdb, "SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'", QueryBinder.from([id]), undefined, (row) => {
2842
+ assert.deepEqual(row, { type: 0, modifier: 2 });
2843
+ }), 1);
2844
+ }
2845
+ catch (e_29) {
2846
+ env_29.error = e_29;
2847
+ env_29.hasError = true;
2848
+ }
2849
+ finally {
2850
+ __disposeResources(env_29);
2851
+ }
2852
+ });
2853
+ it("check ORed ECEnums", async () => {
2854
+ const env_30 = { stack: [], error: void 0, hasError: false };
2855
+ try {
2856
+ const slm = new SequentialLogMatcher();
2857
+ slm.append().error().category("ECDb").message(/The value 9 cannot be broken down into a combination of ECEnumerators/gm);
2858
+ slm.append().error().category("ECDb").message(/The value 'gov,de' cannot be broken down into a combination of ECEnumerators/gm);
2859
+ const ecdb = __addDisposableResource(env_30, ECDbTestHelper.createECDb(outDir, "oredecenums.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
2860
+ <ECEnumeration typeName="Color" backingTypeName="int" isStrict="true">
2861
+ <ECEnumerator name="Red" value="1" />
2862
+ <ECEnumerator name="Yellow" value="2" />
2863
+ <ECEnumerator name="Blue" value="4" />
2864
+ </ECEnumeration>
2865
+ <ECEnumeration typeName="Domain" backingTypeName="string" isStrict="true">
2866
+ <ECEnumerator name="Org" value="org" />
2867
+ <ECEnumerator name="Com" value="com" />
2868
+ <ECEnumerator name="Gov" value="gov" />
2869
+ </ECEnumeration>
2870
+ <ECEntityClass typeName="Foo" modifier="Sealed">
2871
+ <ECProperty propertyName="MyColor" typeName="Color"/>
2872
+ <ECProperty propertyName="MyDomain" typeName="Domain"/>
2873
+ </ECEntityClass>
2874
+ </ECSchema>`), false);
2875
+ assert.isTrue(ecdb.isOpen);
2876
+ const ids = ecdb.withCachedWriteStatement("INSERT INTO test.Foo(MyColor,MyDomain) VALUES(?,?)", (stmt) => {
2877
+ stmt.bindValue(1, 4);
2878
+ stmt.bindValue(2, "com");
2879
+ let res = stmt.stepForInsert();
2880
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2881
+ assert.isDefined(res.id);
2882
+ const unored = res.id;
2883
+ stmt.reset();
2884
+ stmt.clearBindings();
2885
+ stmt.bindValue(1, 5);
2886
+ stmt.bindValue(2, "gov,com");
2887
+ res = stmt.stepForInsert();
2888
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2889
+ assert.isDefined(res.id);
2890
+ const ored = res.id;
2891
+ stmt.reset();
2892
+ stmt.clearBindings();
2893
+ stmt.bindValue(1, 9);
2894
+ stmt.bindValue(2, "gov,de");
2895
+ res = stmt.stepForInsert();
2896
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
2897
+ assert.isDefined(res.id);
2898
+ const unmatched = res.id;
2899
+ stmt.reset();
2900
+ stmt.clearBindings();
2901
+ return { unored, ored, unmatched };
2902
+ });
2903
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2904
+ ecdb.withPreparedStatement("SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?", (stmt) => {
2905
+ stmt.bindId(1, ids.unored);
2906
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2907
+ // getRow just returns the enum values
2908
+ let row = stmt.getRow();
2909
+ assert.equal(row.myColor, 4);
2910
+ assert.equal(row.myDomain, "com");
2911
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2912
+ let colVal = stmt.getValue(0);
2913
+ assert.isFalse(colVal.isNull);
2914
+ assert.isTrue(colVal.columnInfo.isEnum());
2915
+ assert.equal(colVal.getInteger(), 4);
2916
+ assert.deepEqual(colVal.getEnum(), [{ schema: "Test", name: "Color", key: "Blue", value: 4 }]);
2917
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2918
+ let domainVal = stmt.getValue(1);
2919
+ assert.isFalse(domainVal.isNull);
2920
+ assert.isTrue(domainVal.columnInfo.isEnum());
2921
+ assert.equal(domainVal.getString(), "com");
2922
+ assert.deepEqual(domainVal.getEnum(), [{ schema: "Test", name: "Domain", key: "Com", value: "com" }]);
2923
+ stmt.reset();
2924
+ stmt.clearBindings();
2925
+ stmt.bindId(1, ids.ored);
2926
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2927
+ // getRow just returns the enum values
2928
+ row = stmt.getRow();
2929
+ assert.equal(row.myColor, 5);
2930
+ assert.equal(row.myDomain, "gov,com");
2931
+ colVal = stmt.getValue(0);
2932
+ assert.isFalse(colVal.isNull);
2933
+ assert.isTrue(colVal.columnInfo.isEnum());
2934
+ assert.equal(colVal.getInteger(), 5);
2935
+ assert.deepEqual(colVal.getEnum(), [{ schema: "Test", name: "Color", key: "Red", value: 1 }, { schema: "Test", name: "Color", key: "Blue", value: 4 }]);
2936
+ domainVal = stmt.getValue(1);
2937
+ assert.isFalse(domainVal.isNull);
2938
+ assert.isTrue(domainVal.columnInfo.isEnum());
2939
+ assert.equal(domainVal.getString(), "gov,com");
2940
+ assert.deepEqual(domainVal.getEnum(), [{ schema: "Test", name: "Domain", key: "Com", value: "com" }, { schema: "Test", name: "Domain", key: "Gov", value: "gov" }]);
2941
+ stmt.reset();
2942
+ stmt.clearBindings();
2943
+ stmt.bindId(1, ids.unmatched);
2944
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2945
+ // getRow just returns the enum values
2946
+ row = stmt.getRow();
2947
+ assert.equal(row.myColor, 9);
2948
+ assert.equal(row.myDomain, "gov,de");
2949
+ colVal = stmt.getValue(0);
2950
+ assert.isFalse(colVal.isNull);
2951
+ assert.isTrue(colVal.columnInfo.isEnum());
2952
+ assert.equal(colVal.getInteger(), 9);
2953
+ assert.isUndefined(colVal.getEnum());
2954
+ domainVal = stmt.getValue(1);
2955
+ assert.isFalse(domainVal.isNull);
2956
+ assert.isTrue(domainVal.columnInfo.isEnum());
2957
+ assert.equal(domainVal.getString(), "gov,de");
2958
+ assert.isUndefined(domainVal.getEnum());
2959
+ });
2960
+ assert.equal(await query(ecdb, "SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([ids.unored]), undefined, (row) => {
2961
+ assert.equal(row.myColor, 4);
2962
+ assert.equal(row.myDomain, "com");
2963
+ }), 1);
2964
+ assert.equal(await query(ecdb, "SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([ids.ored]), undefined, (row) => {
2965
+ assert.equal(row.myColor, 5);
2966
+ assert.equal(row.myDomain, "gov,com");
2967
+ }), 1);
2968
+ assert.equal(await query(ecdb, "SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?", QueryBinder.from([ids.unmatched]), undefined, (row) => {
2969
+ assert.equal(row.myColor, 9);
2970
+ assert.equal(row.myDomain, "gov,de");
2971
+ }), 1);
2972
+ // test some enums in the built-in schemas
2973
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2974
+ ecdb.withPreparedStatement("SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'", (stmt) => {
2975
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
2976
+ const row = stmt.getRow();
2977
+ assert.equal(row.caType, 160);
2978
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2979
+ const caTypeVal = stmt.getValue(0);
2980
+ assert.isFalse(caTypeVal.isNull);
2981
+ assert.isTrue(caTypeVal.columnInfo.isEnum());
2982
+ assert.equal(caTypeVal.getInteger(), 160);
2983
+ assert.deepEqual(caTypeVal.getEnum(), [
2984
+ { schema: "ECDbMeta", name: "ECCustomAttributeContainerType", key: "PrimitiveProperty", value: 32 },
2985
+ { schema: "ECDbMeta", name: "ECCustomAttributeContainerType", key: "PrimitiveArrayProperty", value: 128 }
2986
+ ]);
2987
+ });
2988
+ assert.equal(await query(ecdb, "SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'", QueryBinder.from([ids.unmatched]), undefined, (row) => {
2989
+ assert.equal(row.caType, 160);
2990
+ }), 1);
2991
+ assert.isTrue(slm.finishAndDispose());
2992
+ }
2993
+ catch (e_30) {
2994
+ env_30.error = e_30;
2995
+ env_30.hasError = true;
2996
+ }
2997
+ finally {
2998
+ __disposeResources(env_30);
2999
+ }
3000
+ });
3001
+ it("should get native sql", async () => {
3002
+ const env_31 = { stack: [], error: void 0, hasError: false };
3003
+ try {
3004
+ const ecdb = __addDisposableResource(env_31, ECDbTestHelper.createECDb(outDir, "asyncmethodtest.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
3005
+ <ECEntityClass typeName="Foo" modifier="Sealed">
3006
+ <ECProperty propertyName="n" typeName="int"/>
3007
+ <ECProperty propertyName="dt" typeName="dateTime"/>
3008
+ <ECProperty propertyName="fooId" typeName="long" extendedTypeName="Id"/>
3009
+ </ECEntityClass>
3010
+ </ECSchema>`), false);
3011
+ assert.isTrue(ecdb.isOpen);
3012
+ const r = await ecdb.withCachedWriteStatement("INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)", async (stmt) => {
3013
+ const nativesql = stmt.getNativeSql();
3014
+ assert.isTrue(nativesql.startsWith("INSERT INTO [ts_Foo]"));
3015
+ return stmt.stepForInsert();
3016
+ });
3017
+ ecdb.saveChanges();
3018
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
3019
+ assert.equal(r.id, "0x1");
3020
+ }
3021
+ catch (e_31) {
3022
+ env_31.error = e_31;
3023
+ env_31.hasError = true;
3024
+ }
3025
+ finally {
3026
+ __disposeResources(env_31);
3027
+ }
3028
+ });
3029
+ it("check column info", async () => {
3030
+ const env_32 = { stack: [], error: void 0, hasError: false };
3031
+ try {
3032
+ const ecdb = __addDisposableResource(env_32, ECDbTestHelper.createECDb(outDir, "columnInfo.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
3033
+ <ECEntityClass typeName="MyClass" modifier="Sealed">
3034
+ <ECProperty propertyName="MyProperty" typeName="string"/>
3035
+ </ECEntityClass>
3036
+ </ECSchema>`), false);
3037
+ assert.isTrue(ecdb.isOpen);
3038
+ const id = ecdb.withCachedWriteStatement("INSERT INTO test.MyClass(MyProperty) VALUES('Value')", (stmt) => {
3039
+ const res = stmt.stepForInsert();
3040
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
3041
+ assert.isDefined(res.id);
3042
+ return res.id;
3043
+ });
3044
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3045
+ ecdb.withPreparedStatement("SELECT MyProperty as MyAlias, 1 as MyGenerated FROM test.MyClass WHERE ECInstanceId=?", (stmt) => {
3046
+ stmt.bindId(1, id);
3047
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
3048
+ // getRow just returns the enum values
3049
+ const row = stmt.getRow();
3050
+ assert.equal(row.myAlias, "Value");
3051
+ assert.equal(row.myGenerated, 1);
3052
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3053
+ const val0 = stmt.getValue(0);
3054
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3055
+ const colInfo0 = val0.columnInfo;
3056
+ assert.equal(colInfo0.getPropertyName(), "MyAlias");
3057
+ const accessString0 = colInfo0.getAccessString();
3058
+ assert.equal(accessString0, "MyAlias");
3059
+ const originPropertyName = colInfo0.getOriginPropertyName();
3060
+ assert.isDefined(originPropertyName);
3061
+ assert.equal(originPropertyName, "MyProperty");
3062
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3063
+ const val1 = stmt.getValue(1);
3064
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3065
+ const colInfo1 = val1.columnInfo;
3066
+ assert.equal(colInfo1.getPropertyName(), "MyGenerated");
3067
+ const accessString1 = colInfo1.getAccessString();
3068
+ assert.equal(accessString1, "MyGenerated");
3069
+ assert.isUndefined(colInfo1.getOriginPropertyName());
3070
+ });
3071
+ }
3072
+ catch (e_32) {
3073
+ env_32.error = e_32;
3074
+ env_32.hasError = true;
3075
+ }
3076
+ finally {
3077
+ __disposeResources(env_32);
3078
+ }
3079
+ });
3080
+ it("check access string metadata in nested struct", async () => {
3081
+ const env_33 = { stack: [], error: void 0, hasError: false };
3082
+ try {
3083
+ const ecdb = __addDisposableResource(env_33, ECDbTestHelper.createECDb(outDir, "columnInfo.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
3084
+ <ECSchemaReference name="ECDbMap" version="02.00.00" alias="ecdbmap"/>
3085
+ <ECStructClass typeName="InnerStruct">
3086
+ <ECProperty propertyName="a" typeName="string"/>
3087
+ <ECProperty propertyName="b" typeName="string"/>
3088
+ </ECStructClass>
3089
+ <ECStructClass typeName="OuterStruct">
3090
+ <ECStructProperty propertyName="c" typeName="InnerStruct"/>
3091
+ <ECProperty propertyName="d" typeName="string"/>
3092
+ </ECStructClass>
3093
+ <ECEntityClass typeName="Z">
3094
+ <ECCustomAttributes>
3095
+ <ClassMap xmlns="ECDbMap.02.00.00">
3096
+ <MapStrategy>TablePerHierarchy</MapStrategy>
3097
+ </ClassMap>
3098
+ <ShareColumns xmlns="ECDbMap.02.00.00">
3099
+ <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>
3100
+ </ShareColumns>
3101
+ </ECCustomAttributes>
3102
+ </ECEntityClass>
3103
+ <ECEntityClass typeName="A">
3104
+ <BaseClass>Z</BaseClass>
3105
+ <ECStructProperty propertyName="f" typeName="OuterStruct"/>
3106
+ <ECProperty propertyName="g" typeName="string"/>
3107
+ </ECEntityClass>
3108
+ <ECEntityClass typeName="B">
3109
+ <BaseClass>Z</BaseClass>
3110
+ <ECStructProperty propertyName="h" typeName="InnerStruct" />
3111
+ <ECProperty propertyName="i" typeName="string"/>
3112
+ </ECEntityClass>
3113
+ </ECSchema>`), false);
3114
+ assert.isTrue(ecdb.isOpen);
3115
+ ecdb.withCachedWriteStatement("INSERT INTO Test.A (f.c.a, f.c.b, f.d, g) VALUES ('f.c.a' ,'f.c.b', 'f.d', 'g')", (stmt) => {
3116
+ const res = stmt.stepForInsert();
3117
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
3118
+ assert.isDefined(res.id);
3119
+ });
3120
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3121
+ ecdb.withPreparedStatement("SELECT f, f.c.a, f.c.b, f.d, g FROM Test.A", (stmt) => {
3122
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
3123
+ // getRow just returns the enum values
3124
+ const row = stmt.getRow();
3125
+ assert.equal(row.f.c.a, "f.c.a");
3126
+ assert.equal(row.f.c.b, "f.c.b");
3127
+ assert.equal(row.f.d, "f.d");
3128
+ assert.equal(row.g, "g");
3129
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3130
+ const val0 = stmt.getValue(0);
3131
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3132
+ const colInfo0 = val0.columnInfo;
3133
+ assert.equal(colInfo0.getPropertyName(), "f");
3134
+ const accessString0 = colInfo0.getAccessString();
3135
+ assert.equal(accessString0, "f");
3136
+ const originPropertyName0 = colInfo0.getOriginPropertyName();
3137
+ assert.isDefined(originPropertyName0);
3138
+ assert.equal(originPropertyName0, "f");
3139
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3140
+ const val1 = stmt.getValue(1);
3141
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3142
+ const colInfo1 = val1.columnInfo;
3143
+ assert.equal(colInfo1.getPropertyName(), "a");
3144
+ const accessString1 = colInfo1.getAccessString();
3145
+ assert.equal(accessString1, "f.c.a");
3146
+ const originPropertyName1 = colInfo1.getOriginPropertyName();
3147
+ assert.isDefined(originPropertyName1);
3148
+ assert.equal(originPropertyName1, "a");
3149
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3150
+ const val2 = stmt.getValue(2);
3151
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3152
+ const colInfo2 = val2.columnInfo;
3153
+ assert.equal(colInfo2.getPropertyName(), "b");
3154
+ const accessString2 = colInfo2.getAccessString();
3155
+ assert.equal(accessString2, "f.c.b");
3156
+ const originPropertyName2 = colInfo2.getOriginPropertyName();
3157
+ assert.isDefined(originPropertyName2);
3158
+ assert.equal(originPropertyName2, "b");
3159
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3160
+ const val3 = stmt.getValue(3);
3161
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3162
+ const colInfo3 = val3.columnInfo;
3163
+ assert.equal(colInfo3.getPropertyName(), "d");
3164
+ const accessString3 = colInfo3.getAccessString();
3165
+ assert.equal(accessString3, "f.d");
3166
+ const originPropertyName3 = colInfo3.getOriginPropertyName();
3167
+ assert.isDefined(originPropertyName3);
3168
+ assert.equal(originPropertyName3, "d");
3169
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3170
+ const val4 = stmt.getValue(4);
3171
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3172
+ const colInfo4 = val4.columnInfo;
3173
+ assert.equal(colInfo4.getPropertyName(), "g");
3174
+ const accessString4 = colInfo4.getAccessString();
3175
+ assert.equal(accessString4, "g");
3176
+ const originPropertyName4 = colInfo4.getOriginPropertyName();
3177
+ assert.isDefined(originPropertyName4);
3178
+ assert.equal(originPropertyName4, "g");
3179
+ });
3180
+ ecdb.withCachedWriteStatement("INSERT INTO Test.B (h.a, h.b, i) VALUES ('h.a' ,'h.b', 'i')", (stmt) => {
3181
+ const res = stmt.stepForInsert();
3182
+ assert.equal(res.status, DbResult.BE_SQLITE_DONE);
3183
+ assert.isDefined(res.id);
3184
+ });
3185
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3186
+ ecdb.withPreparedStatement("SELECT h, i FROM Test.B", (stmt) => {
3187
+ assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
3188
+ // getRow just returns the enum values
3189
+ const row = stmt.getRow();
3190
+ assert.equal(row.h.a, "h.a");
3191
+ assert.equal(row.h.b, "h.b");
3192
+ assert.equal(row.i, "i");
3193
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3194
+ const val0 = stmt.getValue(0);
3195
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3196
+ const colInfo0 = val0.columnInfo;
3197
+ assert.equal(colInfo0.getPropertyName(), "h");
3198
+ const accessString0 = colInfo0.getAccessString();
3199
+ assert.equal(accessString0, "h");
3200
+ const originPropertyName0 = colInfo0.getOriginPropertyName();
3201
+ assert.isDefined(originPropertyName0);
3202
+ assert.equal(originPropertyName0, "h");
3203
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3204
+ const val1 = stmt.getValue(1);
3205
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
3206
+ const colInfo1 = val1.columnInfo;
3207
+ assert.equal(colInfo1.getPropertyName(), "i");
3208
+ const accessString1 = colInfo1.getAccessString();
3209
+ assert.equal(accessString1, "i");
3210
+ const originPropertyName1 = colInfo1.getOriginPropertyName();
3211
+ assert.isDefined(originPropertyName1);
3212
+ assert.equal(originPropertyName1, "i");
3213
+ });
3214
+ }
3215
+ catch (e_33) {
3216
+ env_33.error = e_33;
3217
+ env_33.hasError = true;
3218
+ }
3219
+ finally {
3220
+ __disposeResources(env_33);
3221
+ }
3222
+ });
3223
+ it("ecsql statements with QueryBinder", async () => {
3224
+ const env_34 = { stack: [], error: void 0, hasError: false };
3225
+ try {
3226
+ const ecdb = __addDisposableResource(env_34, ECDbTestHelper.createECDb(outDir, "test.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
3227
+ <ECEntityClass typeName="Foo" modifier="Sealed">
3228
+ <ECProperty propertyName="booleanProperty" typeName="boolean"/>
3229
+ <ECProperty propertyName="blobProperty" typeName="binary"/>
3230
+ <ECProperty propertyName="doubleProperty" typeName="double"/>
3231
+ <ECProperty propertyName="customIdProperty" typeName="string"/>
3232
+ <ECProperty propertyName="customIdSetProperty" typeName="string"/>
3233
+ <ECProperty propertyName="intProperty" typeName="int"/>
3234
+ <ECProperty propertyName="longProperty" typeName="long"/>
3235
+ <ECProperty propertyName="stringProperty" typeName="string"/>
3236
+ <ECProperty propertyName="nullProperty" typeName="int"/>
3237
+ <ECProperty propertyName="point2dProperty" typeName="point2d"/>
3238
+ <ECProperty propertyName="point3dProperty" typeName="point3d"/>
3239
+ </ECEntityClass>
3240
+ <ECStructClass typeName="Bar" modifier="Sealed">
3241
+ <ECProperty propertyName="structClassProperty" typeName="string"/>
3242
+ </ECStructClass>
3243
+ <ECEntityClass typeName="Baz" modifier="Sealed">
3244
+ <ECStructProperty propertyName="structProperty" typeName="Bar"/>
3245
+ </ECEntityClass>
3246
+ </ECSchema>`), false);
3247
+ assert.isTrue(ecdb.isOpen);
3248
+ const booleanValue = true;
3249
+ const blobValue = new Uint8Array([0, 0, 0]);
3250
+ const doubleValue = 12.12;
3251
+ const customIdValue = "1234";
3252
+ const customIdSetValue = ["0x9"];
3253
+ const intValue = 10;
3254
+ const longValue = 1e9;
3255
+ const stringValue = "test string value";
3256
+ const point2dValue = new Point2d(10, 20);
3257
+ const point3dValue = new Point3d(15, 30, 45);
3258
+ const structValue = { structClassProperty: "test string value for struct property" };
3259
+ let r = await ecdb.withCachedWriteStatement(`INSERT INTO ts.Foo(booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty)
3260
+ VALUES(:booleanValue, :blobValue, :doubleValue, :customIdValue, :customIdSetValue, :intValue, :longValue, :stringValue, :nullValue, :point2dValue, :point3dValue)`, async (stmt) => {
3261
+ stmt.bindBoolean("booleanValue", booleanValue);
3262
+ stmt.bindBlob("blobValue", blobValue);
3263
+ stmt.bindDouble("doubleValue", doubleValue);
3264
+ stmt.bindId("customIdValue", customIdValue);
3265
+ stmt.bindId("customIdSetValue", customIdSetValue[0]);
3266
+ stmt.bindInteger("intValue", intValue);
3267
+ stmt.bindInteger("longValue", longValue);
3268
+ stmt.bindString("stringValue", stringValue);
3269
+ stmt.bindNull("nullValue");
3270
+ stmt.bindPoint2d("point2dValue", point2dValue);
3271
+ stmt.bindPoint3d("point3dValue", point3dValue);
3272
+ return stmt.stepForInsert();
3273
+ });
3274
+ ecdb.saveChanges();
3275
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
3276
+ assert.equal(r.id, "0x1");
3277
+ const params = new QueryBinder();
3278
+ params.bindBoolean("booleanValue", booleanValue);
3279
+ params.bindBlob("blobValue", blobValue);
3280
+ params.bindDouble("doubleValue", doubleValue);
3281
+ params.bindId("customIdValue", customIdValue);
3282
+ params.bindInt("intValue", intValue);
3283
+ params.bindLong("longValue", longValue);
3284
+ params.bindString("stringValue", stringValue);
3285
+ params.bindPoint2d("point2dValue", point2dValue);
3286
+ params.bindPoint3d("point3dValue", point3dValue);
3287
+ params.bindIdSet("customIdSetValue", customIdSetValue);
3288
+ let reader = ecdb.createQueryReader(`SELECT booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty FROM ts.Foo
3289
+ WHERE booleanProperty = :booleanValue AND blobProperty = :blobValue AND doubleProperty = :doubleValue AND customIdProperty = :customIdValue AND InVirtualSet(:customIdSetValue, customIdSetProperty) AND
3290
+ intProperty = :intValue AND longProperty = :longValue AND stringProperty = :stringValue AND point2dProperty = :point2dValue AND point3dProperty = :point3dValue`, params);
3291
+ const row = (await reader.toArray())[0];
3292
+ assert.isNotNull(row);
3293
+ assert.equal(row[0], booleanValue);
3294
+ assert.deepEqual(row[1], blobValue);
3295
+ assert.equal(row[2], doubleValue);
3296
+ assert.equal(row[3], customIdValue);
3297
+ assert.equal(row[4], "9");
3298
+ assert.equal(row[5], intValue);
3299
+ assert.equal(row[6], longValue);
3300
+ assert.equal(row[7], stringValue);
3301
+ assert.equal(row[8], null);
3302
+ assert.deepEqual(row[9], { X: 10, Y: 20 });
3303
+ assert.deepEqual(row[10], { X: 15, Y: 30, Z: 45 });
3304
+ assert.isFalse(await reader.step());
3305
+ r = await ecdb.withCachedWriteStatement("INSERT INTO ts.Baz(structProperty) VALUES(:structValue)", async (stmt) => {
3306
+ stmt.bindStruct("structValue", structValue);
3307
+ return stmt.stepForInsert();
3308
+ });
3309
+ ecdb.saveChanges();
3310
+ assert.equal(r.status, DbResult.BE_SQLITE_DONE);
3311
+ assert.equal(r.id, "0x2");
3312
+ reader = ecdb.createQueryReader(`SELECT * FROM ts.Baz`);
3313
+ await reader.step();
3314
+ assert.deepEqual(reader.current.structProperty, structValue);
3315
+ const paramsWithStruct = new QueryBinder();
3316
+ paramsWithStruct.bindStruct("structValue", structValue);
3317
+ reader = ecdb.createQueryReader("SELECT * FROM ts.Baz WHERE structProperty = :structValue", paramsWithStruct);
3318
+ await assert.isRejected(reader.toArray(), "Struct type binding not supported");
3319
+ }
3320
+ catch (e_34) {
3321
+ env_34.error = e_34;
3322
+ env_34.hasError = true;
3323
+ }
3324
+ finally {
3325
+ __disposeResources(env_34);
3326
+ }
3327
+ });
3328
+ });
3329
+ //# sourceMappingURL=ECSqlStatement.test.js.map