@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.2

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 (381) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChannelControl.js.map +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/ClassRegistry.js +5 -5
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/CodeService.js.map +1 -1
  19. package/lib/cjs/CodeSpecs.js.map +1 -1
  20. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  21. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  22. package/lib/cjs/DevTools.js.map +1 -1
  23. package/lib/cjs/DisplayStyle.js.map +1 -1
  24. package/lib/cjs/ECDb.js.map +1 -1
  25. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  26. package/lib/cjs/ECSqlStatement.js.map +1 -1
  27. package/lib/cjs/Element.js.map +1 -1
  28. package/lib/cjs/ElementAspect.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  31. package/lib/cjs/Entity.js.map +1 -1
  32. package/lib/cjs/EntityReferences.js.map +1 -1
  33. package/lib/cjs/ExportGraphics.js.map +1 -1
  34. package/lib/cjs/ExternalSource.js.map +1 -1
  35. package/lib/cjs/FontFile.js.map +1 -1
  36. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  37. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  38. package/lib/cjs/GeometrySummary.js +47 -47
  39. package/lib/cjs/GeometrySummary.js.map +1 -1
  40. package/lib/cjs/IModelDb.js +8 -8
  41. package/lib/cjs/IModelDb.js.map +1 -1
  42. package/lib/cjs/IModelDbFonts.js.map +1 -1
  43. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  44. package/lib/cjs/IModelHost.js.map +1 -1
  45. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  46. package/lib/cjs/IModelJsFs.js.map +1 -1
  47. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  48. package/lib/cjs/IpcHost.js.map +1 -1
  49. package/lib/cjs/LineStyle.js.map +1 -1
  50. package/lib/cjs/LocalHub.js +1 -1
  51. package/lib/cjs/LocalHub.js.map +1 -1
  52. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  53. package/lib/cjs/LockControl.js.map +1 -1
  54. package/lib/cjs/Material.js.map +1 -1
  55. package/lib/cjs/Model.js.map +1 -1
  56. package/lib/cjs/NativeAppStorage.js.map +1 -1
  57. package/lib/cjs/NativeHost.js.map +1 -1
  58. package/lib/cjs/NavigationRelationship.js.map +1 -1
  59. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  60. package/lib/cjs/PropertyStore.js.map +1 -1
  61. package/lib/cjs/Relationship.js.map +1 -1
  62. package/lib/cjs/RpcBackend.js.map +1 -1
  63. package/lib/cjs/SQLiteDb.js.map +1 -1
  64. package/lib/cjs/Schema.js.map +1 -1
  65. package/lib/cjs/SchemaSync.js.map +1 -1
  66. package/lib/cjs/SchemaUtils.js.map +1 -1
  67. package/lib/cjs/SheetIndex.js.map +1 -1
  68. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  69. package/lib/cjs/SqliteStatement.js.map +1 -1
  70. package/lib/cjs/StashManager.js.map +1 -1
  71. package/lib/cjs/Texture.js.map +1 -1
  72. package/lib/cjs/TileStorage.js.map +1 -1
  73. package/lib/cjs/TxnManager.js.map +1 -1
  74. package/lib/cjs/ViewDefinition.js.map +1 -1
  75. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  76. package/lib/cjs/ViewStore.js.map +1 -1
  77. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  78. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  79. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  80. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  81. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  84. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  85. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  86. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  87. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  88. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  89. package/lib/cjs/core-backend.js.map +1 -1
  90. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  91. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  92. package/lib/cjs/domains/GenericElements.js.map +1 -1
  93. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  94. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  95. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  96. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  97. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  98. package/lib/cjs/internal/HubMock.js.map +1 -1
  99. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  100. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  101. package/lib/cjs/internal/NoLocks.js.map +1 -1
  102. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  103. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  104. package/lib/cjs/internal/Symbols.js.map +1 -1
  105. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  106. package/lib/cjs/internal/cross-package.js.map +1 -1
  107. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  108. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  109. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  110. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  111. package/lib/cjs/rpc/multipart.js.map +1 -1
  112. package/lib/cjs/rpc/tracing.js.map +1 -1
  113. package/lib/cjs/rpc/web/logging.js.map +1 -1
  114. package/lib/cjs/rpc/web/request.js.map +1 -1
  115. package/lib/cjs/rpc/web/response.js.map +1 -1
  116. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  117. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  118. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  119. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  120. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  121. package/lib/cjs/workspace/Settings.js.map +1 -1
  122. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  123. package/lib/cjs/workspace/Workspace.js.map +1 -1
  124. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  125. package/lib/esm/BackendHubAccess.js.map +1 -1
  126. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  127. package/lib/esm/BisCoreSchema.js.map +1 -1
  128. package/lib/esm/BlobContainerService.js.map +1 -1
  129. package/lib/esm/BriefcaseManager.js.map +1 -1
  130. package/lib/esm/CatalogDb.js.map +1 -1
  131. package/lib/esm/Category.js.map +1 -1
  132. package/lib/esm/ChangeSummaryManager.js +2 -2
  133. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  134. package/lib/esm/ChangedElementsDb.js.map +1 -1
  135. package/lib/esm/ChangesetECAdaptor.js +248 -248
  136. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  137. package/lib/esm/ChannelControl.js.map +1 -1
  138. package/lib/esm/CheckpointManager.js.map +1 -1
  139. package/lib/esm/ClassRegistry.js +5 -5
  140. package/lib/esm/ClassRegistry.js.map +1 -1
  141. package/lib/esm/CloudSqlite.js.map +1 -1
  142. package/lib/esm/CodeService.js.map +1 -1
  143. package/lib/esm/CodeSpecs.js.map +1 -1
  144. package/lib/esm/ConcurrentQuery.js.map +1 -1
  145. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.js.map +1 -1
  148. package/lib/esm/ECDb.js.map +1 -1
  149. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/Element.js.map +1 -1
  152. package/lib/esm/ElementAspect.js.map +1 -1
  153. package/lib/esm/ElementGraphics.js.map +1 -1
  154. package/lib/esm/ElementTreeWalker.js.map +1 -1
  155. package/lib/esm/Entity.js.map +1 -1
  156. package/lib/esm/EntityReferences.js.map +1 -1
  157. package/lib/esm/ExportGraphics.js.map +1 -1
  158. package/lib/esm/ExternalSource.js.map +1 -1
  159. package/lib/esm/FontFile.js.map +1 -1
  160. package/lib/esm/GeoCoordConfig.js.map +1 -1
  161. package/lib/esm/GeographicCRSServices.js.map +1 -1
  162. package/lib/esm/GeometrySummary.js +47 -47
  163. package/lib/esm/GeometrySummary.js.map +1 -1
  164. package/lib/esm/IModelDb.js +8 -8
  165. package/lib/esm/IModelDb.js.map +1 -1
  166. package/lib/esm/IModelDbFonts.js.map +1 -1
  167. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  168. package/lib/esm/IModelHost.js.map +1 -1
  169. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  170. package/lib/esm/IModelJsFs.js.map +1 -1
  171. package/lib/esm/ImageSourceConversion.js.map +1 -1
  172. package/lib/esm/IpcHost.js.map +1 -1
  173. package/lib/esm/LineStyle.js.map +1 -1
  174. package/lib/esm/LocalHub.js +1 -1
  175. package/lib/esm/LocalHub.js.map +1 -1
  176. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  177. package/lib/esm/LockControl.js.map +1 -1
  178. package/lib/esm/Material.js.map +1 -1
  179. package/lib/esm/Model.js.map +1 -1
  180. package/lib/esm/NativeAppStorage.js.map +1 -1
  181. package/lib/esm/NativeHost.js.map +1 -1
  182. package/lib/esm/NavigationRelationship.js.map +1 -1
  183. package/lib/esm/PromiseMemoizer.js.map +1 -1
  184. package/lib/esm/PropertyStore.js.map +1 -1
  185. package/lib/esm/Relationship.js.map +1 -1
  186. package/lib/esm/RpcBackend.js.map +1 -1
  187. package/lib/esm/SQLiteDb.js.map +1 -1
  188. package/lib/esm/Schema.js.map +1 -1
  189. package/lib/esm/SchemaSync.js.map +1 -1
  190. package/lib/esm/SchemaUtils.js.map +1 -1
  191. package/lib/esm/SheetIndex.js.map +1 -1
  192. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  193. package/lib/esm/SqliteStatement.js.map +1 -1
  194. package/lib/esm/StashManager.js.map +1 -1
  195. package/lib/esm/Texture.js.map +1 -1
  196. package/lib/esm/TileStorage.js.map +1 -1
  197. package/lib/esm/TxnManager.js.map +1 -1
  198. package/lib/esm/ViewDefinition.js.map +1 -1
  199. package/lib/esm/ViewStateHydrator.js.map +1 -1
  200. package/lib/esm/ViewStore.js.map +1 -1
  201. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  202. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  203. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  204. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  205. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  206. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  207. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  208. package/lib/esm/core-backend.js.map +1 -1
  209. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  210. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  211. package/lib/esm/domains/GenericElements.js.map +1 -1
  212. package/lib/esm/domains/GenericSchema.js.map +1 -1
  213. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  214. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  215. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  216. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  217. package/lib/esm/internal/HubMock.js.map +1 -1
  218. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  219. package/lib/esm/internal/NativePlatform.js.map +1 -1
  220. package/lib/esm/internal/NoLocks.js.map +1 -1
  221. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  222. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  223. package/lib/esm/internal/Symbols.js.map +1 -1
  224. package/lib/esm/internal/annotations/fields.js.map +1 -1
  225. package/lib/esm/internal/cross-package.js.map +1 -1
  226. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  227. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  228. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  229. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  230. package/lib/esm/rpc/multipart.js.map +1 -1
  231. package/lib/esm/rpc/tracing.js.map +1 -1
  232. package/lib/esm/rpc/web/logging.js.map +1 -1
  233. package/lib/esm/rpc/web/request.js.map +1 -1
  234. package/lib/esm/rpc/web/response.js.map +1 -1
  235. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  236. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  237. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  238. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  239. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  240. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  241. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  242. package/lib/esm/test/AttachDb.test.js +11 -11
  243. package/lib/esm/test/AttachDb.test.js.map +1 -1
  244. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  245. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  246. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  247. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  248. package/lib/esm/test/IModelHost.test.js.map +1 -1
  249. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  250. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  251. package/lib/esm/test/IpcHost.test.js.map +1 -1
  252. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  253. package/lib/esm/test/PrintElementTree.js.map +1 -1
  254. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  255. package/lib/esm/test/RevisionUtility.js.map +1 -1
  256. package/lib/esm/test/SchemaUtils.test.js +25 -25
  257. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  258. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  259. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  260. package/lib/esm/test/TestUtils.js.map +1 -1
  261. package/lib/esm/test/annotations/Fields.test.js +53 -53
  262. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  263. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  264. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  265. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  266. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  267. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  268. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  269. package/lib/esm/test/categories/Category.test.js.map +1 -1
  270. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  271. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  272. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  273. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  274. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  275. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  276. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  277. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  278. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  279. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  280. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  281. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  282. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  283. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  284. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  285. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  287. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  289. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  290. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  291. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  292. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  293. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  294. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  295. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  296. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  297. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  298. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  299. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  300. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  301. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  302. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  303. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  304. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  305. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  306. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  307. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  308. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  309. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  310. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  311. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  312. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  313. package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
  314. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  315. package/lib/esm/test/imageData.js.map +1 -1
  316. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  317. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  318. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  319. package/lib/esm/test/imodel/IModel.test.js +44 -44
  320. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  321. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  322. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  323. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  324. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  325. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  326. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  327. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  328. package/lib/esm/test/index.js.map +1 -1
  329. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  330. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  331. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  332. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  333. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  334. package/lib/esm/test/rpc/response.test.js.map +1 -1
  335. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  336. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  337. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  338. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  339. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  340. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  341. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  342. package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
  343. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  344. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  345. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  346. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  347. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  348. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  349. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  350. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  351. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  352. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  353. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  354. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  355. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  356. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  357. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  358. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  359. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  360. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  361. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  362. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  363. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  364. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  365. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  366. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  367. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  368. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  369. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  370. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  371. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  372. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  373. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  374. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  375. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  376. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  377. package/lib/esm/workspace/Settings.js.map +1 -1
  378. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  379. package/lib/esm/workspace/Workspace.js.map +1 -1
  380. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  381. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSqlStatement.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert } from \"chai\";\r\nimport { DbResult, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { NavigationValue, QueryBinder, QueryOptions, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { Point2d, Point3d, Range3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { _nativeDb, ECDb, ECEnumValue, ECSqlColumnInfo, ECSqlInsertResult, ECSqlStatement, ECSqlValue, ECSqlWriteStatement, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\r\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\r\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nconst selectSingleRow = new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();\r\nasync function query(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions, callback?: (row: any) => void) {\r\n ecdb.saveChanges();\r\n let rowCount: number = 0;\r\n for await (const queryRow of ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n rowCount++;\r\n if (callback)\r\n callback(queryRow.toRow());\r\n }\r\n return rowCount;\r\n}\r\nasync function queryRows(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions) {\r\n ecdb.saveChanges();\r\n const reader = ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n return reader.toArray();\r\n}\r\nasync function queryCount(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions): Promise<number> {\r\n ecdb.saveChanges();\r\n for await (const row of ecdb.createQueryReader(`SELECT COUNT(*) FROM (${ecsql})`, params, { ...config, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes })) {\r\n return row[0] as number;\r\n }\r\n return -1;\r\n}\r\nfunction blobEqual(lhs: any, rhs: any) {\r\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\r\n throw new Error(\"expecting uint8array\");\r\n\r\n if (lhs.byteLength !== rhs.byteLength)\r\n return false;\r\n\r\n for (let i = 0; i < lhs.byteLength; i++) {\r\n if (lhs[i] !== rhs[i])\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\ndescribe(\"ECSqlStatement\", () => {\r\n const outDir = KnownTestLocations.outputDir;\r\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\r\n const blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\r\n const abbreviatedBlobVal = `{\"bytes\":${blobVal.byteLength}}`;\r\n\r\n it(\"check asynchronous step and stepForInsert methods\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n ecdb.saveChanges();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.equal(r.id, \"0x1\");\r\n });\r\n\r\n it(\"concurrent query get meta data\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.stepForInsert();\r\n });\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(30,TIMESTAMP '2019-10-18T12:00:00Z',30)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.stepForInsert();\r\n });\r\n ecdb.saveChanges();\r\n const reader = ecdb.createQueryReader(\"SELECT * FROM ts.Foo\");\r\n let props = await reader.getMetaData();\r\n assert.equal(props.length, 5);\r\n let rows = 0;\r\n while (await reader.step()) {\r\n rows++;\r\n }\r\n assert.equal(rows, 2);\r\n props = await reader.getMetaData();\r\n assert.equal(props.length, 5);\r\n });\r\n it(\"null string accessor\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"nullstring.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(`VALUES(NULL)`, async (stmt: ECSqlStatement) => {\r\n stmt.step();\r\n const str = stmt.getValue(0).getString();\r\n assert.equal(str, \"\");\r\n });\r\n });\r\n it(\"should page results\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n const ROW_COUNT = 27;\r\n // insert test rows\r\n for (let i = 1; i <= ROW_COUNT; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n for (let i = 1; i < ROW_COUNT; i++) {\r\n const rowCount = await queryCount(ecdb, \"SELECT ECInstanceId, ECClassId, n FROM ts.Foo WHERE n <= ?\", new QueryBinder().bindInt(1, i));\r\n assert.equal(rowCount, i);\r\n }\r\n\r\n const temp = await queryRows(ecdb, \"SELECT ECInstanceId FROM ONLY ts.Foo\");\r\n assert.equal(temp.length, ROW_COUNT);\r\n // query page by page\r\n const PAGE_SIZE = 5;\r\n const QUERY = \"SELECT n FROM ts.Foo\";\r\n const EXPECTED_ROW_COUNT = [5, 5, 5, 5, 5, 2];\r\n const ready = [];\r\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\r\n ready.push(queryRows(ecdb, QUERY, undefined, new QueryOptionsBuilder().setLimit({ offset: i * PAGE_SIZE, count: PAGE_SIZE }).getOptions()));\r\n }\r\n // verify if each page has right count of rows\r\n const results = await Promise.all(ready);\r\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\r\n assert.equal(results[i].length, EXPECTED_ROW_COUNT[i]);\r\n }\r\n });\r\n\r\n it(\"paging use cache statement queryRows()\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n const ROW_COUNT = 100;\r\n // insert test rows\r\n for (let i = 1; i <= ROW_COUNT; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n // check if varying page number does not require prepare new statements\r\n ecdb.clearStatementCache();\r\n const rca = await queryRows(ecdb, \"SELECT count(*) as nRows FROM ts.Foo\");\r\n assert.equal(rca[0].nRows, 100); // expe\r\n const rc = await queryCount(ecdb, \"SELECT * FROM ts.Foo\");\r\n assert.equal(rc, 100); // expe\r\n let rowNo = 0;\r\n for await (const row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n assert.equal(row.n, rowNo + 1);\r\n rowNo = rowNo + 1;\r\n }\r\n assert.equal(rowNo, 100); // expect all rows\r\n });\r\n\r\n it(\"should restart query\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"cancelquery.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n const ROW_COUNT = 100;\r\n // insert test rows\r\n for (let i = 1; i <= ROW_COUNT; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n ConcurrentQuery.resetConfig(ecdb[_nativeDb], { globalQuota: { time: 1 }, ignoreDelay: false });\r\n\r\n let cancelled = 0;\r\n let successful = 0;\r\n let rowCount = 0;\r\n const scheduleQuery = async (delay: number) => {\r\n return new Promise<void>(async (resolve, reject) => {\r\n try {\r\n const options = new QueryOptionsBuilder();\r\n options.setDelay(delay);\r\n options.setRowFormat(QueryRowFormat.UseJsPropertyNames);\r\n options.setRestartToken(\"tag\");\r\n for await (const _row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, options.getOptions())) {\r\n rowCount++;\r\n }\r\n successful++;\r\n resolve();\r\n } catch (err: any) {\r\n // we expect query to be cancelled\r\n if (err.errorNumber === DbResult.BE_SQLITE_INTERRUPT) {\r\n cancelled++;\r\n resolve();\r\n } else {\r\n reject(new Error(\"rejected\"));\r\n }\r\n }\r\n });\r\n };\r\n\r\n const queries = [];\r\n queries.push(scheduleQuery(5000));\r\n queries.push(scheduleQuery(0));\r\n\r\n await Promise.all(queries);\r\n // We expect at least one query to be cancelled\r\n assert.isAtLeast(cancelled, 1);\r\n assert.isAtLeast(successful, 1);\r\n assert.isAtLeast(rowCount, 1);\r\n });\r\n it(\"should use cache statement for query()\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n const ROW_COUNT = 27;\r\n // insert test rows\r\n for (let i = 1; i <= ROW_COUNT; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n // check if varying page number does not require prepare new statements\r\n ecdb.clearStatementCache();\r\n for (const _testPageSize of [1, 2, 4, 5, 6, 7, 10, ROW_COUNT]) {\r\n let rowNo = 1;\r\n 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 })) {\r\n assert.equal(row.n, rowNo);\r\n rowNo = rowNo + 1;\r\n }\r\n assert.equal(rowNo, 28); // expect all rows\r\n assert.equal(0, ecdb.getCachedStatementCount()); // there must be single cached statement used with different size pages.\r\n }\r\n });\r\n it(\"concurrent query binding\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n for (let i = 1; i <= 5; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n 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 })) {\r\n assert.equal(row.cnt, 3);\r\n }\r\n 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 })) {\r\n assert.equal(row.cnt, 3);\r\n }\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(\"No parameter index found for parameter name: d.\");\r\n try {\r\n 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 })) {\r\n assert.equal(row.cnt, 3);\r\n }\r\n assert.isFalse(true);\r\n } catch (e) { assert.isNotNull(e); }\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n it(\"check HextoId() and IdToHex() ecsql functions\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n for (let i = 1; i <= 2; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n 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 })) {\r\n assert.equal(row.hexId, row.id);\r\n assert.equal(row.hexId, row.idhex);\r\n }\r\n });\r\n it(\"should bind BeGuid\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"guid\" typeName=\"binary\" extendedTypeName=\"BeGuid\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n const maxRows = 10;\r\n const guids: GuidString[] = [];\r\n for (let i = 0; i < maxRows; i++) {\r\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(guid) values(?)`, async (stmt: ECSqlWriteStatement) => {\r\n guids.push(Guid.createValue());\r\n stmt.bindGuid(1, guids[i]);\r\n return stmt.stepForInsert();\r\n });\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n }\r\n ecdb.saveChanges();\r\n\r\n const uint8arrayToGuid = (guidArray: any) => {\r\n if (!(guidArray instanceof Uint8Array))\r\n throw new Error(\"Expecting a Uint8Array type argument\");\r\n\r\n if (guidArray.byteLength !== 16)\r\n throw new Error(\"Expecting a Uint8Array of length 16\");\r\n\r\n let guidStr: string = \"\";\r\n const part = [0, 4, 6, 8, 10, 16];\r\n for (let z = 0; z < part.length - 1; z++) {\r\n guidArray.subarray(part[z], part[z + 1]).forEach((c) => {\r\n guidStr += (`00${c.toString(16)}`).slice(-2);\r\n });\r\n if (z < part.length - 2)\r\n guidStr += \"-\";\r\n }\r\n return guidStr;\r\n };\r\n const guidToUint8Array = (v: GuidString) => {\r\n if (v.length !== 36)\r\n throw new Error(\"Guid is expected to have 36 characters xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\r\n\r\n const ar = new Uint8Array(16);\r\n const t = v.split(\"-\").join(\"\");\r\n let i = 0;\r\n for (let z = 0; z < 32; z += 2) {\r\n ar[i++] = parseInt(t.substring(z, z + 2), 16);\r\n }\r\n return ar;\r\n };\r\n\r\n const testGuid = \"74da899a-6dde-406c-bf45-f4547d948f00\";\r\n assert.equal(testGuid, uint8arrayToGuid(guidToUint8Array(testGuid)));\r\n let k = 0;\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo ORDER BY ECInstanceId\", undefined, undefined, (row: any) => {\r\n assert.equal(row.guid, guids[k++]);\r\n }), maxRows);\r\n\r\n // following will not return any guid BLOB ? = STRING\r\n for (const guid of guids) {\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid='${guid}'`, undefined, undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 0);\r\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid=StrToGuid('${guid}')`, undefined, undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE GuidToStr(guid)=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindBlob(1, guidToUint8Array(guid)), undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\r\n assert.equal(row.guid, guid);\r\n }), 1);\r\n assert.equal(await query(ecdb, \"SELECT GuidToStr(guid) as gstr FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\r\n assert.equal(row.gstr, guid);\r\n }), 1);\r\n }\r\n });\r\n it(\"should bind Ids\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\r\n\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const verify = async (ecdbToVerify: ECDb, actualRes: ECSqlInsertResult, expectedECInstanceId?: Id64String) => {\r\n if (!expectedECInstanceId) {\r\n assert.notEqual(actualRes.status, DbResult.BE_SQLITE_DONE);\r\n assert.isUndefined(actualRes.id);\r\n return;\r\n }\r\n\r\n assert.equal(actualRes.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(actualRes.id);\r\n assert.equal(actualRes.id!, expectedECInstanceId);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdbToVerify.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, expectedId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.id, expectedECInstanceId);\r\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\r\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\r\n });\r\n 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) => {\r\n assert.equal(row.id, expectedECInstanceId);\r\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\r\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\r\n }), 1);\r\n };\r\n\r\n let expectedId = Id64.fromLocalAndBriefcaseIds(4444, 0);\r\n let r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindId(1, expectedId);\r\n stmt.bindString(2, \"4444.txt\");\r\n return stmt.stepForInsert();\r\n });\r\n await verify(ecdb, r, expectedId);\r\n\r\n expectedId = Id64.fromLocalAndBriefcaseIds(4445, 0);\r\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindId(\"id\", expectedId);\r\n stmt.bindString(\"name\", \"4445.txt\");\r\n\r\n return stmt.stepForInsert();\r\n });\r\n await verify(ecdb, r, expectedId);\r\n\r\n expectedId = Id64.fromLocalAndBriefcaseIds(4446, 0);\r\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues([expectedId, \"4446.txt\"]);\r\n return stmt.stepForInsert();\r\n });\r\n await verify(ecdb, r, expectedId);\r\n\r\n expectedId = Id64.fromLocalAndBriefcaseIds(4447, 0);\r\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues({ id: expectedId, name: \"4447.txt\" });\r\n return stmt.stepForInsert();\r\n });\r\n await verify(ecdb, r, expectedId);\r\n });\r\n\r\n it(\"should bind numeric and date strings\", async () => {\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\r\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\r\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\r\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\r\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\r\n slm.append().error().category(\"ECDb\").message(/only BindDateTime or BindText can be called for a column of the DateTime type/gm);\r\n\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumericanddatestrings.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n ecdb.saveChanges();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n const ecsqln = \"SELECT 1 FROM ts.Foo WHERE n=?\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(ecsqln, async (stmt: ECSqlStatement) => {\r\n const nNum: number = 20;\r\n const nStr: string = \"20\";\r\n const nDt: string = \"2019-01-21T12:00:00Z\";\r\n const nHexStr: string = \"0x14\";\r\n\r\n stmt.bindInteger(1, nNum);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindInt(1, nNum), selectSingleRow), 1);\r\n\r\n stmt.bindValue(1, nNum);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(nNum);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([nNum]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, nStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nStr), selectSingleRow), 1);\r\n\r\n stmt.bindValue(1, nStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(nStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([nStr]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, nDt);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nDt), selectSingleRow), 0);\r\n\r\n stmt.bindValue(1, nDt);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(nDt);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([nDt]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, nHexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nHexStr), selectSingleRow), 0);\r\n\r\n stmt.bindValue(1, nHexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(nHexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([nHexStr]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n\r\n const ecsqldt = \"SELECT 1 FROM ts.Foo WHERE dt=?\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(ecsqldt, async (stmt: ECSqlStatement) => {\r\n const dtStr: string = \"2018-10-18T12:00:00Z\";\r\n const num: number = 2458410;\r\n const str: string = \"2458410\";\r\n const hexStr: string = \"0x25832a\";\r\n\r\n stmt.bindDateTime(1, dtStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, new QueryBinder().bindString(1, dtStr)), 1);\r\n stmt.bindString(1, dtStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValue(1, dtStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(dtStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([dtStr]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindInteger(1, num));\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\r\n assert.throw(() => stmt.bindValue(1, num));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.getBinder(1).bind(num));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindValues([num]));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindString(1, str));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindValue(1, str));\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\r\n\r\n assert.throw(() => stmt.getBinder(1).bind(str));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindValues([str]));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindString(1, hexStr));\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\r\n\r\n assert.throw(() => stmt.bindValue(1, hexStr));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.getBinder(1).bind(hexStr));\r\n stmt.clearBindings();\r\n\r\n assert.throw(() => stmt.bindValues([hexStr]));\r\n stmt.clearBindings();\r\n });\r\n\r\n const ecsqlfooId = \"SELECT 1 FROM ts.Foo WHERE fooId=?\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(ecsqlfooId, async (stmt: ECSqlStatement) => {\r\n const num: number = 20;\r\n const str: string = \"20\";\r\n const dt: string = \"2019-01-21T12:00:00Z\";\r\n const hexStr: string = \"0x14\";\r\n\r\n stmt.bindId(1, hexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\r\n\r\n stmt.bindValues([hexStr]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, hexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValue(1, hexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(hexStr);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([hexStr]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, str);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\r\n\r\n stmt.bindValue(1, str);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(str);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([str]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindInteger(1, num);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\r\n\r\n stmt.bindValue(1, num);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(num);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([num]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindString(1, dt);\r\n 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\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([dt])), 0);\r\n\r\n stmt.bindValue(1, dt);\r\n 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\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.getBinder(1).bind(dt);\r\n 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\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([dt]);\r\n 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\");\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n\r\n it(\"should bind numbers\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumbers.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Description\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const doubleVal: number = 3.5;\r\n let id = await ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindDouble')\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindDouble(1, doubleVal);\r\n stmt.bindDouble(2, doubleVal);\r\n stmt.bindDouble(3, doubleVal);\r\n stmt.bindDouble(4, doubleVal);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, doubleVal);\r\n assert.equal(row.i, 3);\r\n assert.equal(row.l, 3);\r\n assert.equal(row.s, \"3.5\");\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { limit: { count: 1 } }, (row: any) => {\r\n assert.equal(row.d, doubleVal);\r\n assert.equal(row.i, 3);\r\n assert.equal(row.l, 3);\r\n assert.equal(row.s, \"3.5\");\r\n }), 1);\r\n\r\n const smallIntVal: number = 3;\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, small int')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, smallIntVal);\r\n stmt.bindInteger(2, smallIntVal);\r\n stmt.bindInteger(3, smallIntVal);\r\n stmt.bindInteger(4, smallIntVal);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, smallIntVal);\r\n assert.equal(row.i, smallIntVal);\r\n assert.equal(row.l, smallIntVal);\r\n assert.equal(row.s, \"3\");\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, smallIntVal);\r\n assert.equal(row.i, smallIntVal);\r\n assert.equal(row.l, smallIntVal);\r\n assert.equal(row.s, \"3\");\r\n }), 1);\r\n\r\n const largeUnsafeNumber: number = 12312312312312323654; // too large for int64, but fits into uint64\r\n assert.isFalse(Number.isSafeInteger(largeUnsafeNumber));\r\n const largeUnsafeNumberStr: string = \"12312312312312323654\";\r\n const largeUnsafeNumberHexStr: string = \"0xaade1ed08b0b5e46\";\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeUnsafeNumberStr);\r\n stmt.bindInteger(2, largeUnsafeNumberStr);\r\n stmt.bindInteger(3, largeUnsafeNumberStr);\r\n stmt.bindInteger(4, largeUnsafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.si, largeUnsafeNumberStr);\r\n assert.equal(row.hi, largeUnsafeNumberHexStr);\r\n assert.equal(row.sl, largeUnsafeNumberStr);\r\n assert.equal(row.hl, largeUnsafeNumberHexStr);\r\n });\r\n\r\n // 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) => {\r\n // assert.equal(row.si, largeUnsafeNumberStr);\r\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\r\n // assert.equal(row.sl, largeUnsafeNumberStr);\r\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\r\n // }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeUnsafeNumberHexStr);\r\n stmt.bindInteger(2, largeUnsafeNumberHexStr);\r\n stmt.bindInteger(3, largeUnsafeNumberHexStr);\r\n stmt.bindInteger(4, largeUnsafeNumberHexStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.si, largeUnsafeNumberStr);\r\n assert.equal(row.hi, largeUnsafeNumberHexStr);\r\n assert.equal(row.sl, largeUnsafeNumberStr);\r\n assert.equal(row.hl, largeUnsafeNumberHexStr);\r\n });\r\n\r\n // 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) => {\r\n // assert.equal(row.si, largeUnsafeNumberStr);\r\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\r\n // assert.equal(row.sl, largeUnsafeNumberStr);\r\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\r\n // }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeUnsafeNumberStr);\r\n stmt.bindString(2, largeUnsafeNumberStr);\r\n stmt.bindString(3, largeUnsafeNumberStr);\r\n stmt.bindString(4, largeUnsafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // uint64 cannot be bound as string in SQLite. They get converted to reals\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.isNumber(row.d);\r\n assert.isNumber(row.i);\r\n assert.isNumber(row.l);\r\n assert.equal(row.s, largeUnsafeNumberStr);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.isNumber(row.d);\r\n assert.isNumber(row.i);\r\n assert.isNumber(row.l);\r\n assert.equal(row.s, largeUnsafeNumberStr);\r\n }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeUnsafeNumberHexStr);\r\n stmt.bindString(2, largeUnsafeNumberHexStr);\r\n stmt.bindString(3, largeUnsafeNumberHexStr);\r\n stmt.bindString(4, largeUnsafeNumberHexStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeUnsafeNumberHexStr);\r\n assert.equal(row.i, largeUnsafeNumberHexStr);\r\n assert.equal(row.l, largeUnsafeNumberHexStr);\r\n assert.equal(row.s, largeUnsafeNumberHexStr);\r\n });\r\n\r\n 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: any) => {\r\n assert.equal(row.d, largeUnsafeNumberHexStr);\r\n assert.equal(row.i, largeUnsafeNumberHexStr);\r\n assert.equal(row.l, largeUnsafeNumberHexStr);\r\n assert.equal(row.s, largeUnsafeNumberHexStr);\r\n }), 1);\r\n\r\n const largeNegUnsafeNumber: number = -123123123123123236;\r\n assert.isFalse(Number.isSafeInteger(largeNegUnsafeNumber));\r\n const largeNegUnsafeNumberStr: string = \"-123123123123123236\";\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeNegUnsafeNumberStr);\r\n stmt.bindInteger(2, largeNegUnsafeNumberStr);\r\n stmt.bindInteger(3, largeNegUnsafeNumberStr);\r\n stmt.bindInteger(4, largeNegUnsafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.i, largeNegUnsafeNumberStr);\r\n assert.equal(row.l, largeNegUnsafeNumberStr);\r\n assert.equal(row.s, largeNegUnsafeNumberStr);\r\n });\r\n\r\n 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: any) => {\r\n assert.equal(row.i, largeNegUnsafeNumberStr);\r\n assert.equal(row.l, largeNegUnsafeNumberStr);\r\n assert.equal(row.s, largeNegUnsafeNumberStr);\r\n }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeNegUnsafeNumberStr);\r\n stmt.bindString(2, largeNegUnsafeNumberStr);\r\n stmt.bindString(3, largeNegUnsafeNumberStr);\r\n stmt.bindString(4, largeNegUnsafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.i, largeNegUnsafeNumberStr);\r\n assert.equal(row.l, largeNegUnsafeNumberStr);\r\n assert.equal(row.s, largeNegUnsafeNumberStr);\r\n });\r\n\r\n 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: any) => {\r\n assert.equal(row.i, largeNegUnsafeNumberStr);\r\n assert.equal(row.l, largeNegUnsafeNumberStr);\r\n assert.equal(row.s, largeNegUnsafeNumberStr);\r\n }), 1);\r\n\r\n const largeSafeNumber: number = 1231231231231232;\r\n assert.isTrue(Number.isSafeInteger(largeSafeNumber));\r\n const largeSafeNumberStr: string = largeSafeNumber.toString();\r\n const largeSafeNumberHexStr: string = \"0x45fcc5c2c8500\";\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeSafeNumber);\r\n stmt.bindInteger(2, largeSafeNumber);\r\n stmt.bindInteger(3, largeSafeNumber);\r\n stmt.bindInteger(4, largeSafeNumber);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.si, largeSafeNumberStr);\r\n assert.equal(row.hi, largeSafeNumberHexStr);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.sl, largeSafeNumberStr);\r\n assert.equal(row.hl, largeSafeNumberHexStr);\r\n assert.equal(row.s, largeSafeNumberStr);\r\n });\r\n\r\n // 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) => {\r\n // assert.equal(row.d, largeSafeNumber);\r\n // assert.equal(row.i, largeSafeNumber);\r\n // assert.equal(row.si, largeSafeNumberStr);\r\n // assert.equal(row.hi, largeSafeNumberHexStr);\r\n // assert.equal(row.l, largeSafeNumber);\r\n // assert.equal(row.sl, largeSafeNumberStr);\r\n // assert.equal(row.hl, largeSafeNumberHexStr);\r\n // assert.equal(row.s, largeSafeNumberStr);\r\n // });\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeSafeNumberStr);\r\n stmt.bindInteger(2, largeSafeNumberStr);\r\n stmt.bindInteger(3, largeSafeNumberStr);\r\n stmt.bindInteger(4, largeSafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr);\r\n }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeSafeNumberHexStr);\r\n stmt.bindInteger(2, largeSafeNumberHexStr);\r\n stmt.bindInteger(3, largeSafeNumberHexStr);\r\n stmt.bindInteger(4, largeSafeNumberHexStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\r\n }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeSafeNumberStr);\r\n stmt.bindString(2, largeSafeNumberStr);\r\n stmt.bindString(3, largeSafeNumberStr);\r\n stmt.bindString(4, largeSafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeSafeNumber);\r\n assert.equal(row.i, largeSafeNumber);\r\n assert.equal(row.l, largeSafeNumber);\r\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\r\n }), 1);\r\n\r\n // SQLite does not parse hex strs bound as strings.\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeSafeNumberHexStr);\r\n stmt.bindString(2, largeSafeNumberHexStr);\r\n stmt.bindString(3, largeSafeNumberHexStr);\r\n stmt.bindString(4, largeSafeNumberHexStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeSafeNumberHexStr);\r\n assert.equal(row.i, largeSafeNumberHexStr);\r\n assert.equal(row.l, largeSafeNumberHexStr);\r\n assert.equal(row.s, largeSafeNumberHexStr);\r\n });\r\n\r\n 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: any) => {\r\n assert.equal(row.d, largeSafeNumberHexStr);\r\n assert.equal(row.i, largeSafeNumberHexStr);\r\n assert.equal(row.l, largeSafeNumberHexStr);\r\n assert.equal(row.s, largeSafeNumberHexStr);\r\n }), 1);\r\n\r\n const largeNegSafeNumber: number = -1231231231231232;\r\n assert.isTrue(Number.isSafeInteger(largeNegSafeNumber));\r\n const largeNegSafeNumberStr: string = largeNegSafeNumber.toString();\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeNegSafeNumber);\r\n stmt.bindInteger(2, largeNegSafeNumber);\r\n stmt.bindInteger(3, largeNegSafeNumber);\r\n stmt.bindInteger(4, largeNegSafeNumber);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n }), 1);\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindInteger(1, largeNegSafeNumberStr);\r\n stmt.bindInteger(2, largeNegSafeNumberStr);\r\n stmt.bindInteger(3, largeNegSafeNumberStr);\r\n stmt.bindInteger(4, largeNegSafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n });\r\n\r\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n });\r\n\r\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, largeNegSafeNumberStr);\r\n stmt.bindString(2, largeNegSafeNumberStr);\r\n stmt.bindString(3, largeNegSafeNumberStr);\r\n stmt.bindString(4, largeNegSafeNumberStr);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n return r.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n });\r\n\r\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\r\n assert.equal(row.d, largeNegSafeNumber);\r\n assert.equal(row.i, largeNegSafeNumber);\r\n assert.equal(row.l, largeNegSafeNumber);\r\n assert.equal(row.s, largeNegSafeNumberStr);\r\n });\r\n\r\n });\r\n\r\n it(\"should bind primitives\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindprimitives.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const boolVal = true;\r\n const doubleVal = 3.5;\r\n const dtVal: string = \"2018-01-23T12:24:00.000\";\r\n const intVal = 3;\r\n const p2dVal = new Point2d(1, 2);\r\n const p3dVal = new Point3d(1, 2, 3);\r\n const strVal: string = \"Hello world\";\r\n\r\n const verify = async (expectedId: Id64String) => {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, expectedId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.deepEqual(row.bl, blobVal);\r\n const f64 = new Float64Array(row.bl.buffer);\r\n const r2 = new Range3d(...f64);\r\n assert.deepEqual(r2, testRange);\r\n assert.equal(row.bo, boolVal);\r\n assert.equal(row.d, doubleVal);\r\n assert.equal(row.dt, dtVal);\r\n assert.equal(row.i, intVal);\r\n assert.equal(row.p2d.x, p2dVal.x);\r\n assert.equal(row.p2d.y, p2dVal.y);\r\n assert.equal(row.p3d.x, p3dVal.x);\r\n assert.equal(row.p3d.y, p3dVal.y);\r\n assert.equal(row.p3d.z, p3dVal.z);\r\n assert.equal(row.s, strVal);\r\n\r\n assert.deepEqual(row.s_bl, blobVal);\r\n assert.equal(row.s_bo, boolVal);\r\n assert.equal(row.s_d, doubleVal);\r\n assert.equal(row.s_dt, dtVal);\r\n assert.equal(row.s_i, intVal);\r\n assert.equal(row.s_p2d.x, p2dVal.x);\r\n assert.equal(row.s_p2d.y, p2dVal.y);\r\n assert.equal(row.s_p3d.x, p3dVal.x);\r\n assert.equal(row.s_p3d.y, p3dVal.y);\r\n assert.equal(row.s_p3d.z, p3dVal.z);\r\n assert.equal(row.s_s, strVal);\r\n\r\n 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: any) => {\r\n assert.deepEqual(row1.bl, blobVal);\r\n const f64a = new Float64Array(row1.bl.buffer);\r\n const r2a = new Range3d(...f64a);\r\n assert.deepEqual(r2a, testRange);\r\n assert.equal(row1.bo, boolVal);\r\n assert.equal(row1.d, doubleVal);\r\n assert.equal(row1.dt, dtVal);\r\n assert.equal(row1.i, intVal);\r\n assert.equal(row1.p2d.x, p2dVal.x);\r\n assert.equal(row1.p2d.y, p2dVal.y);\r\n assert.equal(row1.p3d.x, p3dVal.x);\r\n assert.equal(row1.p3d.y, p3dVal.y);\r\n assert.equal(row1.p3d.z, p3dVal.z);\r\n assert.equal(row1.s, strVal);\r\n\r\n assert.deepEqual(row1.s_bl, blobVal);\r\n assert.equal(row1.s_bo, boolVal);\r\n assert.equal(row1.s_d, doubleVal);\r\n assert.equal(row1.s_dt, dtVal);\r\n assert.equal(row1.s_i, intVal);\r\n assert.equal(row1.s_p2d.x, p2dVal.x);\r\n assert.equal(row1.s_p2d.y, p2dVal.y);\r\n assert.equal(row1.s_p3d.x, p3dVal.x);\r\n assert.equal(row1.s_p3d.y, p3dVal.y);\r\n assert.equal(row1.s_p3d.z, p3dVal.z);\r\n assert.equal(row1.s_s, strVal);\r\n }), 1);\r\n });\r\n };\r\n\r\n const ids = new Array<Id64String>();\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindBlob(1, blobVal);\r\n stmt.bindBoolean(2, boolVal);\r\n stmt.bindDouble(3, doubleVal);\r\n stmt.bindDateTime(4, dtVal);\r\n stmt.bindInteger(5, intVal);\r\n stmt.bindPoint2d(6, p2dVal);\r\n stmt.bindPoint3d(7, p3dVal);\r\n stmt.bindString(8, strVal);\r\n stmt.bindBlob(9, blobVal);\r\n stmt.bindBoolean(10, boolVal);\r\n stmt.bindDouble(11, doubleVal);\r\n stmt.bindDateTime(12, dtVal);\r\n stmt.bindInteger(13, intVal);\r\n stmt.bindPoint2d(14, p2dVal);\r\n stmt.bindPoint3d(15, p3dVal);\r\n stmt.bindString(16, strVal);\r\n\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n ids.push(res.id!);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n stmt.bindValues([blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal, blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal]);\r\n\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n ids.push(res.id!);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindBlob(\"bl\", blobVal);\r\n stmt.bindBoolean(\"bo\", boolVal);\r\n stmt.bindDouble(\"d\", doubleVal);\r\n stmt.bindDateTime(\"dt\", dtVal);\r\n stmt.bindInteger(\"i\", intVal);\r\n stmt.bindPoint2d(\"p2d\", p2dVal);\r\n stmt.bindPoint3d(\"p3d\", p3dVal);\r\n stmt.bindString(\"s\", strVal);\r\n\r\n stmt.bindBlob(\"s_bl\", blobVal);\r\n stmt.bindBoolean(\"s_bo\", boolVal);\r\n stmt.bindDouble(\"s_d\", doubleVal);\r\n stmt.bindDateTime(\"s_dt\", dtVal);\r\n stmt.bindInteger(\"s_i\", intVal);\r\n stmt.bindPoint2d(\"s_p2d\", p2dVal);\r\n stmt.bindPoint3d(\"s_p3d\", p3dVal);\r\n stmt.bindString(\"s_s\", strVal);\r\n\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n ids.push(res.id!);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n stmt.bindValues({\r\n bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal,\r\n i: intVal, p2d: p2dVal, p3d: p3dVal, s: strVal,\r\n s_bl: blobVal, s_bo: boolVal, s_d: doubleVal, s_dt: dtVal,\r\n s_i: intVal, s_p2d: p2dVal, s_p3d: p3dVal, s_s: strVal,\r\n });\r\n\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n ids.push(res.id!);\r\n });\r\n\r\n for (const id of ids) {\r\n await verify(id);\r\n }\r\n });\r\n\r\n it(\"should bind structs\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindstructs.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const structVal = {\r\n bl: blobVal, bo: true, d: 3.5,\r\n dt: \"2018-01-23T12:24:00.000\",\r\n i: 3, p2d: new Point2d(1, 2), p3d: new Point3d(1, 2, 3), s: \"Hello World\",\r\n };\r\n\r\n const verify = async (expectedId: Id64String) => {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, expectedId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.isTrue(blobEqual(row.struct.bl, structVal.bl));\r\n assert.equal(row.struct.bo, structVal.bo);\r\n assert.equal(row.struct.d, structVal.d);\r\n assert.equal(row.struct.dt, structVal.dt);\r\n assert.equal(row.struct.i, structVal.i);\r\n assert.equal(row.struct.p2d.x, structVal.p2d.x);\r\n assert.equal(row.struct.p2d.y, structVal.p2d.y);\r\n assert.equal(row.struct.p3d.x, structVal.p3d.x);\r\n assert.equal(row.struct.p3d.y, structVal.p3d.y);\r\n assert.equal(row.struct.p3d.z, structVal.p3d.z);\r\n assert.equal(row.struct.s, structVal.s);\r\n\r\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\r\n assert.isTrue(blobEqual(row1.struct.bl, structVal.bl));\r\n assert.equal(row1.struct.bo, structVal.bo);\r\n assert.equal(row1.struct.d, structVal.d);\r\n assert.equal(row1.struct.dt, structVal.dt);\r\n assert.equal(row1.struct.i, structVal.i);\r\n assert.equal(row1.struct.p2d.x, structVal.p2d.x);\r\n assert.equal(row1.struct.p2d.y, structVal.p2d.y);\r\n assert.equal(row1.struct.p3d.x, structVal.p3d.x);\r\n assert.equal(row1.struct.p3d.y, structVal.p3d.y);\r\n assert.equal(row1.struct.p3d.z, structVal.p3d.z);\r\n assert.equal(row1.struct.s, structVal.s);\r\n }), 1);\r\n });\r\n };\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindStruct(1, structVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues([structVal]);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindStruct(\"str\", structVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues({ str: structVal });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n });\r\n\r\n it(\"should bind arrays\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindarrays.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\r\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\r\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const intArray = [1, 2, 3];\r\n const dtArray = [\"2018-01-23T00:00:00.000\", \"2018-01-23T16:39:00.000\"];\r\n const addressArray = [{ city: \"London\", zip: 10000 }, { city: \"Manchester\", zip: 20000 }, { city: \"Edinburgh\", zip: 30000 }];\r\n\r\n const verify = async (expectedId: Id64String) => {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await ecdb.withPreparedStatement(\"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, expectedId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n\r\n // don't know why assert.equal doesn't work on arrays directly\r\n assert.equal(row.i_Array.length, intArray.length);\r\n for (let i = 0; i < intArray.length; i++) {\r\n assert.equal(row.i_Array[i], intArray[i]);\r\n }\r\n\r\n assert.equal(row.dt_Array.length, dtArray.length);\r\n for (let i = 0; i < dtArray.length; i++) {\r\n assert.equal(row.dt_Array[i], dtArray[i]);\r\n }\r\n\r\n assert.equal(row.addresses.length, addressArray.length);\r\n for (let i = 0; i < addressArray.length; i++) {\r\n assert.equal(row.addresses[i].city, addressArray[i].city);\r\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\r\n }\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row: any) => {\r\n // don't know why assert.equal doesn't work on arrays directly\r\n assert.equal(row.i_Array.length, intArray.length);\r\n for (let i = 0; i < intArray.length; i++) {\r\n assert.equal(row.i_Array[i], intArray[i]);\r\n }\r\n\r\n assert.equal(row.dt_Array.length, dtArray.length);\r\n for (let i = 0; i < dtArray.length; i++) {\r\n assert.equal(row.dt_Array[i], dtArray[i]);\r\n }\r\n\r\n assert.equal(row.addresses.length, addressArray.length);\r\n for (let i = 0; i < addressArray.length; i++) {\r\n assert.equal(row.addresses[i].city, addressArray[i].city);\r\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\r\n }\r\n }), 1);\r\n };\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindArray(1, intArray);\r\n stmt.bindArray(2, dtArray);\r\n stmt.bindArray(3, addressArray);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues([intArray, dtArray, addressArray]);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindArray(\"iarray\", intArray);\r\n stmt.bindArray(\"dtarray\", dtArray);\r\n stmt.bindArray(\"addresses\", addressArray);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n\r\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValues({ iarray: intArray, dtarray: dtArray, addresses: addressArray });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n await verify(res.id!);\r\n });\r\n });\r\n\r\n it(\"should bind navigation\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\r\n </ECEntityClass>\r\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Parent\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Child\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n </ECSchema>`);\r\n\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n const childIds = new Array<Id64String>();\r\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, \"Child 1\");\r\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n });\r\n\r\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(:name,:parent)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(\"name\", \"Child 3\");\r\n stmt.bindNavigation(\"parent\", { id: parentId, relClassName: \"Test.ParentHasChildren\" });\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues({ name: \"Child 4\", parent: { id: parentId, relClassName: \"Test.ParentHasChildren\" } });\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\r\n let rowCount: number = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n const row = stmt.getRow();\r\n assert.equal(row.name, `Child ${rowCount}`);\r\n const parent: NavigationValue = row.parent as NavigationValue;\r\n assert.equal(parent.id, parentId);\r\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\r\n }\r\n assert.equal(rowCount, 4);\r\n });\r\n\r\n let rowCount2: number = 0;\r\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\r\n rowCount2++;\r\n assert.equal(row.name, `Child ${rowCount2}`);\r\n const parent: NavigationValue = row.parent as NavigationValue;\r\n assert.equal(parent.id, parentId);\r\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\r\n }), 4);\r\n });\r\n\r\n it(\"should bind Range3d for parameter in spatial sql function\", async () => {\r\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ECSqlStatement\", \"BindRange3d.bim\"), { rootSubject: { name: \"BindRange3d\" } });\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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\",\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n (stmt: ECSqlStatement) => {\r\n stmt.bindRange3d(1, new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0));\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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\",\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n (stmt: ECSqlStatement) => {\r\n stmt.bindValues([new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0)]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n } finally {\r\n iModel.saveChanges();\r\n iModel.close();\r\n }\r\n });\r\n\r\n it(\"should bind Range3d\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindrange3d.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Range3d\" typeName=\"binary\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo([Range3d]) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindRange3d(1, testRange);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n ecdb.saveChanges();\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT [Range3d] FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const rangeBlob: Uint8Array = stmt.getValue(0).getBlob();\r\n const rangeFloatArray = new Float64Array(rangeBlob.buffer);\r\n assert.equal(rangeFloatArray.length, 6);\r\n const actualRange = new Range3d(...rangeFloatArray);\r\n assert.isTrue(actualRange.isAlmostEqual(testRange));\r\n });\r\n });\r\n\r\n it(\"should bind IdSets\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\r\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n idNumbers.forEach((idNum: number) => {\r\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\r\n stmt.bindId(1, expectedId);\r\n stmt.bindString(2, `${idNum}.txt`);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(r.id);\r\n assert.equal(r.id!, expectedId);\r\n ecdb.saveChanges();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\r\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = confstmt.getRow();\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\r\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\r\n });\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", (stmt: ECSqlStatement) => {\r\n let idSet: Id64String[] = [];\r\n stmt.bindIdSet(1, idSet);\r\n let result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\r\n stmt.bindIdSet(1, idSet);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n let row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[2]}.txt`);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n idSet.push(idNumbers[0].toString());\r\n stmt.bindIdSet(1, idSet);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[2]}.txt`);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[0]}.txt`);\r\n });\r\n });\r\n\r\n it(\"should bind IdSets to IdSet Virtual Table\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\r\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n idNumbers.forEach((idNum: number) => {\r\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\r\n stmt.bindId(1, expectedId);\r\n stmt.bindString(2, `${idNum}.txt`);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(r.id);\r\n assert.equal(r.id!, expectedId);\r\n ecdb.saveChanges();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\r\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = confstmt.getRow();\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\r\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\r\n });\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\r\n let idSet: Id64String[] = [];\r\n stmt.bindIdSet(1, idSet);\r\n let result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\r\n stmt.bindIdSet(1, idSet);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n let row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[2]}.txt`);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n idSet.push(idNumbers[0].toString());\r\n stmt.bindIdSet(1, idSet);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[2]}.txt`);\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_ROW);\r\n row = stmt.getRow();\r\n assert.equal(row.name, `${idNumbers[0]}.txt`);\r\n });\r\n });\r\n\r\n it(\"Error Checking For binding to IdSet statements\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\r\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n idNumbers.forEach((idNum: number) => {\r\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\r\n stmt.bindId(1, expectedId);\r\n stmt.bindString(2, `${idNum}.txt`);\r\n const r: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(r.id);\r\n assert.equal(r.id!, expectedId);\r\n ecdb.saveChanges();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\r\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = confstmt.getRow();\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\r\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\r\n });\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, ECVLib.IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\r\n let idSet: Id64String[] = [];\r\n stmt.bindIdSet(1, idSet);\r\n let result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n idSet = [\"0X1\", \"ABC\"];\r\n try {\r\n stmt.bindIdSet(1, idSet);\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Error binding id set\");\r\n }\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n try {\r\n stmt.bindId(1, idNumbers[0].toString());\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Error binding Id\");\r\n }\r\n result = stmt.step();\r\n assert.equal(result, DbResult.BE_SQLITE_DONE);\r\n });\r\n });\r\n\r\n /* This test doesn't do anything specific with the binder life time but just runs a few scenarios\r\n with and without statement cache to test that stuff works fine */\r\n it(\"check ECSqlBinder life time\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecsqlbinderlifetime.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECStructClass typeName=\"Address\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Street\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n <ECStructProperty propertyName=\"Location\" typeName=\"Address\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n let id1: Id64String = \"\", id2: Id64String = \"\";\r\n\r\n // *** test without statement cache\r\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, \"Mary Miller\");\r\n stmt.bindInteger(2, 30);\r\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\r\n\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n id1 = res.id!;\r\n assert.isTrue(Id64.isValidId64(id1));\r\n });\r\n\r\n\r\n // *** test withstatement cache\r\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, \"Mary Miller\");\r\n stmt.bindInteger(2, 30);\r\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\r\n\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n id2 = res.id!;\r\n assert.isTrue(Id64.isValidId64(id2));\r\n });\r\n\r\n {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n using stmt = ecdb.prepareStatement(\"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\");\r\n let rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n const row = stmt.getRow();\r\n if (rowCount === 1)\r\n assert.equal(row.id, id1);\r\n else\r\n assert.equal(row.id, id2);\r\n\r\n assert.equal(row.className, \"Test.Person\");\r\n assert.equal(row.name, \"Mary Miller\");\r\n assert.equal(row.age, 30);\r\n assert.equal(row.location.street, \"2000 Main Street\");\r\n assert.equal(row.location.city, \"New York\");\r\n assert.equal(row.location.zip, 12311);\r\n }\r\n assert.equal(rowCount, 2);\r\n }\r\n\r\n let rowCount2: number = 0;\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\", QueryBinder.from([]), undefined, (row: any) => {\r\n rowCount2++;\r\n if (rowCount2 === 1)\r\n assert.equal(row.id, id1);\r\n else\r\n assert.equal(row.id, id2);\r\n\r\n assert.equal(row.className, \"Test.Person\");\r\n assert.equal(row.name, \"Mary Miller\");\r\n assert.equal(row.age, 30);\r\n assert.equal(row.location.street, \"2000 Main Street\");\r\n assert.equal(row.location.city, \"New York\");\r\n assert.equal(row.location.zip, 12311);\r\n }), 2);\r\n });\r\n\r\n it(\"getRow() with primitives values\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getprimitives.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const boolVal: boolean = true;\r\n const doubleVal: number = 3.5;\r\n const dtVal: string = \"2018-01-23T12:24:00.000\";\r\n const intVal: number = 3;\r\n const p2dVal = new Point2d(1, 2);\r\n const p3dVal = new Point3d(1, 2, 3);\r\n const strVal: string = \"Hello world\";\r\n\r\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S) VALUES(?,?,?,?,?,?,?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindBlob(1, blobVal);\r\n stmt.bindBoolean(2, boolVal);\r\n stmt.bindDouble(3, doubleVal);\r\n stmt.bindDateTime(4, dtVal);\r\n stmt.bindInteger(5, intVal);\r\n stmt.bindPoint2d(6, p2dVal);\r\n stmt.bindPoint3d(7, p3dVal);\r\n stmt.bindString(8, strVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n return res.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.id, id);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, blobVal);\r\n assert.equal(row.bo, boolVal);\r\n assert.equal(row.d, doubleVal);\r\n assert.equal(row.dt, dtVal);\r\n assert.equal(row.i, intVal);\r\n assert.equal(row.p2d.x, p2dVal.x);\r\n assert.equal(row.p2d.y, p2dVal.y);\r\n assert.equal(row.p3d.x, p3dVal.x);\r\n assert.equal(row.p3d.y, p3dVal.y);\r\n assert.equal(row.p3d.z, p3dVal.z);\r\n assert.equal(row.s, strVal);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, id);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, abbreviatedBlobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, id);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, blobVal);\r\n }), 1);\r\n\r\n // 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) => {\r\n // assert.equal(row.id, id);\r\n // assert.equal(row.className, \"Test.Foo\");\r\n // assert.deepEqual(row.bl, blobVal);\r\n // assert.equal(row.bo, boolVal);\r\n // assert.equal(row.d, doubleVal);\r\n // assert.equal(row.dt, dtVal);\r\n // assert.equal(row.i, intVal);\r\n // assert.equal(row.p2d.x, p2dVal.x);\r\n // assert.equal(row.p2d.y, p2dVal.y);\r\n // assert.equal(row.p3d.x, p3dVal.x);\r\n // assert.equal(row.p3d.y, p3dVal.y);\r\n // assert.equal(row.p3d.z, p3dVal.z);\r\n // assert.equal(row.s, strVal);\r\n // }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.deepEqual(row.blobby, blobVal);\r\n assert.equal(row[\"[I] + 10\"], intVal + 10);\r\n assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\r\n assert.equal(row.capitalS, strVal.toUpperCase());\r\n });\r\n\r\n // 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) => {\r\n // assert.deepEqual(row.blobby, blobVal);\r\n // assert.equal(row[\"[I] + 10\"], intVal + 10);\r\n // assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\r\n // assert.equal(row.capitalS, strVal.toUpperCase());\r\n // }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const testSchemaId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECSchemaDef WHERE Name='Test'\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n return Id64.fromJSON(row.id);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const fooClassId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n return Id64.fromJSON(row.id);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.id, testSchemaId);\r\n assert.equal(row.id_1, fooClassId);\r\n });\r\n\r\n 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: any) => {\r\n assert.equal(row.id, testSchemaId);\r\n assert.equal(row.id_1, fooClassId);\r\n }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT count(*) cnt FROM meta.ECSchemaDef\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.isDefined(row.cnt);\r\n assert.equal(typeof (row.cnt), \"number\");\r\n assert.equal(row.cnt, 6);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT count(*) cnt FROM meta.ECSchemaDef\", QueryBinder.from([]), selectSingleRow, (row: any) => {\r\n assert.isDefined(row.cnt);\r\n assert.equal(typeof (row.cnt), \"number\");\r\n assert.equal(row.cnt, 6);\r\n }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(typeof (row[\"1\"]), \"number\");\r\n assert.equal(row[\"1\"], 1);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\r\n assert.equal(typeof (row[\"1\"]), \"number\");\r\n assert.equal(row[\"1\"], 1);\r\n }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(Object.entries(row).length, 0);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\r\n assert.equal(Object.entries(row).length, 0);\r\n }), 1);\r\n });\r\n\r\n it(\"getRow() with abbreviated blobs\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getblobs.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const singleBlobVal = blobVal.slice(0, 1);\r\n const abbreviatedSingleBlobVal = `{\"bytes\":${singleBlobVal.byteLength}}`;\r\n const emptyBlobVal = new Uint8Array();\r\n\r\n const fullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindBlob(1, blobVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n return res.id!;\r\n });\r\n\r\n const singleId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindBlob(1, singleBlobVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n return res.id!;\r\n });\r\n\r\n const emptyId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindBlob(1, emptyBlobVal);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n return res.id!;\r\n });\r\n\r\n const nullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindNull(1);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n return res.id!;\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, fullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, abbreviatedBlobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, fullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, blobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), selectSingleRow, (row: any) => {\r\n assert.equal(row.id, fullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, blobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, singleId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, abbreviatedSingleBlobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, singleId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, singleBlobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, singleId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, singleBlobVal);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, emptyId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, \"{\\\"bytes\\\":0}\");\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, emptyId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl.length, 0);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), selectSingleRow, (row: any) => {\r\n assert.equal(row.id, emptyId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl.length, 0);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, nullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, undefined);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\r\n assert.equal(row.id, nullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, undefined);\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), selectSingleRow, (row: any) => {\r\n assert.equal(row.id, nullId);\r\n assert.equal(row.className, \"Test.Foo\");\r\n assert.deepEqual(row.bl, undefined);\r\n }), 1);\r\n });\r\n\r\n it(\"getRow() with navigation properties and relationships\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getnavandrels.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\r\n </ECEntityClass>\r\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Parent\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Child\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n let rowCount: number;\r\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n const childIds = new Array<Id64String>();\r\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindString(1, \"Child 1\");\r\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n childIds.push(res.id!);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\r\n rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n const row = stmt.getRow();\r\n assert.equal(row.name, `Child ${rowCount}`);\r\n assert.equal(row.parent.id, parentId);\r\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\r\n }\r\n assert.equal(rowCount, 2);\r\n });\r\n\r\n rowCount = 0;\r\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\r\n rowCount++;\r\n assert.equal(row.name, `Child ${rowCount}`);\r\n assert.equal(row.parent.id, parentId);\r\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\r\n }), 2);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\r\n rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n const row = stmt.getRow();\r\n assert.equal(row.name, `Child ${rowCount}`);\r\n assert.equal(row[\"parent.id\"], parentId);\r\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\r\n assert.equal(row.myParentId, parentId);\r\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\r\n }\r\n assert.equal(rowCount, 2);\r\n });\r\n\r\n rowCount = 0;\r\n 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: any) => {\r\n rowCount++;\r\n assert.equal(row.name, `Child ${rowCount}`);\r\n assert.equal(row[\"parent.id\"], parentId);\r\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\r\n assert.equal(row.myParentId, parentId);\r\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\r\n }), 2);\r\n\r\n const childId: Id64String = childIds[0];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, childId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.id, childId);\r\n assert.equal(row.className, \"Test.ParentHasChildren\");\r\n assert.equal(row.sourceId, parentId);\r\n assert.equal(row.sourceClassName, \"Test.Parent\");\r\n assert.equal(row.targetId, childId);\r\n assert.equal(row.targetClassName, \"Test.Child\");\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\r\n assert.equal(row.id, childId);\r\n assert.equal(row.className, \"Test.ParentHasChildren\");\r\n assert.equal(row.sourceId, parentId);\r\n assert.equal(row.sourceClassName, \"Test.Parent\");\r\n assert.equal(row.targetId, childId);\r\n assert.equal(row.targetClassName, \"Test.Child\");\r\n }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, childId);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row = stmt.getRow();\r\n assert.equal(row.myId, childId);\r\n assert.isTrue(Id64.isValidId64(row.myClassId));\r\n assert.equal(row.mySourceId, parentId);\r\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\r\n assert.equal(row.myTargetId, childId);\r\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\r\n });\r\n\r\n 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: any) => {\r\n rowCount++;\r\n assert.equal(row.myId, childId);\r\n assert.isTrue(Id64.isValidId64(row.myClassId));\r\n assert.equal(row.mySourceId, parentId);\r\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\r\n assert.equal(row.myTargetId, childId);\r\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\r\n }), 1);\r\n\r\n });\r\n\r\n it(\"getRow() with structs\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getstructs.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const boolVal: boolean = true;\r\n const doubleVal: number = 3.5;\r\n const dtVal: string = \"2018-01-23T12:24:00.000\";\r\n const intVal: number = 3;\r\n const p2dVal: XAndY = { x: 1, y: 2 };\r\n const p3dVal: XYAndZ = { x: 1, y: 2, z: 3 };\r\n const stringVal: string = \"Hello World\";\r\n\r\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindStruct(1, { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n const expectedStruct = { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal };\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\r\n assert.equal(row.struct.bo, expectedStruct.bo);\r\n assert.equal(row.struct.d, expectedStruct.d);\r\n assert.equal(row.struct.dt, expectedStruct.dt);\r\n assert.equal(row.struct.i, expectedStruct.i);\r\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\r\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\r\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\r\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\r\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\r\n assert.equal(row.struct.s, expectedStruct.s);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\r\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\r\n assert.equal(row.struct.bo, expectedStruct.bo);\r\n assert.equal(row.struct.d, expectedStruct.d);\r\n assert.equal(row.struct.dt, expectedStruct.dt);\r\n assert.equal(row.struct.i, expectedStruct.i);\r\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\r\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\r\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\r\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\r\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\r\n assert.equal(row.struct.s, expectedStruct.s);\r\n }), 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const actualStruct: any = stmt.getValue(0).getStruct();\r\n assert.deepEqual(actualStruct.bl, expectedStruct.bl);\r\n assert.equal(actualStruct.bo, expectedStruct.bo);\r\n assert.equal(actualStruct.d, expectedStruct.d);\r\n assert.equal(actualStruct.dt, expectedStruct.dt);\r\n assert.equal(actualStruct.i, expectedStruct.i);\r\n assert.equal(actualStruct.p2d.x, expectedStruct.p2d.x);\r\n assert.equal(actualStruct.p2d.y, expectedStruct.p2d.y);\r\n assert.equal(actualStruct.p3d.x, expectedStruct.p3d.x);\r\n assert.equal(actualStruct.p3d.y, expectedStruct.p3d.y);\r\n assert.equal(actualStruct.p3d.z, expectedStruct.p3d.z);\r\n assert.equal(actualStruct.s, expectedStruct.s);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n 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: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\r\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\r\n assert.equal(row[\"struct.D\"], expectedStruct.d);\r\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\r\n assert.equal(row[\"struct.I\"], expectedStruct.i);\r\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\r\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\r\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\r\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\r\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\r\n assert.equal(row[\"struct.S\"], expectedStruct.s);\r\n });\r\n\r\n 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: any) => {\r\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\r\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\r\n assert.equal(row[\"struct.D\"], expectedStruct.d);\r\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\r\n assert.equal(row[\"struct.I\"], expectedStruct.i);\r\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\r\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\r\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\r\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\r\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\r\n assert.equal(row[\"struct.S\"], expectedStruct.s);\r\n }), 1);\r\n });\r\n\r\n it(\"check HexStr() sql function\", async () => {\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\r\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\r\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\r\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\r\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\r\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\r\n\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"hexstrfunction.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\r\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\r\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const expectedRow = {\r\n bl: blobVal, bo: true, d: 3.5, dt: \"2018-01-23T12:24:00.000\",\r\n i: 3, l: 12312312312312, p2d: { x: 1, y: 2 }, p3d: { x: 1, y: 2, z: 3 }, s: \"Hello World\",\r\n };\r\n\r\n const id: Id64String = 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: ECSqlWriteStatement) => {\r\n stmt.bindValues({\r\n bl: blobVal, bo: expectedRow.bo, d: expectedRow.d,\r\n dt: expectedRow.dt, i: expectedRow.i, l: expectedRow.l, p2d: expectedRow.p2d, p3d: expectedRow.p3d, s: expectedRow.s,\r\n });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n ecdb.saveChanges();\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT I, HexStr(I) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.equal(row.i, expectedRow.i);\r\n assert.equal(row.hex, \"0x3\");\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT L, HexStr(L) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.equal(row.l, expectedRow.l);\r\n assert.equal(row.hex, \"0xb32af0071f8\");\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Bl, HexStr(Bl) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Bo, HexStr(Bo) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.equal(row.bo, expectedRow.bo);\r\n assert.equal(row.hex, \"0x1\");\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT D, HexStr(D) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Dt, HexStr(Dt) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\r\n });\r\n\r\n // SQL functions cannot take points. So here preparation already fails\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P2d, HexStr(P2d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\r\n assert.fail();\r\n }));\r\n\r\n // SQL functions cannot take points. So here preparation already fails\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P3d, HexStr(P3d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\r\n assert.fail();\r\n }));\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT S, HexStr(S) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\r\n });\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n\r\n it(\"check ec enums\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecenums.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEnumeration typeName=\"Status\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"On\" value=\"1\" />\r\n <ECEnumerator name=\"Off\" value=\"2\" />\r\n </ECEnumeration>\r\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\r\n <ECEnumerator name=\"Org\" value=\"Org\" />\r\n <ECEnumerator name=\"Com\" value=\"Com\" />\r\n </ECEnumeration>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"MyStat\" typeName=\"Status\"/>\r\n <ECArrayProperty propertyName=\"MyStats\" typeName=\"Status\"/>\r\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\r\n <ECArrayProperty propertyName=\"MyDomains\" typeName=\"Domain\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyStat,MyStats,MyDomain,MyDomains) VALUES(test.Status.[On],?,test.Domain.Org,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValue(1, [1, 2]);\r\n stmt.bindValue(2, [\"Org\", \"Com\"]);\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n const row: any = stmt.getRow();\r\n assert.equal(row.myStat, 1);\r\n assert.deepEqual(row.myStats, [1, 2]);\r\n assert.equal(row.myDomain, \"Org\");\r\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const myStatVal: ECSqlValue = stmt.getValue(0);\r\n assert.isFalse(myStatVal.isNull);\r\n assert.isTrue(myStatVal.columnInfo.isEnum());\r\n assert.equal(myStatVal.getInteger(), 1);\r\n assert.deepEqual(myStatVal.getEnum(), [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const myStatsVal: ECSqlValue = stmt.getValue(1);\r\n assert.isFalse(myStatsVal.isNull);\r\n assert.isTrue(myStatsVal.columnInfo.isEnum());\r\n assert.deepEqual(myStatsVal.getArray(), [1, 2]);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const actualStatsEnums: ECEnumValue[][] = [];\r\n for (const arrayElement of myStatsVal.getArrayIterator()) {\r\n actualStatsEnums.push(arrayElement.getEnum()!);\r\n }\r\n assert.equal(actualStatsEnums.length, 2);\r\n assert.deepEqual(actualStatsEnums[0], [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\r\n assert.deepEqual(actualStatsEnums[1], [{ schema: \"Test\", name: \"Status\", key: \"Off\", value: 2 }]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const myDomainVal: ECSqlValue = stmt.getValue(2);\r\n assert.isFalse(myDomainVal.isNull);\r\n assert.isTrue(myDomainVal.columnInfo.isEnum());\r\n assert.equal(myDomainVal.getString(), \"Org\");\r\n assert.deepEqual(myDomainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const myDomainsVal: ECSqlValue = stmt.getValue(3);\r\n assert.isFalse(myDomainsVal.isNull);\r\n assert.isTrue(myDomainsVal.columnInfo.isEnum());\r\n assert.deepEqual(myDomainsVal.getArray(), [\"Org\", \"Com\"]);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const actualDomainsEnums: ECEnumValue[][] = [];\r\n for (const arrayElement of myDomainsVal.getArrayIterator()) {\r\n actualDomainsEnums.push(arrayElement.getEnum()!);\r\n }\r\n assert.equal(actualDomainsEnums.length, 2);\r\n assert.deepEqual(actualDomainsEnums[0], [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\r\n assert.deepEqual(actualDomainsEnums[1], [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"Com\" }]);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\r\n assert.equal(row.myStat, 1);\r\n assert.deepEqual(row.myStats, [1, 2]);\r\n assert.equal(row.myDomain, \"Org\");\r\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\r\n }), 1);\r\n\r\n // test some enums in the built-in schemas\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n const row: any = stmt.getRow();\r\n assert.deepEqual(row, { type: 0, modifier: 2 });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const typeVal: ECSqlValue = stmt.getValue(0);\r\n assert.isFalse(typeVal.isNull);\r\n assert.isTrue(typeVal.columnInfo.isEnum());\r\n assert.equal(typeVal.getInteger(), 0);\r\n assert.deepEqual(typeVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassType\", key: \"Entity\", value: 0 }]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const modifierVal: ECSqlValue = stmt.getValue(1);\r\n assert.isFalse(modifierVal.isNull);\r\n assert.isTrue(modifierVal.columnInfo.isEnum());\r\n assert.equal(modifierVal.getInteger(), 2);\r\n assert.deepEqual(modifierVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassModifier\", key: \"Sealed\", value: 2 }]);\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", QueryBinder.from([id]), undefined, (row: any) => {\r\n assert.deepEqual(row, { type: 0, modifier: 2 });\r\n }), 1);\r\n });\r\n\r\n it(\"check ORed ECEnums\", async () => {\r\n const slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(/The value 9 cannot be broken down into a combination of ECEnumerators/gm);\r\n slm.append().error().category(\"ECDb\").message(/The value 'gov,de' cannot be broken down into a combination of ECEnumerators/gm);\r\n\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"oredecenums.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEnumeration typeName=\"Color\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Red\" value=\"1\" />\r\n <ECEnumerator name=\"Yellow\" value=\"2\" />\r\n <ECEnumerator name=\"Blue\" value=\"4\" />\r\n </ECEnumeration>\r\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\r\n <ECEnumerator name=\"Org\" value=\"org\" />\r\n <ECEnumerator name=\"Com\" value=\"com\" />\r\n <ECEnumerator name=\"Gov\" value=\"gov\" />\r\n </ECEnumeration>\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"MyColor\" typeName=\"Color\"/>\r\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const ids: { unored: Id64String, ored: Id64String, unmatched: Id64String } = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyColor,MyDomain) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindValue(1, 4);\r\n stmt.bindValue(2, \"com\");\r\n let res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n const unored: Id64String = res.id!;\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValue(1, 5);\r\n stmt.bindValue(2, \"gov,com\");\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n const ored: Id64String = res.id!;\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValue(1, 9);\r\n stmt.bindValue(2, \"gov,de\");\r\n res = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n const unmatched: Id64String = res.id!;\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n return { unored, ored, unmatched };\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, ids.unored);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n let row: any = stmt.getRow();\r\n assert.equal(row.myColor, 4);\r\n assert.equal(row.myDomain, \"com\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n let colVal: ECSqlValue = stmt.getValue(0);\r\n assert.isFalse(colVal.isNull);\r\n assert.isTrue(colVal.columnInfo.isEnum());\r\n assert.equal(colVal.getInteger(), 4);\r\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n let domainVal: ECSqlValue = stmt.getValue(1);\r\n assert.isFalse(domainVal.isNull);\r\n assert.isTrue(domainVal.columnInfo.isEnum());\r\n assert.equal(domainVal.getString(), \"com\");\r\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }]);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindId(1, ids.ored);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n row = stmt.getRow();\r\n assert.equal(row.myColor, 5);\r\n assert.equal(row.myDomain, \"gov,com\");\r\n\r\n colVal = stmt.getValue(0);\r\n assert.isFalse(colVal.isNull);\r\n assert.isTrue(colVal.columnInfo.isEnum());\r\n assert.equal(colVal.getInteger(), 5);\r\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Red\", value: 1 }, { schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\r\n\r\n domainVal = stmt.getValue(1);\r\n assert.isFalse(domainVal.isNull);\r\n assert.isTrue(domainVal.columnInfo.isEnum());\r\n assert.equal(domainVal.getString(), \"gov,com\");\r\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }, { schema: \"Test\", name: \"Domain\", key: \"Gov\", value: \"gov\" }]);\r\n\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindId(1, ids.unmatched);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n row = stmt.getRow();\r\n assert.equal(row.myColor, 9);\r\n assert.equal(row.myDomain, \"gov,de\");\r\n\r\n colVal = stmt.getValue(0);\r\n assert.isFalse(colVal.isNull);\r\n assert.isTrue(colVal.columnInfo.isEnum());\r\n assert.equal(colVal.getInteger(), 9);\r\n assert.isUndefined(colVal.getEnum());\r\n\r\n domainVal = stmt.getValue(1);\r\n assert.isFalse(domainVal.isNull);\r\n assert.isTrue(domainVal.columnInfo.isEnum());\r\n assert.equal(domainVal.getString(), \"gov,de\");\r\n assert.isUndefined(domainVal.getEnum());\r\n });\r\n\r\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unored]), undefined, (row: any) => {\r\n assert.equal(row.myColor, 4);\r\n assert.equal(row.myDomain, \"com\");\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.ored]), undefined, (row: any) => {\r\n assert.equal(row.myColor, 5);\r\n assert.equal(row.myDomain, \"gov,com\");\r\n }), 1);\r\n\r\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\r\n assert.equal(row.myColor, 9);\r\n assert.equal(row.myDomain, \"gov,de\");\r\n }), 1);\r\n\r\n // test some enums in the built-in schemas\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const row: any = stmt.getRow();\r\n assert.equal(row.caType, 160);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const caTypeVal: ECSqlValue = stmt.getValue(0);\r\n assert.isFalse(caTypeVal.isNull);\r\n assert.isTrue(caTypeVal.columnInfo.isEnum());\r\n assert.equal(caTypeVal.getInteger(), 160);\r\n assert.deepEqual(caTypeVal.getEnum(), [\r\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveProperty\", value: 32 },\r\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveArrayProperty\", value: 128 }]);\r\n });\r\n 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: any) => {\r\n assert.equal(row.caType, 160);\r\n }), 1);\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n\r\n it(\"should get native sql\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\r\n const nativesql: string = stmt.getNativeSql();\r\n assert.isTrue(nativesql.startsWith(\"INSERT INTO [ts_Foo]\"));\r\n return stmt.stepForInsert();\r\n });\r\n ecdb.saveChanges();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.equal(r.id, \"0x1\");\r\n });\r\n\r\n it(\"check column info\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"MyClass\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"MyProperty\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.MyClass(MyProperty) VALUES('Value')\", (stmt: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n return res.id!;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT MyProperty as MyAlias, 1 as MyGenerated FROM test.MyClass WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, id);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n const row: any = stmt.getRow();\r\n assert.equal(row.myAlias, \"Value\");\r\n assert.equal(row.myGenerated, 1);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val0: ECSqlValue = stmt.getValue(0);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\r\n\r\n assert.equal(colInfo0.getPropertyName(), \"MyAlias\");\r\n const accessString0 = colInfo0.getAccessString();\r\n assert.equal(accessString0, \"MyAlias\");\r\n const originPropertyName = colInfo0.getOriginPropertyName();\r\n assert.isDefined(originPropertyName);\r\n assert.equal(originPropertyName, \"MyProperty\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val1: ECSqlValue = stmt.getValue(1);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\r\n\r\n assert.equal(colInfo1.getPropertyName(), \"MyGenerated\");\r\n const accessString1 = colInfo1.getAccessString();\r\n assert.equal(accessString1, \"MyGenerated\");\r\n assert.isUndefined(colInfo1.getOriginPropertyName());\r\n });\r\n });\r\n\r\n it(\"check access string metadata in nested struct\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"ECDbMap\" version=\"02.00.00\" alias=\"ecdbmap\"/>\r\n <ECStructClass typeName=\"InnerStruct\">\r\n <ECProperty propertyName=\"a\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"b\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECStructClass typeName=\"OuterStruct\">\r\n <ECStructProperty propertyName=\"c\" typeName=\"InnerStruct\"/>\r\n <ECProperty propertyName=\"d\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Z\">\r\n <ECCustomAttributes>\r\n <ClassMap xmlns=\"ECDbMap.02.00.00\">\r\n <MapStrategy>TablePerHierarchy</MapStrategy>\r\n </ClassMap>\r\n <ShareColumns xmlns=\"ECDbMap.02.00.00\">\r\n <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>\r\n </ShareColumns>\r\n </ECCustomAttributes>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>Z</BaseClass>\r\n <ECStructProperty propertyName=\"f\" typeName=\"OuterStruct\"/>\r\n <ECProperty propertyName=\"g\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"B\">\r\n <BaseClass>Z</BaseClass>\r\n <ECStructProperty propertyName=\"h\" typeName=\"InnerStruct\" />\r\n <ECProperty propertyName=\"i\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n 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: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT f, f.c.a, f.c.b, f.d, g FROM Test.A\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n const row: any = stmt.getRow();\r\n assert.equal(row.f.c.a, \"f.c.a\");\r\n assert.equal(row.f.c.b, \"f.c.b\");\r\n assert.equal(row.f.d, \"f.d\");\r\n assert.equal(row.g, \"g\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val0: ECSqlValue = stmt.getValue(0);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\r\n\r\n assert.equal(colInfo0.getPropertyName(), \"f\");\r\n const accessString0 = colInfo0.getAccessString();\r\n assert.equal(accessString0, \"f\");\r\n const originPropertyName0 = colInfo0.getOriginPropertyName();\r\n assert.isDefined(originPropertyName0);\r\n assert.equal(originPropertyName0, \"f\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val1: ECSqlValue = stmt.getValue(1);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\r\n\r\n assert.equal(colInfo1.getPropertyName(), \"a\");\r\n const accessString1 = colInfo1.getAccessString();\r\n assert.equal(accessString1, \"f.c.a\");\r\n const originPropertyName1 = colInfo1.getOriginPropertyName();\r\n assert.isDefined(originPropertyName1);\r\n assert.equal(originPropertyName1, \"a\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val2: ECSqlValue = stmt.getValue(2);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo2: ECSqlColumnInfo = val2.columnInfo;\r\n\r\n assert.equal(colInfo2.getPropertyName(), \"b\");\r\n const accessString2 = colInfo2.getAccessString();\r\n assert.equal(accessString2, \"f.c.b\");\r\n const originPropertyName2 = colInfo2.getOriginPropertyName();\r\n assert.isDefined(originPropertyName2);\r\n assert.equal(originPropertyName2, \"b\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val3: ECSqlValue = stmt.getValue(3);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo3: ECSqlColumnInfo = val3.columnInfo;\r\n\r\n assert.equal(colInfo3.getPropertyName(), \"d\");\r\n const accessString3 = colInfo3.getAccessString();\r\n assert.equal(accessString3, \"f.d\");\r\n const originPropertyName3 = colInfo3.getOriginPropertyName();\r\n assert.isDefined(originPropertyName3);\r\n assert.equal(originPropertyName3, \"d\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val4: ECSqlValue = stmt.getValue(4);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo4: ECSqlColumnInfo = val4.columnInfo;\r\n\r\n assert.equal(colInfo4.getPropertyName(), \"g\");\r\n const accessString4 = colInfo4.getAccessString();\r\n assert.equal(accessString4, \"g\");\r\n const originPropertyName4 = colInfo4.getOriginPropertyName();\r\n assert.isDefined(originPropertyName4);\r\n assert.equal(originPropertyName4, \"g\");\r\n });\r\n\r\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.B (h.a, h.b, i) VALUES ('h.a' ,'h.b', 'i')\", (stmt: ECSqlWriteStatement) => {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n ecdb.withPreparedStatement(\"SELECT h, i FROM Test.B\", (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n // getRow just returns the enum values\r\n const row: any = stmt.getRow();\r\n assert.equal(row.h.a, \"h.a\");\r\n assert.equal(row.h.b, \"h.b\");\r\n assert.equal(row.i, \"i\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val0: ECSqlValue = stmt.getValue(0);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\r\n\r\n assert.equal(colInfo0.getPropertyName(), \"h\");\r\n const accessString0 = colInfo0.getAccessString();\r\n assert.equal(accessString0, \"h\");\r\n const originPropertyName0 = colInfo0.getOriginPropertyName();\r\n assert.isDefined(originPropertyName0);\r\n assert.equal(originPropertyName0, \"h\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const val1: ECSqlValue = stmt.getValue(1);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\r\n\r\n assert.equal(colInfo1.getPropertyName(), \"i\");\r\n const accessString1 = colInfo1.getAccessString();\r\n assert.equal(accessString1, \"i\");\r\n const originPropertyName1 = colInfo1.getOriginPropertyName();\r\n assert.isDefined(originPropertyName1);\r\n assert.equal(originPropertyName1, \"i\");\r\n });\r\n });\r\n\r\n it(\"ecsql statements with QueryBinder\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"booleanProperty\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"blobProperty\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"doubleProperty\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"customIdProperty\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"customIdSetProperty\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"intProperty\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"longProperty\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"stringProperty\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"nullProperty\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"point2dProperty\" typeName=\"point2d\"/>\r\n <ECProperty propertyName=\"point3dProperty\" typeName=\"point3d\"/>\r\n </ECEntityClass>\r\n <ECStructClass typeName=\"Bar\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"structClassProperty\" typeName=\"string\"/>\r\n </ECStructClass>\r\n <ECEntityClass typeName=\"Baz\" modifier=\"Sealed\">\r\n <ECStructProperty propertyName=\"structProperty\" typeName=\"Bar\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const booleanValue = true;\r\n const blobValue = new Uint8Array([0, 0, 0]);\r\n const doubleValue = 12.12;\r\n const customIdValue = \"1234\";\r\n const customIdSetValue = [\"0x9\"];\r\n const intValue = 10;\r\n const longValue = 1e9;\r\n const stringValue = \"test string value\";\r\n const point2dValue = new Point2d(10, 20);\r\n const point3dValue = new Point3d(15, 30, 45);\r\n const structValue = { structClassProperty: \"test string value for struct property\" };\r\n\r\n let r = await ecdb.withCachedWriteStatement(\r\n `INSERT INTO ts.Foo(booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty)\r\n VALUES(:booleanValue, :blobValue, :doubleValue, :customIdValue, :customIdSetValue, :intValue, :longValue, :stringValue, :nullValue, :point2dValue, :point3dValue)`,\r\n async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindBoolean(\"booleanValue\", booleanValue);\r\n stmt.bindBlob(\"blobValue\", blobValue);\r\n stmt.bindDouble(\"doubleValue\", doubleValue);\r\n stmt.bindId(\"customIdValue\", customIdValue);\r\n stmt.bindId(\"customIdSetValue\", customIdSetValue[0]);\r\n stmt.bindInteger(\"intValue\", intValue);\r\n stmt.bindInteger(\"longValue\", longValue);\r\n stmt.bindString(\"stringValue\", stringValue);\r\n stmt.bindNull(\"nullValue\");\r\n stmt.bindPoint2d(\"point2dValue\", point2dValue);\r\n stmt.bindPoint3d(\"point3dValue\", point3dValue);\r\n return stmt.stepForInsert();\r\n },\r\n );\r\n\r\n ecdb.saveChanges();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.equal(r.id, \"0x1\");\r\n\r\n const params = new QueryBinder();\r\n params.bindBoolean(\"booleanValue\", booleanValue);\r\n params.bindBlob(\"blobValue\", blobValue);\r\n params.bindDouble(\"doubleValue\", doubleValue);\r\n params.bindId(\"customIdValue\", customIdValue);\r\n params.bindInt(\"intValue\", intValue);\r\n params.bindLong(\"longValue\", longValue);\r\n params.bindString(\"stringValue\", stringValue);\r\n params.bindPoint2d(\"point2dValue\", point2dValue);\r\n params.bindPoint3d(\"point3dValue\", point3dValue);\r\n params.bindIdSet(\"customIdSetValue\", customIdSetValue);\r\n\r\n let reader = ecdb.createQueryReader(\r\n `SELECT booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty FROM ts.Foo\r\n WHERE booleanProperty = :booleanValue AND blobProperty = :blobValue AND doubleProperty = :doubleValue AND customIdProperty = :customIdValue AND InVirtualSet(:customIdSetValue, customIdSetProperty) AND\r\n intProperty = :intValue AND longProperty = :longValue AND stringProperty = :stringValue AND point2dProperty = :point2dValue AND point3dProperty = :point3dValue`,\r\n params,\r\n );\r\n const row = (await reader.toArray())[0];\r\n\r\n assert.isNotNull(row);\r\n assert.equal(row[0], booleanValue);\r\n assert.deepEqual(row[1], blobValue);\r\n assert.equal(row[2], doubleValue);\r\n assert.equal(row[3], customIdValue);\r\n assert.equal(row[4], \"9\");\r\n assert.equal(row[5], intValue);\r\n assert.equal(row[6], longValue);\r\n assert.equal(row[7], stringValue);\r\n assert.equal(row[8], null);\r\n assert.deepEqual(row[9], { X: 10, Y: 20 });\r\n assert.deepEqual(row[10], { X: 15, Y: 30, Z: 45 });\r\n\r\n assert.isFalse(await reader.step());\r\n\r\n r = await ecdb.withCachedWriteStatement(\r\n \"INSERT INTO ts.Baz(structProperty) VALUES(:structValue)\",\r\n async (stmt: ECSqlWriteStatement) => {\r\n stmt.bindStruct(\"structValue\", structValue);\r\n return stmt.stepForInsert();\r\n },\r\n );\r\n\r\n ecdb.saveChanges();\r\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\r\n assert.equal(r.id, \"0x2\");\r\n\r\n reader = ecdb.createQueryReader(\r\n `SELECT * FROM ts.Baz`,\r\n );\r\n\r\n await reader.step();\r\n\r\n assert.deepEqual(reader.current.structProperty, structValue);\r\n\r\n const paramsWithStruct = new QueryBinder();\r\n paramsWithStruct.bindStruct(\"structValue\", structValue);\r\n reader = ecdb.createQueryReader(\"SELECT * FROM ts.Baz WHERE structProperty = :structValue\", paramsWithStruct);\r\n\r\n await assert.isRejected(reader.toArray(), \"Struct type binding not supported\");\r\n });\r\n\r\n it(\"Statement closed with WithWriteStatement\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test_hang.ecdb\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"Test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"X\">\r\n <ECProperty propertyName=\"Label\" typeName=\"string\" />\r\n </ECEntityClass>\r\n </ECSchema>\r\n `);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n ecdb.withWriteStatement(`INSERT INTO Test.X (Label) VALUES (?)`, (stmt) => {\r\n stmt.bindString(1, \"TestLabel 1\");\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n stmt.clearBindings();\r\n });\r\n\r\n ecdb.saveChanges();\r\n\r\n const reader = ecdb.createQueryReader(\r\n `SELECT Label FROM Test.X`\r\n );\r\n const row = (await reader.toArray())[0];\r\n\r\n assert.isNotNull(row);\r\n assert.equal(row[0], \"TestLabel 1\");\r\n\r\n assert.isFalse(await reader.step());\r\n });\r\n\r\n describe(\"invalid RelECClassId with pragma validate_ecsql_writes\", () => {\r\n let ecdb: ECDb;\r\n let parentHasChildrenClassId: Id64String;\r\n let childHasFriendsClassId: Id64String;\r\n let validRelClassId: Id64String;\r\n\r\n before(async () => {\r\n ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n\r\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ChildTemplate\" modifier=\"Abstract\">\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\r\n <BaseClass>ChildTemplate</BaseClass>\r\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\r\n <ECNavigationProperty propertyName=\"Friends\" relationshipName=\"ChildHasFriends\" direction=\"backward\"/>\r\n </ECEntityClass>\r\n\r\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Parent\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"ChildTemplate\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n\r\n <ECRelationshipClass typeName=\"ChildHasFriends\" modifier=\"None\" strength=\"embedding\">\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Child\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"Child\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n </ECSchema>`);\r\n\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n let reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Parent'\");\r\n assert.isTrue(await reader.step());\r\n parentHasChildrenClassId = reader.current.ECInstanceId;\r\n assert.isTrue(Id64.isValidId64(parentHasChildrenClassId));\r\n\r\n // When the ECSql insert validation is set to true, the invalid relClassId is detected and an error is thrown.\r\n assert.isTrue(await (ecdb.createQueryReader(\"PRAGMA validate_ecsql_writes=true\")).step());\r\n\r\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ParentHasChildren'\");\r\n assert.isTrue(await reader.step());\r\n validRelClassId = reader.current.ECInstanceId;\r\n assert.isTrue(Id64.isValidId64(validRelClassId));\r\n\r\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ChildHasFriends'\");\r\n assert.isTrue(await reader.step());\r\n childHasFriendsClassId = reader.current.ECInstanceId;\r\n assert.isTrue(Id64.isValidId64(childHasFriendsClassId));\r\n\r\n ecdb.saveChanges();\r\n });\r\n\r\n after(() => {\r\n ecdb.closeDb();\r\n });\r\n\r\n function testECSqlWithoutBinders(testCaseNumber: number, sqlStmt: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\r\n let id: Id64String | undefined;\r\n let stmt: ECSqlWriteStatement | undefined;\r\n try {\r\n stmt = ecdb.prepareWriteStatement(sqlStmt);\r\n assert.isDefined(stmt);\r\n if (isInsert) {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, expectedResult);\r\n assert.isDefined(res.id);\r\n } else {\r\n assert.equal(stmt.step(), expectedResult);\r\n }\r\n } catch (err: any) {\r\n if (shouldSucceed)\r\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\r\n else\r\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\r\n }\r\n if (stmt !== undefined)\r\n stmt[Symbol.dispose]();\r\n return id;\r\n };\r\n\r\n function testECSqlWithBinders(testCaseNumber: number, sqlStmt: string, firstBinderValue: string, secondBinderValue: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\r\n let stmt: ECSqlWriteStatement | undefined;\r\n try {\r\n stmt = ecdb.prepareWriteStatement(sqlStmt);\r\n if (firstBinderValue !== \"\")\r\n stmt.bindNavigation(1, { id: \"1\", relClassName: firstBinderValue });\r\n if (secondBinderValue !== \"\")\r\n stmt.bindNavigation(2, { id: \"2\", relClassName: secondBinderValue });\r\n\r\n if (isInsert) {\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, expectedResult);\r\n assert.isDefined(res.id);\r\n } else {\r\n assert.equal(stmt.step(), expectedResult);\r\n }\r\n } catch (err: any) {\r\n if (shouldSucceed)\r\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\r\n else\r\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\r\n }\r\n\r\n if (stmt !== undefined)\r\n stmt[Symbol.dispose]();\r\n stmt?.clearBindings();\r\n };\r\n\r\n it(\"insert statement with invalid relClassId in navigation properties\", async () => {\r\n // Invalid RelECClassId values\r\n testECSqlWithoutBinders(1, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, 9999)`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`);\r\n testECSqlWithoutBinders(2, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, NULL)`, false, `The ECSql statement contains an invalid relationship class id.`);\r\n testECSqlWithoutBinders(3, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${parentHasChildrenClassId})`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`);\r\n testECSqlWithoutBinders(4, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${validRelClassId})`, true, \"\");\r\n\r\n // Invalid RelClassName values with binders\r\n testECSqlWithBinders(5, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\");\r\n\r\n // Valid RelClassName values with binders\r\n testECSqlWithBinders(6, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ParentHasChildren\", \"\", true, \"\");\r\n testECSqlWithBinders(7, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ChildHasFriends\", \"\", true, \"\");\r\n\r\n // Valid RelClassName values with binders but invalid relClassId\r\n testECSqlWithBinders(8, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\");\r\n testECSqlWithBinders(9, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\r\n\r\n // Valid multiple RelClassName values with binders\r\n testECSqlWithBinders(10, \"INSERT INTO test.Child(Parent, Friends) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\");\r\n testECSqlWithBinders(11, \"INSERT INTO test.Child(Friends, Parent) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\r\n });\r\n\r\n it(\"update statement with invalid relClassId in navigation properties\", async () => {\r\n // insert a value that can be updated in the test suite\r\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\r\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n stmt.clearBindings();\r\n ecdb.saveChanges();\r\n });\r\n\r\n // Invalid RelECClassId values\r\n testECSqlWithoutBinders(1, `UPDATE test.Child SET Parent.RelECClassId = 9999`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`, false);\r\n testECSqlWithoutBinders(2, `UPDATE test.Child SET Parent.RelECClassId = NULL`, false, `The ECSql statement contains an invalid relationship class id.`, false);\r\n testECSqlWithoutBinders(3, `UPDATE test.Child SET Parent.RelECClassId = ${parentHasChildrenClassId}`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`, false);\r\n testECSqlWithoutBinders(4, `UPDATE test.Child SET Parent.RelECClassId = ${validRelClassId}`, true, \"\", false);\r\n\r\n // Invalid RelClassName values with binders\r\n testECSqlWithBinders(5, \"UPDATE test.Child SET Parent = ?\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\", false);\r\n\r\n // Valid RelClassName values with binders\r\n testECSqlWithBinders(6, \"UPDATE test.Child SET Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\r\n testECSqlWithBinders(7, \"UPDATE test.Child SET Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\r\n\r\n // Valid RelClassName values with binders but invalid relClassId\r\n testECSqlWithBinders(8, \"UPDATE test.Child SET Parent = ?\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\", false);\r\n testECSqlWithBinders(9, \"UPDATE test.Child SET Friends = ?\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\r\n\r\n // Valid multiple RelClassName values with binders\r\n testECSqlWithBinders(10, \"UPDATE test.Child SET Parent = ?, Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\r\n testECSqlWithBinders(11, \"UPDATE test.Child SET Friends = ?, Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\r\n });\r\n\r\n it(\"select statement with invalid relClassId in navigation properties\", async () => {\r\n // insert a value that can be updated in the test suite\r\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\r\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\r\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\r\n const res: ECSqlInsertResult = stmt.stepForInsert();\r\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\r\n assert.isDefined(res.id);\r\n stmt.clearBindings();\r\n ecdb.saveChanges();\r\n });\r\n\r\n // Invalid RelECClassId values\r\n testECSqlWithoutBinders(1, `SELECT * from test.Child where Parent.RelECClassId = 9999`, true, \"\", false);\r\n testECSqlWithoutBinders(2, `SELECT * from test.Child where Parent.RelECClassId = NULL`, true, \"\", false);\r\n testECSqlWithoutBinders(3, `SELECT * from test.Child where Parent.RelECClassId = ${parentHasChildrenClassId}`, true, \"\", false);\r\n testECSqlWithoutBinders(4, `SELECT * from test.Child where Parent.RelECClassId = ${validRelClassId}`, true, \"\", false, DbResult.BE_SQLITE_ROW);\r\n\r\n // Invalid RelClassName values with binders\r\n testECSqlWithBinders(5, \"SELECT * from test.Child where Parent = ?\", \"Test.InvalidClass\", \"\", true, \"\", false);\r\n\r\n // Valid RelClassName values with binders\r\n testECSqlWithBinders(6, \"SELECT * from test.Child where Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false, DbResult.BE_SQLITE_ROW);\r\n testECSqlWithBinders(7, \"SELECT * from test.Child where Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\r\n\r\n // Valid RelClassName values with binders but invalid relClassId\r\n testECSqlWithBinders(8, \"SELECT * from test.Child where Parent = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\r\n testECSqlWithBinders(9, \"SELECT * from test.Child where Friends = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\r\n\r\n // Valid multiple RelClassName values with binders\r\n testECSqlWithBinders(10, \"SELECT * from test.Child where Parent = ? and Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false, DbResult.BE_SQLITE_ROW);\r\n testECSqlWithBinders(11, \"SELECT * from test.Child where Friends = ? and Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ECSqlStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSqlStatement.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { DbResult, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { NavigationValue, QueryBinder, QueryOptions, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d, Range3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\nimport { _nativeDb, ECDb, ECEnumValue, ECSqlColumnInfo, ECSqlInsertResult, ECSqlStatement, ECSqlValue, ECSqlWriteStatement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\nconst selectSingleRow = new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();\nasync function query(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions, callback?: (row: any) => void) {\n ecdb.saveChanges();\n let rowCount: number = 0;\n for await (const queryRow of ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rowCount++;\n if (callback)\n callback(queryRow.toRow());\n }\n return rowCount;\n}\nasync function queryRows(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions) {\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames });\n return reader.toArray();\n}\nasync function queryCount(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions): Promise<number> {\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(`SELECT COUNT(*) FROM (${ecsql})`, params, { ...config, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes })) {\n return row[0] as number;\n }\n return -1;\n}\nfunction blobEqual(lhs: any, rhs: any) {\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\n throw new Error(\"expecting uint8array\");\n\n if (lhs.byteLength !== rhs.byteLength)\n return false;\n\n for (let i = 0; i < lhs.byteLength; i++) {\n if (lhs[i] !== rhs[i])\n return false;\n }\n return true;\n}\n\ndescribe(\"ECSqlStatement\", () => {\n const outDir = KnownTestLocations.outputDir;\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n const blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\n const abbreviatedBlobVal = `{\"bytes\":${blobVal.byteLength}}`;\n\n it(\"check asynchronous step and stepForInsert methods\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"concurrent query get meta data\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(30,TIMESTAMP '2019-10-18T12:00:00Z',30)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(\"SELECT * FROM ts.Foo\");\n let props = await reader.getMetaData();\n assert.equal(props.length, 5);\n let rows = 0;\n while (await reader.step()) {\n rows++;\n }\n assert.equal(rows, 2);\n props = await reader.getMetaData();\n assert.equal(props.length, 5);\n });\n it(\"null string accessor\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"nullstring.ecdb\");\n assert.isTrue(ecdb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(`VALUES(NULL)`, async (stmt: ECSqlStatement) => {\n stmt.step();\n const str = stmt.getValue(0).getString();\n assert.equal(str, \"\");\n });\n });\n it(\"should page results\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for (let i = 1; i < ROW_COUNT; i++) {\n const rowCount = await queryCount(ecdb, \"SELECT ECInstanceId, ECClassId, n FROM ts.Foo WHERE n <= ?\", new QueryBinder().bindInt(1, i));\n assert.equal(rowCount, i);\n }\n\n const temp = await queryRows(ecdb, \"SELECT ECInstanceId FROM ONLY ts.Foo\");\n assert.equal(temp.length, ROW_COUNT);\n // query page by page\n const PAGE_SIZE = 5;\n const QUERY = \"SELECT n FROM ts.Foo\";\n const EXPECTED_ROW_COUNT = [5, 5, 5, 5, 5, 2];\n const ready = [];\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n ready.push(queryRows(ecdb, QUERY, undefined, new QueryOptionsBuilder().setLimit({ offset: i * PAGE_SIZE, count: PAGE_SIZE }).getOptions()));\n }\n // verify if each page has right count of rows\n const results = await Promise.all(ready);\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n assert.equal(results[i].length, EXPECTED_ROW_COUNT[i]);\n }\n });\n\n it(\"paging use cache statement queryRows()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n const rca = await queryRows(ecdb, \"SELECT count(*) as nRows FROM ts.Foo\");\n assert.equal(rca[0].nRows, 100); // expe\n const rc = await queryCount(ecdb, \"SELECT * FROM ts.Foo\");\n assert.equal(rc, 100); // expe\n let rowNo = 0;\n for await (const row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.n, rowNo + 1);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 100); // expect all rows\n });\n\n it(\"should restart query\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"cancelquery.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n ConcurrentQuery.resetConfig(ecdb[_nativeDb], { globalQuota: { time: 1 }, ignoreDelay: false });\n\n let cancelled = 0;\n let successful = 0;\n let rowCount = 0;\n const scheduleQuery = async (delay: number) => {\n return new Promise<void>(async (resolve, reject) => {\n try {\n const options = new QueryOptionsBuilder();\n options.setDelay(delay);\n options.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n options.setRestartToken(\"tag\");\n for await (const _row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, options.getOptions())) {\n rowCount++;\n }\n successful++;\n resolve();\n } catch (err: any) {\n // we expect query to be cancelled\n if (err.errorNumber === DbResult.BE_SQLITE_INTERRUPT) {\n cancelled++;\n resolve();\n } else {\n reject(new Error(\"rejected\"));\n }\n }\n });\n };\n\n const queries = [];\n queries.push(scheduleQuery(5000));\n queries.push(scheduleQuery(0));\n\n await Promise.all(queries);\n // We expect at least one query to be cancelled\n assert.isAtLeast(cancelled, 1);\n assert.isAtLeast(successful, 1);\n assert.isAtLeast(rowCount, 1);\n });\n it(\"should use cache statement for query()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n for (const _testPageSize of [1, 2, 4, 5, 6, 7, 10, ROW_COUNT]) {\n let rowNo = 1;\n 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 })) {\n assert.equal(row.n, rowNo);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 28); // expect all rows\n assert.equal(0, ecdb.getCachedStatementCount()); // there must be single cached statement used with different size pages.\n }\n });\n it(\"concurrent query binding\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 5; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n 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 })) {\n assert.equal(row.cnt, 3);\n }\n 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 })) {\n assert.equal(row.cnt, 3);\n }\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"No parameter index found for parameter name: d.\");\n try {\n 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 })) {\n assert.equal(row.cnt, 3);\n }\n assert.isFalse(true);\n } catch (e) { assert.isNotNull(e); }\n assert.isTrue(slm.finishAndDispose());\n });\n it(\"check HextoId() and IdToHex() ecsql functions\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 2; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n 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 })) {\n assert.equal(row.hexId, row.id);\n assert.equal(row.hexId, row.idhex);\n }\n });\n it(\"should bind BeGuid\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"guid\" typeName=\"binary\" extendedTypeName=\"BeGuid\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const maxRows = 10;\n const guids: GuidString[] = [];\n for (let i = 0; i < maxRows; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(guid) values(?)`, async (stmt: ECSqlWriteStatement) => {\n guids.push(Guid.createValue());\n stmt.bindGuid(1, guids[i]);\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n\n const uint8arrayToGuid = (guidArray: any) => {\n if (!(guidArray instanceof Uint8Array))\n throw new Error(\"Expecting a Uint8Array type argument\");\n\n if (guidArray.byteLength !== 16)\n throw new Error(\"Expecting a Uint8Array of length 16\");\n\n let guidStr: string = \"\";\n const part = [0, 4, 6, 8, 10, 16];\n for (let z = 0; z < part.length - 1; z++) {\n guidArray.subarray(part[z], part[z + 1]).forEach((c) => {\n guidStr += (`00${c.toString(16)}`).slice(-2);\n });\n if (z < part.length - 2)\n guidStr += \"-\";\n }\n return guidStr;\n };\n const guidToUint8Array = (v: GuidString) => {\n if (v.length !== 36)\n throw new Error(\"Guid is expected to have 36 characters xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n\n const ar = new Uint8Array(16);\n const t = v.split(\"-\").join(\"\");\n let i = 0;\n for (let z = 0; z < 32; z += 2) {\n ar[i++] = parseInt(t.substring(z, z + 2), 16);\n }\n return ar;\n };\n\n const testGuid = \"74da899a-6dde-406c-bf45-f4547d948f00\";\n assert.equal(testGuid, uint8arrayToGuid(guidToUint8Array(testGuid)));\n let k = 0;\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo ORDER BY ECInstanceId\", undefined, undefined, (row: any) => {\n assert.equal(row.guid, guids[k++]);\n }), maxRows);\n\n // following will not return any guid BLOB ? = STRING\n for (const guid of guids) {\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid='${guid}'`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 0);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid=StrToGuid('${guid}')`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE GuidToStr(guid)=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindBlob(1, guidToUint8Array(guid)), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT GuidToStr(guid) as gstr FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.gstr, guid);\n }), 1);\n }\n });\n it(\"should bind Ids\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n\n assert.isTrue(ecdb.isOpen);\n\n const verify = async (ecdbToVerify: ECDb, actualRes: ECSqlInsertResult, expectedECInstanceId?: Id64String) => {\n if (!expectedECInstanceId) {\n assert.notEqual(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isUndefined(actualRes.id);\n return;\n }\n\n assert.equal(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(actualRes.id);\n assert.equal(actualRes.id!, expectedECInstanceId);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdbToVerify.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n });\n 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) => {\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n }), 1);\n };\n\n let expectedId = Id64.fromLocalAndBriefcaseIds(4444, 0);\n let r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(1, expectedId);\n stmt.bindString(2, \"4444.txt\");\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4445, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(\"id\", expectedId);\n stmt.bindString(\"name\", \"4445.txt\");\n\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4446, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([expectedId, \"4446.txt\"]);\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4447, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ id: expectedId, name: \"4447.txt\" });\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n });\n\n it(\"should bind numeric and date strings\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/only BindDateTime or BindText can be called for a column of the DateTime type/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumericanddatestrings.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n const ecsqln = \"SELECT 1 FROM ts.Foo WHERE n=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqln, async (stmt: ECSqlStatement) => {\n const nNum: number = 20;\n const nStr: string = \"20\";\n const nDt: string = \"2019-01-21T12:00:00Z\";\n const nHexStr: string = \"0x14\";\n\n stmt.bindInteger(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindInt(1, nNum), selectSingleRow), 1);\n\n stmt.bindValue(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nNum]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nStr), selectSingleRow), 1);\n\n stmt.bindValue(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nDt), selectSingleRow), 0);\n\n stmt.bindValue(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nDt]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nHexStr), selectSingleRow), 0);\n\n stmt.bindValue(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nHexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n });\n\n const ecsqldt = \"SELECT 1 FROM ts.Foo WHERE dt=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqldt, async (stmt: ECSqlStatement) => {\n const dtStr: string = \"2018-10-18T12:00:00Z\";\n const num: number = 2458410;\n const str: string = \"2458410\";\n const hexStr: string = \"0x25832a\";\n\n stmt.bindDateTime(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, new QueryBinder().bindString(1, dtStr)), 1);\n stmt.bindString(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dtStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindInteger(1, num));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n assert.throw(() => stmt.bindValue(1, num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([num]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValue(1, str));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n assert.throw(() => stmt.getBinder(1).bind(str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([str]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, hexStr));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n assert.throw(() => stmt.bindValue(1, hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([hexStr]));\n stmt.clearBindings();\n });\n\n const ecsqlfooId = \"SELECT 1 FROM ts.Foo WHERE fooId=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqlfooId, async (stmt: ECSqlStatement) => {\n const num: number = 20;\n const str: string = \"20\";\n const dt: string = \"2019-01-21T12:00:00Z\";\n const hexStr: string = \"0x14\";\n\n stmt.bindId(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n stmt.bindValue(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([str]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindInteger(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n\n stmt.bindValue(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([num]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, dt);\n 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\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([dt])), 0);\n\n stmt.bindValue(1, dt);\n 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\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dt);\n 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\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dt]);\n 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\");\n stmt.reset();\n stmt.clearBindings();\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should bind numbers\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumbers.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECProperty propertyName=\"Description\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const doubleVal: number = 3.5;\n let id = await ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindDouble')\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindDouble(1, doubleVal);\n stmt.bindDouble(2, doubleVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDouble(4, doubleVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { limit: { count: 1 } }, (row: any) => {\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n }), 1);\n\n const smallIntVal: number = 3;\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, small int')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, smallIntVal);\n stmt.bindInteger(2, smallIntVal);\n stmt.bindInteger(3, smallIntVal);\n stmt.bindInteger(4, smallIntVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n }), 1);\n\n const largeUnsafeNumber: number = 12312312312312323654; // too large for int64, but fits into uint64\n assert.isFalse(Number.isSafeInteger(largeUnsafeNumber));\n const largeUnsafeNumberStr: string = \"12312312312312323654\";\n const largeUnsafeNumberHexStr: string = \"0xaade1ed08b0b5e46\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberStr);\n stmt.bindInteger(2, largeUnsafeNumberStr);\n stmt.bindInteger(3, largeUnsafeNumberStr);\n stmt.bindInteger(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // 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) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberHexStr);\n stmt.bindInteger(2, largeUnsafeNumberHexStr);\n stmt.bindInteger(3, largeUnsafeNumberHexStr);\n stmt.bindInteger(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // 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) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberStr);\n stmt.bindString(2, largeUnsafeNumberStr);\n stmt.bindString(3, largeUnsafeNumberStr);\n stmt.bindString(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // uint64 cannot be bound as string in SQLite. They get converted to reals\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberHexStr);\n stmt.bindString(2, largeUnsafeNumberHexStr);\n stmt.bindString(3, largeUnsafeNumberHexStr);\n stmt.bindString(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n });\n\n 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: any) => {\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n }), 1);\n\n const largeNegUnsafeNumber: number = -123123123123123236;\n assert.isFalse(Number.isSafeInteger(largeNegUnsafeNumber));\n const largeNegUnsafeNumberStr: string = \"-123123123123123236\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegUnsafeNumberStr);\n stmt.bindInteger(2, largeNegUnsafeNumberStr);\n stmt.bindInteger(3, largeNegUnsafeNumberStr);\n stmt.bindInteger(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n 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: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegUnsafeNumberStr);\n stmt.bindString(2, largeNegUnsafeNumberStr);\n stmt.bindString(3, largeNegUnsafeNumberStr);\n stmt.bindString(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n 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: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n const largeSafeNumber: number = 1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeSafeNumber));\n const largeSafeNumberStr: string = largeSafeNumber.toString();\n const largeSafeNumberHexStr: string = \"0x45fcc5c2c8500\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumber);\n stmt.bindInteger(2, largeSafeNumber);\n stmt.bindInteger(3, largeSafeNumber);\n stmt.bindInteger(4, largeSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.si, largeSafeNumberStr);\n assert.equal(row.hi, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.sl, largeSafeNumberStr);\n assert.equal(row.hl, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n // 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) => {\n // assert.equal(row.d, largeSafeNumber);\n // assert.equal(row.i, largeSafeNumber);\n // assert.equal(row.si, largeSafeNumberStr);\n // assert.equal(row.hi, largeSafeNumberHexStr);\n // assert.equal(row.l, largeSafeNumber);\n // assert.equal(row.sl, largeSafeNumberStr);\n // assert.equal(row.hl, largeSafeNumberHexStr);\n // assert.equal(row.s, largeSafeNumberStr);\n // });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberStr);\n stmt.bindInteger(2, largeSafeNumberStr);\n stmt.bindInteger(3, largeSafeNumberStr);\n stmt.bindInteger(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberHexStr);\n stmt.bindInteger(2, largeSafeNumberHexStr);\n stmt.bindInteger(3, largeSafeNumberHexStr);\n stmt.bindInteger(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberStr);\n stmt.bindString(2, largeSafeNumberStr);\n stmt.bindString(3, largeSafeNumberStr);\n stmt.bindString(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n // SQLite does not parse hex strs bound as strings.\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberHexStr);\n stmt.bindString(2, largeSafeNumberHexStr);\n stmt.bindString(3, largeSafeNumberHexStr);\n stmt.bindString(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n });\n\n 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: any) => {\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n }), 1);\n\n const largeNegSafeNumber: number = -1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeNegSafeNumber));\n const largeNegSafeNumberStr: string = largeNegSafeNumber.toString();\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumber);\n stmt.bindInteger(2, largeNegSafeNumber);\n stmt.bindInteger(3, largeNegSafeNumber);\n stmt.bindInteger(4, largeNegSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumberStr);\n stmt.bindInteger(2, largeNegSafeNumberStr);\n stmt.bindInteger(3, largeNegSafeNumberStr);\n stmt.bindInteger(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegSafeNumberStr);\n stmt.bindString(2, largeNegSafeNumberStr);\n stmt.bindString(3, largeNegSafeNumberStr);\n stmt.bindString(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n });\n\n it(\"should bind primitives\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal = true;\n const doubleVal = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.bl, blobVal);\n const f64 = new Float64Array(row.bl.buffer);\n const r2 = new Range3d(...f64);\n assert.deepEqual(r2, testRange);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n\n assert.deepEqual(row.s_bl, blobVal);\n assert.equal(row.s_bo, boolVal);\n assert.equal(row.s_d, doubleVal);\n assert.equal(row.s_dt, dtVal);\n assert.equal(row.s_i, intVal);\n assert.equal(row.s_p2d.x, p2dVal.x);\n assert.equal(row.s_p2d.y, p2dVal.y);\n assert.equal(row.s_p3d.x, p3dVal.x);\n assert.equal(row.s_p3d.y, p3dVal.y);\n assert.equal(row.s_p3d.z, p3dVal.z);\n assert.equal(row.s_s, strVal);\n\n 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: any) => {\n assert.deepEqual(row1.bl, blobVal);\n const f64a = new Float64Array(row1.bl.buffer);\n const r2a = new Range3d(...f64a);\n assert.deepEqual(r2a, testRange);\n assert.equal(row1.bo, boolVal);\n assert.equal(row1.d, doubleVal);\n assert.equal(row1.dt, dtVal);\n assert.equal(row1.i, intVal);\n assert.equal(row1.p2d.x, p2dVal.x);\n assert.equal(row1.p2d.y, p2dVal.y);\n assert.equal(row1.p3d.x, p3dVal.x);\n assert.equal(row1.p3d.y, p3dVal.y);\n assert.equal(row1.p3d.z, p3dVal.z);\n assert.equal(row1.s, strVal);\n\n assert.deepEqual(row1.s_bl, blobVal);\n assert.equal(row1.s_bo, boolVal);\n assert.equal(row1.s_d, doubleVal);\n assert.equal(row1.s_dt, dtVal);\n assert.equal(row1.s_i, intVal);\n assert.equal(row1.s_p2d.x, p2dVal.x);\n assert.equal(row1.s_p2d.y, p2dVal.y);\n assert.equal(row1.s_p3d.x, p3dVal.x);\n assert.equal(row1.s_p3d.y, p3dVal.y);\n assert.equal(row1.s_p3d.z, p3dVal.z);\n assert.equal(row1.s_s, strVal);\n }), 1);\n });\n };\n\n const ids = new Array<Id64String>();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n stmt.bindBlob(9, blobVal);\n stmt.bindBoolean(10, boolVal);\n stmt.bindDouble(11, doubleVal);\n stmt.bindDateTime(12, dtVal);\n stmt.bindInteger(13, intVal);\n stmt.bindPoint2d(14, p2dVal);\n stmt.bindPoint3d(15, p3dVal);\n stmt.bindString(16, strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues([blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal, blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal]);\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindBlob(\"bl\", blobVal);\n stmt.bindBoolean(\"bo\", boolVal);\n stmt.bindDouble(\"d\", doubleVal);\n stmt.bindDateTime(\"dt\", dtVal);\n stmt.bindInteger(\"i\", intVal);\n stmt.bindPoint2d(\"p2d\", p2dVal);\n stmt.bindPoint3d(\"p3d\", p3dVal);\n stmt.bindString(\"s\", strVal);\n\n stmt.bindBlob(\"s_bl\", blobVal);\n stmt.bindBoolean(\"s_bo\", boolVal);\n stmt.bindDouble(\"s_d\", doubleVal);\n stmt.bindDateTime(\"s_dt\", dtVal);\n stmt.bindInteger(\"s_i\", intVal);\n stmt.bindPoint2d(\"s_p2d\", p2dVal);\n stmt.bindPoint3d(\"s_p3d\", p3dVal);\n stmt.bindString(\"s_s\", strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues({\n bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal,\n i: intVal, p2d: p2dVal, p3d: p3dVal, s: strVal,\n s_bl: blobVal, s_bo: boolVal, s_d: doubleVal, s_dt: dtVal,\n s_i: intVal, s_p2d: p2dVal, s_p3d: p3dVal, s_s: strVal,\n });\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n for (const id of ids) {\n await verify(id);\n }\n });\n\n it(\"should bind structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const structVal = {\n bl: blobVal, bo: true, d: 3.5,\n dt: \"2018-01-23T12:24:00.000\",\n i: 3, p2d: new Point2d(1, 2), p3d: new Point3d(1, 2, 3), s: \"Hello World\",\n };\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isTrue(blobEqual(row.struct.bl, structVal.bl));\n assert.equal(row.struct.bo, structVal.bo);\n assert.equal(row.struct.d, structVal.d);\n assert.equal(row.struct.dt, structVal.dt);\n assert.equal(row.struct.i, structVal.i);\n assert.equal(row.struct.p2d.x, structVal.p2d.x);\n assert.equal(row.struct.p2d.y, structVal.p2d.y);\n assert.equal(row.struct.p3d.x, structVal.p3d.x);\n assert.equal(row.struct.p3d.y, structVal.p3d.y);\n assert.equal(row.struct.p3d.z, structVal.p3d.z);\n assert.equal(row.struct.s, structVal.s);\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\n assert.isTrue(blobEqual(row1.struct.bl, structVal.bl));\n assert.equal(row1.struct.bo, structVal.bo);\n assert.equal(row1.struct.d, structVal.d);\n assert.equal(row1.struct.dt, structVal.dt);\n assert.equal(row1.struct.i, structVal.i);\n assert.equal(row1.struct.p2d.x, structVal.p2d.x);\n assert.equal(row1.struct.p2d.y, structVal.p2d.y);\n assert.equal(row1.struct.p3d.x, structVal.p3d.x);\n assert.equal(row1.struct.p3d.y, structVal.p3d.y);\n assert.equal(row1.struct.p3d.z, structVal.p3d.z);\n assert.equal(row1.struct.s, structVal.s);\n }), 1);\n });\n };\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([structVal]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"str\", structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ str: structVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n });\n\n it(\"should bind arrays\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindarrays.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const intArray = [1, 2, 3];\n const dtArray = [\"2018-01-23T00:00:00.000\", \"2018-01-23T16:39:00.000\"];\n const addressArray = [{ city: \"London\", zip: 10000 }, { city: \"Manchester\", zip: 20000 }, { city: \"Edinburgh\", zip: 30000 }];\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n });\n\n assert.equal(await query(ecdb, \"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row: any) => {\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n }), 1);\n };\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(1, intArray);\n stmt.bindArray(2, dtArray);\n stmt.bindArray(3, addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([intArray, dtArray, addressArray]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(\"iarray\", intArray);\n stmt.bindArray(\"dtarray\", dtArray);\n stmt.bindArray(\"addresses\", addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ iarray: intArray, dtarray: dtArray, addresses: addressArray });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n });\n\n it(\"should bind navigation\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(:name,:parent)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(\"name\", \"Child 3\");\n stmt.bindNavigation(\"parent\", { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues({ name: \"Child 4\", parent: { id: parentId, relClassName: \"Test.ParentHasChildren\" } });\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n let rowCount: number = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 4);\n });\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n assert.equal(row.name, `Child ${rowCount2}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }), 4);\n });\n\n it(\"should bind Range3d for parameter in spatial sql function\", async () => {\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ECSqlStatement\", \"BindRange3d.bim\"), { rootSubject: { name: \"BindRange3d\" } });\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindRange3d(1, new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0));\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindValues([new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0)]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n } finally {\n iModel.saveChanges();\n iModel.close();\n }\n });\n\n it(\"should bind Range3d\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindrange3d.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Range3d\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo([Range3d]) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindRange3d(1, testRange);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT [Range3d] FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const rangeBlob: Uint8Array = stmt.getValue(0).getBlob();\n const rangeFloatArray = new Float64Array(rangeBlob.buffer);\n assert.equal(rangeFloatArray.length, 6);\n const actualRange = new Range3d(...rangeFloatArray);\n assert.isTrue(actualRange.isAlmostEqual(testRange));\n });\n });\n\n it(\"should bind IdSets\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"should bind IdSets to IdSet Virtual Table\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"Error Checking For binding to IdSet statements\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, ECVLib.IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [\"0X1\", \"ABC\"];\n try {\n stmt.bindIdSet(1, idSet);\n } catch (err: any) {\n assert.equal(err.message, \"Error binding id set\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n try {\n stmt.bindId(1, idNumbers[0].toString());\n } catch (err: any) {\n assert.equal(err.message, \"Error binding Id\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n });\n });\n\n /* This test doesn't do anything specific with the binder life time but just runs a few scenarios\n with and without statement cache to test that stuff works fine */\n it(\"check ECSqlBinder life time\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecsqlbinderlifetime.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Address\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Street\" typeName=\"string\"/>\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECStructProperty propertyName=\"Location\" typeName=\"Address\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let id1: Id64String = \"\", id2: Id64String = \"\";\n\n // *** test without statement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id1 = res.id!;\n assert.isTrue(Id64.isValidId64(id1));\n });\n\n\n // *** test withstatement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id2 = res.id!;\n assert.isTrue(Id64.isValidId64(id2));\n });\n\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using stmt = ecdb.prepareStatement(\"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\");\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n if (rowCount === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }\n assert.equal(rowCount, 2);\n }\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n if (rowCount2 === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }), 2);\n });\n\n it(\"getRow() with primitives values\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S) VALUES(?,?,?,?,?,?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n // 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) => {\n // assert.equal(row.id, id);\n // assert.equal(row.className, \"Test.Foo\");\n // assert.deepEqual(row.bl, blobVal);\n // assert.equal(row.bo, boolVal);\n // assert.equal(row.d, doubleVal);\n // assert.equal(row.dt, dtVal);\n // assert.equal(row.i, intVal);\n // assert.equal(row.p2d.x, p2dVal.x);\n // assert.equal(row.p2d.y, p2dVal.y);\n // assert.equal(row.p3d.x, p3dVal.x);\n // assert.equal(row.p3d.y, p3dVal.y);\n // assert.equal(row.p3d.z, p3dVal.z);\n // assert.equal(row.s, strVal);\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.blobby, blobVal);\n assert.equal(row[\"[I] + 10\"], intVal + 10);\n assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n assert.equal(row.capitalS, strVal.toUpperCase());\n });\n\n // 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) => {\n // assert.deepEqual(row.blobby, blobVal);\n // assert.equal(row[\"[I] + 10\"], intVal + 10);\n // assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n // assert.equal(row.capitalS, strVal.toUpperCase());\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const testSchemaId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECSchemaDef WHERE Name='Test'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const fooClassId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n });\n\n 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: any) => {\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT count(*) cnt FROM meta.ECSchemaDef\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n });\n\n assert.equal(await query(ecdb, \"SELECT count(*) cnt FROM meta.ECSchemaDef\", QueryBinder.from([]), selectSingleRow, (row: any) => {\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n });\n\n assert.equal(await query(ecdb, \"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(Object.entries(row).length, 0);\n });\n\n assert.equal(await query(ecdb, \"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(Object.entries(row).length, 0);\n }), 1);\n });\n\n it(\"getRow() with abbreviated blobs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getblobs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const singleBlobVal = blobVal.slice(0, 1);\n const abbreviatedSingleBlobVal = `{\"bytes\":${singleBlobVal.byteLength}}`;\n const emptyBlobVal = new Uint8Array();\n\n const fullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const singleId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, singleBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const emptyId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, emptyBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const nullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNull(1);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedSingleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, \"{\\\"bytes\\\":0}\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n });\n\n it(\"getRow() with navigation properties and relationships\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getnavandrels.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n let rowCount: number;\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }), 2);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n 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: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }), 2);\n\n const childId: Id64String = childIds[0];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n });\n\n 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: any) => {\n rowCount++;\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n }), 1);\n\n });\n\n it(\"getRow() with structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal: XAndY = { x: 1, y: 2 };\n const p3dVal: XYAndZ = { x: 1, y: 2, z: 3 };\n const stringVal: string = \"Hello World\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const expectedStruct = { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal };\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n });\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const actualStruct: any = stmt.getValue(0).getStruct();\n assert.deepEqual(actualStruct.bl, expectedStruct.bl);\n assert.equal(actualStruct.bo, expectedStruct.bo);\n assert.equal(actualStruct.d, expectedStruct.d);\n assert.equal(actualStruct.dt, expectedStruct.dt);\n assert.equal(actualStruct.i, expectedStruct.i);\n assert.equal(actualStruct.p2d.x, expectedStruct.p2d.x);\n assert.equal(actualStruct.p2d.y, expectedStruct.p2d.y);\n assert.equal(actualStruct.p3d.x, expectedStruct.p3d.x);\n assert.equal(actualStruct.p3d.y, expectedStruct.p3d.y);\n assert.equal(actualStruct.p3d.z, expectedStruct.p3d.z);\n assert.equal(actualStruct.s, expectedStruct.s);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n 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: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n });\n\n 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: any) => {\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n }), 1);\n });\n\n it(\"check HexStr() sql function\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"hexstrfunction.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const expectedRow = {\n bl: blobVal, bo: true, d: 3.5, dt: \"2018-01-23T12:24:00.000\",\n i: 3, l: 12312312312312, p2d: { x: 1, y: 2 }, p3d: { x: 1, y: 2, z: 3 }, s: \"Hello World\",\n };\n\n const id: Id64String = 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: ECSqlWriteStatement) => {\n stmt.bindValues({\n bl: blobVal, bo: expectedRow.bo, d: expectedRow.d,\n dt: expectedRow.dt, i: expectedRow.i, l: expectedRow.l, p2d: expectedRow.p2d, p3d: expectedRow.p3d, s: expectedRow.s,\n });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT I, HexStr(I) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.i, expectedRow.i);\n assert.equal(row.hex, \"0x3\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT L, HexStr(L) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.l, expectedRow.l);\n assert.equal(row.hex, \"0xb32af0071f8\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl, HexStr(Bl) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bo, HexStr(Bo) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.bo, expectedRow.bo);\n assert.equal(row.hex, \"0x1\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D, HexStr(D) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Dt, HexStr(Dt) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P2d, HexStr(P2d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P3d, HexStr(P3d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT S, HexStr(S) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"check ec enums\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Status\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"On\" value=\"1\" />\n <ECEnumerator name=\"Off\" value=\"2\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"Org\" />\n <ECEnumerator name=\"Com\" value=\"Com\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyStat\" typeName=\"Status\"/>\n <ECArrayProperty propertyName=\"MyStats\" typeName=\"Status\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n <ECArrayProperty propertyName=\"MyDomains\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyStat,MyStats,MyDomain,MyDomains) VALUES(test.Status.[On],?,test.Domain.Org,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, [1, 2]);\n stmt.bindValue(2, [\"Org\", \"Com\"]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(myStatVal.isNull);\n assert.isTrue(myStatVal.columnInfo.isEnum());\n assert.equal(myStatVal.getInteger(), 1);\n assert.deepEqual(myStatVal.getEnum(), [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatsVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(myStatsVal.isNull);\n assert.isTrue(myStatsVal.columnInfo.isEnum());\n assert.deepEqual(myStatsVal.getArray(), [1, 2]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualStatsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myStatsVal.getArrayIterator()) {\n actualStatsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualStatsEnums.length, 2);\n assert.deepEqual(actualStatsEnums[0], [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n assert.deepEqual(actualStatsEnums[1], [{ schema: \"Test\", name: \"Status\", key: \"Off\", value: 2 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainVal: ECSqlValue = stmt.getValue(2);\n assert.isFalse(myDomainVal.isNull);\n assert.isTrue(myDomainVal.columnInfo.isEnum());\n assert.equal(myDomainVal.getString(), \"Org\");\n assert.deepEqual(myDomainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainsVal: ECSqlValue = stmt.getValue(3);\n assert.isFalse(myDomainsVal.isNull);\n assert.isTrue(myDomainsVal.columnInfo.isEnum());\n assert.deepEqual(myDomainsVal.getArray(), [\"Org\", \"Com\"]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualDomainsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myDomainsVal.getArrayIterator()) {\n actualDomainsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualDomainsEnums.length, 2);\n assert.deepEqual(actualDomainsEnums[0], [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n assert.deepEqual(actualDomainsEnums[1], [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"Com\" }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.deepEqual(row, { type: 0, modifier: 2 });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const typeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(typeVal.isNull);\n assert.isTrue(typeVal.columnInfo.isEnum());\n assert.equal(typeVal.getInteger(), 0);\n assert.deepEqual(typeVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassType\", key: \"Entity\", value: 0 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const modifierVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(modifierVal.isNull);\n assert.isTrue(modifierVal.columnInfo.isEnum());\n assert.equal(modifierVal.getInteger(), 2);\n assert.deepEqual(modifierVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassModifier\", key: \"Sealed\", value: 2 }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row, { type: 0, modifier: 2 });\n }), 1);\n });\n\n it(\"check ORed ECEnums\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/The value 9 cannot be broken down into a combination of ECEnumerators/gm);\n slm.append().error().category(\"ECDb\").message(/The value 'gov,de' cannot be broken down into a combination of ECEnumerators/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"oredecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Color\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Red\" value=\"1\" />\n <ECEnumerator name=\"Yellow\" value=\"2\" />\n <ECEnumerator name=\"Blue\" value=\"4\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"org\" />\n <ECEnumerator name=\"Com\" value=\"com\" />\n <ECEnumerator name=\"Gov\" value=\"gov\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyColor\" typeName=\"Color\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const ids: { unored: Id64String, ored: Id64String, unmatched: Id64String } = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyColor,MyDomain) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, 4);\n stmt.bindValue(2, \"com\");\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 5);\n stmt.bindValue(2, \"gov,com\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const ored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 9);\n stmt.bindValue(2, \"gov,de\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unmatched: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n return { unored, ored, unmatched };\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, ids.unored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n let row: any = stmt.getRow();\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let colVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 4);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let domainVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }]);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.ored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 5);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Red\", value: 1 }, { schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }, { schema: \"Test\", name: \"Domain\", key: \"Gov\", value: \"gov\" }]);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.unmatched);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 9);\n assert.isUndefined(colVal.getEnum());\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,de\");\n assert.isUndefined(domainVal.getEnum());\n });\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unored]), undefined, (row: any) => {\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.ored]), undefined, (row: any) => {\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.caType, 160);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const caTypeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(caTypeVal.isNull);\n assert.isTrue(caTypeVal.columnInfo.isEnum());\n assert.equal(caTypeVal.getInteger(), 160);\n assert.deepEqual(caTypeVal.getEnum(), [\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveProperty\", value: 32 },\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveArrayProperty\", value: 128 }]);\n });\n 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: any) => {\n assert.equal(row.caType, 160);\n }), 1);\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should get native sql\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n const nativesql: string = stmt.getNativeSql();\n assert.isTrue(nativesql.startsWith(\"INSERT INTO [ts_Foo]\"));\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"check column info\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"MyClass\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyProperty\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.MyClass(MyProperty) VALUES('Value')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyProperty as MyAlias, 1 as MyGenerated FROM test.MyClass WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myAlias, \"Value\");\n assert.equal(row.myGenerated, 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"MyAlias\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"MyAlias\");\n const originPropertyName = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName);\n assert.equal(originPropertyName, \"MyProperty\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"MyGenerated\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"MyGenerated\");\n assert.isUndefined(colInfo1.getOriginPropertyName());\n });\n });\n\n it(\"check access string metadata in nested struct\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"ECDbMap\" version=\"02.00.00\" alias=\"ecdbmap\"/>\n <ECStructClass typeName=\"InnerStruct\">\n <ECProperty propertyName=\"a\" typeName=\"string\"/>\n <ECProperty propertyName=\"b\" typeName=\"string\"/>\n </ECStructClass>\n <ECStructClass typeName=\"OuterStruct\">\n <ECStructProperty propertyName=\"c\" typeName=\"InnerStruct\"/>\n <ECProperty propertyName=\"d\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Z\">\n <ECCustomAttributes>\n <ClassMap xmlns=\"ECDbMap.02.00.00\">\n <MapStrategy>TablePerHierarchy</MapStrategy>\n </ClassMap>\n <ShareColumns xmlns=\"ECDbMap.02.00.00\">\n <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>\n </ShareColumns>\n </ECCustomAttributes>\n </ECEntityClass>\n <ECEntityClass typeName=\"A\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"f\" typeName=\"OuterStruct\"/>\n <ECProperty propertyName=\"g\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"B\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"h\" typeName=\"InnerStruct\" />\n <ECProperty propertyName=\"i\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n 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: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT f, f.c.a, f.c.b, f.d, g FROM Test.A\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.f.c.a, \"f.c.a\");\n assert.equal(row.f.c.b, \"f.c.b\");\n assert.equal(row.f.d, \"f.d\");\n assert.equal(row.g, \"g\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"f\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"f\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"f\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"a\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"f.c.a\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"a\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val2: ECSqlValue = stmt.getValue(2);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo2: ECSqlColumnInfo = val2.columnInfo;\n\n assert.equal(colInfo2.getPropertyName(), \"b\");\n const accessString2 = colInfo2.getAccessString();\n assert.equal(accessString2, \"f.c.b\");\n const originPropertyName2 = colInfo2.getOriginPropertyName();\n assert.isDefined(originPropertyName2);\n assert.equal(originPropertyName2, \"b\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val3: ECSqlValue = stmt.getValue(3);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo3: ECSqlColumnInfo = val3.columnInfo;\n\n assert.equal(colInfo3.getPropertyName(), \"d\");\n const accessString3 = colInfo3.getAccessString();\n assert.equal(accessString3, \"f.d\");\n const originPropertyName3 = colInfo3.getOriginPropertyName();\n assert.isDefined(originPropertyName3);\n assert.equal(originPropertyName3, \"d\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val4: ECSqlValue = stmt.getValue(4);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo4: ECSqlColumnInfo = val4.columnInfo;\n\n assert.equal(colInfo4.getPropertyName(), \"g\");\n const accessString4 = colInfo4.getAccessString();\n assert.equal(accessString4, \"g\");\n const originPropertyName4 = colInfo4.getOriginPropertyName();\n assert.isDefined(originPropertyName4);\n assert.equal(originPropertyName4, \"g\");\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.B (h.a, h.b, i) VALUES ('h.a' ,'h.b', 'i')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT h, i FROM Test.B\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.h.a, \"h.a\");\n assert.equal(row.h.b, \"h.b\");\n assert.equal(row.i, \"i\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"h\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"h\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"h\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"i\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"i\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"i\");\n });\n });\n\n it(\"ecsql statements with QueryBinder\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"booleanProperty\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"blobProperty\" typeName=\"binary\"/>\n <ECProperty propertyName=\"doubleProperty\" typeName=\"double\"/>\n <ECProperty propertyName=\"customIdProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"customIdSetProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"intProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"longProperty\" typeName=\"long\"/>\n <ECProperty propertyName=\"stringProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"nullProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"point2dProperty\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"point3dProperty\" typeName=\"point3d\"/>\n </ECEntityClass>\n <ECStructClass typeName=\"Bar\" modifier=\"Sealed\">\n <ECProperty propertyName=\"structClassProperty\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Baz\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"structProperty\" typeName=\"Bar\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const booleanValue = true;\n const blobValue = new Uint8Array([0, 0, 0]);\n const doubleValue = 12.12;\n const customIdValue = \"1234\";\n const customIdSetValue = [\"0x9\"];\n const intValue = 10;\n const longValue = 1e9;\n const stringValue = \"test string value\";\n const point2dValue = new Point2d(10, 20);\n const point3dValue = new Point3d(15, 30, 45);\n const structValue = { structClassProperty: \"test string value for struct property\" };\n\n let r = await ecdb.withCachedWriteStatement(\n `INSERT INTO ts.Foo(booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty)\n VALUES(:booleanValue, :blobValue, :doubleValue, :customIdValue, :customIdSetValue, :intValue, :longValue, :stringValue, :nullValue, :point2dValue, :point3dValue)`,\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindBoolean(\"booleanValue\", booleanValue);\n stmt.bindBlob(\"blobValue\", blobValue);\n stmt.bindDouble(\"doubleValue\", doubleValue);\n stmt.bindId(\"customIdValue\", customIdValue);\n stmt.bindId(\"customIdSetValue\", customIdSetValue[0]);\n stmt.bindInteger(\"intValue\", intValue);\n stmt.bindInteger(\"longValue\", longValue);\n stmt.bindString(\"stringValue\", stringValue);\n stmt.bindNull(\"nullValue\");\n stmt.bindPoint2d(\"point2dValue\", point2dValue);\n stmt.bindPoint3d(\"point3dValue\", point3dValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n\n const params = new QueryBinder();\n params.bindBoolean(\"booleanValue\", booleanValue);\n params.bindBlob(\"blobValue\", blobValue);\n params.bindDouble(\"doubleValue\", doubleValue);\n params.bindId(\"customIdValue\", customIdValue);\n params.bindInt(\"intValue\", intValue);\n params.bindLong(\"longValue\", longValue);\n params.bindString(\"stringValue\", stringValue);\n params.bindPoint2d(\"point2dValue\", point2dValue);\n params.bindPoint3d(\"point3dValue\", point3dValue);\n params.bindIdSet(\"customIdSetValue\", customIdSetValue);\n\n let reader = ecdb.createQueryReader(\n `SELECT booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty FROM ts.Foo\n WHERE booleanProperty = :booleanValue AND blobProperty = :blobValue AND doubleProperty = :doubleValue AND customIdProperty = :customIdValue AND InVirtualSet(:customIdSetValue, customIdSetProperty) AND\n intProperty = :intValue AND longProperty = :longValue AND stringProperty = :stringValue AND point2dProperty = :point2dValue AND point3dProperty = :point3dValue`,\n params,\n );\n const row = (await reader.toArray())[0];\n\n assert.isNotNull(row);\n assert.equal(row[0], booleanValue);\n assert.deepEqual(row[1], blobValue);\n assert.equal(row[2], doubleValue);\n assert.equal(row[3], customIdValue);\n assert.equal(row[4], \"9\");\n assert.equal(row[5], intValue);\n assert.equal(row[6], longValue);\n assert.equal(row[7], stringValue);\n assert.equal(row[8], null);\n assert.deepEqual(row[9], { X: 10, Y: 20 });\n assert.deepEqual(row[10], { X: 15, Y: 30, Z: 45 });\n\n assert.isFalse(await reader.step());\n\n r = await ecdb.withCachedWriteStatement(\n \"INSERT INTO ts.Baz(structProperty) VALUES(:structValue)\",\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"structValue\", structValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x2\");\n\n reader = ecdb.createQueryReader(\n `SELECT * FROM ts.Baz`,\n );\n\n await reader.step();\n\n assert.deepEqual(reader.current.structProperty, structValue);\n\n const paramsWithStruct = new QueryBinder();\n paramsWithStruct.bindStruct(\"structValue\", structValue);\n reader = ecdb.createQueryReader(\"SELECT * FROM ts.Baz WHERE structProperty = :structValue\", paramsWithStruct);\n\n await assert.isRejected(reader.toArray(), \"Struct type binding not supported\");\n });\n\n it(\"Statement closed with WithWriteStatement\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test_hang.ecdb\",\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"Test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"X\">\n <ECProperty propertyName=\"Label\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>\n `);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withWriteStatement(`INSERT INTO Test.X (Label) VALUES (?)`, (stmt) => {\n stmt.bindString(1, \"TestLabel 1\");\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n });\n\n ecdb.saveChanges();\n\n const reader = ecdb.createQueryReader(\n `SELECT Label FROM Test.X`\n );\n const row = (await reader.toArray())[0];\n\n assert.isNotNull(row);\n assert.equal(row[0], \"TestLabel 1\");\n\n assert.isFalse(await reader.step());\n });\n\n describe(\"invalid RelECClassId with pragma validate_ecsql_writes\", () => {\n let ecdb: ECDb;\n let parentHasChildrenClassId: Id64String;\n let childHasFriendsClassId: Id64String;\n let validRelClassId: Id64String;\n\n before(async () => {\n ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildTemplate\" modifier=\"Abstract\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <BaseClass>ChildTemplate</BaseClass>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECNavigationProperty propertyName=\"Friends\" relationshipName=\"ChildHasFriends\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"ChildTemplate\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECRelationshipClass typeName=\"ChildHasFriends\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Parent'\");\n assert.isTrue(await reader.step());\n parentHasChildrenClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(parentHasChildrenClassId));\n\n // When the ECSql insert validation is set to true, the invalid relClassId is detected and an error is thrown.\n assert.isTrue(await (ecdb.createQueryReader(\"PRAGMA validate_ecsql_writes=true\")).step());\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ParentHasChildren'\");\n assert.isTrue(await reader.step());\n validRelClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(validRelClassId));\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ChildHasFriends'\");\n assert.isTrue(await reader.step());\n childHasFriendsClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(childHasFriendsClassId));\n\n ecdb.saveChanges();\n });\n\n after(() => {\n ecdb.closeDb();\n });\n\n function testECSqlWithoutBinders(testCaseNumber: number, sqlStmt: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let id: Id64String | undefined;\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n assert.isDefined(stmt);\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n return id;\n };\n\n function testECSqlWithBinders(testCaseNumber: number, sqlStmt: string, firstBinderValue: string, secondBinderValue: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n if (firstBinderValue !== \"\")\n stmt.bindNavigation(1, { id: \"1\", relClassName: firstBinderValue });\n if (secondBinderValue !== \"\")\n stmt.bindNavigation(2, { id: \"2\", relClassName: secondBinderValue });\n\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n stmt?.clearBindings();\n };\n\n it(\"insert statement with invalid relClassId in navigation properties\", async () => {\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, 9999)`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`);\n testECSqlWithoutBinders(2, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, NULL)`, false, `The ECSql statement contains an invalid relationship class id.`);\n testECSqlWithoutBinders(3, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${parentHasChildrenClassId})`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`);\n testECSqlWithoutBinders(4, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${validRelClassId})`, true, \"\");\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\");\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ParentHasChildren\", \"\", true, \"\");\n testECSqlWithBinders(7, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ChildHasFriends\", \"\", true, \"\");\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\");\n testECSqlWithBinders(9, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"INSERT INTO test.Child(Parent, Friends) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\");\n testECSqlWithBinders(11, \"INSERT INTO test.Child(Friends, Parent) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n });\n\n it(\"update statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `UPDATE test.Child SET Parent.RelECClassId = 9999`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(2, `UPDATE test.Child SET Parent.RelECClassId = NULL`, false, `The ECSql statement contains an invalid relationship class id.`, false);\n testECSqlWithoutBinders(3, `UPDATE test.Child SET Parent.RelECClassId = ${parentHasChildrenClassId}`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(4, `UPDATE test.Child SET Parent.RelECClassId = ${validRelClassId}`, true, \"\", false);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"UPDATE test.Child SET Parent = ?\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"UPDATE test.Child SET Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n testECSqlWithBinders(7, \"UPDATE test.Child SET Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"UPDATE test.Child SET Parent = ?\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\", false);\n testECSqlWithBinders(9, \"UPDATE test.Child SET Friends = ?\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"UPDATE test.Child SET Parent = ?, Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n testECSqlWithBinders(11, \"UPDATE test.Child SET Friends = ?, Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n });\n\n it(\"select statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `SELECT * from test.Child where Parent.RelECClassId = 9999`, true, \"\", false);\n testECSqlWithoutBinders(2, `SELECT * from test.Child where Parent.RelECClassId = NULL`, true, \"\", false);\n testECSqlWithoutBinders(3, `SELECT * from test.Child where Parent.RelECClassId = ${parentHasChildrenClassId}`, true, \"\", false);\n testECSqlWithoutBinders(4, `SELECT * from test.Child where Parent.RelECClassId = ${validRelClassId}`, true, \"\", false, DbResult.BE_SQLITE_ROW);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"SELECT * from test.Child where Parent = ?\", \"Test.InvalidClass\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"SELECT * from test.Child where Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(7, \"SELECT * from test.Child where Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"SELECT * from test.Child where Parent = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n testECSqlWithBinders(9, \"SELECT * from test.Child where Friends = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"SELECT * from test.Child where Parent = ? and Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(11, \"SELECT * from test.Child where Friends = ? and Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n });\n });\n});\n"]}