@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":"SqliteStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/SqliteStatement.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 * as path from \"path\";\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ECDb, ECDbOpenMode, SqliteStatement, SqliteValueType } from \"../../core-backend\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\r\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\r\n\r\ndescribe(\"SqliteStatement\", () => {\r\n const outDir = KnownTestLocations.outputDir;\r\n const stringVal: string = \"Hello world\";\r\n const intVal = 0;\r\n const doubleVal = -2.5;\r\n const blobVal = new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer);\r\n\r\n it(\"create table, insert, select with ecdb\", () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"sqlitestatement.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, stringcol TEXT, intcol INTEGER, doublecol REAL, blobcol)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n const stmt1 = \"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\";\r\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(1, stringVal);\r\n stmt.bindValue(2, intVal);\r\n stmt.bindValue(3, doubleVal);\r\n stmt.bindValue(4, blobVal);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\r\n stmt.maybeBindString(1, stringVal);\r\n stmt.maybeBindInteger(2, intVal);\r\n stmt.maybeBindDouble(3, doubleVal);\r\n stmt.maybeBindBlob(4, blobVal);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues([stringVal, intVal, doubleVal, blobVal]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n const stmt2 = \"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(:string,:int,:double,:blob)\";\r\n ecdb.withPreparedSqliteStatement(stmt2, (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(\":string\", stringVal);\r\n stmt.bindValue(\":int\", intVal);\r\n stmt.bindValue(\":double\", doubleVal);\r\n stmt.bindValue(\":blob\", blobVal);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(stmt2, (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues({ \":string\": stringVal, \":int\": intVal, \":double\": doubleVal, \":blob\": blobVal });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.saveChanges();\r\n\r\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\r\n assert.isTrue(stmt.isReadonly);\r\n let rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n assert.equal(stmt.getColumnCount(), 5);\r\n const idSqlVal = stmt.getValue(0);\r\n assert.isFalse(idSqlVal.isNull);\r\n assert.equal(idSqlVal.type, SqliteValueType.Integer);\r\n assert.isDefined(idSqlVal.value);\r\n assert.equal(idSqlVal.value, rowCount);\r\n assert.equal(idSqlVal.getInteger(), rowCount);\r\n assert.equal(idSqlVal.columnName, \"id\");\r\n\r\n const stringSqlVal = stmt.getValue(1);\r\n assert.isFalse(stringSqlVal.isNull);\r\n assert.equal(stringSqlVal.type, SqliteValueType.String);\r\n assert.isDefined(stringSqlVal.value);\r\n assert.equal(stringSqlVal.value, stringVal);\r\n assert.equal(stringSqlVal.getString(), stringVal);\r\n assert.equal(stringSqlVal.columnName, \"stringcol\");\r\n\r\n const intSqlVal = stmt.getValue(2);\r\n assert.isFalse(intSqlVal.isNull);\r\n assert.equal(intSqlVal.type, SqliteValueType.Integer);\r\n assert.isDefined(intSqlVal.value);\r\n assert.equal(intSqlVal.value, intVal);\r\n assert.equal(intSqlVal.getInteger(), intVal);\r\n assert.equal(intSqlVal.columnName, \"intcol\");\r\n\r\n const doubleSqlVal = stmt.getValue(3);\r\n assert.isFalse(doubleSqlVal.isNull);\r\n assert.equal(doubleSqlVal.type, SqliteValueType.Double);\r\n assert.isDefined(doubleSqlVal.value);\r\n assert.equal(doubleSqlVal.value, doubleVal);\r\n assert.equal(doubleSqlVal.getDouble(), doubleVal);\r\n assert.equal(doubleSqlVal.columnName, \"doublecol\");\r\n\r\n const blobSqlVal = stmt.getValue(4);\r\n assert.isFalse(blobSqlVal.isNull);\r\n assert.equal(blobSqlVal.type, SqliteValueType.Blob);\r\n assert.isDefined(blobSqlVal.value);\r\n assert.equal((blobSqlVal.value as Uint8Array).byteLength, blobVal.byteLength);\r\n assert.equal(blobSqlVal.getBlob().byteLength, blobVal.byteLength);\r\n assert.equal(blobSqlVal.columnName, \"blobcol\");\r\n }\r\n assert.equal(rowCount, 5);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\r\n assert.isTrue(stmt.isReadonly);\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 assert.isDefined(row.id);\r\n assert.equal(row.id, rowCount);\r\n\r\n assert.isDefined(row.stringcol);\r\n assert.equal(row.stringcol, stringVal);\r\n\r\n assert.isDefined(row.intcol);\r\n assert.equal(row.intcol, intVal);\r\n\r\n assert.isDefined(row.doublecol);\r\n assert.equal(row.doublecol, doubleVal);\r\n\r\n assert.isDefined(row.blobcol);\r\n assert.equal((row.blobcol as Uint8Array).byteLength, blobVal.byteLength);\r\n }\r\n assert.equal(rowCount, 5);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\r\n assert.isTrue(stmt.isReadonly);\r\n let rowCount = 0;\r\n for (const row of stmt) {\r\n rowCount++;\r\n assert.isDefined(row.id);\r\n assert.equal(row.id, rowCount);\r\n\r\n assert.isDefined(row.stringcol);\r\n assert.equal(row.stringcol, stringVal);\r\n\r\n assert.isDefined(row.intcol);\r\n assert.equal(row.intcol, intVal);\r\n\r\n assert.isDefined(row.doublecol);\r\n assert.equal(row.doublecol, doubleVal);\r\n\r\n assert.isDefined(row.blobcol);\r\n assert.equal((row.blobcol as Uint8Array).byteLength, blobVal.byteLength);\r\n }\r\n assert.equal(rowCount, 5);\r\n });\r\n });\r\n\r\n it(\"null values handling\", () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnull.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, stringcol TEXT, intcol INTEGER, doublecol REAL, blobcol)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(1, undefined);\r\n stmt.bindValue(2, undefined);\r\n stmt.bindValue(3, undefined);\r\n stmt.bindValue(4, undefined);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues([]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues([undefined, undefined]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(:string,:int,:double,:blob)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(\":string\", undefined);\r\n stmt.bindValue(\":int\", undefined);\r\n stmt.bindValue(\":double\", undefined);\r\n stmt.bindValue(\":blob\", undefined);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues({});\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValues({ \":string\": undefined, \":int\": undefined });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\r\n stmt.maybeBindString(1, undefined);\r\n stmt.maybeBindInteger(2, undefined);\r\n stmt.maybeBindDouble(3, undefined);\r\n stmt.maybeBindBlob(4, undefined);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.saveChanges();\r\n\r\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\r\n assert.isTrue(stmt.isReadonly);\r\n let rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n for (let i = 0; i < stmt.getColumnCount(); i++) {\r\n const sqlVal = stmt.getValue(i);\r\n if (i === 0) {\r\n assert.isFalse(sqlVal.isNull);\r\n assert.equal(sqlVal.type, SqliteValueType.Integer);\r\n assert.equal(sqlVal.getInteger(), rowCount);\r\n } else {\r\n assert.isTrue(sqlVal.isNull);\r\n assert.equal(sqlVal.type, SqliteValueType.Null);\r\n }\r\n }\r\n }\r\n\r\n assert.equal(rowCount, 7);\r\n });\r\n });\r\n\r\n it(\"ids and guids\", () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"idsandguids.ecdb\");\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, guid BLOB)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n });\r\n\r\n ecdb.withSqliteStatement(\"INSERT INTO MyTable(id,guid) VALUES(?,?)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(1, { id: \"0x11\" });\r\n stmt.bindValue(2, { guid: \"370cea34-8415-4f81-b54c-85040eb3111e\" });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues([{ id: \"0x12\" }, { guid: \"f9f1eb6e-1171-4f45-ba90-55c856056341\" }]);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n\r\n ecdb.withSqliteStatement(\"INSERT INTO MyTable(id,guid) VALUES(:id,:guid)\", (stmt: SqliteStatement) => {\r\n assert.isFalse(stmt.isReadonly);\r\n stmt.bindValue(\":id\", { id: \"0x13\" });\r\n stmt.bindValue(\":guid\", { guid: \"370cea34-8415-4f81-b54c-85040eb3111e\" });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n\r\n stmt.bindValues({ \":id\": { id: \"0x14\" }, \":guid\": { guid: \"f9f1eb6e-1171-4f45-ba90-55c856056341\" } });\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\r\n stmt.reset();\r\n stmt.clearBindings();\r\n });\r\n\r\n ecdb.withSqliteStatement(\"SELECT id,guid FROM MyTable\", (stmt: SqliteStatement) => {\r\n assert.isTrue(stmt.isReadonly);\r\n let rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n const expectedId = rowCount + 16;\r\n const idVal = stmt.getValue(0);\r\n assert.equal(expectedId, idVal.getInteger());\r\n assert.equal(typeof (idVal.value), \"number\");\r\n assert.equal(expectedId, idVal.value);\r\n assert.equal(expectedId, Number.parseInt(idVal.getId(), 16));\r\n\r\n const guidVal = stmt.getValue(1);\r\n assert.instanceOf(guidVal.value, Uint8Array);\r\n\r\n if (rowCount % 2 !== 0)\r\n assert.equal(\"370cea34-8415-4f81-b54c-85040eb3111e\", guidVal.getGuid());\r\n else\r\n assert.equal(\"f9f1eb6e-1171-4f45-ba90-55c856056341\", guidVal.getGuid());\r\n\r\n const row = stmt.getRow();\r\n assert.isDefined(row.id);\r\n assert.equal(typeof (row.id), \"number\");\r\n assert.equal(expectedId, row.id);\r\n\r\n assert.isDefined(row.guid);\r\n assert.instanceOf(row.guid, Uint8Array);\r\n }\r\n assert.equal(4, rowCount);\r\n });\r\n ecdb.saveChanges();\r\n });\r\n\r\n it(\"run cached sql\", () => {\r\n const fileName = \"sqlitesqlagainstreadonlyconnection.ecdb\";\r\n const ecdbPath = path.join(outDir, fileName);\r\n {\r\n using testEcdb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testEcdb.isOpen);\r\n }\r\n\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n let stmt0: SqliteStatement | undefined;\r\n ecdb.withPreparedSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace='ec_Db'\", (stmt: SqliteStatement) => {\r\n stmt0 = stmt;\r\n let rowCount = 0;\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n rowCount++;\r\n assert.equal(stmt.getColumnCount(), 2);\r\n const nameVal = stmt.getValue(0);\r\n assert.equal(nameVal.columnName, \"Name\");\r\n assert.equal(nameVal.type, SqliteValueType.String);\r\n assert.isFalse(nameVal.isNull);\r\n const name = nameVal.getString();\r\n\r\n const versionVal = stmt.getValue(1);\r\n assert.equal(versionVal.columnName, \"StrData\");\r\n assert.equal(versionVal.type, SqliteValueType.String);\r\n assert.isFalse(versionVal.isNull);\r\n const profileVersion: any = JSON.parse(versionVal.getString());\r\n\r\n assert.isTrue(name === \"SchemaVersion\" || name === \"InitialSchemaVersion\");\r\n if (name === \"SchemaVersion\") {\r\n assert.equal(profileVersion.major, 4);\r\n assert.equal(profileVersion.minor, 0);\r\n assert.equal(profileVersion.sub1, 0);\r\n assert.isAtLeast(profileVersion.sub2, 1);\r\n } else if (name === \"InitialSchemaVersion\") {\r\n assert.equal(profileVersion.major, 4);\r\n assert.equal(profileVersion.minor, 0);\r\n assert.equal(profileVersion.sub1, 0);\r\n assert.isAtLeast(profileVersion.sub2, 1);\r\n }\r\n }\r\n assert.equal(rowCount, 2);\r\n });\r\n assert.isTrue(stmt0?.isPrepared, \"stmt0 is in the cache\");\r\n\r\n ecdb.resetSqliteCache(3); // reset the statement cache to only hold 3 members so we can exercise overflowing it\r\n assert.isFalse(stmt0?.isPrepared, \"reset cache clears stmt0\");\r\n\r\n let stmt1: SqliteStatement | undefined;\r\n let stmt2: SqliteStatement | undefined;\r\n let stmt2a: SqliteStatement | undefined;\r\n let stmt3: SqliteStatement | undefined;\r\n let stmt4: SqliteStatement | undefined;\r\n let stmt5: SqliteStatement | undefined;\r\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (stmt) => stmt1 = stmt);\r\n assert.isTrue(stmt1?.isPrepared, \"stmt1 is in the cache\");\r\n ecdb.withPreparedSqliteStatement(\"SELECT 2\", (stmt) => stmt2 = stmt);\r\n assert.isTrue(stmt2?.isPrepared, \"stmt2 is in the cache\");\r\n ecdb.withPreparedSqliteStatement(\"SELECT 3\", (stmt) => stmt3 = stmt);\r\n assert.isTrue(stmt3?.isPrepared, \"stmt3 is in the cache\");\r\n ecdb.withPreparedSqliteStatement(\"SELECT 4\", (stmt) => stmt4 = stmt);\r\n assert.isTrue(stmt4?.isPrepared, \"stmt4 is in the cache\");\r\n assert.isFalse(stmt1?.isPrepared, \"stmt1 was cleared from the cache\");\r\n ecdb.withPreparedSqliteStatement(\"SELECT 2\", (stmt) => stmt2a = stmt);\r\n assert.equal(stmt2, stmt2a, \"statement 2 gets reused, moved to most recent\");\r\n assert.isTrue(stmt3?.isPrepared, \"statement 3 is still cached\");\r\n ecdb.withPreparedSqliteStatement(\"SELECT 5\", (stmt) => stmt5 = stmt);\r\n assert.isTrue(stmt5?.isPrepared, \"statement 5 is cached\");\r\n assert.isFalse(stmt3?.isPrepared, \"statement 3 was lru and was dropped\");\r\n\r\n let nested1: SqliteStatement | undefined;\r\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (stmt) => {\r\n stmt1 = stmt;\r\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (nested) => nested1 = nested);\r\n });\r\n assert.notEqual(stmt1, nested1, \"shouldn't reuse an in-use statement\");\r\n assert.isFalse(stmt1?.isPrepared, \"outer 1 is not cached\");\r\n assert.isTrue(nested1?.isPrepared, \"nested1 is cached\");\r\n assert.isTrue(stmt2?.isPrepared, \"stmt2 is in the cache\");\r\n assert.isTrue(stmt5?.isPrepared, \"stmt5 is in the cache\");\r\n });\r\n // This test generate no log when run as suite but is successful when only this fixture run.\r\n it(\"check prepare logErrors flag\", () => {\r\n const fileName = \"logErrors.ecdb\";\r\n const ecdbPath = path.join(outDir, fileName);\r\n {\r\n using testEcdb = ECDbTestHelper.createECDb(outDir, fileName);\r\n assert.isTrue(testEcdb.isOpen);\r\n }\r\n using ecdb = new ECDb();\r\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\r\n assert.isTrue(ecdb.isOpen);\r\n // expect log message when statement fails\r\n let slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"BeSQLite\").message(\"Error \\\"no such table: def (BE_SQLITE_ERROR)\\\" preparing SQL: SELECT abc FROM def\");\r\n assert.throw(() => ecdb.withSqliteStatement(\"SELECT abc FROM def\", () => { }), \"no such table: def (BE_SQLITE_ERROR)\");\r\n assert.isTrue(slm.finishAndDispose(), \"logMatcher should detect log\");\r\n\r\n // now pass suppress log error which mean we should not get the error\r\n slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"BeSQLite\").message(\"Error \\\"no such table: def (BE_SQLITE_ERROR)\\\" preparing SQL: SELECT abc FROM def\");\r\n assert.throw(() => ecdb.withSqliteStatement(\"SELECT abc FROM def\", () => { }, /* logErrors = */ false), \"no such table: def (BE_SQLITE_ERROR)\");\r\n assert.isFalse(slm.finishAndDispose(), \"logMatcher should not detect log\");\r\n\r\n // expect log message when statement fails\r\n slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(\"ECClass 'abc.def' does not exist or could not be loaded.\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT abc FROM abc.def\", () => { }), \"ECClass 'abc.def' does not exist or could not be loaded.\");\r\n assert.isTrue(slm.finishAndDispose(), \"logMatcher should detect log\");\r\n\r\n // now pass suppress log error which mean we should not get the error\r\n slm = new SequentialLogMatcher();\r\n slm.append().error().category(\"ECDb\").message(\"ECClass 'abc.def' does not exist or could not be loaded.\");\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT abc FROM abc.def\", () => { }, /* logErrors = */ false), \"\"); // BUG: we do not see error message\r\n assert.isFalse(slm.finishAndDispose(), \"logMatcher should not detect log\");\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SqliteStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/SqliteStatement.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 * as path from \"path\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport { ECDb, ECDbOpenMode, SqliteStatement, SqliteValueType } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\n\ndescribe(\"SqliteStatement\", () => {\n const outDir = KnownTestLocations.outputDir;\n const stringVal: string = \"Hello world\";\n const intVal = 0;\n const doubleVal = -2.5;\n const blobVal = new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer);\n\n it(\"create table, insert, select with ecdb\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"sqlitestatement.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, stringcol TEXT, intcol INTEGER, doublecol REAL, blobcol)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n const stmt1 = \"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\";\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(1, stringVal);\n stmt.bindValue(2, intVal);\n stmt.bindValue(3, doubleVal);\n stmt.bindValue(4, blobVal);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\n stmt.maybeBindString(1, stringVal);\n stmt.maybeBindInteger(2, intVal);\n stmt.maybeBindDouble(3, doubleVal);\n stmt.maybeBindBlob(4, blobVal);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(stmt1, (stmt) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues([stringVal, intVal, doubleVal, blobVal]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n const stmt2 = \"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(:string,:int,:double,:blob)\";\n ecdb.withPreparedSqliteStatement(stmt2, (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(\":string\", stringVal);\n stmt.bindValue(\":int\", intVal);\n stmt.bindValue(\":double\", doubleVal);\n stmt.bindValue(\":blob\", blobVal);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(stmt2, (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues({ \":string\": stringVal, \":int\": intVal, \":double\": doubleVal, \":blob\": blobVal });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.saveChanges();\n\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\n assert.isTrue(stmt.isReadonly);\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n assert.equal(stmt.getColumnCount(), 5);\n const idSqlVal = stmt.getValue(0);\n assert.isFalse(idSqlVal.isNull);\n assert.equal(idSqlVal.type, SqliteValueType.Integer);\n assert.isDefined(idSqlVal.value);\n assert.equal(idSqlVal.value, rowCount);\n assert.equal(idSqlVal.getInteger(), rowCount);\n assert.equal(idSqlVal.columnName, \"id\");\n\n const stringSqlVal = stmt.getValue(1);\n assert.isFalse(stringSqlVal.isNull);\n assert.equal(stringSqlVal.type, SqliteValueType.String);\n assert.isDefined(stringSqlVal.value);\n assert.equal(stringSqlVal.value, stringVal);\n assert.equal(stringSqlVal.getString(), stringVal);\n assert.equal(stringSqlVal.columnName, \"stringcol\");\n\n const intSqlVal = stmt.getValue(2);\n assert.isFalse(intSqlVal.isNull);\n assert.equal(intSqlVal.type, SqliteValueType.Integer);\n assert.isDefined(intSqlVal.value);\n assert.equal(intSqlVal.value, intVal);\n assert.equal(intSqlVal.getInteger(), intVal);\n assert.equal(intSqlVal.columnName, \"intcol\");\n\n const doubleSqlVal = stmt.getValue(3);\n assert.isFalse(doubleSqlVal.isNull);\n assert.equal(doubleSqlVal.type, SqliteValueType.Double);\n assert.isDefined(doubleSqlVal.value);\n assert.equal(doubleSqlVal.value, doubleVal);\n assert.equal(doubleSqlVal.getDouble(), doubleVal);\n assert.equal(doubleSqlVal.columnName, \"doublecol\");\n\n const blobSqlVal = stmt.getValue(4);\n assert.isFalse(blobSqlVal.isNull);\n assert.equal(blobSqlVal.type, SqliteValueType.Blob);\n assert.isDefined(blobSqlVal.value);\n assert.equal((blobSqlVal.value as Uint8Array).byteLength, blobVal.byteLength);\n assert.equal(blobSqlVal.getBlob().byteLength, blobVal.byteLength);\n assert.equal(blobSqlVal.columnName, \"blobcol\");\n }\n assert.equal(rowCount, 5);\n });\n\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\n assert.isTrue(stmt.isReadonly);\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.isDefined(row.id);\n assert.equal(row.id, rowCount);\n\n assert.isDefined(row.stringcol);\n assert.equal(row.stringcol, stringVal);\n\n assert.isDefined(row.intcol);\n assert.equal(row.intcol, intVal);\n\n assert.isDefined(row.doublecol);\n assert.equal(row.doublecol, doubleVal);\n\n assert.isDefined(row.blobcol);\n assert.equal((row.blobcol as Uint8Array).byteLength, blobVal.byteLength);\n }\n assert.equal(rowCount, 5);\n });\n\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\n assert.isTrue(stmt.isReadonly);\n let rowCount = 0;\n for (const row of stmt) {\n rowCount++;\n assert.isDefined(row.id);\n assert.equal(row.id, rowCount);\n\n assert.isDefined(row.stringcol);\n assert.equal(row.stringcol, stringVal);\n\n assert.isDefined(row.intcol);\n assert.equal(row.intcol, intVal);\n\n assert.isDefined(row.doublecol);\n assert.equal(row.doublecol, doubleVal);\n\n assert.isDefined(row.blobcol);\n assert.equal((row.blobcol as Uint8Array).byteLength, blobVal.byteLength);\n }\n assert.equal(rowCount, 5);\n });\n });\n\n it(\"null values handling\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnull.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, stringcol TEXT, intcol INTEGER, doublecol REAL, blobcol)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(1, undefined);\n stmt.bindValue(2, undefined);\n stmt.bindValue(3, undefined);\n stmt.bindValue(4, undefined);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues([]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues([undefined, undefined]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(:string,:int,:double,:blob)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(\":string\", undefined);\n stmt.bindValue(\":int\", undefined);\n stmt.bindValue(\":double\", undefined);\n stmt.bindValue(\":blob\", undefined);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues({});\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValues({ \":string\": undefined, \":int\": undefined });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withPreparedSqliteStatement(\"INSERT INTO MyTable(stringcol,intcol,doublecol,blobcol) VALUES(?,?,?,?)\", (stmt: SqliteStatement) => {\n stmt.maybeBindString(1, undefined);\n stmt.maybeBindInteger(2, undefined);\n stmt.maybeBindDouble(3, undefined);\n stmt.maybeBindBlob(4, undefined);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.saveChanges();\n\n ecdb.withPreparedSqliteStatement(\"SELECT id,stringcol,intcol,doublecol,blobcol FROM MyTable\", (stmt: SqliteStatement) => {\n assert.isTrue(stmt.isReadonly);\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n for (let i = 0; i < stmt.getColumnCount(); i++) {\n const sqlVal = stmt.getValue(i);\n if (i === 0) {\n assert.isFalse(sqlVal.isNull);\n assert.equal(sqlVal.type, SqliteValueType.Integer);\n assert.equal(sqlVal.getInteger(), rowCount);\n } else {\n assert.isTrue(sqlVal.isNull);\n assert.equal(sqlVal.type, SqliteValueType.Null);\n }\n }\n }\n\n assert.equal(rowCount, 7);\n });\n });\n\n it(\"ids and guids\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"idsandguids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withSqliteStatement(\"CREATE TABLE MyTable(id INTEGER PRIMARY KEY, guid BLOB)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n ecdb.withSqliteStatement(\"INSERT INTO MyTable(id,guid) VALUES(?,?)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(1, { id: \"0x11\" });\n stmt.bindValue(2, { guid: \"370cea34-8415-4f81-b54c-85040eb3111e\" });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([{ id: \"0x12\" }, { guid: \"f9f1eb6e-1171-4f45-ba90-55c856056341\" }]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n });\n\n ecdb.withSqliteStatement(\"INSERT INTO MyTable(id,guid) VALUES(:id,:guid)\", (stmt: SqliteStatement) => {\n assert.isFalse(stmt.isReadonly);\n stmt.bindValue(\":id\", { id: \"0x13\" });\n stmt.bindValue(\":guid\", { guid: \"370cea34-8415-4f81-b54c-85040eb3111e\" });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues({ \":id\": { id: \"0x14\" }, \":guid\": { guid: \"f9f1eb6e-1171-4f45-ba90-55c856056341\" } });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n });\n\n ecdb.withSqliteStatement(\"SELECT id,guid FROM MyTable\", (stmt: SqliteStatement) => {\n assert.isTrue(stmt.isReadonly);\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const expectedId = rowCount + 16;\n const idVal = stmt.getValue(0);\n assert.equal(expectedId, idVal.getInteger());\n assert.equal(typeof (idVal.value), \"number\");\n assert.equal(expectedId, idVal.value);\n assert.equal(expectedId, Number.parseInt(idVal.getId(), 16));\n\n const guidVal = stmt.getValue(1);\n assert.instanceOf(guidVal.value, Uint8Array);\n\n if (rowCount % 2 !== 0)\n assert.equal(\"370cea34-8415-4f81-b54c-85040eb3111e\", guidVal.getGuid());\n else\n assert.equal(\"f9f1eb6e-1171-4f45-ba90-55c856056341\", guidVal.getGuid());\n\n const row = stmt.getRow();\n assert.isDefined(row.id);\n assert.equal(typeof (row.id), \"number\");\n assert.equal(expectedId, row.id);\n\n assert.isDefined(row.guid);\n assert.instanceOf(row.guid, Uint8Array);\n }\n assert.equal(4, rowCount);\n });\n ecdb.saveChanges();\n });\n\n it(\"run cached sql\", () => {\n const fileName = \"sqlitesqlagainstreadonlyconnection.ecdb\";\n const ecdbPath = path.join(outDir, fileName);\n {\n using testEcdb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testEcdb.isOpen);\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n let stmt0: SqliteStatement | undefined;\n ecdb.withPreparedSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace='ec_Db'\", (stmt: SqliteStatement) => {\n stmt0 = stmt;\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n assert.equal(stmt.getColumnCount(), 2);\n const nameVal = stmt.getValue(0);\n assert.equal(nameVal.columnName, \"Name\");\n assert.equal(nameVal.type, SqliteValueType.String);\n assert.isFalse(nameVal.isNull);\n const name = nameVal.getString();\n\n const versionVal = stmt.getValue(1);\n assert.equal(versionVal.columnName, \"StrData\");\n assert.equal(versionVal.type, SqliteValueType.String);\n assert.isFalse(versionVal.isNull);\n const profileVersion: any = JSON.parse(versionVal.getString());\n\n assert.isTrue(name === \"SchemaVersion\" || name === \"InitialSchemaVersion\");\n if (name === \"SchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n } else if (name === \"InitialSchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n }\n }\n assert.equal(rowCount, 2);\n });\n assert.isTrue(stmt0?.isPrepared, \"stmt0 is in the cache\");\n\n ecdb.resetSqliteCache(3); // reset the statement cache to only hold 3 members so we can exercise overflowing it\n assert.isFalse(stmt0?.isPrepared, \"reset cache clears stmt0\");\n\n let stmt1: SqliteStatement | undefined;\n let stmt2: SqliteStatement | undefined;\n let stmt2a: SqliteStatement | undefined;\n let stmt3: SqliteStatement | undefined;\n let stmt4: SqliteStatement | undefined;\n let stmt5: SqliteStatement | undefined;\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (stmt) => stmt1 = stmt);\n assert.isTrue(stmt1?.isPrepared, \"stmt1 is in the cache\");\n ecdb.withPreparedSqliteStatement(\"SELECT 2\", (stmt) => stmt2 = stmt);\n assert.isTrue(stmt2?.isPrepared, \"stmt2 is in the cache\");\n ecdb.withPreparedSqliteStatement(\"SELECT 3\", (stmt) => stmt3 = stmt);\n assert.isTrue(stmt3?.isPrepared, \"stmt3 is in the cache\");\n ecdb.withPreparedSqliteStatement(\"SELECT 4\", (stmt) => stmt4 = stmt);\n assert.isTrue(stmt4?.isPrepared, \"stmt4 is in the cache\");\n assert.isFalse(stmt1?.isPrepared, \"stmt1 was cleared from the cache\");\n ecdb.withPreparedSqliteStatement(\"SELECT 2\", (stmt) => stmt2a = stmt);\n assert.equal(stmt2, stmt2a, \"statement 2 gets reused, moved to most recent\");\n assert.isTrue(stmt3?.isPrepared, \"statement 3 is still cached\");\n ecdb.withPreparedSqliteStatement(\"SELECT 5\", (stmt) => stmt5 = stmt);\n assert.isTrue(stmt5?.isPrepared, \"statement 5 is cached\");\n assert.isFalse(stmt3?.isPrepared, \"statement 3 was lru and was dropped\");\n\n let nested1: SqliteStatement | undefined;\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (stmt) => {\n stmt1 = stmt;\n ecdb.withPreparedSqliteStatement(\"SELECT 1\", (nested) => nested1 = nested);\n });\n assert.notEqual(stmt1, nested1, \"shouldn't reuse an in-use statement\");\n assert.isFalse(stmt1?.isPrepared, \"outer 1 is not cached\");\n assert.isTrue(nested1?.isPrepared, \"nested1 is cached\");\n assert.isTrue(stmt2?.isPrepared, \"stmt2 is in the cache\");\n assert.isTrue(stmt5?.isPrepared, \"stmt5 is in the cache\");\n });\n // This test generate no log when run as suite but is successful when only this fixture run.\n it(\"check prepare logErrors flag\", () => {\n const fileName = \"logErrors.ecdb\";\n const ecdbPath = path.join(outDir, fileName);\n {\n using testEcdb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testEcdb.isOpen);\n }\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n // expect log message when statement fails\n let slm = new SequentialLogMatcher();\n slm.append().error().category(\"BeSQLite\").message(\"Error \\\"no such table: def (BE_SQLITE_ERROR)\\\" preparing SQL: SELECT abc FROM def\");\n assert.throw(() => ecdb.withSqliteStatement(\"SELECT abc FROM def\", () => { }), \"no such table: def (BE_SQLITE_ERROR)\");\n assert.isTrue(slm.finishAndDispose(), \"logMatcher should detect log\");\n\n // now pass suppress log error which mean we should not get the error\n slm = new SequentialLogMatcher();\n slm.append().error().category(\"BeSQLite\").message(\"Error \\\"no such table: def (BE_SQLITE_ERROR)\\\" preparing SQL: SELECT abc FROM def\");\n assert.throw(() => ecdb.withSqliteStatement(\"SELECT abc FROM def\", () => { }, /* logErrors = */ false), \"no such table: def (BE_SQLITE_ERROR)\");\n assert.isFalse(slm.finishAndDispose(), \"logMatcher should not detect log\");\n\n // expect log message when statement fails\n slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"ECClass 'abc.def' does not exist or could not be loaded.\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT abc FROM abc.def\", () => { }), \"ECClass 'abc.def' does not exist or could not be loaded.\");\n assert.isTrue(slm.finishAndDispose(), \"logMatcher should detect log\");\n\n // now pass suppress log error which mean we should not get the error\n slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"ECClass 'abc.def' does not exist or could not be loaded.\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT abc FROM abc.def\", () => { }, /* logErrors = */ false), \"\"); // BUG: we do not see error message\n assert.isFalse(slm.finishAndDispose(), \"logMatcher should not detect log\");\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAuB,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAA2C,MAAM,EAA6C,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACvK,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA+D9D,SAAS,eAAe,CAAC,SAAiB,EAAE,WAAqB,EAAE,KAAiB,EAAE,KAAiB,EAAE,KAAa;IACpH,eAAe;IACf,MAAM,SAAS,GAAY;QACzB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC3C,CAAC;IACF,MAAM,cAAc,GAAwB,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,eAAe;IACf,MAAM,YAAY,GAAqB;QACrC,aAAa,EAAE,iBAAiB,SAAS,EAAE;QAC3C,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,CAAC,EAAE,GAAG,GAAG,KAAK;QACd,CAAC,EAAE,IAAI,GAAG,KAAK;QACf,CAAC,EAAE,GAAG,GAAG,KAAK;QACd,CAAC,EAAE,MAAM,KAAK,EAAE;QAChB,CAAC,EAAE,KAAK,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,KAAK,GAAG;QACrD,EAAE,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB;QAC3E,GAAG,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3G,GAAG,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;QAChF,GAAG,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;QAC9F,CAAC,EAAE,IAAI;QACP,gEAAgE;QAChE,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAC5B,gEAAgE;QAChE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClB,gEAAgE;QAChE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACxB,gEAAgE;QAChE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAC9B,gEAAgE;QAChE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,gEAAgE;QAChE,QAAQ,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;QAChE,gEAAgE;QAChE,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,gEAAgE;QAChE,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACnF,gEAAgE;QAChE,SAAS,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAChG,SAAS,EAAE,MAAM,KAAK,EAAE;QACxB,UAAU,EAAE,IAAI,GAAG,KAAK;QACxB,YAAY,EAAE,GAAG,GAAG,KAAK;QACzB,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACnD,YAAY,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QAC/C,WAAW,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,cAAc,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC3C,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KACnC,CAAC;IACF,OAAO,YAAY,CAAC;AACtB,CAAC;AAID,SAAS,gBAAgB,CAAC,SAAiB,EAAE,WAAqB,EAAE,SAAqB,EAAE,eAAoB;IAC7G,eAAe;IACf,MAAM,YAAY,GAAuB;QACvC,aAAa,EAAE,iBAAiB,SAAS,EAAE;QAC3C,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;KAC3B,CAAC;IAEF,IAAI,eAAe;QACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAE/C,OAAO,YAAY,CAAC;AACtB,CAAC;AAOD,SAAS,qBAAqB,CAAC,SAAiB,EAAE,WAAqB,EAAE,KAAiB,EAAE,KAAiB,EAAE,KAAa,EAAE,SAAqB;IACjJ,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5E,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE,UAAU,SAAS,CAAC,QAAQ,EAAE,EAAE;QACtC,kBAAkB,EAAE;YAClB,EAAE,EAAE,SAAS;YACb,YAAY,EAAE,sCAAsC;SACrD;KACyB,CAAC;AAC/B,CAAC;AAED,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,KAAK,CAAC,aAAa;QAC/B,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QAErC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,4BAA4B,CAAC,CAAC;QAC3G,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAClH,IAAI,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAChH,IAAI,SAAS,KAAK,iBAAiB;YACjC,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAEnL,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,UAAU,GAAiB,EAAE,CAAC;QACpC,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAClG,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAEpE,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBACnH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,8BAA8B,CAAC,CAAC;YAC5E,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,yEAAyE;QACzE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,SAAS;YACzB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAChD,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1J,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,sCAAsC,CAAC,CAAC;QAEpI,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,SAAS;YACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,MAAM,yBAAyB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACjK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,sCAAsC,CAAC,CAAC;QAE3I,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACF","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 * as path from \"path\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\r\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\r\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\r\n\r\n\r\ninterface IPrimitiveBase {\r\n i?: number;\r\n l?: number;\r\n d?: number;\r\n b?: boolean;\r\n dt?: string;\r\n s?: string;\r\n j?: string;\r\n bin?: Uint8Array;\r\n p2d?: Point2d;\r\n p3d?: Point3d;\r\n g?: GeometryStreamProps;\r\n}\r\n\r\ninterface IPrimitive extends IPrimitiveBase {\r\n st?: ComplexStruct;\r\n}\r\n\r\ninterface IPrimitiveArrayBase {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_i?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_l?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_d?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_b?: boolean[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_dt?: string[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_s?: string[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_bin?: Uint8Array[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p2d?: Point2d[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p3d?: Point3d[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_g?: GeometryStreamProps[];\r\n}\r\n\r\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_st?: ComplexStruct[];\r\n}\r\n\r\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\r\n\r\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\r\n directStr?: string;\r\n directLong?: number;\r\n directDouble?: number;\r\n nullProp?: string;\r\n enumIntProp?: number;\r\n enumIntPropArr?: number[];\r\n enumStringProp?: string;\r\n enumStringPropArr?: string[];\r\n noCaseString?: string;\r\n}\r\n\r\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\r\n // add Geometry\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n // Create props\r\n const elementProps: TestElementProps = {\r\n classFullName: `AllProperties:${className}`,\r\n model: modId,\r\n category: catId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n i: 100 + index,\r\n l: 1000 + index,\r\n d: 0.1 + index,\r\n s: `str${index}`,\r\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\r\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\r\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\r\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\r\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\r\n b: true,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_b: [true, false, true],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_i: [0, 1, 2],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_d: [0.0, 1.1, 2.2],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_l: [10000, 20000, 30000],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_s: [\"s0\", \"s1\", \"s2\"],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\r\n directStr: `str${index}`,\r\n directLong: 1000 + index,\r\n directDouble: 0.1 + index,\r\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\r\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\r\n enumIntProp: index % 2 === 0 ? 1 : 2,\r\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\r\n enumIntPropArr: [1, 2, 3],\r\n enumStringPropArr: [\"1\", \"2\", \"3\"]\r\n };\r\n return elementProps;\r\n}\r\n\r\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\r\n\r\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\r\n // Create props\r\n const elementProps: ElementAspectProps = {\r\n classFullName: `AllProperties:${className}`,\r\n element: { id: elementId },\r\n };\r\n\r\n if (autoHandledProp)\r\n Object.assign(elementProps, autoHandledProp);\r\n\r\n return elementProps;\r\n}\r\n\r\ninterface TestElementWithNavProps extends TestElementProps {\r\n name: string;\r\n featureUsesElement: RelatedElementProps;\r\n}\r\n\r\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\r\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\r\n return {\r\n ...eProps,\r\n name: `Feature${elementId.toString()}`,\r\n featureUsesElement: {\r\n id: elementId,\r\n relClassName: \"AllProperties:TestFeatureUsesElement\",\r\n }\r\n } as TestElementWithNavProps;\r\n}\r\n\r\nexport class ECSqlDatasets {\r\n public static async generateFiles(): Promise<void> {\r\n const fileName = \"AllProperties.bim\";\r\n\r\n await IModelHost.startup();\r\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\r\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\r\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\r\n await iModel.importSchemas([testSchemaPath]);\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\r\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\r\n if (undefined === spatialCategoryId)\r\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n let index = 0;\r\n const elementIds: Id64String[] = [];\r\n for (index = 0; index < 10; ++index) {\r\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\r\n const testElement = iModel.elements.createElement(elementProps);\r\n const elementId = iModel.elements.insertElement(testElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\r\n\r\n if (index % 2 === 0) {\r\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\r\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\r\n }\r\n elementIds.push(elementId);\r\n }\r\n\r\n // Add two instances of feature class instance with a navigation property\r\n const poppedId1 = elementIds.pop();\r\n if (poppedId1 === undefined)\r\n assert.fail(\"Expected at least 1 element id\");\r\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\r\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\r\n\r\n const poppedId2 = elementIds.pop();\r\n if (poppedId2 === undefined)\r\n assert.fail(\"Expected another element id\");\r\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\r\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\r\n\r\n iModel.saveChanges();\r\n iModel.close();\r\n }\r\n}"]}
1
+ {"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.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 * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n } as TestElementWithNavProps;\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = iModel.elements.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n iModel.saveChanges();\n iModel.close();\n }\n}"]}
@@ -127,32 +127,32 @@ function writeMarkdownFile(dataset, sql, columns, results, useTables) {
127
127
  if (sql.length > 100) { // we format the SQL if it's too long
128
128
  sql = format(sql, { language: "sqlite", keywordCase: "upper", "tabWidth": 2, indentStyle: "standard", logicalOperatorNewline: "after" });
129
129
  }
130
- let markdownContent = `# GeneratedTest #${dataset} - ${hash}
131
-
132
- - dataset: ${dataset}
133
-
134
- \`\`\`sql
135
- ${sql}
136
- \`\`\`
130
+ let markdownContent = `# GeneratedTest #${dataset} - ${hash}
131
+
132
+ - dataset: ${dataset}
133
+
134
+ \`\`\`sql
135
+ ${sql}
136
+ \`\`\`
137
137
  `;
138
138
  if (useTables) {
139
- markdownContent += `
140
- ${arrayToMarkdownTable(columns)}
141
-
142
- ${arrayToMarkdownTable(results)}
143
-
139
+ markdownContent += `
140
+ ${arrayToMarkdownTable(columns)}
141
+
142
+ ${arrayToMarkdownTable(results)}
143
+
144
144
  `;
145
145
  }
146
146
  else {
147
- markdownContent += `
148
- \`\`\`json
149
- ${JSON.stringify({ columns }, null, 2)}
150
- \`\`\`
151
-
152
- \`\`\`json
153
- ${JSON.stringify(results, null, 2)}
154
- \`\`\`
155
-
147
+ markdownContent += `
148
+ \`\`\`json
149
+ ${JSON.stringify({ columns }, null, 2)}
150
+ \`\`\`
151
+
152
+ \`\`\`json
153
+ ${JSON.stringify(results, null, 2)}
154
+ \`\`\`
155
+
156
156
  `;
157
157
  }
158
158
  const outputFilePath = path.join(__dirname, "generated.ecsql.md");
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlTestGenerator.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestGenerator.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/F,OAAO,EAAY,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAyB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,kBAAkB;AAClB,kHAAkH;AAClH,qPAAqP;AACrP,KAAK,UAAU,kBAAkB,CAAC,MAAgB,EAAE,GAAW;IAC7D,MAAM,YAAY,GAAwB,IAAI,mBAAmB,EAAE,CAAC;IACpE,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC,KAA4B,EAAE,EAAE,CAAC,OAAQ,KAAa,CAAC,UAAU,CAAC,CAAC;IACrF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAgB,EAAE,QAAe,EAAE,GAAW;;;QACjG,4DAA4D;QAC5D,MAAM,IAAI,kCAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAA,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACvC,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACjC,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,OAAO,QAAQ,CAAC,MAAM,2CAA2C,CAAC,CAAC;gBACnH,OAAO;YACT,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC5C,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,MAAM,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAC3D,IAAI,kBAAkB,KAAK,SAAS;oBAClC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YACxD,CAAC;QACH,CAAC;;;;;;;;;CACF;AAED,SAAS,oBAAoB,CAAC,IAAW;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;QACnE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC;IACpB,CAAC,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC,CAAC;IAEvB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACxE,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE,CAC7B,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAE/F,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErC,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,GAAW,EAAE,OAAc,EAAE,OAAc,EAAE,SAAkB;IACzG,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,qCAAqC;QAC3D,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3I,CAAC;IAED,IAAI,eAAe,GAAG,oBAAoB,OAAO,MAAM,IAAI;;aAEhD,OAAO;;;EAGlB,GAAG;;CAEJ,CAAC;IAEA,IAAI,SAAS,EAAE,CAAC;QACd,eAAe,IAAI;EACrB,oBAAoB,CAAC,OAAO,CAAC;;EAE7B,oBAAoB,CAAC,OAAO,CAAC;;CAE9B,CAAC;IACA,CAAC;SAAM,CAAC;QACN,eAAe,IAAI;;EAErB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;;;;EAIpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;;CAGjC,CAAC;IACA,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAClE,EAAE,CAAC,cAAc,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;IACxC,MAAM,SAAS,GAAG,UAAU,KAAK,IAAI,CAAC;IACtC,IAAI,MAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACvF,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjE,2CAA2C,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnE,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelDb, SnapshotDb } from \"../../../core-backend\";\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { ECSqlValueType, QueryOptionsBuilder, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport * as crypto from \"crypto\";\r\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\r\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\r\nimport { format } from \"sql-formatter\";\r\n\r\n// Call like this:\r\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT * FROM meta.ECSchemaDef LIMIT 2\" -t\r\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT te.ECInstanceId [MyId], te.s, te.DT [Date], row_number() over(PARTITION BY te.DT ORDER BY te.ECInstanceId) as [RowNumber] from aps.TestElement te WHERE te.i < 106\" -t\r\nasync function runConcurrentQuery(imodel: IModelDb, sql: string): Promise<{ metadata: any[], rows: any[] }> {\r\n const queryOptions: QueryOptionsBuilder = new QueryOptionsBuilder();\r\n queryOptions.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\r\n const reader = imodel.createQueryReader(sql, undefined, queryOptions.getOptions());\r\n const rows = await reader.toArray();\r\n const metadata = await reader.getMetaData();\r\n metadata.forEach((value: QueryPropertyMetaData) => delete (value as any).extendType);\r\n return { metadata, rows };\r\n}\r\n\r\nfunction pullAdditionalMetadataThroughECSqlStatement(imodel: IModelDb, metadata: any[], sql: string): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n using stmt = imodel.prepareStatement(sql);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const colCount = stmt.getColumnCount();\r\n if (colCount !== metadata.length) {\r\n // eslint-disable-next-line no-console\r\n console.error(`Column count mismatch: ${colCount} != ${metadata.length}. Not generating metadata from statement.`);\r\n return;\r\n }\r\n for (let i = 0; i < colCount; i++) {\r\n const colInfo = stmt.getValue(i).columnInfo;\r\n metadata[i].type = ECSqlValueType[colInfo.getType()];\r\n const originPropertyName = colInfo.getOriginPropertyName();\r\n if (originPropertyName !== undefined)\r\n metadata[i].originPropertyName = originPropertyName;\r\n }\r\n }\r\n}\r\n\r\nfunction arrayToMarkdownTable(data: any[]): string {\r\n if (data.length === 0) {\r\n return \"\";\r\n }\r\n\r\n const headers: string[] = Array.from(data.reduce((headersSet, row) => {\r\n Object.keys(row).forEach(header => headersSet.add(header));\r\n return headersSet;\r\n }, new Set<string>()));\r\n\r\n const columnWidths = headers.map(header =>\r\n Math.max(header.length, ...data.map(row => String(row[header]).length))\r\n );\r\n\r\n const formatRow = (row: any) =>\r\n `| ${headers.map((header, i) => String(row[header]).padEnd(columnWidths[i])).join(\" | \")} |`;\r\n\r\n const headerRow = formatRow(headers.reduce((acc, header) => ({ ...acc, [header]: header }), {}));\r\n const separatorRow = `| ${columnWidths.map(width => \"-\".repeat(width)).join(\" | \")} |`;\r\n const dataRows = data.map(formatRow);\r\n\r\n return [headerRow, separatorRow, ...dataRows].join(\"\\n\");\r\n}\r\n\r\nfunction generateHash(input: string): string {\r\n return crypto.createHash('sha256').update(input).digest('hex').substring(0, 8);\r\n}\r\n\r\nfunction writeMarkdownFile(dataset: string, sql: string, columns: any[], results: any[], useTables: boolean): void {\r\n const hash = generateHash(sql);\r\n if (sql.length > 100) { // we format the SQL if it's too long\r\n sql = format(sql, { language: \"sqlite\", keywordCase: \"upper\", \"tabWidth\": 2, indentStyle: \"standard\", logicalOperatorNewline: \"after\" });\r\n }\r\n\r\n let markdownContent = `# GeneratedTest #${dataset} - ${hash}\r\n\r\n- dataset: ${dataset}\r\n\r\n\\`\\`\\`sql\r\n${sql}\r\n\\`\\`\\`\r\n`;\r\n\r\n if (useTables) {\r\n markdownContent += `\r\n${arrayToMarkdownTable(columns)}\r\n\r\n${arrayToMarkdownTable(results)}\r\n\r\n`;\r\n } else {\r\n markdownContent += `\r\n\\`\\`\\`json\r\n${JSON.stringify({ columns }, null, 2)}\r\n\\`\\`\\`\r\n\r\n\\`\\`\\`json\r\n${JSON.stringify(results, null, 2)}\r\n\\`\\`\\`\r\n\r\n`;\r\n }\r\n\r\n const outputFilePath = path.join(__dirname, \"generated.ecsql.md\");\r\n fs.appendFileSync(outputFilePath, markdownContent, \"utf-8\");\r\n // eslint-disable-next-line no-console\r\n console.log(`Results written to ${outputFilePath}`);\r\n}\r\n\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n if (args.length < 2) {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Usage: ts-node ECDbMarkdownTestGenerator.ts <dataset> <sql>\");\r\n process.exit(1);\r\n }\r\n\r\n const [dataset, sql, tablesFlag] = args;\r\n const useTables = tablesFlag === \"-t\";\r\n let imodel: IModelDb | undefined;\r\n try {\r\n await ECSqlDatasets.generateFiles();\r\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", dataset);\r\n imodel = SnapshotDb.openFile(datasetFilePath);\r\n const { metadata, rows } = await runConcurrentQuery(imodel, sql);\r\n pullAdditionalMetadataThroughECSqlStatement(imodel, metadata, sql);\r\n writeMarkdownFile(dataset, sql, metadata, rows, useTables);\r\n imodel.close();\r\n imodel = undefined;\r\n } catch (error) {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Error running query:\", error);\r\n if (imodel) {\r\n imodel.close();\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nmain().catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Unhandled error in main:\", error);\r\n process.exit(1);\r\n});"]}
1
+ {"version":3,"file":"ECSqlTestGenerator.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { IModelDb, SnapshotDb } from \"../../../core-backend\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { ECSqlValueType, QueryOptionsBuilder, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as crypto from \"crypto\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { format } from \"sql-formatter\";\n\n// Call like this:\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT * FROM meta.ECSchemaDef LIMIT 2\" -t\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT te.ECInstanceId [MyId], te.s, te.DT [Date], row_number() over(PARTITION BY te.DT ORDER BY te.ECInstanceId) as [RowNumber] from aps.TestElement te WHERE te.i < 106\" -t\nasync function runConcurrentQuery(imodel: IModelDb, sql: string): Promise<{ metadata: any[], rows: any[] }> {\n const queryOptions: QueryOptionsBuilder = new QueryOptionsBuilder();\n queryOptions.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n const reader = imodel.createQueryReader(sql, undefined, queryOptions.getOptions());\n const rows = await reader.toArray();\n const metadata = await reader.getMetaData();\n metadata.forEach((value: QueryPropertyMetaData) => delete (value as any).extendType);\n return { metadata, rows };\n}\n\nfunction pullAdditionalMetadataThroughECSqlStatement(imodel: IModelDb, metadata: any[], sql: string): void {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using stmt = imodel.prepareStatement(sql);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const colCount = stmt.getColumnCount();\n if (colCount !== metadata.length) {\n // eslint-disable-next-line no-console\n console.error(`Column count mismatch: ${colCount} != ${metadata.length}. Not generating metadata from statement.`);\n return;\n }\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n metadata[i].type = ECSqlValueType[colInfo.getType()];\n const originPropertyName = colInfo.getOriginPropertyName();\n if (originPropertyName !== undefined)\n metadata[i].originPropertyName = originPropertyName;\n }\n }\n}\n\nfunction arrayToMarkdownTable(data: any[]): string {\n if (data.length === 0) {\n return \"\";\n }\n\n const headers: string[] = Array.from(data.reduce((headersSet, row) => {\n Object.keys(row).forEach(header => headersSet.add(header));\n return headersSet;\n }, new Set<string>()));\n\n const columnWidths = headers.map(header =>\n Math.max(header.length, ...data.map(row => String(row[header]).length))\n );\n\n const formatRow = (row: any) =>\n `| ${headers.map((header, i) => String(row[header]).padEnd(columnWidths[i])).join(\" | \")} |`;\n\n const headerRow = formatRow(headers.reduce((acc, header) => ({ ...acc, [header]: header }), {}));\n const separatorRow = `| ${columnWidths.map(width => \"-\".repeat(width)).join(\" | \")} |`;\n const dataRows = data.map(formatRow);\n\n return [headerRow, separatorRow, ...dataRows].join(\"\\n\");\n}\n\nfunction generateHash(input: string): string {\n return crypto.createHash('sha256').update(input).digest('hex').substring(0, 8);\n}\n\nfunction writeMarkdownFile(dataset: string, sql: string, columns: any[], results: any[], useTables: boolean): void {\n const hash = generateHash(sql);\n if (sql.length > 100) { // we format the SQL if it's too long\n sql = format(sql, { language: \"sqlite\", keywordCase: \"upper\", \"tabWidth\": 2, indentStyle: \"standard\", logicalOperatorNewline: \"after\" });\n }\n\n let markdownContent = `# GeneratedTest #${dataset} - ${hash}\n\n- dataset: ${dataset}\n\n\\`\\`\\`sql\n${sql}\n\\`\\`\\`\n`;\n\n if (useTables) {\n markdownContent += `\n${arrayToMarkdownTable(columns)}\n\n${arrayToMarkdownTable(results)}\n\n`;\n } else {\n markdownContent += `\n\\`\\`\\`json\n${JSON.stringify({ columns }, null, 2)}\n\\`\\`\\`\n\n\\`\\`\\`json\n${JSON.stringify(results, null, 2)}\n\\`\\`\\`\n\n`;\n }\n\n const outputFilePath = path.join(__dirname, \"generated.ecsql.md\");\n fs.appendFileSync(outputFilePath, markdownContent, \"utf-8\");\n // eslint-disable-next-line no-console\n console.log(`Results written to ${outputFilePath}`);\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n if (args.length < 2) {\n // eslint-disable-next-line no-console\n console.error(\"Usage: ts-node ECDbMarkdownTestGenerator.ts <dataset> <sql>\");\n process.exit(1);\n }\n\n const [dataset, sql, tablesFlag] = args;\n const useTables = tablesFlag === \"-t\";\n let imodel: IModelDb | undefined;\n try {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", dataset);\n imodel = SnapshotDb.openFile(datasetFilePath);\n const { metadata, rows } = await runConcurrentQuery(imodel, sql);\n pullAdditionalMetadataThroughECSqlStatement(imodel, metadata, sql);\n writeMarkdownFile(dataset, sql, metadata, rows, useTables);\n imodel.close();\n imodel = undefined;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error running query:\", error);\n if (imodel) {\n imodel.close();\n }\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in main:\", error);\n process.exit(1);\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.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 * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { marked, Tokens } from \"marked\";\r\n\r\nexport interface ECDbTestProps {\r\n fileName: string;\r\n title: string;\r\n\r\n // Things from properties:\r\n only?: boolean; // This flag handles the only property to filter tests\r\n skip?: string; // This flag handles the skip property to filter tests\r\n dataset?: string;\r\n mode: ECDbTestMode;\r\n rowFormat: ECDbTestRowFormat;\r\n abbreviateBlobs: boolean;\r\n convertClassIdsToClassNames: boolean;\r\n errorDuringPrepare?: boolean;\r\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\r\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\r\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\r\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\r\n\r\n // TODO: implement, it's currently being parsed but not used\r\n stepStatus?: string;\r\n\r\n // Things from code blocks or tables\r\n sql?: string;\r\n expectedResults?: { [key: string]: any }[] | any[];\r\n columnInfo?: ColumnInfoProps[];\r\n\r\n // Things from lists\r\n binders?: ECDbTestBinderProps[];\r\n}\r\n\r\nexport interface ECDbTestBinderProps {\r\n indexOrName: string;\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface ColumnInfoProps{\r\n name: string;\r\n className?: string;\r\n accessString?: string;\r\n generated?: boolean;\r\n index?: number;\r\n jsonName?: string;\r\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\r\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\r\n extendedType?: string;\r\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\r\n typeName?: string; // typeName is used on ConcurrentQuery\r\n originPropertyName?: string; // only supported for ECSqlStatement\r\n}\r\n\r\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\r\n \"name\",\r\n \"className\",\r\n \"accessString\",\r\n \"generated\",\r\n \"index\",\r\n \"jsonName\",\r\n \"extendedType\",\r\n \"type\",\r\n \"typeName\",\r\n \"originPropertyName\",\r\n]);\r\n\r\n/* interface QueryPropertyMetaData\r\n className: string;\r\n accessString?: string;\r\n generated: boolean;\r\n index: number;\r\n jsonName: string;\r\n name: string;\r\n extendType: string;\r\n typeName: string;\r\n*/\r\n\r\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\r\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\r\n const isValid = typeof obj === \"object\" &&\r\n typeof obj.name === \"string\" &&\r\n (obj.className === undefined || typeof obj.className === \"string\") &&\r\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\r\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\r\n (obj.index === undefined || typeof obj.index === \"number\") &&\r\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\r\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\r\n (obj.type === undefined || typeof obj.type === \"string\") &&\r\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\r\n\r\n if (!isValid) {\r\n const errors: string[] = [];\r\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\r\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\r\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\r\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\r\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\r\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\r\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\r\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\r\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\r\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\r\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\r\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nexport enum ECDbTestMode{\r\n Both = \"Both\",\r\n Statement = \"Statement\",\r\n ConcurrentQuery = \"ConcurrentQuery\",\r\n};\r\n\r\nexport enum ECDbTestRowFormat {\r\n ECSqlNames = \"ECSqlNames\",\r\n ECSqlIndexes = \"ECSqlIndexes\",\r\n JsNames = \"JsNames\",\r\n}\r\n\r\nfunction tableTextToValue(text: string) : any {\r\n if(text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\r\n return text.slice(1,text.length-1);\r\n if(text === \"null\")\r\n return null;\r\n if(text === \"undefined\")\r\n return undefined;\r\n if(text.startsWith(\"{\") || text.startsWith(\"[\"))\r\n return JSON.parse(text);\r\n if(text === \"true\" || text === \"false\")\r\n return text === \"true\";\r\n if(text.startsWith(\"0x\"))\r\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\r\n if(/^-?\\d+(\\.\\d+)?$/.test(text)) {\r\n const flt = parseFloat(text);\r\n if(!Number.isNaN(flt))\r\n return flt;\r\n }\r\n\r\n if(/^-?\\d+$/.test(text)) {\r\n // eslint-disable-next-line radix\r\n const asInt = parseInt(text);\r\n if(!Number.isNaN(asInt))\r\n return asInt;\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\r\n for(const key in obj) {\r\n if(typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\r\n obj[key] = understandAndReplaceBinaryData(obj[key])\r\n else if(typeof obj[key] === \"object\" || Array.isArray(obj[key]))\r\n obj[key] = buildBinaryData(obj[key])\r\n }\r\n return obj;\r\n}\r\n\r\nfunction understandAndReplaceBinaryData(str: string): any{\r\n const startInd = str.indexOf(\"(\") + 1;\r\n const endInd = str.indexOf(\")\");\r\n str = str.slice(startInd, endInd);\r\n const ans: number[] = []\r\n const numbers: string[] = str.split(\",\");\r\n numbers.forEach((value:string)=>\r\n {\r\n value = value.trim();\r\n // eslint-disable-next-line radix\r\n ans.push(parseInt(value));\r\n }\r\n );\r\n return Uint8Array.of(...ans);\r\n}\r\n\r\n\r\nexport class ECDbMarkdownTestParser {\r\n public static parse(): ECDbTestProps[] {\r\n const testAssetsDir = path.join(__dirname ,\"..\",\"queries\");\r\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\r\n const out: ECDbTestProps[] = [];\r\n\r\n for (const fileName of testFiles) {\r\n try {\r\n const tests = this.parseFile(testAssetsDir, fileName);\r\n out.push(...tests);\r\n } catch (error) {\r\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\r\n const markdownFilePath = path.join(testAssetsDir, fileName);\r\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\r\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\r\n const tokens = marked.lexer(markdownContent);\r\n\r\n const out: ECDbTestProps[] = [];\r\n let currentTest: ECDbTestProps | undefined;\r\n\r\n for (const token of tokens) {\r\n switch (token.type) {\r\n case \"space\":\r\n case \"html\":\r\n case \"paragraph\":\r\n case \"hr\":\r\n continue;\r\n case \"heading\":\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n currentTest = { title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\r\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false };\r\n break;\r\n case \"list\":\r\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\r\n break;\r\n case \"code\":\r\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\r\n break;\r\n case \"table\":\r\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\r\n break;\r\n default:\r\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\r\n break;\r\n }\r\n }\r\n\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n return out;\r\n }\r\n\r\n\r\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n const variableRegex = /^(\\w+):\\s*(.+)$/;\r\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\r\n for (const item of token.items) {\r\n const match = item.text.match(variableRegex);\r\n if (match) {\r\n const key = match[1];\r\n const value = match[2];\r\n switch (key.toLowerCase()) {\r\n case \"dataset\":\r\n currentTest.dataset = value;\r\n continue;\r\n case \"errorduringprepare\":\r\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"stepstatus\":\r\n currentTest.stepStatus = value;\r\n continue;\r\n case \"only\":\r\n currentTest.only = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"skip\":\r\n currentTest.skip = value;\r\n continue;\r\n case \"mode\":\r\n this.handleMode(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"rowformat\":\r\n this.handleRowFormat(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"abbreviateblobs\":\r\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"convertclassidstoclassnames\":\r\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"indexestoinclude\":\r\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\r\n continue;\r\n }\r\n }\r\n const bindMatch = item.text.match(bindRegex);\r\n if (bindMatch) {\r\n currentTest.binders = currentTest.binders || [];\r\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"statement\":\r\n currentTest.mode = ECDbTestMode.Statement;\r\n break;\r\n case \"concurrentquery\":\r\n currentTest.mode = ECDbTestMode.ConcurrentQuery;\r\n break;\r\n case \"both\":\r\n currentTest.mode = ECDbTestMode.Both;\r\n break;\r\n default:\r\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"ecsqlnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\r\n break;\r\n case \"ecsqlindexes\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\r\n break;\r\n case \"jsnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\r\n break;\r\n default:\r\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\nprivate static handleValidIndexList(obj: string): number[] | undefined {\r\n try{\r\n const numsArr = JSON.parse(obj);\r\n if(Array.isArray(numsArr) && numsArr.every((val: any)=> typeof val === \"number\"))\r\n return numsArr;\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n catch{\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n}\r\n\r\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n if (token.lang === \"sql\") {\r\n currentTest.sql = token.text;\r\n } else if (token.lang === \"json\") {\r\n let json: any;\r\n try {\r\n json = JSON.parse(token.text);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\r\n } else {\r\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\r\n }\r\n }\r\n\r\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\r\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\r\n return;\r\n }\r\n\r\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\r\n } else {\r\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const extraProps: Set<string> = new Set();\r\n\r\n if (json.columns.every(isColumnInfoProps)) {\r\n currentTest.columnInfo = json.columns;\r\n for (const column of json.columns) {\r\n for (const key in column) {\r\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\r\n extraProps.add(key);\r\n }\r\n }\r\n }\r\n\r\n if (extraProps.size > 0) {\r\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\r\n }\r\n } else {\r\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\r\n currentTest.expectedResults = json\r\n }\r\n\r\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n this.handleTable(token, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\r\n this.handleColumnTable(token, currentTest, markdownFilePath);\r\n return;\r\n }\r\n else if(token.header.length > 0 && token.header[0].text === \"\"){\r\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\r\n } else {\r\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\r\n }\r\n }\r\n\r\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const columnInfos: any[] = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n const columnInfo: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n columnInfo[header] = tableTextToValue(cell);\r\n }\r\n columnInfos.push(columnInfo);\r\n }\r\n\r\n this.handleJSONColumnMetadata({columns: columnInfos}, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult[header] = value;\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n\r\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: any[] = [];\r\n for (let i = 0; i < token.header.length; i++) {\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult.push(value);\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n}\r\n\r\nfunction logWarning(message: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`\\x1b[33m${message}\\x1b[0m`);\r\n}"]}
1
+ {"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.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 * as path from \"path\";\nimport * as fs from \"fs\";\nimport { marked, Tokens } from \"marked\";\n\nexport interface ECDbTestProps {\n fileName: string;\n title: string;\n\n // Things from properties:\n only?: boolean; // This flag handles the only property to filter tests\n skip?: string; // This flag handles the skip property to filter tests\n dataset?: string;\n mode: ECDbTestMode;\n rowFormat: ECDbTestRowFormat;\n abbreviateBlobs: boolean;\n convertClassIdsToClassNames: boolean;\n errorDuringPrepare?: boolean;\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\n\n // TODO: implement, it's currently being parsed but not used\n stepStatus?: string;\n\n // Things from code blocks or tables\n sql?: string;\n expectedResults?: { [key: string]: any }[] | any[];\n columnInfo?: ColumnInfoProps[];\n\n // Things from lists\n binders?: ECDbTestBinderProps[];\n}\n\nexport interface ECDbTestBinderProps {\n indexOrName: string;\n type: string;\n value: string;\n}\n\nexport interface ColumnInfoProps{\n name: string;\n className?: string;\n accessString?: string;\n generated?: boolean;\n index?: number;\n jsonName?: string;\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\n extendedType?: string;\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\n typeName?: string; // typeName is used on ConcurrentQuery\n originPropertyName?: string; // only supported for ECSqlStatement\n}\n\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\n \"name\",\n \"className\",\n \"accessString\",\n \"generated\",\n \"index\",\n \"jsonName\",\n \"extendedType\",\n \"type\",\n \"typeName\",\n \"originPropertyName\",\n]);\n\n/* interface QueryPropertyMetaData\n className: string;\n accessString?: string;\n generated: boolean;\n index: number;\n jsonName: string;\n name: string;\n extendType: string;\n typeName: string;\n*/\n\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\n const isValid = typeof obj === \"object\" &&\n typeof obj.name === \"string\" &&\n (obj.className === undefined || typeof obj.className === \"string\") &&\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\n (obj.index === undefined || typeof obj.index === \"number\") &&\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\n (obj.type === undefined || typeof obj.type === \"string\") &&\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\n\n if (!isValid) {\n const errors: string[] = [];\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\n }\n\n return isValid;\n}\n\nexport enum ECDbTestMode{\n Both = \"Both\",\n Statement = \"Statement\",\n ConcurrentQuery = \"ConcurrentQuery\",\n};\n\nexport enum ECDbTestRowFormat {\n ECSqlNames = \"ECSqlNames\",\n ECSqlIndexes = \"ECSqlIndexes\",\n JsNames = \"JsNames\",\n}\n\nfunction tableTextToValue(text: string) : any {\n if(text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\n return text.slice(1,text.length-1);\n if(text === \"null\")\n return null;\n if(text === \"undefined\")\n return undefined;\n if(text.startsWith(\"{\") || text.startsWith(\"[\"))\n return JSON.parse(text);\n if(text === \"true\" || text === \"false\")\n return text === \"true\";\n if(text.startsWith(\"0x\"))\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\n if(/^-?\\d+(\\.\\d+)?$/.test(text)) {\n const flt = parseFloat(text);\n if(!Number.isNaN(flt))\n return flt;\n }\n\n if(/^-?\\d+$/.test(text)) {\n // eslint-disable-next-line radix\n const asInt = parseInt(text);\n if(!Number.isNaN(asInt))\n return asInt;\n }\n\n return text;\n}\n\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\n for(const key in obj) {\n if(typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\n obj[key] = understandAndReplaceBinaryData(obj[key])\n else if(typeof obj[key] === \"object\" || Array.isArray(obj[key]))\n obj[key] = buildBinaryData(obj[key])\n }\n return obj;\n}\n\nfunction understandAndReplaceBinaryData(str: string): any{\n const startInd = str.indexOf(\"(\") + 1;\n const endInd = str.indexOf(\")\");\n str = str.slice(startInd, endInd);\n const ans: number[] = []\n const numbers: string[] = str.split(\",\");\n numbers.forEach((value:string)=>\n {\n value = value.trim();\n // eslint-disable-next-line radix\n ans.push(parseInt(value));\n }\n );\n return Uint8Array.of(...ans);\n}\n\n\nexport class ECDbMarkdownTestParser {\n public static parse(): ECDbTestProps[] {\n const testAssetsDir = path.join(__dirname ,\"..\",\"queries\");\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\n const out: ECDbTestProps[] = [];\n\n for (const fileName of testFiles) {\n try {\n const tests = this.parseFile(testAssetsDir, fileName);\n out.push(...tests);\n } catch (error) {\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n return out;\n }\n\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\n const markdownFilePath = path.join(testAssetsDir, fileName);\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\n const tokens = marked.lexer(markdownContent);\n\n const out: ECDbTestProps[] = [];\n let currentTest: ECDbTestProps | undefined;\n\n for (const token of tokens) {\n switch (token.type) {\n case \"space\":\n case \"html\":\n case \"paragraph\":\n case \"hr\":\n continue;\n case \"heading\":\n if (currentTest !== undefined) {\n out.push(currentTest);\n }\n currentTest = { title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false };\n break;\n case \"list\":\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\n break;\n case \"code\":\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\n break;\n case \"table\":\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\n break;\n default:\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\n break;\n }\n }\n\n if (currentTest !== undefined) {\n out.push(currentTest);\n }\n return out;\n }\n\n\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n const variableRegex = /^(\\w+):\\s*(.+)$/;\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\n for (const item of token.items) {\n const match = item.text.match(variableRegex);\n if (match) {\n const key = match[1];\n const value = match[2];\n switch (key.toLowerCase()) {\n case \"dataset\":\n currentTest.dataset = value;\n continue;\n case \"errorduringprepare\":\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\n continue;\n case \"stepstatus\":\n currentTest.stepStatus = value;\n continue;\n case \"only\":\n currentTest.only = value.toLowerCase() === \"true\";\n continue;\n case \"skip\":\n currentTest.skip = value;\n continue;\n case \"mode\":\n this.handleMode(value, currentTest, markdownFilePath);\n continue;\n case \"rowformat\":\n this.handleRowFormat(value, currentTest, markdownFilePath);\n continue;\n case \"abbreviateblobs\":\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\n continue;\n case \"convertclassidstoclassnames\":\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\n continue;\n case \"indexestoinclude\":\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\n continue;\n }\n }\n const bindMatch = item.text.match(bindRegex);\n if (bindMatch) {\n currentTest.binders = currentTest.binders || [];\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\n continue;\n }\n }\n }\n\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\n switch(value.toLowerCase()) {\n case \"statement\":\n currentTest.mode = ECDbTestMode.Statement;\n break;\n case \"concurrentquery\":\n currentTest.mode = ECDbTestMode.ConcurrentQuery;\n break;\n case \"both\":\n currentTest.mode = ECDbTestMode.Both;\n break;\n default:\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\n }\n }\n\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\n switch(value.toLowerCase()) {\n case \"ecsqlnames\":\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\n break;\n case \"ecsqlindexes\":\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\n break;\n case \"jsnames\":\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\n break;\n default:\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\n }\n }\n\nprivate static handleValidIndexList(obj: string): number[] | undefined {\n try{\n const numsArr = JSON.parse(obj);\n if(Array.isArray(numsArr) && numsArr.every((val: any)=> typeof val === \"number\"))\n return numsArr;\n logWarning(\"The given value is not valid for the property indexestoinclude\");\n return undefined;\n }\n catch{\n logWarning(\"The given value is not valid for the property indexestoinclude\");\n return undefined;\n }\n}\n\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n if (token.lang === \"sql\") {\n currentTest.sql = token.text;\n } else if (token.lang === \"json\") {\n let json: any;\n try {\n json = JSON.parse(token.text);\n } catch (error) {\n if (error instanceof Error) {\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\n } else {\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\n }\n }\n\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\n return;\n }\n\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\n } else {\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\n }\n }\n\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\n const extraProps: Set<string> = new Set();\n\n if (json.columns.every(isColumnInfoProps)) {\n currentTest.columnInfo = json.columns;\n for (const column of json.columns) {\n for (const key in column) {\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\n extraProps.add(key);\n }\n }\n }\n\n if (extraProps.size > 0) {\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\n }\n } else {\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\n }\n }\n\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\n currentTest.expectedResults = json\n }\n\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n this.handleTable(token, currentTest, markdownFilePath);\n }\n\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\n this.handleColumnTable(token, currentTest, markdownFilePath);\n return;\n }\n else if(token.header.length > 0 && token.header[0].text === \"\"){\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\n } else {\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\n }\n }\n\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n const columnInfos: any[] = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n const columnInfo: { [key: string]: any } = {};\n for (let i = 0; i < token.header.length; i++) {\n const header = token.header[i].text;\n const cell = row[i].text;\n columnInfo[header] = tableTextToValue(cell);\n }\n columnInfos.push(columnInfo);\n }\n\n this.handleJSONColumnMetadata({columns: columnInfos}, currentTest, markdownFilePath);\n }\n\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if(currentTest.expectedResults !== undefined) {\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\n return;\n }\n currentTest.expectedResults = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n\n const expectedResult: { [key: string]: any } = {};\n for (let i = 0; i < token.header.length; i++) {\n const header = token.header[i].text;\n const cell = row[i].text;\n const value = tableTextToValue(cell);\n if (value !== undefined)\n expectedResult[header] = value;\n }\n currentTest.expectedResults.push(expectedResult);\n }\n }\n\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if(currentTest.expectedResults !== undefined) {\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\n return;\n }\n currentTest.expectedResults = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n\n const expectedResult: any[] = [];\n for (let i = 0; i < token.header.length; i++) {\n const cell = row[i].text;\n const value = tableTextToValue(cell);\n if (value !== undefined)\n expectedResult.push(value);\n }\n currentTest.expectedResults.push(expectedResult);\n }\n }\n}\n\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}"]}