@itwin/core-backend 5.3.0-dev.8 → 5.3.0
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.
- package/CHANGELOG.md +52 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +14 -0
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +2 -0
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +4 -4
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/Element.d.ts +31 -3
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +55 -3
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +24 -1
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +102 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +26 -3
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +60 -5
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +2 -2
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +1 -2
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +9 -17
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +2 -2
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/NavigationRelationship.d.ts +15 -0
- package/lib/cjs/NavigationRelationship.d.ts.map +1 -1
- package/lib/cjs/NavigationRelationship.js +22 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +5 -0
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +7 -0
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/TileStorage.d.ts +1 -1
- package/lib/cjs/TileStorage.d.ts.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +8 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +30 -2
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +1 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +2 -2
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +15 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +36 -23
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +13 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +88 -10
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +6 -5
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +33 -14
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +2 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +3 -2
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +12 -5
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +14 -0
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +2 -0
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +4 -4
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/Element.d.ts +31 -3
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +55 -4
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +24 -1
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +101 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +26 -3
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +60 -5
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +2 -2
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +1 -2
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +10 -18
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +2 -2
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/NavigationRelationship.d.ts +15 -0
- package/lib/esm/NavigationRelationship.d.ts.map +1 -1
- package/lib/esm/NavigationRelationship.js +19 -0
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/Relationship.d.ts +5 -0
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +7 -0
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/TileStorage.d.ts +1 -1
- package/lib/esm/TileStorage.d.ts.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +8 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +30 -2
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +1 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +2 -2
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +15 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +37 -24
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +13 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +89 -12
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +6 -5
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +33 -14
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +2 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +3 -2
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +11 -5
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
- package/lib/esm/test/ElementDrivesElement.test.js +862 -0
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
- package/lib/esm/test/ElementLRUCache.test.js +13 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js +17 -11
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +44 -0
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +47 -2
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +120 -31
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +2 -2
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +33 -2
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.d.ts +2 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.d.ts.map +1 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.js +80 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -0
- package/lib/esm/test/element/SheetInformationAspect.test.d.ts +2 -0
- package/lib/esm/test/element/SheetInformationAspect.test.d.ts.map +1 -0
- package/lib/esm/test/element/SheetInformationAspect.test.js +182 -0
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -0
- package/lib/esm/test/hubaccess/Rebase.test.js +169 -2
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +175 -2
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +63 -60
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js +6 -6
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +33 -5
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/package.json +16 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSqlStatement.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { DbResult, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { NavigationValue, QueryBinder, QueryOptions, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d, Range3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\nimport { _nativeDb, ECDb, ECEnumValue, ECSqlColumnInfo, ECSqlInsertResult, ECSqlStatement, ECSqlValue, ECSqlWriteStatement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\nconst selectSingleRow = new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();\nasync function query(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions, callback?: (row: any) => void) {\n ecdb.saveChanges();\n let rowCount: number = 0;\n for await (const queryRow of ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rowCount++;\n if (callback)\n callback(queryRow.toRow());\n }\n return rowCount;\n}\nasync function queryRows(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions) {\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames });\n return reader.toArray();\n}\nasync function queryCount(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions): Promise<number> {\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(`SELECT COUNT(*) FROM (${ecsql})`, params, { ...config, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes })) {\n return row[0] as number;\n }\n return -1;\n}\nfunction blobEqual(lhs: any, rhs: any) {\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\n throw new Error(\"expecting uint8array\");\n\n if (lhs.byteLength !== rhs.byteLength)\n return false;\n\n for (let i = 0; i < lhs.byteLength; i++) {\n if (lhs[i] !== rhs[i])\n return false;\n }\n return true;\n}\n\ndescribe(\"ECSqlStatement\", () => {\n const outDir = KnownTestLocations.outputDir;\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n const blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\n const abbreviatedBlobVal = `{\"bytes\":${blobVal.byteLength}}`;\n\n it(\"check asynchronous step and stepForInsert methods\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"concurrent query get meta data\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(30,TIMESTAMP '2019-10-18T12:00:00Z',30)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(\"SELECT * FROM ts.Foo\");\n let props = await reader.getMetaData();\n assert.equal(props.length, 5);\n let rows = 0;\n while (await reader.step()) {\n rows++;\n }\n assert.equal(rows, 2);\n props = await reader.getMetaData();\n assert.equal(props.length, 5);\n });\n it(\"null string accessor\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"nullstring.ecdb\");\n assert.isTrue(ecdb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(`VALUES(NULL)`, async (stmt: ECSqlStatement) => {\n stmt.step();\n const str = stmt.getValue(0).getString();\n assert.equal(str, \"\");\n });\n });\n it(\"should page results\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for (let i = 1; i < ROW_COUNT; i++) {\n const rowCount = await queryCount(ecdb, \"SELECT ECInstanceId, ECClassId, n FROM ts.Foo WHERE n <= ?\", new QueryBinder().bindInt(1, i));\n assert.equal(rowCount, i);\n }\n\n const temp = await queryRows(ecdb, \"SELECT ECInstanceId FROM ONLY ts.Foo\");\n assert.equal(temp.length, ROW_COUNT);\n // query page by page\n const PAGE_SIZE = 5;\n const QUERY = \"SELECT n FROM ts.Foo\";\n const EXPECTED_ROW_COUNT = [5, 5, 5, 5, 5, 2];\n const ready = [];\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n ready.push(queryRows(ecdb, QUERY, undefined, new QueryOptionsBuilder().setLimit({ offset: i * PAGE_SIZE, count: PAGE_SIZE }).getOptions()));\n }\n // verify if each page has right count of rows\n const results = await Promise.all(ready);\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n assert.equal(results[i].length, EXPECTED_ROW_COUNT[i]);\n }\n });\n\n it(\"paging use cache statement queryRows()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n const rca = await queryRows(ecdb, \"SELECT count(*) as nRows FROM ts.Foo\");\n assert.equal(rca[0].nRows, 100); // expe\n const rc = await queryCount(ecdb, \"SELECT * FROM ts.Foo\");\n assert.equal(rc, 100); // expe\n let rowNo = 0;\n for await (const row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.n, rowNo + 1);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 100); // expect all rows\n });\n\n it(\"should restart query\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"cancelquery.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n ConcurrentQuery.resetConfig(ecdb[_nativeDb], { globalQuota: { time: 1 }, ignoreDelay: false });\n\n let cancelled = 0;\n let successful = 0;\n let rowCount = 0;\n const scheduleQuery = async (delay: number) => {\n return new Promise<void>(async (resolve, reject) => {\n try {\n const options = new QueryOptionsBuilder();\n options.setDelay(delay);\n options.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n options.setRestartToken(\"tag\");\n for await (const _row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, options.getOptions())) {\n rowCount++;\n }\n successful++;\n resolve();\n } catch (err: any) {\n // we expect query to be cancelled\n if (err.errorNumber === DbResult.BE_SQLITE_INTERRUPT) {\n cancelled++;\n resolve();\n } else {\n reject(new Error(\"rejected\"));\n }\n }\n });\n };\n\n const queries = [];\n queries.push(scheduleQuery(5000));\n queries.push(scheduleQuery(0));\n\n await Promise.all(queries);\n // We expect at least one query to be cancelled\n assert.isAtLeast(cancelled, 1);\n assert.isAtLeast(successful, 1);\n assert.isAtLeast(rowCount, 1);\n });\n it(\"should use cache statement for query()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n for (const _testPageSize of [1, 2, 4, 5, 6, 7, 10, ROW_COUNT]) {\n let rowNo = 1;\n for await (const row of ecdb.createQueryReader(\"SELECT n FROM ts.Foo WHERE n != ? and ECInstanceId < ?\", new QueryBinder().bindInt(1, 123).bindInt(2, 30), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.n, rowNo);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 28); // expect all rows\n assert.equal(0, ecdb.getCachedStatementCount()); // there must be single cached statement used with different size pages.\n }\n });\n it(\"concurrent query binding\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 5; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)\", new QueryBinder().bindInt(\"a\", 1).bindInt(\"b\", 2).bindInt(\"c\", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (?, ?, ?)\", new QueryBinder().bindInt(1, 1).bindInt(2, 2).bindInt(3, 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"No parameter index found for parameter name: d.\");\n try {\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)\", new QueryBinder().bindInt(\"a\", 1).bindInt(\"b\", 2).bindInt(\"c\", 3).bindInt(\"d\", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n assert.isFalse(true);\n } catch (e) { assert.isNotNull(e); }\n assert.isTrue(slm.finishAndDispose());\n });\n it(\"check HextoId() and IdToHex() ecsql functions\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 2; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(\"SELECT IdToHex(ECInstanceId) as hexId, ECInstanceId, HexToId('0x1') as idhex FROM ts.Foo WHERE n = ?\", new QueryBinder().bindInt(1, 1), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.hexId, row.id);\n assert.equal(row.hexId, row.idhex);\n }\n });\n it(\"should bind BeGuid\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"guid\" typeName=\"binary\" extendedTypeName=\"BeGuid\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const maxRows = 10;\n const guids: GuidString[] = [];\n for (let i = 0; i < maxRows; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(guid) values(?)`, async (stmt: ECSqlWriteStatement) => {\n guids.push(Guid.createValue());\n stmt.bindGuid(1, guids[i]);\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n\n const uint8arrayToGuid = (guidArray: any) => {\n if (!(guidArray instanceof Uint8Array))\n throw new Error(\"Expecting a Uint8Array type argument\");\n\n if (guidArray.byteLength !== 16)\n throw new Error(\"Expecting a Uint8Array of length 16\");\n\n let guidStr: string = \"\";\n const part = [0, 4, 6, 8, 10, 16];\n for (let z = 0; z < part.length - 1; z++) {\n guidArray.subarray(part[z], part[z + 1]).forEach((c) => {\n guidStr += (`00${c.toString(16)}`).slice(-2);\n });\n if (z < part.length - 2)\n guidStr += \"-\";\n }\n return guidStr;\n };\n const guidToUint8Array = (v: GuidString) => {\n if (v.length !== 36)\n throw new Error(\"Guid is expected to have 36 characters xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n\n const ar = new Uint8Array(16);\n const t = v.split(\"-\").join(\"\");\n let i = 0;\n for (let z = 0; z < 32; z += 2) {\n ar[i++] = parseInt(t.substring(z, z + 2), 16);\n }\n return ar;\n };\n\n const testGuid = \"74da899a-6dde-406c-bf45-f4547d948f00\";\n assert.equal(testGuid, uint8arrayToGuid(guidToUint8Array(testGuid)));\n let k = 0;\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo ORDER BY ECInstanceId\", undefined, undefined, (row: any) => {\n assert.equal(row.guid, guids[k++]);\n }), maxRows);\n\n // following will not return any guid BLOB ? = STRING\n for (const guid of guids) {\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid='${guid}'`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 0);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid=StrToGuid('${guid}')`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE GuidToStr(guid)=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindBlob(1, guidToUint8Array(guid)), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT GuidToStr(guid) as gstr FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.gstr, guid);\n }), 1);\n }\n });\n it(\"should bind Ids\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n\n assert.isTrue(ecdb.isOpen);\n\n const verify = async (ecdbToVerify: ECDb, actualRes: ECSqlInsertResult, expectedECInstanceId?: Id64String) => {\n if (!expectedECInstanceId) {\n assert.notEqual(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isUndefined(actualRes.id);\n return;\n }\n\n assert.equal(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(actualRes.id);\n assert.equal(actualRes.id!, expectedECInstanceId);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdbToVerify.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n });\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", new QueryBinder().bindString(1, expectedId), new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).getOptions(), (row) => {\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n }), 1);\n };\n\n let expectedId = Id64.fromLocalAndBriefcaseIds(4444, 0);\n let r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(1, expectedId);\n stmt.bindString(2, \"4444.txt\");\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4445, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(\"id\", expectedId);\n stmt.bindString(\"name\", \"4445.txt\");\n\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4446, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([expectedId, \"4446.txt\"]);\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4447, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ id: expectedId, name: \"4447.txt\" });\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n });\n\n it(\"should bind numeric and date strings\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/only BindDateTime or BindText can be called for a column of the DateTime type/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumericanddatestrings.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n const ecsqln = \"SELECT 1 FROM ts.Foo WHERE n=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqln, async (stmt: ECSqlStatement) => {\n const nNum: number = 20;\n const nStr: string = \"20\";\n const nDt: string = \"2019-01-21T12:00:00Z\";\n const nHexStr: string = \"0x14\";\n\n stmt.bindInteger(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindInt(1, nNum), selectSingleRow), 1);\n\n stmt.bindValue(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nNum]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nStr), selectSingleRow), 1);\n\n stmt.bindValue(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nDt), selectSingleRow), 0);\n\n stmt.bindValue(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nDt]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nHexStr), selectSingleRow), 0);\n\n stmt.bindValue(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nHexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n });\n\n const ecsqldt = \"SELECT 1 FROM ts.Foo WHERE dt=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqldt, async (stmt: ECSqlStatement) => {\n const dtStr: string = \"2018-10-18T12:00:00Z\";\n const num: number = 2458410;\n const str: string = \"2458410\";\n const hexStr: string = \"0x25832a\";\n\n stmt.bindDateTime(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, new QueryBinder().bindString(1, dtStr)), 1);\n stmt.bindString(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dtStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindInteger(1, num));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n assert.throw(() => stmt.bindValue(1, num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([num]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValue(1, str));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n assert.throw(() => stmt.getBinder(1).bind(str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([str]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, hexStr));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n assert.throw(() => stmt.bindValue(1, hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([hexStr]));\n stmt.clearBindings();\n });\n\n const ecsqlfooId = \"SELECT 1 FROM ts.Foo WHERE fooId=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqlfooId, async (stmt: ECSqlStatement) => {\n const num: number = 20;\n const str: string = \"20\";\n const dt: string = \"2019-01-21T12:00:00Z\";\n const hexStr: string = \"0x14\";\n\n stmt.bindId(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n stmt.bindValue(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([str]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindInteger(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n\n stmt.bindValue(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([num]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([dt])), 0);\n\n stmt.bindValue(1, dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dt]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should bind numbers\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumbers.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECProperty propertyName=\"Description\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const doubleVal: number = 3.5;\n let id = await ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindDouble')\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindDouble(1, doubleVal);\n stmt.bindDouble(2, doubleVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDouble(4, doubleVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { limit: { count: 1 } }, (row: any) => {\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n }), 1);\n\n const smallIntVal: number = 3;\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, small int')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, smallIntVal);\n stmt.bindInteger(2, smallIntVal);\n stmt.bindInteger(3, smallIntVal);\n stmt.bindInteger(4, smallIntVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n }), 1);\n\n const largeUnsafeNumber: number = 12312312312312323654; // too large for int64, but fits into uint64\n assert.isFalse(Number.isSafeInteger(largeUnsafeNumber));\n const largeUnsafeNumberStr: string = \"12312312312312323654\";\n const largeUnsafeNumberHexStr: string = \"0xaade1ed08b0b5e46\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberStr);\n stmt.bindInteger(2, largeUnsafeNumberStr);\n stmt.bindInteger(3, largeUnsafeNumberStr);\n stmt.bindInteger(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // assert.equal(await query(ecdb, \"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberHexStr);\n stmt.bindInteger(2, largeUnsafeNumberHexStr);\n stmt.bindInteger(3, largeUnsafeNumberHexStr);\n stmt.bindInteger(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // assert.equal(await query(ecdb, \"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberStr);\n stmt.bindString(2, largeUnsafeNumberStr);\n stmt.bindString(3, largeUnsafeNumberStr);\n stmt.bindString(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // uint64 cannot be bound as string in SQLite. They get converted to reals\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberHexStr);\n stmt.bindString(2, largeUnsafeNumberHexStr);\n stmt.bindString(3, largeUnsafeNumberHexStr);\n stmt.bindString(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n }), 1);\n\n const largeNegUnsafeNumber: number = -123123123123123236;\n assert.isFalse(Number.isSafeInteger(largeNegUnsafeNumber));\n const largeNegUnsafeNumberStr: string = \"-123123123123123236\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegUnsafeNumberStr);\n stmt.bindInteger(2, largeNegUnsafeNumberStr);\n stmt.bindInteger(3, largeNegUnsafeNumberStr);\n stmt.bindInteger(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegUnsafeNumberStr);\n stmt.bindString(2, largeNegUnsafeNumberStr);\n stmt.bindString(3, largeNegUnsafeNumberStr);\n stmt.bindString(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n const largeSafeNumber: number = 1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeSafeNumber));\n const largeSafeNumberStr: string = largeSafeNumber.toString();\n const largeSafeNumberHexStr: string = \"0x45fcc5c2c8500\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumber);\n stmt.bindInteger(2, largeSafeNumber);\n stmt.bindInteger(3, largeSafeNumber);\n stmt.bindInteger(4, largeSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.si, largeSafeNumberStr);\n assert.equal(row.hi, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.sl, largeSafeNumberStr);\n assert.equal(row.hl, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n // await query(ecdb, \"SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.d, largeSafeNumber);\n // assert.equal(row.i, largeSafeNumber);\n // assert.equal(row.si, largeSafeNumberStr);\n // assert.equal(row.hi, largeSafeNumberHexStr);\n // assert.equal(row.l, largeSafeNumber);\n // assert.equal(row.sl, largeSafeNumberStr);\n // assert.equal(row.hl, largeSafeNumberHexStr);\n // assert.equal(row.s, largeSafeNumberStr);\n // });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberStr);\n stmt.bindInteger(2, largeSafeNumberStr);\n stmt.bindInteger(3, largeSafeNumberStr);\n stmt.bindInteger(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberHexStr);\n stmt.bindInteger(2, largeSafeNumberHexStr);\n stmt.bindInteger(3, largeSafeNumberHexStr);\n stmt.bindInteger(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberStr);\n stmt.bindString(2, largeSafeNumberStr);\n stmt.bindString(3, largeSafeNumberStr);\n stmt.bindString(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n // SQLite does not parse hex strs bound as strings.\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberHexStr);\n stmt.bindString(2, largeSafeNumberHexStr);\n stmt.bindString(3, largeSafeNumberHexStr);\n stmt.bindString(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n }), 1);\n\n const largeNegSafeNumber: number = -1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeNegSafeNumber));\n const largeNegSafeNumberStr: string = largeNegSafeNumber.toString();\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumber);\n stmt.bindInteger(2, largeNegSafeNumber);\n stmt.bindInteger(3, largeNegSafeNumber);\n stmt.bindInteger(4, largeNegSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumberStr);\n stmt.bindInteger(2, largeNegSafeNumberStr);\n stmt.bindInteger(3, largeNegSafeNumberStr);\n stmt.bindInteger(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegSafeNumberStr);\n stmt.bindString(2, largeNegSafeNumberStr);\n stmt.bindString(3, largeNegSafeNumberStr);\n stmt.bindString(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n });\n\n it(\"should bind primitives\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal = true;\n const doubleVal = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.bl, blobVal);\n const f64 = new Float64Array(row.bl.buffer);\n const r2 = new Range3d(...f64);\n assert.deepEqual(r2, testRange);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n\n assert.deepEqual(row.s_bl, blobVal);\n assert.equal(row.s_bo, boolVal);\n assert.equal(row.s_d, doubleVal);\n assert.equal(row.s_dt, dtVal);\n assert.equal(row.s_i, intVal);\n assert.equal(row.s_p2d.x, p2dVal.x);\n assert.equal(row.s_p2d.y, p2dVal.y);\n assert.equal(row.s_p3d.x, p3dVal.x);\n assert.equal(row.s_p3d.y, p3dVal.y);\n assert.equal(row.s_p3d.z, p3dVal.z);\n assert.equal(row.s_s, strVal);\n\n assert.equal(await query(ecdb, \"SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\n assert.deepEqual(row1.bl, blobVal);\n const f64a = new Float64Array(row1.bl.buffer);\n const r2a = new Range3d(...f64a);\n assert.deepEqual(r2a, testRange);\n assert.equal(row1.bo, boolVal);\n assert.equal(row1.d, doubleVal);\n assert.equal(row1.dt, dtVal);\n assert.equal(row1.i, intVal);\n assert.equal(row1.p2d.x, p2dVal.x);\n assert.equal(row1.p2d.y, p2dVal.y);\n assert.equal(row1.p3d.x, p3dVal.x);\n assert.equal(row1.p3d.y, p3dVal.y);\n assert.equal(row1.p3d.z, p3dVal.z);\n assert.equal(row1.s, strVal);\n\n assert.deepEqual(row1.s_bl, blobVal);\n assert.equal(row1.s_bo, boolVal);\n assert.equal(row1.s_d, doubleVal);\n assert.equal(row1.s_dt, dtVal);\n assert.equal(row1.s_i, intVal);\n assert.equal(row1.s_p2d.x, p2dVal.x);\n assert.equal(row1.s_p2d.y, p2dVal.y);\n assert.equal(row1.s_p3d.x, p3dVal.x);\n assert.equal(row1.s_p3d.y, p3dVal.y);\n assert.equal(row1.s_p3d.z, p3dVal.z);\n assert.equal(row1.s_s, strVal);\n }), 1);\n });\n };\n\n const ids = new Array<Id64String>();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)\", (stmt: ECSqlStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n stmt.bindBlob(9, blobVal);\n stmt.bindBoolean(10, boolVal);\n stmt.bindDouble(11, doubleVal);\n stmt.bindDateTime(12, dtVal);\n stmt.bindInteger(13, intVal);\n stmt.bindPoint2d(14, p2dVal);\n stmt.bindPoint3d(15, p3dVal);\n stmt.bindString(16, strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues([blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal, blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal]);\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(:bl,:bo,:d,:dt,:i,:p2d,:p3d,:s,:s_bl,:s_bo,:s_d,:s_dt,:s_i,:s_p2d,:s_p3d,:s_s)\", (stmt: ECSqlStatement) => {\n stmt.bindBlob(\"bl\", blobVal);\n stmt.bindBoolean(\"bo\", boolVal);\n stmt.bindDouble(\"d\", doubleVal);\n stmt.bindDateTime(\"dt\", dtVal);\n stmt.bindInteger(\"i\", intVal);\n stmt.bindPoint2d(\"p2d\", p2dVal);\n stmt.bindPoint3d(\"p3d\", p3dVal);\n stmt.bindString(\"s\", strVal);\n\n stmt.bindBlob(\"s_bl\", blobVal);\n stmt.bindBoolean(\"s_bo\", boolVal);\n stmt.bindDouble(\"s_d\", doubleVal);\n stmt.bindDateTime(\"s_dt\", dtVal);\n stmt.bindInteger(\"s_i\", intVal);\n stmt.bindPoint2d(\"s_p2d\", p2dVal);\n stmt.bindPoint3d(\"s_p3d\", p3dVal);\n stmt.bindString(\"s_s\", strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues({\n bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal,\n i: intVal, p2d: p2dVal, p3d: p3dVal, s: strVal,\n s_bl: blobVal, s_bo: boolVal, s_d: doubleVal, s_dt: dtVal,\n s_i: intVal, s_p2d: p2dVal, s_p3d: p3dVal, s_s: strVal,\n });\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n for (const id of ids) {\n await verify(id);\n }\n });\n\n it(\"should bind structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const structVal = {\n bl: blobVal, bo: true, d: 3.5,\n dt: \"2018-01-23T12:24:00.000\",\n i: 3, p2d: new Point2d(1, 2), p3d: new Point3d(1, 2, 3), s: \"Hello World\",\n };\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isTrue(blobEqual(row.struct.bl, structVal.bl));\n assert.equal(row.struct.bo, structVal.bo);\n assert.equal(row.struct.d, structVal.d);\n assert.equal(row.struct.dt, structVal.dt);\n assert.equal(row.struct.i, structVal.i);\n assert.equal(row.struct.p2d.x, structVal.p2d.x);\n assert.equal(row.struct.p2d.y, structVal.p2d.y);\n assert.equal(row.struct.p3d.x, structVal.p3d.x);\n assert.equal(row.struct.p3d.y, structVal.p3d.y);\n assert.equal(row.struct.p3d.z, structVal.p3d.z);\n assert.equal(row.struct.s, structVal.s);\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\n assert.isTrue(blobEqual(row1.struct.bl, structVal.bl));\n assert.equal(row1.struct.bo, structVal.bo);\n assert.equal(row1.struct.d, structVal.d);\n assert.equal(row1.struct.dt, structVal.dt);\n assert.equal(row1.struct.i, structVal.i);\n assert.equal(row1.struct.p2d.x, structVal.p2d.x);\n assert.equal(row1.struct.p2d.y, structVal.p2d.y);\n assert.equal(row1.struct.p3d.x, structVal.p3d.x);\n assert.equal(row1.struct.p3d.y, structVal.p3d.y);\n assert.equal(row1.struct.p3d.z, structVal.p3d.z);\n assert.equal(row1.struct.s, structVal.s);\n }), 1);\n });\n };\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([structVal]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"str\", structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ str: structVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n });\n\n it(\"should bind arrays\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindarrays.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const intArray = [1, 2, 3];\n const dtArray = [\"2018-01-23T00:00:00.000\", \"2018-01-23T16:39:00.000\"];\n const addressArray = [{ city: \"London\", zip: 10000 }, { city: \"Manchester\", zip: 20000 }, { city: \"Edinburgh\", zip: 30000 }];\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n });\n\n assert.equal(await query(ecdb, \"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row: any) => {\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n }), 1);\n };\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(1, intArray);\n stmt.bindArray(2, dtArray);\n stmt.bindArray(3, addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([intArray, dtArray, addressArray]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(\"iarray\", intArray);\n stmt.bindArray(\"dtarray\", dtArray);\n stmt.bindArray(\"addresses\", addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ iarray: intArray, dtarray: dtArray, addresses: addressArray });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n });\n\n it(\"should bind navigation\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(:name,:parent)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(\"name\", \"Child 3\");\n stmt.bindNavigation(\"parent\", { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues({ name: \"Child 4\", parent: { id: parentId, relClassName: \"Test.ParentHasChildren\" } });\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n let rowCount: number = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 4);\n });\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n assert.equal(row.name, `Child ${rowCount2}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }), 4);\n });\n\n it(\"should bind Range3d for parameter in spatial sql function\", async () => {\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ECSqlStatement\", \"BindRange3d.bim\"), { rootSubject: { name: \"BindRange3d\" } });\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindRange3d(1, new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0));\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindValues([new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0)]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n } finally {\n iModel.saveChanges();\n iModel.close();\n }\n });\n\n it(\"should bind Range3d\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindrange3d.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Range3d\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo([Range3d]) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindRange3d(1, testRange);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT [Range3d] FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const rangeBlob: Uint8Array = stmt.getValue(0).getBlob();\n const rangeFloatArray = new Float64Array(rangeBlob.buffer);\n assert.equal(rangeFloatArray.length, 6);\n const actualRange = new Range3d(...rangeFloatArray);\n assert.isTrue(actualRange.isAlmostEqual(testRange));\n });\n });\n\n it(\"should bind IdSets\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"should bind IdSets to IdSet Virtual Table\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"Error Checking For binding to IdSet statements\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, ECVLib.IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [\"0X1\", \"ABC\"];\n try {\n stmt.bindIdSet(1, idSet);\n } catch (err: any) {\n assert.equal(err.message, \"Error binding id set\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n try {\n stmt.bindId(1, idNumbers[0].toString());\n } catch (err: any) {\n assert.equal(err.message, \"Error binding Id\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n });\n });\n\n /* This test doesn't do anything specific with the binder life time but just runs a few scenarios\n with and without statement cache to test that stuff works fine */\n it(\"check ECSqlBinder life time\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecsqlbinderlifetime.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Address\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Street\" typeName=\"string\"/>\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECStructProperty propertyName=\"Location\" typeName=\"Address\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let id1: Id64String = \"\", id2: Id64String = \"\";\n\n // *** test without statement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id1 = res.id!;\n assert.isTrue(Id64.isValidId64(id1));\n });\n\n\n // *** test withstatement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id2 = res.id!;\n assert.isTrue(Id64.isValidId64(id2));\n });\n\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using stmt = ecdb.prepareStatement(\"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\");\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n if (rowCount === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }\n assert.equal(rowCount, 2);\n }\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n if (rowCount2 === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }), 2);\n });\n\n it(\"getRow() with primitives values\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S) VALUES(?,?,?,?,?,?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n // assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.id, id);\n // assert.equal(row.className, \"Test.Foo\");\n // assert.deepEqual(row.bl, blobVal);\n // assert.equal(row.bo, boolVal);\n // assert.equal(row.d, doubleVal);\n // assert.equal(row.dt, dtVal);\n // assert.equal(row.i, intVal);\n // assert.equal(row.p2d.x, p2dVal.x);\n // assert.equal(row.p2d.y, p2dVal.y);\n // assert.equal(row.p3d.x, p3dVal.x);\n // assert.equal(row.p3d.y, p3dVal.y);\n // assert.equal(row.p3d.z, p3dVal.z);\n // assert.equal(row.s, strVal);\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.blobby, blobVal);\n assert.equal(row[\"[I] + 10\"], intVal + 10);\n assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n assert.equal(row.capitalS, strVal.toUpperCase());\n });\n\n // assert.equal(await query(ecdb, \"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.deepEqual(row.blobby, blobVal);\n // assert.equal(row[\"[I] + 10\"], intVal + 10);\n // assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n // assert.equal(row.capitalS, strVal.toUpperCase());\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const testSchemaId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECSchemaDef WHERE Name='Test'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const fooClassId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n });\n\n assert.equal(await query(ecdb, \"SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'\", QueryBinder.from([]), selectSingleRow, (row: any) => {\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT count(*) cnt FROM meta.ECSchemaDef\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n });\n\n assert.equal(await query(ecdb, \"SELECT count(*) cnt FROM meta.ECSchemaDef\", QueryBinder.from([]), selectSingleRow, (row: any) => {\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n });\n\n assert.equal(await query(ecdb, \"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(Object.entries(row).length, 0);\n });\n\n assert.equal(await query(ecdb, \"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(Object.entries(row).length, 0);\n }), 1);\n });\n\n it(\"getRow() with abbreviated blobs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getblobs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const singleBlobVal = blobVal.slice(0, 1);\n const abbreviatedSingleBlobVal = `{\"bytes\":${singleBlobVal.byteLength}}`;\n const emptyBlobVal = new Uint8Array();\n\n const fullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const singleId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, singleBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const emptyId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, emptyBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const nullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNull(1);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedSingleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, \"{\\\"bytes\\\":0}\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n });\n\n it(\"getRow() with navigation properties and relationships\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getnavandrels.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n let rowCount: number;\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }), 2);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }), 2);\n\n const childId: Id64String = childIds[0];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n }), 1);\n\n });\n\n it(\"getRow() with structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal: XAndY = { x: 1, y: 2 };\n const p3dVal: XYAndZ = { x: 1, y: 2, z: 3 };\n const stringVal: string = \"Hello World\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const expectedStruct = { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal };\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n });\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const actualStruct: any = stmt.getValue(0).getStruct();\n assert.deepEqual(actualStruct.bl, expectedStruct.bl);\n assert.equal(actualStruct.bo, expectedStruct.bo);\n assert.equal(actualStruct.d, expectedStruct.d);\n assert.equal(actualStruct.dt, expectedStruct.dt);\n assert.equal(actualStruct.i, expectedStruct.i);\n assert.equal(actualStruct.p2d.x, expectedStruct.p2d.x);\n assert.equal(actualStruct.p2d.y, expectedStruct.p2d.y);\n assert.equal(actualStruct.p3d.x, expectedStruct.p3d.x);\n assert.equal(actualStruct.p3d.y, expectedStruct.p3d.y);\n assert.equal(actualStruct.p3d.z, expectedStruct.p3d.z);\n assert.equal(actualStruct.s, expectedStruct.s);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n });\n\n assert.equal(await query(ecdb, \"SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n }), 1);\n });\n\n it(\"check HexStr() sql function\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"hexstrfunction.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const expectedRow = {\n bl: blobVal, bo: true, d: 3.5, dt: \"2018-01-23T12:24:00.000\",\n i: 3, l: 12312312312312, p2d: { x: 1, y: 2 }, p3d: { x: 1, y: 2, z: 3 }, s: \"Hello World\",\n };\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,L,P2d,P3d,S) VALUES(:bl,:bo,:d,:dt,:i,:l,:p2d,:p3d,:s)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({\n bl: blobVal, bo: expectedRow.bo, d: expectedRow.d,\n dt: expectedRow.dt, i: expectedRow.i, l: expectedRow.l, p2d: expectedRow.p2d, p3d: expectedRow.p3d, s: expectedRow.s,\n });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT I, HexStr(I) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.i, expectedRow.i);\n assert.equal(row.hex, \"0x3\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT L, HexStr(L) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.l, expectedRow.l);\n assert.equal(row.hex, \"0xb32af0071f8\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl, HexStr(Bl) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bo, HexStr(Bo) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.bo, expectedRow.bo);\n assert.equal(row.hex, \"0x1\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D, HexStr(D) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Dt, HexStr(Dt) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P2d, HexStr(P2d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P3d, HexStr(P3d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT S, HexStr(S) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"check ec enums\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Status\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"On\" value=\"1\" />\n <ECEnumerator name=\"Off\" value=\"2\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"Org\" />\n <ECEnumerator name=\"Com\" value=\"Com\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyStat\" typeName=\"Status\"/>\n <ECArrayProperty propertyName=\"MyStats\" typeName=\"Status\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n <ECArrayProperty propertyName=\"MyDomains\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyStat,MyStats,MyDomain,MyDomains) VALUES(test.Status.[On],?,test.Domain.Org,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, [1, 2]);\n stmt.bindValue(2, [\"Org\", \"Com\"]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(myStatVal.isNull);\n assert.isTrue(myStatVal.columnInfo.isEnum());\n assert.equal(myStatVal.getInteger(), 1);\n assert.deepEqual(myStatVal.getEnum(), [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatsVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(myStatsVal.isNull);\n assert.isTrue(myStatsVal.columnInfo.isEnum());\n assert.deepEqual(myStatsVal.getArray(), [1, 2]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualStatsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myStatsVal.getArrayIterator()) {\n actualStatsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualStatsEnums.length, 2);\n assert.deepEqual(actualStatsEnums[0], [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n assert.deepEqual(actualStatsEnums[1], [{ schema: \"Test\", name: \"Status\", key: \"Off\", value: 2 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainVal: ECSqlValue = stmt.getValue(2);\n assert.isFalse(myDomainVal.isNull);\n assert.isTrue(myDomainVal.columnInfo.isEnum());\n assert.equal(myDomainVal.getString(), \"Org\");\n assert.deepEqual(myDomainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainsVal: ECSqlValue = stmt.getValue(3);\n assert.isFalse(myDomainsVal.isNull);\n assert.isTrue(myDomainsVal.columnInfo.isEnum());\n assert.deepEqual(myDomainsVal.getArray(), [\"Org\", \"Com\"]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualDomainsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myDomainsVal.getArrayIterator()) {\n actualDomainsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualDomainsEnums.length, 2);\n assert.deepEqual(actualDomainsEnums[0], [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n assert.deepEqual(actualDomainsEnums[1], [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"Com\" }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.deepEqual(row, { type: 0, modifier: 2 });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const typeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(typeVal.isNull);\n assert.isTrue(typeVal.columnInfo.isEnum());\n assert.equal(typeVal.getInteger(), 0);\n assert.deepEqual(typeVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassType\", key: \"Entity\", value: 0 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const modifierVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(modifierVal.isNull);\n assert.isTrue(modifierVal.columnInfo.isEnum());\n assert.equal(modifierVal.getInteger(), 2);\n assert.deepEqual(modifierVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassModifier\", key: \"Sealed\", value: 2 }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row, { type: 0, modifier: 2 });\n }), 1);\n });\n\n it(\"check ORed ECEnums\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/The value 9 cannot be broken down into a combination of ECEnumerators/gm);\n slm.append().error().category(\"ECDb\").message(/The value 'gov,de' cannot be broken down into a combination of ECEnumerators/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"oredecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Color\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Red\" value=\"1\" />\n <ECEnumerator name=\"Yellow\" value=\"2\" />\n <ECEnumerator name=\"Blue\" value=\"4\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"org\" />\n <ECEnumerator name=\"Com\" value=\"com\" />\n <ECEnumerator name=\"Gov\" value=\"gov\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyColor\" typeName=\"Color\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const ids: { unored: Id64String, ored: Id64String, unmatched: Id64String } = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyColor,MyDomain) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, 4);\n stmt.bindValue(2, \"com\");\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 5);\n stmt.bindValue(2, \"gov,com\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const ored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 9);\n stmt.bindValue(2, \"gov,de\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unmatched: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n return { unored, ored, unmatched };\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, ids.unored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n let row: any = stmt.getRow();\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let colVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 4);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let domainVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }]);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.ored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 5);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Red\", value: 1 }, { schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }, { schema: \"Test\", name: \"Domain\", key: \"Gov\", value: \"gov\" }]);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.unmatched);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 9);\n assert.isUndefined(colVal.getEnum());\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,de\");\n assert.isUndefined(domainVal.getEnum());\n });\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unored]), undefined, (row: any) => {\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.ored]), undefined, (row: any) => {\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.caType, 160);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const caTypeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(caTypeVal.isNull);\n assert.isTrue(caTypeVal.columnInfo.isEnum());\n assert.equal(caTypeVal.getInteger(), 160);\n assert.deepEqual(caTypeVal.getEnum(), [\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveProperty\", value: 32 },\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveArrayProperty\", value: 128 }]);\n });\n assert.equal(await query(ecdb, \"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\n assert.equal(row.caType, 160);\n }), 1);\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should get native sql\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n const nativesql: string = stmt.getNativeSql();\n assert.isTrue(nativesql.startsWith(\"INSERT INTO [ts_Foo]\"));\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"check column info\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"MyClass\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyProperty\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.MyClass(MyProperty) VALUES('Value')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyProperty as MyAlias, 1 as MyGenerated FROM test.MyClass WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myAlias, \"Value\");\n assert.equal(row.myGenerated, 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"MyAlias\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"MyAlias\");\n const originPropertyName = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName);\n assert.equal(originPropertyName, \"MyProperty\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"MyGenerated\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"MyGenerated\");\n assert.isUndefined(colInfo1.getOriginPropertyName());\n });\n });\n\n it(\"check access string metadata in nested struct\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"ECDbMap\" version=\"02.00.00\" alias=\"ecdbmap\"/>\n <ECStructClass typeName=\"InnerStruct\">\n <ECProperty propertyName=\"a\" typeName=\"string\"/>\n <ECProperty propertyName=\"b\" typeName=\"string\"/>\n </ECStructClass>\n <ECStructClass typeName=\"OuterStruct\">\n <ECStructProperty propertyName=\"c\" typeName=\"InnerStruct\"/>\n <ECProperty propertyName=\"d\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Z\">\n <ECCustomAttributes>\n <ClassMap xmlns=\"ECDbMap.02.00.00\">\n <MapStrategy>TablePerHierarchy</MapStrategy>\n </ClassMap>\n <ShareColumns xmlns=\"ECDbMap.02.00.00\">\n <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>\n </ShareColumns>\n </ECCustomAttributes>\n </ECEntityClass>\n <ECEntityClass typeName=\"A\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"f\" typeName=\"OuterStruct\"/>\n <ECProperty propertyName=\"g\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"B\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"h\" typeName=\"InnerStruct\" />\n <ECProperty propertyName=\"i\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.A (f.c.a, f.c.b, f.d, g) VALUES ('f.c.a' ,'f.c.b', 'f.d', 'g')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT f, f.c.a, f.c.b, f.d, g FROM Test.A\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.f.c.a, \"f.c.a\");\n assert.equal(row.f.c.b, \"f.c.b\");\n assert.equal(row.f.d, \"f.d\");\n assert.equal(row.g, \"g\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"f\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"f\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"f\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"a\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"f.c.a\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"a\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val2: ECSqlValue = stmt.getValue(2);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo2: ECSqlColumnInfo = val2.columnInfo;\n\n assert.equal(colInfo2.getPropertyName(), \"b\");\n const accessString2 = colInfo2.getAccessString();\n assert.equal(accessString2, \"f.c.b\");\n const originPropertyName2 = colInfo2.getOriginPropertyName();\n assert.isDefined(originPropertyName2);\n assert.equal(originPropertyName2, \"b\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val3: ECSqlValue = stmt.getValue(3);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo3: ECSqlColumnInfo = val3.columnInfo;\n\n assert.equal(colInfo3.getPropertyName(), \"d\");\n const accessString3 = colInfo3.getAccessString();\n assert.equal(accessString3, \"f.d\");\n const originPropertyName3 = colInfo3.getOriginPropertyName();\n assert.isDefined(originPropertyName3);\n assert.equal(originPropertyName3, \"d\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val4: ECSqlValue = stmt.getValue(4);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo4: ECSqlColumnInfo = val4.columnInfo;\n\n assert.equal(colInfo4.getPropertyName(), \"g\");\n const accessString4 = colInfo4.getAccessString();\n assert.equal(accessString4, \"g\");\n const originPropertyName4 = colInfo4.getOriginPropertyName();\n assert.isDefined(originPropertyName4);\n assert.equal(originPropertyName4, \"g\");\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.B (h.a, h.b, i) VALUES ('h.a' ,'h.b', 'i')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT h, i FROM Test.B\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.h.a, \"h.a\");\n assert.equal(row.h.b, \"h.b\");\n assert.equal(row.i, \"i\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"h\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"h\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"h\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"i\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"i\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"i\");\n });\n });\n\n it(\"ecsql statements with QueryBinder\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"booleanProperty\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"blobProperty\" typeName=\"binary\"/>\n <ECProperty propertyName=\"doubleProperty\" typeName=\"double\"/>\n <ECProperty propertyName=\"customIdProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"customIdSetProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"intProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"longProperty\" typeName=\"long\"/>\n <ECProperty propertyName=\"stringProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"nullProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"point2dProperty\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"point3dProperty\" typeName=\"point3d\"/>\n </ECEntityClass>\n <ECStructClass typeName=\"Bar\" modifier=\"Sealed\">\n <ECProperty propertyName=\"structClassProperty\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Baz\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"structProperty\" typeName=\"Bar\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const booleanValue = true;\n const blobValue = new Uint8Array([0, 0, 0]);\n const doubleValue = 12.12;\n const customIdValue = \"1234\";\n const customIdSetValue = [\"0x9\"];\n const intValue = 10;\n const longValue = 1e9;\n const stringValue = \"test string value\";\n const point2dValue = new Point2d(10, 20);\n const point3dValue = new Point3d(15, 30, 45);\n const structValue = { structClassProperty: \"test string value for struct property\" };\n\n let r = await ecdb.withCachedWriteStatement(\n `INSERT INTO ts.Foo(booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty)\n VALUES(:booleanValue, :blobValue, :doubleValue, :customIdValue, :customIdSetValue, :intValue, :longValue, :stringValue, :nullValue, :point2dValue, :point3dValue)`,\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindBoolean(\"booleanValue\", booleanValue);\n stmt.bindBlob(\"blobValue\", blobValue);\n stmt.bindDouble(\"doubleValue\", doubleValue);\n stmt.bindId(\"customIdValue\", customIdValue);\n stmt.bindId(\"customIdSetValue\", customIdSetValue[0]);\n stmt.bindInteger(\"intValue\", intValue);\n stmt.bindInteger(\"longValue\", longValue);\n stmt.bindString(\"stringValue\", stringValue);\n stmt.bindNull(\"nullValue\");\n stmt.bindPoint2d(\"point2dValue\", point2dValue);\n stmt.bindPoint3d(\"point3dValue\", point3dValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n\n const params = new QueryBinder();\n params.bindBoolean(\"booleanValue\", booleanValue);\n params.bindBlob(\"blobValue\", blobValue);\n params.bindDouble(\"doubleValue\", doubleValue);\n params.bindId(\"customIdValue\", customIdValue);\n params.bindInt(\"intValue\", intValue);\n params.bindLong(\"longValue\", longValue);\n params.bindString(\"stringValue\", stringValue);\n params.bindPoint2d(\"point2dValue\", point2dValue);\n params.bindPoint3d(\"point3dValue\", point3dValue);\n params.bindIdSet(\"customIdSetValue\", customIdSetValue);\n\n let reader = ecdb.createQueryReader(\n `SELECT booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty FROM ts.Foo\n WHERE booleanProperty = :booleanValue AND blobProperty = :blobValue AND doubleProperty = :doubleValue AND customIdProperty = :customIdValue AND InVirtualSet(:customIdSetValue, customIdSetProperty) AND\n intProperty = :intValue AND longProperty = :longValue AND stringProperty = :stringValue AND point2dProperty = :point2dValue AND point3dProperty = :point3dValue`,\n params,\n );\n const row = (await reader.toArray())[0];\n\n assert.isNotNull(row);\n assert.equal(row[0], booleanValue);\n assert.deepEqual(row[1], blobValue);\n assert.equal(row[2], doubleValue);\n assert.equal(row[3], customIdValue);\n assert.equal(row[4], \"9\");\n assert.equal(row[5], intValue);\n assert.equal(row[6], longValue);\n assert.equal(row[7], stringValue);\n assert.equal(row[8], null);\n assert.deepEqual(row[9], { X: 10, Y: 20 });\n assert.deepEqual(row[10], { X: 15, Y: 30, Z: 45 });\n\n assert.isFalse(await reader.step());\n\n r = await ecdb.withCachedWriteStatement(\n \"INSERT INTO ts.Baz(structProperty) VALUES(:structValue)\",\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"structValue\", structValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x2\");\n\n reader = ecdb.createQueryReader(\n `SELECT * FROM ts.Baz`,\n );\n\n await reader.step();\n\n assert.deepEqual(reader.current.structProperty, structValue);\n\n const paramsWithStruct = new QueryBinder();\n paramsWithStruct.bindStruct(\"structValue\", structValue);\n reader = ecdb.createQueryReader(\"SELECT * FROM ts.Baz WHERE structProperty = :structValue\", paramsWithStruct);\n\n await assert.isRejected(reader.toArray(), \"Struct type binding not supported\");\n });\n\n describe(\"invalid RelECClassId with pragma validate_ecsql_writes\", () => {\n let ecdb: ECDb;\n let parentHasChildrenClassId: Id64String;\n let childHasFriendsClassId: Id64String;\n let validRelClassId: Id64String;\n\n before(async () => {\n ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildTemplate\" modifier=\"Abstract\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <BaseClass>ChildTemplate</BaseClass>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECNavigationProperty propertyName=\"Friends\" relationshipName=\"ChildHasFriends\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"ChildTemplate\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECRelationshipClass typeName=\"ChildHasFriends\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Parent'\");\n assert.isTrue(await reader.step());\n parentHasChildrenClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(parentHasChildrenClassId));\n\n // When the ECSql insert validation is set to true, the invalid relClassId is detected and an error is thrown.\n assert.isTrue(await (ecdb.createQueryReader(\"PRAGMA validate_ecsql_writes=true\")).step());\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ParentHasChildren'\");\n assert.isTrue(await reader.step());\n validRelClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(validRelClassId));\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ChildHasFriends'\");\n assert.isTrue(await reader.step());\n childHasFriendsClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(childHasFriendsClassId));\n\n ecdb.saveChanges();\n });\n\n after(() => {\n ecdb.closeDb();\n });\n\n function testECSqlWithoutBinders(testCaseNumber: number, sqlStmt: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let id: Id64String | undefined;\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n assert.isDefined(stmt);\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n return id;\n };\n\n function testECSqlWithBinders(testCaseNumber: number, sqlStmt: string, firstBinderValue: string, secondBinderValue: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n if (firstBinderValue !== \"\")\n stmt.bindNavigation(1, { id: \"1\", relClassName: firstBinderValue });\n if (secondBinderValue !== \"\")\n stmt.bindNavigation(2, { id: \"2\", relClassName: secondBinderValue });\n\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n stmt?.clearBindings();\n };\n\n it(\"insert statement with invalid relClassId in navigation properties\", async () => {\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, 9999)`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`);\n testECSqlWithoutBinders(2, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, NULL)`, false, `The ECSql statement contains an invalid relationship class id.`);\n testECSqlWithoutBinders(3, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${parentHasChildrenClassId})`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`);\n testECSqlWithoutBinders(4, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${validRelClassId})`, true, \"\");\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\");\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ParentHasChildren\", \"\", true, \"\");\n testECSqlWithBinders(7, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ChildHasFriends\", \"\", true, \"\");\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\");\n testECSqlWithBinders(9, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"INSERT INTO test.Child(Parent, Friends) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\");\n testECSqlWithBinders(11, \"INSERT INTO test.Child(Friends, Parent) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n });\n\n it(\"update statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n stmt[Symbol.dispose]();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `UPDATE test.Child SET Parent.RelECClassId = 9999`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(2, `UPDATE test.Child SET Parent.RelECClassId = NULL`, false, `The ECSql statement contains an invalid relationship class id.`, false);\n testECSqlWithoutBinders(3, `UPDATE test.Child SET Parent.RelECClassId = ${parentHasChildrenClassId}`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(4, `UPDATE test.Child SET Parent.RelECClassId = ${validRelClassId}`, true, \"\", false);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"UPDATE test.Child SET Parent = ?\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"UPDATE test.Child SET Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n testECSqlWithBinders(7, \"UPDATE test.Child SET Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"UPDATE test.Child SET Parent = ?\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\", false);\n testECSqlWithBinders(9, \"UPDATE test.Child SET Friends = ?\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"UPDATE test.Child SET Parent = ?, Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n testECSqlWithBinders(11, \"UPDATE test.Child SET Friends = ?, Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n });\n\n it(\"select statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n stmt[Symbol.dispose]();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `SELECT * from test.Child where Parent.RelECClassId = 9999`, true, \"\", false);\n testECSqlWithoutBinders(2, `SELECT * from test.Child where Parent.RelECClassId = NULL`, true, \"\", false);\n testECSqlWithoutBinders(3, `SELECT * from test.Child where Parent.RelECClassId = ${parentHasChildrenClassId}`, true, \"\", false);\n testECSqlWithoutBinders(4, `SELECT * from test.Child where Parent.RelECClassId = ${validRelClassId}`, true, \"\", false, DbResult.BE_SQLITE_ROW);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"SELECT * from test.Child where Parent = ?\", \"Test.InvalidClass\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"SELECT * from test.Child where Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(7, \"SELECT * from test.Child where Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"SELECT * from test.Child where Parent = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n testECSqlWithBinders(9, \"SELECT * from test.Child where Friends = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"SELECT * from test.Child where Parent = ? and Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(11, \"SELECT * from test.Child where Friends = ? and Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ECSqlStatement.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSqlStatement.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { DbResult, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { NavigationValue, QueryBinder, QueryOptions, QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d, Range3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\nimport { _nativeDb, ECDb, ECEnumValue, ECSqlColumnInfo, ECSqlInsertResult, ECSqlStatement, ECSqlValue, ECSqlWriteStatement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\nconst selectSingleRow = new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();\nasync function query(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions, callback?: (row: any) => void) {\n ecdb.saveChanges();\n let rowCount: number = 0;\n for await (const queryRow of ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n rowCount++;\n if (callback)\n callback(queryRow.toRow());\n }\n return rowCount;\n}\nasync function queryRows(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions) {\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(ecsql, params, { ...config, rowFormat: QueryRowFormat.UseJsPropertyNames });\n return reader.toArray();\n}\nasync function queryCount(ecdb: ECDb, ecsql: string, params?: QueryBinder, config?: QueryOptions): Promise<number> {\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(`SELECT COUNT(*) FROM (${ecsql})`, params, { ...config, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes })) {\n return row[0] as number;\n }\n return -1;\n}\nfunction blobEqual(lhs: any, rhs: any) {\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\n throw new Error(\"expecting uint8array\");\n\n if (lhs.byteLength !== rhs.byteLength)\n return false;\n\n for (let i = 0; i < lhs.byteLength; i++) {\n if (lhs[i] !== rhs[i])\n return false;\n }\n return true;\n}\n\ndescribe(\"ECSqlStatement\", () => {\n const outDir = KnownTestLocations.outputDir;\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n const blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\n const abbreviatedBlobVal = `{\"bytes\":${blobVal.byteLength}}`;\n\n it(\"check asynchronous step and stepForInsert methods\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"concurrent query get meta data\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(30,TIMESTAMP '2019-10-18T12:00:00Z',30)\", async (stmt: ECSqlWriteStatement) => {\n stmt.stepForInsert();\n });\n ecdb.saveChanges();\n const reader = ecdb.createQueryReader(\"SELECT * FROM ts.Foo\");\n let props = await reader.getMetaData();\n assert.equal(props.length, 5);\n let rows = 0;\n while (await reader.step()) {\n rows++;\n }\n assert.equal(rows, 2);\n props = await reader.getMetaData();\n assert.equal(props.length, 5);\n });\n it(\"null string accessor\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"nullstring.ecdb\");\n assert.isTrue(ecdb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(`VALUES(NULL)`, async (stmt: ECSqlStatement) => {\n stmt.step();\n const str = stmt.getValue(0).getString();\n assert.equal(str, \"\");\n });\n });\n it(\"should page results\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for (let i = 1; i < ROW_COUNT; i++) {\n const rowCount = await queryCount(ecdb, \"SELECT ECInstanceId, ECClassId, n FROM ts.Foo WHERE n <= ?\", new QueryBinder().bindInt(1, i));\n assert.equal(rowCount, i);\n }\n\n const temp = await queryRows(ecdb, \"SELECT ECInstanceId FROM ONLY ts.Foo\");\n assert.equal(temp.length, ROW_COUNT);\n // query page by page\n const PAGE_SIZE = 5;\n const QUERY = \"SELECT n FROM ts.Foo\";\n const EXPECTED_ROW_COUNT = [5, 5, 5, 5, 5, 2];\n const ready = [];\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n ready.push(queryRows(ecdb, QUERY, undefined, new QueryOptionsBuilder().setLimit({ offset: i * PAGE_SIZE, count: PAGE_SIZE }).getOptions()));\n }\n // verify if each page has right count of rows\n const results = await Promise.all(ready);\n for (let i = 0; i < EXPECTED_ROW_COUNT.length; i++) {\n assert.equal(results[i].length, EXPECTED_ROW_COUNT[i]);\n }\n });\n\n it(\"paging use cache statement queryRows()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n const rca = await queryRows(ecdb, \"SELECT count(*) as nRows FROM ts.Foo\");\n assert.equal(rca[0].nRows, 100); // expe\n const rc = await queryCount(ecdb, \"SELECT * FROM ts.Foo\");\n assert.equal(rc, 100); // expe\n let rowNo = 0;\n for await (const row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.n, rowNo + 1);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 100); // expect all rows\n });\n\n it(\"should restart query\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"cancelquery.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 100;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n ConcurrentQuery.resetConfig(ecdb[_nativeDb], { globalQuota: { time: 1 }, ignoreDelay: false });\n\n let cancelled = 0;\n let successful = 0;\n let rowCount = 0;\n const scheduleQuery = async (delay: number) => {\n return new Promise<void>(async (resolve, reject) => {\n try {\n const options = new QueryOptionsBuilder();\n options.setDelay(delay);\n options.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n options.setRestartToken(\"tag\");\n for await (const _row of ecdb.createQueryReader(\"SELECT * FROM ts.Foo\", undefined, options.getOptions())) {\n rowCount++;\n }\n successful++;\n resolve();\n } catch (err: any) {\n // we expect query to be cancelled\n if (err.errorNumber === DbResult.BE_SQLITE_INTERRUPT) {\n cancelled++;\n resolve();\n } else {\n reject(new Error(\"rejected\"));\n }\n }\n });\n };\n\n const queries = [];\n queries.push(scheduleQuery(5000));\n queries.push(scheduleQuery(0));\n\n await Promise.all(queries);\n // We expect at least one query to be cancelled\n assert.isAtLeast(cancelled, 1);\n assert.isAtLeast(successful, 1);\n assert.isAtLeast(rowCount, 1);\n });\n it(\"should use cache statement for query()\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const ROW_COUNT = 27;\n // insert test rows\n for (let i = 1; i <= ROW_COUNT; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n // check if varying page number does not require prepare new statements\n ecdb.clearStatementCache();\n for (const _testPageSize of [1, 2, 4, 5, 6, 7, 10, ROW_COUNT]) {\n let rowNo = 1;\n for await (const row of ecdb.createQueryReader(\"SELECT n FROM ts.Foo WHERE n != ? and ECInstanceId < ?\", new QueryBinder().bindInt(1, 123).bindInt(2, 30), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.n, rowNo);\n rowNo = rowNo + 1;\n }\n assert.equal(rowNo, 28); // expect all rows\n assert.equal(0, ecdb.getCachedStatementCount()); // there must be single cached statement used with different size pages.\n }\n });\n it(\"concurrent query binding\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 5; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)\", new QueryBinder().bindInt(\"a\", 1).bindInt(\"b\", 2).bindInt(\"c\", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (?, ?, ?)\", new QueryBinder().bindInt(1, 1).bindInt(2, 2).bindInt(3, 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"No parameter index found for parameter name: d.\");\n try {\n for await (const row of ecdb.createQueryReader(\"SELECT count(*) as cnt FROM ts.Foo WHERE n in (:a, :b, :c)\", new QueryBinder().bindInt(\"a\", 1).bindInt(\"b\", 2).bindInt(\"c\", 3).bindInt(\"d\", 3), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.cnt, 3);\n }\n assert.isFalse(true);\n } catch (e) { assert.isNotNull(e); }\n assert.isTrue(slm.finishAndDispose());\n });\n it(\"check HextoId() and IdToHex() ecsql functions\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n for (let i = 1; i <= 2; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(n) values(${i})`, async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n for await (const row of ecdb.createQueryReader(\"SELECT IdToHex(ECInstanceId) as hexId, ECInstanceId, HexToId('0x1') as idhex FROM ts.Foo WHERE n = ?\", new QueryBinder().bindInt(1, 1), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n assert.equal(row.hexId, row.id);\n assert.equal(row.hexId, row.idhex);\n }\n });\n it(\"should bind BeGuid\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"pagingresultset.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"guid\" typeName=\"binary\" extendedTypeName=\"BeGuid\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n const maxRows = 10;\n const guids: GuidString[] = [];\n for (let i = 0; i < maxRows; i++) {\n const r = await ecdb.withCachedWriteStatement(`insert into ts.Foo(guid) values(?)`, async (stmt: ECSqlWriteStatement) => {\n guids.push(Guid.createValue());\n stmt.bindGuid(1, guids[i]);\n return stmt.stepForInsert();\n });\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n }\n ecdb.saveChanges();\n\n const uint8arrayToGuid = (guidArray: any) => {\n if (!(guidArray instanceof Uint8Array))\n throw new Error(\"Expecting a Uint8Array type argument\");\n\n if (guidArray.byteLength !== 16)\n throw new Error(\"Expecting a Uint8Array of length 16\");\n\n let guidStr: string = \"\";\n const part = [0, 4, 6, 8, 10, 16];\n for (let z = 0; z < part.length - 1; z++) {\n guidArray.subarray(part[z], part[z + 1]).forEach((c) => {\n guidStr += (`00${c.toString(16)}`).slice(-2);\n });\n if (z < part.length - 2)\n guidStr += \"-\";\n }\n return guidStr;\n };\n const guidToUint8Array = (v: GuidString) => {\n if (v.length !== 36)\n throw new Error(\"Guid is expected to have 36 characters xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n\n const ar = new Uint8Array(16);\n const t = v.split(\"-\").join(\"\");\n let i = 0;\n for (let z = 0; z < 32; z += 2) {\n ar[i++] = parseInt(t.substring(z, z + 2), 16);\n }\n return ar;\n };\n\n const testGuid = \"74da899a-6dde-406c-bf45-f4547d948f00\";\n assert.equal(testGuid, uint8arrayToGuid(guidToUint8Array(testGuid)));\n let k = 0;\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo ORDER BY ECInstanceId\", undefined, undefined, (row: any) => {\n assert.equal(row.guid, guids[k++]);\n }), maxRows);\n\n // following will not return any guid BLOB ? = STRING\n for (const guid of guids) {\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid='${guid}'`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 0);\n assert.equal(await query(ecdb, `SELECT guid FROM ts.Foo WHERE guid=StrToGuid('${guid}')`, undefined, undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE GuidToStr(guid)=?\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=?\", new QueryBinder().bindBlob(1, guidToUint8Array(guid)), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT guid FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.guid, guid);\n }), 1);\n assert.equal(await query(ecdb, \"SELECT GuidToStr(guid) as gstr FROM ts.Foo WHERE guid=StrToGuid(?)\", new QueryBinder().bindString(1, guid), undefined, (row: any) => {\n assert.equal(row.gstr, guid);\n }), 1);\n }\n });\n it(\"should bind Ids\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n\n assert.isTrue(ecdb.isOpen);\n\n const verify = async (ecdbToVerify: ECDb, actualRes: ECSqlInsertResult, expectedECInstanceId?: Id64String) => {\n if (!expectedECInstanceId) {\n assert.notEqual(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isUndefined(actualRes.id);\n return;\n }\n\n assert.equal(actualRes.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(actualRes.id);\n assert.equal(actualRes.id!, expectedECInstanceId);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdbToVerify.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n });\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=?\", new QueryBinder().bindString(1, expectedId), new QueryOptionsBuilder().setLimit({ count: 1, offset: -1 }).getOptions(), (row) => {\n assert.equal(row.id, expectedECInstanceId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedECInstanceId).toString()}.txt`);\n }), 1);\n };\n\n let expectedId = Id64.fromLocalAndBriefcaseIds(4444, 0);\n let r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(1, expectedId);\n stmt.bindString(2, \"4444.txt\");\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4445, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindId(\"id\", expectedId);\n stmt.bindString(\"name\", \"4445.txt\");\n\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4446, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([expectedId, \"4446.txt\"]);\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n\n expectedId = Id64.fromLocalAndBriefcaseIds(4447, 0);\n r = ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(:id,:name)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ id: expectedId, name: \"4447.txt\" });\n return stmt.stepForInsert();\n });\n await verify(ecdb, r, expectedId);\n });\n\n it(\"should bind numeric and date strings\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(\"Type mismatch: only BindDateTime or BindText can be called for a column of the DateTime type.\");\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/String must be a valid ISO 8601 date, time or timestamp/gm);\n slm.append().error().category(\"ECDb\").message(/only BindDateTime or BindText can be called for a column of the DateTime type/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumericanddatestrings.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r: ECSqlInsertResult = ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n const ecsqln = \"SELECT 1 FROM ts.Foo WHERE n=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqln, async (stmt: ECSqlStatement) => {\n const nNum: number = 20;\n const nStr: string = \"20\";\n const nDt: string = \"2019-01-21T12:00:00Z\";\n const nHexStr: string = \"0x14\";\n\n stmt.bindInteger(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindInt(1, nNum), selectSingleRow), 1);\n\n stmt.bindValue(1, nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nNum);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nNum]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nStr), selectSingleRow), 1);\n\n stmt.bindValue(1, nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nDt), selectSingleRow), 0);\n\n stmt.bindValue(1, nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nDt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nDt]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Date time string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqln, new QueryBinder().bindString(1, nHexStr), selectSingleRow), 0);\n\n stmt.bindValue(1, nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(nHexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([nHexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"Hex string is not parsed. SQLite just converts it to something which does not match\");\n stmt.reset();\n stmt.clearBindings();\n });\n\n const ecsqldt = \"SELECT 1 FROM ts.Foo WHERE dt=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqldt, async (stmt: ECSqlStatement) => {\n const dtStr: string = \"2018-10-18T12:00:00Z\";\n const num: number = 2458410;\n const str: string = \"2458410\";\n const hexStr: string = \"0x25832a\";\n\n stmt.bindDateTime(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, new QueryBinder().bindString(1, dtStr)), 1);\n stmt.bindString(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dtStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dtStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindInteger(1, num));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n assert.throw(() => stmt.bindValue(1, num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(num));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([num]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValue(1, str));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n assert.throw(() => stmt.getBinder(1).bind(str));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([str]));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindString(1, hexStr));\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n assert.throw(() => stmt.bindValue(1, hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.getBinder(1).bind(hexStr));\n stmt.clearBindings();\n\n assert.throw(() => stmt.bindValues([hexStr]));\n stmt.clearBindings();\n });\n\n const ecsqlfooId = \"SELECT 1 FROM ts.Foo WHERE fooId=?\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(ecsqlfooId, async (stmt: ECSqlStatement) => {\n const num: number = 20;\n const str: string = \"20\";\n const dt: string = \"2019-01-21T12:00:00Z\";\n const hexStr: string = \"0x14\";\n\n stmt.bindId(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([hexStr])), 0);\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(hexStr);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([hexStr]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([str])), 0);\n\n stmt.bindValue(1, str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(str);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([str]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindInteger(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([num])), 0);\n\n stmt.bindValue(1, num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(num);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([num]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindString(1, dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n assert.equal(await queryCount(ecdb, ecsqldt, QueryBinder.from([dt])), 0);\n\n stmt.bindValue(1, dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.getBinder(1).bind(dt);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([dt]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE, \"DateTime string is not parsed into what it means. SQlite just uses its regular string conversion routines which don't match here\");\n stmt.reset();\n stmt.clearBindings();\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should bind numbers\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnumbers.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECProperty propertyName=\"Description\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const doubleVal: number = 3.5;\n let id = await ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindDouble')\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindDouble(1, doubleVal);\n stmt.bindDouble(2, doubleVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDouble(4, doubleVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { limit: { count: 1 } }, (row: any) => {\n assert.equal(row.d, doubleVal);\n assert.equal(row.i, 3);\n assert.equal(row.l, 3);\n assert.equal(row.s, \"3.5\");\n }), 1);\n\n const smallIntVal: number = 3;\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, small int')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, smallIntVal);\n stmt.bindInteger(2, smallIntVal);\n stmt.bindInteger(3, smallIntVal);\n stmt.bindInteger(4, smallIntVal);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, smallIntVal);\n assert.equal(row.i, smallIntVal);\n assert.equal(row.l, smallIntVal);\n assert.equal(row.s, \"3\");\n }), 1);\n\n const largeUnsafeNumber: number = 12312312312312323654; // too large for int64, but fits into uint64\n assert.isFalse(Number.isSafeInteger(largeUnsafeNumber));\n const largeUnsafeNumberStr: string = \"12312312312312323654\";\n const largeUnsafeNumberHexStr: string = \"0xaade1ed08b0b5e46\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberStr);\n stmt.bindInteger(2, largeUnsafeNumberStr);\n stmt.bindInteger(3, largeUnsafeNumberStr);\n stmt.bindInteger(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // assert.equal(await query(ecdb, \"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeUnsafeNumberHexStr);\n stmt.bindInteger(2, largeUnsafeNumberHexStr);\n stmt.bindInteger(3, largeUnsafeNumberHexStr);\n stmt.bindInteger(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.si, largeUnsafeNumberStr);\n assert.equal(row.hi, largeUnsafeNumberHexStr);\n assert.equal(row.sl, largeUnsafeNumberStr);\n assert.equal(row.hl, largeUnsafeNumberHexStr);\n });\n\n // assert.equal(await query(ecdb, \"SELECT Str(I) si, HexStr(I) hi, Str(L) sl, HexStr(L) hl FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.si, largeUnsafeNumberStr);\n // assert.equal(row.hi, largeUnsafeNumberHexStr);\n // assert.equal(row.sl, largeUnsafeNumberStr);\n // assert.equal(row.hl, largeUnsafeNumberHexStr);\n // }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberStr);\n stmt.bindString(2, largeUnsafeNumberStr);\n stmt.bindString(3, largeUnsafeNumberStr);\n stmt.bindString(4, largeUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // uint64 cannot be bound as string in SQLite. They get converted to reals\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.isNumber(row.d);\n assert.isNumber(row.i);\n assert.isNumber(row.l);\n assert.equal(row.s, largeUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large unsafe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeUnsafeNumberHexStr);\n stmt.bindString(2, largeUnsafeNumberHexStr);\n stmt.bindString(3, largeUnsafeNumberHexStr);\n stmt.bindString(4, largeUnsafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeUnsafeNumberHexStr);\n assert.equal(row.i, largeUnsafeNumberHexStr);\n assert.equal(row.l, largeUnsafeNumberHexStr);\n assert.equal(row.s, largeUnsafeNumberHexStr);\n }), 1);\n\n const largeNegUnsafeNumber: number = -123123123123123236;\n assert.isFalse(Number.isSafeInteger(largeNegUnsafeNumber));\n const largeNegUnsafeNumberStr: string = \"-123123123123123236\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegUnsafeNumberStr);\n stmt.bindInteger(2, largeNegUnsafeNumberStr);\n stmt.bindInteger(3, largeNegUnsafeNumberStr);\n stmt.bindInteger(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative unsafe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegUnsafeNumberStr);\n stmt.bindString(2, largeNegUnsafeNumberStr);\n stmt.bindString(3, largeNegUnsafeNumberStr);\n stmt.bindString(4, largeNegUnsafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(I AS TEXT) i, CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.i, largeNegUnsafeNumberStr);\n assert.equal(row.l, largeNegUnsafeNumberStr);\n assert.equal(row.s, largeNegUnsafeNumberStr);\n }), 1);\n\n const largeSafeNumber: number = 1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeSafeNumber));\n const largeSafeNumberStr: string = largeSafeNumber.toString();\n const largeSafeNumberHexStr: string = \"0x45fcc5c2c8500\";\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumber);\n stmt.bindInteger(2, largeSafeNumber);\n stmt.bindInteger(3, largeSafeNumber);\n stmt.bindInteger(4, largeSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.si, largeSafeNumberStr);\n assert.equal(row.hi, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.sl, largeSafeNumberStr);\n assert.equal(row.hl, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n // await query(ecdb, \"SELECT D,I, Str(I) si, HexStr(I) hi, L, Str(L) sl, HexStr(L) hl,S FROM Test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.d, largeSafeNumber);\n // assert.equal(row.i, largeSafeNumber);\n // assert.equal(row.si, largeSafeNumberStr);\n // assert.equal(row.hi, largeSafeNumberHexStr);\n // assert.equal(row.l, largeSafeNumber);\n // assert.equal(row.sl, largeSafeNumberStr);\n // assert.equal(row.hl, largeSafeNumberHexStr);\n // assert.equal(row.s, largeSafeNumberStr);\n // });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberStr);\n stmt.bindInteger(2, largeSafeNumberStr);\n stmt.bindInteger(3, largeSafeNumberStr);\n stmt.bindInteger(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeSafeNumberHexStr);\n stmt.bindInteger(2, largeSafeNumberHexStr);\n stmt.bindInteger(3, largeSafeNumberHexStr);\n stmt.bindInteger(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberStr);\n stmt.bindString(2, largeSafeNumberStr);\n stmt.bindString(3, largeSafeNumberStr);\n stmt.bindString(4, largeSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumber);\n assert.equal(row.i, largeSafeNumber);\n assert.equal(row.l, largeSafeNumber);\n assert.equal(row.s, largeSafeNumberStr); // even though it was bound as hex str, it gets converted to int64 before persisting\n }), 1);\n\n // SQLite does not parse hex strs bound as strings.\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large safe number as hexstring')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeSafeNumberHexStr);\n stmt.bindString(2, largeSafeNumberHexStr);\n stmt.bindString(3, largeSafeNumberHexStr);\n stmt.bindString(4, largeSafeNumberHexStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT CAST(D AS TEXT) d,CAST(I AS TEXT) i,CAST(L AS TEXT) l,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeSafeNumberHexStr);\n assert.equal(row.i, largeSafeNumberHexStr);\n assert.equal(row.l, largeSafeNumberHexStr);\n assert.equal(row.s, largeSafeNumberHexStr);\n }), 1);\n\n const largeNegSafeNumber: number = -1231231231231232;\n assert.isTrue(Number.isSafeInteger(largeNegSafeNumber));\n const largeNegSafeNumberStr: string = largeNegSafeNumber.toString();\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumber);\n stmt.bindInteger(2, largeNegSafeNumber);\n stmt.bindInteger(3, largeNegSafeNumber);\n stmt.bindInteger(4, largeNegSafeNumber);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n assert.equal(await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n }), 1);\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindInteger, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindInteger(1, largeNegSafeNumberStr);\n stmt.bindInteger(2, largeNegSafeNumberStr);\n stmt.bindInteger(3, largeNegSafeNumberStr);\n stmt.bindInteger(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n id = ecdb.withCachedWriteStatement(\"INSERT INTO Test.Foo(D,I,L,S,Description) VALUES(?,?,?,?,'bindString, large negative safe number as string')\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, largeNegSafeNumberStr);\n stmt.bindString(2, largeNegSafeNumberStr);\n stmt.bindString(3, largeNegSafeNumberStr);\n stmt.bindString(4, largeNegSafeNumberStr);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n return r.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n await query(ecdb, \"SELECT D,I,L,S FROM Test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), selectSingleRow, (row: any) => {\n assert.equal(row.d, largeNegSafeNumber);\n assert.equal(row.i, largeNegSafeNumber);\n assert.equal(row.l, largeNegSafeNumber);\n assert.equal(row.s, largeNegSafeNumberStr);\n });\n\n });\n\n it(\"should bind primitives\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal = true;\n const doubleVal = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.bl, blobVal);\n const f64 = new Float64Array(row.bl.buffer);\n const r2 = new Range3d(...f64);\n assert.deepEqual(r2, testRange);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n\n assert.deepEqual(row.s_bl, blobVal);\n assert.equal(row.s_bo, boolVal);\n assert.equal(row.s_d, doubleVal);\n assert.equal(row.s_dt, dtVal);\n assert.equal(row.s_i, intVal);\n assert.equal(row.s_p2d.x, p2dVal.x);\n assert.equal(row.s_p2d.y, p2dVal.y);\n assert.equal(row.s_p3d.x, p3dVal.x);\n assert.equal(row.s_p3d.y, p3dVal.y);\n assert.equal(row.s_p3d.z, p3dVal.z);\n assert.equal(row.s_s, strVal);\n\n assert.equal(await query(ecdb, \"SELECT Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl s_bl,Struct.Bo s_bo,Struct.D s_d,Struct.Dt s_dt,Struct.I s_i,Struct.P2d s_p2d,Struct.P3d s_p3d,Struct.S s_s FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\n assert.deepEqual(row1.bl, blobVal);\n const f64a = new Float64Array(row1.bl.buffer);\n const r2a = new Range3d(...f64a);\n assert.deepEqual(r2a, testRange);\n assert.equal(row1.bo, boolVal);\n assert.equal(row1.d, doubleVal);\n assert.equal(row1.dt, dtVal);\n assert.equal(row1.i, intVal);\n assert.equal(row1.p2d.x, p2dVal.x);\n assert.equal(row1.p2d.y, p2dVal.y);\n assert.equal(row1.p3d.x, p3dVal.x);\n assert.equal(row1.p3d.y, p3dVal.y);\n assert.equal(row1.p3d.z, p3dVal.z);\n assert.equal(row1.s, strVal);\n\n assert.deepEqual(row1.s_bl, blobVal);\n assert.equal(row1.s_bo, boolVal);\n assert.equal(row1.s_d, doubleVal);\n assert.equal(row1.s_dt, dtVal);\n assert.equal(row1.s_i, intVal);\n assert.equal(row1.s_p2d.x, p2dVal.x);\n assert.equal(row1.s_p2d.y, p2dVal.y);\n assert.equal(row1.s_p3d.x, p3dVal.x);\n assert.equal(row1.s_p3d.y, p3dVal.y);\n assert.equal(row1.s_p3d.z, p3dVal.z);\n assert.equal(row1.s_s, strVal);\n }), 1);\n });\n };\n\n const ids = new Array<Id64String>();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)\", (stmt: ECSqlStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n stmt.bindBlob(9, blobVal);\n stmt.bindBoolean(10, boolVal);\n stmt.bindDouble(11, doubleVal);\n stmt.bindDateTime(12, dtVal);\n stmt.bindInteger(13, intVal);\n stmt.bindPoint2d(14, p2dVal);\n stmt.bindPoint3d(15, p3dVal);\n stmt.bindString(16, strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues([blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal, blobVal, boolVal, doubleVal, dtVal, intVal, p2dVal, p3dVal, strVal]);\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S,Struct.Bl,Struct.Bo,Struct.D,Struct.Dt,Struct.I,Struct.P2d,Struct.P3d,Struct.S) VALUES(:bl,:bo,:d,:dt,:i,:p2d,:p3d,:s,:s_bl,:s_bo,:s_d,:s_dt,:s_i,:s_p2d,:s_p3d,:s_s)\", (stmt: ECSqlStatement) => {\n stmt.bindBlob(\"bl\", blobVal);\n stmt.bindBoolean(\"bo\", boolVal);\n stmt.bindDouble(\"d\", doubleVal);\n stmt.bindDateTime(\"dt\", dtVal);\n stmt.bindInteger(\"i\", intVal);\n stmt.bindPoint2d(\"p2d\", p2dVal);\n stmt.bindPoint3d(\"p3d\", p3dVal);\n stmt.bindString(\"s\", strVal);\n\n stmt.bindBlob(\"s_bl\", blobVal);\n stmt.bindBoolean(\"s_bo\", boolVal);\n stmt.bindDouble(\"s_d\", doubleVal);\n stmt.bindDateTime(\"s_dt\", dtVal);\n stmt.bindInteger(\"s_i\", intVal);\n stmt.bindPoint2d(\"s_p2d\", p2dVal);\n stmt.bindPoint3d(\"s_p3d\", p3dVal);\n stmt.bindString(\"s_s\", strVal);\n\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n stmt.reset();\n stmt.clearBindings();\n stmt.bindValues({\n bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal,\n i: intVal, p2d: p2dVal, p3d: p3dVal, s: strVal,\n s_bl: blobVal, s_bo: boolVal, s_d: doubleVal, s_dt: dtVal,\n s_i: intVal, s_p2d: p2dVal, s_p3d: p3dVal, s_s: strVal,\n });\n\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n ids.push(res.id!);\n });\n\n for (const id of ids) {\n await verify(id);\n }\n });\n\n it(\"should bind structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const structVal = {\n bl: blobVal, bo: true, d: 3.5,\n dt: \"2018-01-23T12:24:00.000\",\n i: 3, p2d: new Point2d(1, 2), p3d: new Point3d(1, 2, 3), s: \"Hello World\",\n };\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isTrue(blobEqual(row.struct.bl, structVal.bl));\n assert.equal(row.struct.bo, structVal.bo);\n assert.equal(row.struct.d, structVal.d);\n assert.equal(row.struct.dt, structVal.dt);\n assert.equal(row.struct.i, structVal.i);\n assert.equal(row.struct.p2d.x, structVal.p2d.x);\n assert.equal(row.struct.p2d.y, structVal.p2d.y);\n assert.equal(row.struct.p3d.x, structVal.p3d.x);\n assert.equal(row.struct.p3d.y, structVal.p3d.y);\n assert.equal(row.struct.p3d.z, structVal.p3d.z);\n assert.equal(row.struct.s, structVal.s);\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row1: any) => {\n assert.isTrue(blobEqual(row1.struct.bl, structVal.bl));\n assert.equal(row1.struct.bo, structVal.bo);\n assert.equal(row1.struct.d, structVal.d);\n assert.equal(row1.struct.dt, structVal.dt);\n assert.equal(row1.struct.i, structVal.i);\n assert.equal(row1.struct.p2d.x, structVal.p2d.x);\n assert.equal(row1.struct.p2d.y, structVal.p2d.y);\n assert.equal(row1.struct.p3d.x, structVal.p3d.x);\n assert.equal(row1.struct.p3d.y, structVal.p3d.y);\n assert.equal(row1.struct.p3d.z, structVal.p3d.z);\n assert.equal(row1.struct.s, structVal.s);\n }), 1);\n });\n };\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([structVal]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"str\", structVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(:str)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ str: structVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n });\n\n it(\"should bind arrays\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindarrays.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const intArray = [1, 2, 3];\n const dtArray = [\"2018-01-23T00:00:00.000\", \"2018-01-23T16:39:00.000\"];\n const addressArray = [{ city: \"London\", zip: 10000 }, { city: \"Manchester\", zip: 20000 }, { city: \"Edinburgh\", zip: 30000 }];\n\n const verify = async (expectedId: Id64String) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await ecdb.withPreparedStatement(\"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", async (stmt: ECSqlStatement) => {\n stmt.bindId(1, expectedId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n });\n\n assert.equal(await query(ecdb, \"SELECT I_Array, Dt_Array, Addresses FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([expectedId]), selectSingleRow, (row: any) => {\n // don't know why assert.equal doesn't work on arrays directly\n assert.equal(row.i_Array.length, intArray.length);\n for (let i = 0; i < intArray.length; i++) {\n assert.equal(row.i_Array[i], intArray[i]);\n }\n\n assert.equal(row.dt_Array.length, dtArray.length);\n for (let i = 0; i < dtArray.length; i++) {\n assert.equal(row.dt_Array[i], dtArray[i]);\n }\n\n assert.equal(row.addresses.length, addressArray.length);\n for (let i = 0; i < addressArray.length; i++) {\n assert.equal(row.addresses[i].city, addressArray[i].city);\n assert.equal(row.addresses[i].zip, addressArray[i].zip);\n }\n }), 1);\n };\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(1, intArray);\n stmt.bindArray(2, dtArray);\n stmt.bindArray(3, addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(?,?,?)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues([intArray, dtArray, addressArray]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindArray(\"iarray\", intArray);\n stmt.bindArray(\"dtarray\", dtArray);\n stmt.bindArray(\"addresses\", addressArray);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n\n await ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(I_Array,Dt_Array,Addresses) VALUES(:iarray,:dtarray,:addresses)\", async (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({ iarray: intArray, dtarray: dtArray, addresses: addressArray });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n await verify(res.id!);\n });\n });\n\n it(\"should bind navigation\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(:name,:parent)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(\"name\", \"Child 3\");\n stmt.bindNavigation(\"parent\", { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues({ name: \"Child 4\", parent: { id: parentId, relClassName: \"Test.ParentHasChildren\" } });\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n let rowCount: number = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 4);\n });\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n assert.equal(row.name, `Child ${rowCount2}`);\n const parent: NavigationValue = row.parent as NavigationValue;\n assert.equal(parent.id, parentId);\n assert.equal(parent.relClassName, \"Test.ParentHasChildren\");\n }), 4);\n });\n\n it(\"should bind Range3d for parameter in spatial sql function\", async () => {\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ECSqlStatement\", \"BindRange3d.bim\"), { rootSubject: { name: \"BindRange3d\" } });\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindRange3d(1, new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0));\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT e.ECInstanceId FROM bis.Element e, bis.SpatialIndex rt WHERE rt.ECInstanceId MATCH DGN_spatial_overlap_aabb(?) AND e.ECInstanceId=rt.ECInstanceId\",\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (stmt: ECSqlStatement) => {\n stmt.bindValues([new Range3d(0.0, 0.0, 0.0, 1000.0, 1000.0, 1000.0)]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n } finally {\n iModel.saveChanges();\n iModel.close();\n }\n });\n\n it(\"should bind Range3d\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindrange3d.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Range3d\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo([Range3d]) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindRange3d(1, testRange);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT [Range3d] FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const rangeBlob: Uint8Array = stmt.getValue(0).getBlob();\n const rangeFloatArray = new Float64Array(rangeBlob.buffer);\n assert.equal(rangeFloatArray.length, 6);\n const actualRange = new Range3d(...rangeFloatArray);\n assert.isTrue(actualRange.isAlmostEqual(testRange));\n });\n });\n\n it(\"should bind IdSets\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"should bind IdSets to IdSet Virtual Table\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [Id64.fromLocalAndBriefcaseIds(idNumbers[2], 0)];\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n let row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n stmt.reset();\n stmt.clearBindings();\n\n idSet.push(idNumbers[0].toString());\n stmt.bindIdSet(1, idSet);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[2]}.txt`);\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_ROW);\n row = stmt.getRow();\n assert.equal(row.name, `${idNumbers[0]}.txt`);\n });\n });\n\n it(\"Error Checking For binding to IdSet statements\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"bindids.ecdb\");\n assert.isTrue(ecdb.isOpen);\n\n const idNumbers: number[] = [4444, 4545, 1234, 6758, 1312];\n ecdb.withCachedWriteStatement(\"INSERT INTO ecdbf.ExternalFileInfo(ECInstanceId,Name) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n idNumbers.forEach((idNum: number) => {\n const expectedId = Id64.fromLocalAndBriefcaseIds(idNum, 0);\n stmt.bindId(1, expectedId);\n stmt.bindString(2, `${idNum}.txt`);\n const r: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(r.id);\n assert.equal(r.id!, expectedId);\n ecdb.saveChanges();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(`SELECT ECInstanceId, ECClassId, Name FROM ecdbf.ExternalFileInfo WHERE ECInstanceId=${expectedId}`, (confstmt: ECSqlStatement) => {\n assert.equal(confstmt.step(), DbResult.BE_SQLITE_ROW);\n const row = confstmt.getRow();\n assert.equal(row.id, expectedId);\n assert.equal(row.className, \"ECDbFileInfo.ExternalFileInfo\");\n assert.equal(row.name, `${Id64.getLocalId(expectedId).toString()}.txt`);\n });\n stmt.reset();\n stmt.clearBindings();\n });\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo, ECVLib.IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", (stmt: ECSqlStatement) => {\n let idSet: Id64String[] = [];\n stmt.bindIdSet(1, idSet);\n let result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n idSet = [\"0X1\", \"ABC\"];\n try {\n stmt.bindIdSet(1, idSet);\n } catch (err: any) {\n assert.equal(err.message, \"Error binding id set\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n stmt.reset();\n stmt.clearBindings();\n\n try {\n stmt.bindId(1, idNumbers[0].toString());\n } catch (err: any) {\n assert.equal(err.message, \"Error binding Id\");\n }\n result = stmt.step();\n assert.equal(result, DbResult.BE_SQLITE_DONE);\n });\n });\n\n /* This test doesn't do anything specific with the binder life time but just runs a few scenarios\n with and without statement cache to test that stuff works fine */\n it(\"check ECSqlBinder life time\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecsqlbinderlifetime.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"Address\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Street\" typeName=\"string\"/>\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECStructProperty propertyName=\"Location\" typeName=\"Address\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let id1: Id64String = \"\", id2: Id64String = \"\";\n\n // *** test without statement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id1 = res.id!;\n assert.isTrue(Id64.isValidId64(id1));\n });\n\n\n // *** test withstatement cache\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age,Location) VALUES(?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Mary Miller\");\n stmt.bindInteger(2, 30);\n stmt.bindStruct(3, { Street: \"2000 Main Street\", City: \"New York\", Zip: 12311 });\n\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n id2 = res.id!;\n assert.isTrue(Id64.isValidId64(id2));\n });\n\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using stmt = ecdb.prepareStatement(\"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\");\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n if (rowCount === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }\n assert.equal(rowCount, 2);\n }\n\n let rowCount2: number = 0;\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,Name,Age,Location FROM test.Person ORDER BY ECInstanceId\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount2++;\n if (rowCount2 === 1)\n assert.equal(row.id, id1);\n else\n assert.equal(row.id, id2);\n\n assert.equal(row.className, \"Test.Person\");\n assert.equal(row.name, \"Mary Miller\");\n assert.equal(row.age, 30);\n assert.equal(row.location.street, \"2000 Main Street\");\n assert.equal(row.location.city, \"New York\");\n assert.equal(row.location.zip, 12311);\n }), 2);\n });\n\n it(\"getRow() with primitives values\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getprimitives.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal = new Point2d(1, 2);\n const p3dVal = new Point3d(1, 2, 3);\n const strVal: string = \"Hello world\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,P2d,P3d,S) VALUES(?,?,?,?,?,?,?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n stmt.bindBoolean(2, boolVal);\n stmt.bindDouble(3, doubleVal);\n stmt.bindDateTime(4, dtVal);\n stmt.bindInteger(5, intVal);\n stmt.bindPoint2d(6, p2dVal);\n stmt.bindPoint3d(7, p3dVal);\n stmt.bindString(8, strVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n assert.equal(row.bo, boolVal);\n assert.equal(row.d, doubleVal);\n assert.equal(row.dt, dtVal);\n assert.equal(row.i, intVal);\n assert.equal(row.p2d.x, p2dVal.x);\n assert.equal(row.p2d.y, p2dVal.y);\n assert.equal(row.p3d.x, p3dVal.x);\n assert.equal(row.p3d.y, p3dVal.y);\n assert.equal(row.p3d.z, p3dVal.z);\n assert.equal(row.s, strVal);\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, id);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n // assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl,Bo,D,Dt,I,P2d,P3d,S FROM test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.equal(row.id, id);\n // assert.equal(row.className, \"Test.Foo\");\n // assert.deepEqual(row.bl, blobVal);\n // assert.equal(row.bo, boolVal);\n // assert.equal(row.d, doubleVal);\n // assert.equal(row.dt, dtVal);\n // assert.equal(row.i, intVal);\n // assert.equal(row.p2d.x, p2dVal.x);\n // assert.equal(row.p2d.y, p2dVal.y);\n // assert.equal(row.p3d.x, p3dVal.x);\n // assert.equal(row.p3d.y, p3dVal.y);\n // assert.equal(row.p3d.z, p3dVal.z);\n // assert.equal(row.s, strVal);\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.deepEqual(row.blobby, blobVal);\n assert.equal(row[\"[I] + 10\"], intVal + 10);\n assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n assert.equal(row.capitalS, strVal.toUpperCase());\n });\n\n // assert.equal(await query(ecdb, \"SELECT Bl AS Blobby, I+10, Lower(S), Upper(S) CapitalS FROM test.Foo WHERE ECInstanceId=?\", [id], 1, (row: any) => {\n // assert.deepEqual(row.blobby, blobVal);\n // assert.equal(row[\"[I] + 10\"], intVal + 10);\n // assert.equal(row[\"lower([S])\"], strVal.toLowerCase());\n // assert.equal(row.capitalS, strVal.toUpperCase());\n // }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const testSchemaId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECSchemaDef WHERE Name='Test'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const fooClassId: Id64String = ecdb.withPreparedStatement(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n return Id64.fromJSON(row.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n });\n\n assert.equal(await query(ecdb, \"SELECT s.ECInstanceId, c.ECInstanceId, c.Name, s.Name FROM meta.ECClassDef c JOIN meta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId WHERE s.Name='Test' AND c.Name='Foo'\", QueryBinder.from([]), selectSingleRow, (row: any) => {\n assert.equal(row.id, testSchemaId);\n assert.equal(row.id_1, fooClassId);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT count(*) cnt FROM meta.ECSchemaDef\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n });\n\n assert.equal(await query(ecdb, \"SELECT count(*) cnt FROM meta.ECSchemaDef\", QueryBinder.from([]), selectSingleRow, (row: any) => {\n assert.isDefined(row.cnt);\n assert.equal(typeof (row.cnt), \"number\");\n assert.equal(row.cnt, 6);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n });\n\n assert.equal(await query(ecdb, \"SELECT 1 FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(typeof (row[\"1\"]), \"number\");\n assert.equal(row[\"1\"], 1);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(Object.entries(row).length, 0);\n });\n\n assert.equal(await query(ecdb, \"SELECT NULL FROM meta.ECSchemaDef LIMIT 1\", QueryBinder.from([]), undefined, (row: any) => {\n assert.equal(Object.entries(row).length, 0);\n }), 1);\n });\n\n it(\"getRow() with abbreviated blobs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getblobs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const singleBlobVal = blobVal.slice(0, 1);\n const abbreviatedSingleBlobVal = `{\"bytes\":${singleBlobVal.byteLength}}`;\n const emptyBlobVal = new Uint8Array();\n\n const fullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, blobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const singleId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, singleBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const emptyId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindBlob(1, emptyBlobVal);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n const nullId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNull(1);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n return res.id!;\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([fullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, fullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, blobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, abbreviatedSingleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([singleId]), { ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, singleId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, singleBlobVal);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, \"{\\\"bytes\\\":0}\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([emptyId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, emptyId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl.length, 0);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: true, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), { abbreviateBlobs: false, ...selectSingleRow }, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId, ECClassId, Bl FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([nullId]), selectSingleRow, (row: any) => {\n assert.equal(row.id, nullId);\n assert.equal(row.className, \"Test.Foo\");\n assert.deepEqual(row.bl, undefined);\n }), 1);\n });\n\n it(\"getRow() with navigation properties and relationships\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getnavandrels.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n let rowCount: number;\n const parentId: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Parent(Code) VALUES('Parent 1')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const childIds = new Array<Id64String>();\n ecdb.withCachedWriteStatement(\"INSERT INTO test.Child(Name,Parent) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindString(1, \"Child 1\");\n stmt.bindNavigation(2, { id: parentId, relClassName: \"Test.ParentHasChildren\" });\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValues([\"Child 2\", { id: parentId, relClassName: \"Test.ParentHasChildren\" }]);\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n childIds.push(res.id!);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row.parent.id, parentId);\n assert.equal(row.parent.relClassName, \"Test.ParentHasChildren\");\n }), 2);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", (stmt: ECSqlStatement) => {\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }\n assert.equal(rowCount, 2);\n });\n\n rowCount = 0;\n assert.equal(await query(ecdb, \"SELECT Name,Parent.Id,Parent.RelECClassId, Parent.Id myParentId, Parent.RelECClassId myParentRelClassId FROM test.Child ORDER BY Name\", QueryBinder.from([]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.name, `Child ${rowCount}`);\n assert.equal(row[\"parent.id\"], parentId);\n assert.equal(row[\"parent.relClassName\"], \"Test.ParentHasChildren\");\n assert.equal(row.myParentId, parentId);\n assert.isTrue(Id64.isValidId64(row.myParentRelClassId));\n }), 2);\n\n const childId: Id64String = childIds[0];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId,ECClassId,SourceECInstanceId,SourceECClassId,TargetECInstanceId,TargetECClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\n assert.equal(row.id, childId);\n assert.equal(row.className, \"Test.ParentHasChildren\");\n assert.equal(row.sourceId, parentId);\n assert.equal(row.sourceClassName, \"Test.Parent\");\n assert.equal(row.targetId, childId);\n assert.equal(row.targetClassName, \"Test.Child\");\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, childId);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n });\n\n assert.equal(await query(ecdb, \"SELECT ECInstanceId as MyId,ECClassId as MyClassId,SourceECInstanceId As MySourceId,SourceECClassId As MySourceClassId,TargetECInstanceId As MyTargetId,TargetECClassId As MyTargetClassId FROM test.ParentHasChildren WHERE TargetECInstanceId=?\", QueryBinder.from([childId]), undefined, (row: any) => {\n rowCount++;\n assert.equal(row.myId, childId);\n assert.isTrue(Id64.isValidId64(row.myClassId));\n assert.equal(row.mySourceId, parentId);\n assert.isTrue(Id64.isValidId64(row.mySourceClassId));\n assert.equal(row.myTargetId, childId);\n assert.isTrue(Id64.isValidId64(row.myTargetClassId));\n }), 1);\n\n });\n\n it(\"getRow() with structs\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"getstructs.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECStructClass typeName=\"MyStruct\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"Struct\" typeName=\"MyStruct\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const boolVal: boolean = true;\n const doubleVal: number = 3.5;\n const dtVal: string = \"2018-01-23T12:24:00.000\";\n const intVal: number = 3;\n const p2dVal: XAndY = { x: 1, y: 2 };\n const p3dVal: XYAndZ = { x: 1, y: 2, z: 3 };\n const stringVal: string = \"Hello World\";\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Struct) VALUES(?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(1, { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n const expectedStruct = { bl: blobVal, bo: boolVal, d: doubleVal, dt: dtVal, i: intVal, p2d: p2dVal, p3d: p3dVal, s: stringVal };\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n });\n\n assert.equal(await query(ecdb, \"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row.struct.bl, expectedStruct.bl);\n assert.equal(row.struct.bo, expectedStruct.bo);\n assert.equal(row.struct.d, expectedStruct.d);\n assert.equal(row.struct.dt, expectedStruct.dt);\n assert.equal(row.struct.i, expectedStruct.i);\n assert.equal(row.struct.p2d.x, expectedStruct.p2d.x);\n assert.equal(row.struct.p2d.y, expectedStruct.p2d.y);\n assert.equal(row.struct.p3d.x, expectedStruct.p3d.x);\n assert.equal(row.struct.p3d.y, expectedStruct.p3d.y);\n assert.equal(row.struct.p3d.z, expectedStruct.p3d.z);\n assert.equal(row.struct.s, expectedStruct.s);\n }), 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const actualStruct: any = stmt.getValue(0).getStruct();\n assert.deepEqual(actualStruct.bl, expectedStruct.bl);\n assert.equal(actualStruct.bo, expectedStruct.bo);\n assert.equal(actualStruct.d, expectedStruct.d);\n assert.equal(actualStruct.dt, expectedStruct.dt);\n assert.equal(actualStruct.i, expectedStruct.i);\n assert.equal(actualStruct.p2d.x, expectedStruct.p2d.x);\n assert.equal(actualStruct.p2d.y, expectedStruct.p2d.y);\n assert.equal(actualStruct.p3d.x, expectedStruct.p3d.x);\n assert.equal(actualStruct.p3d.y, expectedStruct.p3d.y);\n assert.equal(actualStruct.p3d.z, expectedStruct.p3d.z);\n assert.equal(actualStruct.s, expectedStruct.s);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n });\n\n assert.equal(await query(ecdb, \"SELECT Struct.Bl, Struct.Bo, Struct.D, Struct.Dt, Struct.I, Struct.P2d, Struct.P3d, Struct.S FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row[\"struct.Bl\"], expectedStruct.bl);\n assert.equal(row[\"struct.Bo\"], expectedStruct.bo);\n assert.equal(row[\"struct.D\"], expectedStruct.d);\n assert.equal(row[\"struct.Dt\"], expectedStruct.dt);\n assert.equal(row[\"struct.I\"], expectedStruct.i);\n assert.equal(row[\"struct.P2d\"].x, expectedStruct.p2d.x);\n assert.equal(row[\"struct.P2d\"].y, expectedStruct.p2d.y);\n assert.equal(row[\"struct.P3d\"].x, expectedStruct.p3d.x);\n assert.equal(row[\"struct.P3d\"].y, expectedStruct.p3d.y);\n assert.equal(row[\"struct.P3d\"].z, expectedStruct.p3d.z);\n assert.equal(row[\"struct.S\"], expectedStruct.s);\n }), 1);\n });\n\n it(\"check HexStr() sql function\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Failed to prepare function expression/gm);\n slm.append().error().category(\"ECDb\").message(/Step failed for ECSQL/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"hexstrfunction.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Bl\" typeName=\"binary\"/>\n <ECProperty propertyName=\"Bo\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"D\" typeName=\"double\"/>\n <ECProperty propertyName=\"Dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"G\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECProperty propertyName=\"I\" typeName=\"int\"/>\n <ECProperty propertyName=\"L\" typeName=\"long\"/>\n <ECProperty propertyName=\"P2d\" typeName=\"Point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"Point3d\"/>\n <ECProperty propertyName=\"S\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const expectedRow = {\n bl: blobVal, bo: true, d: 3.5, dt: \"2018-01-23T12:24:00.000\",\n i: 3, l: 12312312312312, p2d: { x: 1, y: 2 }, p3d: { x: 1, y: 2, z: 3 }, s: \"Hello World\",\n };\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(Bl,Bo,D,Dt,I,L,P2d,P3d,S) VALUES(:bl,:bo,:d,:dt,:i,:l,:p2d,:p3d,:s)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValues({\n bl: blobVal, bo: expectedRow.bo, d: expectedRow.d,\n dt: expectedRow.dt, i: expectedRow.i, l: expectedRow.l, p2d: expectedRow.p2d, p3d: expectedRow.p3d, s: expectedRow.s,\n });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n ecdb.saveChanges();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT I, HexStr(I) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.i, expectedRow.i);\n assert.equal(row.hex, \"0x3\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT L, HexStr(L) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.l, expectedRow.l);\n assert.equal(row.hex, \"0xb32af0071f8\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bl, HexStr(Bl) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Bo, HexStr(Bo) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.bo, expectedRow.bo);\n assert.equal(row.hex, \"0x1\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT D, HexStr(D) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Dt, HexStr(Dt) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P2d, HexStr(P2d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // SQL functions cannot take points. So here preparation already fails\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throw(() => ecdb.withPreparedStatement(\"SELECT P3d, HexStr(P3d) hex FROM test.Foo WHERE ECInstanceId=?\", () => {\n assert.fail();\n }));\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT S, HexStr(S) hex FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ERROR);\n });\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"check ec enums\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"ecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Status\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"On\" value=\"1\" />\n <ECEnumerator name=\"Off\" value=\"2\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"Org\" />\n <ECEnumerator name=\"Com\" value=\"Com\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyStat\" typeName=\"Status\"/>\n <ECArrayProperty propertyName=\"MyStats\" typeName=\"Status\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n <ECArrayProperty propertyName=\"MyDomains\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyStat,MyStats,MyDomain,MyDomains) VALUES(test.Status.[On],?,test.Domain.Org,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, [1, 2]);\n stmt.bindValue(2, [\"Org\", \"Com\"]);\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(myStatVal.isNull);\n assert.isTrue(myStatVal.columnInfo.isEnum());\n assert.equal(myStatVal.getInteger(), 1);\n assert.deepEqual(myStatVal.getEnum(), [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myStatsVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(myStatsVal.isNull);\n assert.isTrue(myStatsVal.columnInfo.isEnum());\n assert.deepEqual(myStatsVal.getArray(), [1, 2]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualStatsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myStatsVal.getArrayIterator()) {\n actualStatsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualStatsEnums.length, 2);\n assert.deepEqual(actualStatsEnums[0], [{ schema: \"Test\", name: \"Status\", key: \"On\", value: 1 }]);\n assert.deepEqual(actualStatsEnums[1], [{ schema: \"Test\", name: \"Status\", key: \"Off\", value: 2 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainVal: ECSqlValue = stmt.getValue(2);\n assert.isFalse(myDomainVal.isNull);\n assert.isTrue(myDomainVal.columnInfo.isEnum());\n assert.equal(myDomainVal.getString(), \"Org\");\n assert.deepEqual(myDomainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const myDomainsVal: ECSqlValue = stmt.getValue(3);\n assert.isFalse(myDomainsVal.isNull);\n assert.isTrue(myDomainsVal.columnInfo.isEnum());\n assert.deepEqual(myDomainsVal.getArray(), [\"Org\", \"Com\"]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const actualDomainsEnums: ECEnumValue[][] = [];\n for (const arrayElement of myDomainsVal.getArrayIterator()) {\n actualDomainsEnums.push(arrayElement.getEnum()!);\n }\n assert.equal(actualDomainsEnums.length, 2);\n assert.deepEqual(actualDomainsEnums[0], [{ schema: \"Test\", name: \"Domain\", key: \"Org\", value: \"Org\" }]);\n assert.deepEqual(actualDomainsEnums[1], [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"Com\" }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT MyStat,MyStats, MyDomain,MyDomains FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.equal(row.myStat, 1);\n assert.deepEqual(row.myStats, [1, 2]);\n assert.equal(row.myDomain, \"Org\");\n assert.deepEqual(row.myDomains, [\"Org\", \"Com\"]);\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.deepEqual(row, { type: 0, modifier: 2 });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const typeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(typeVal.isNull);\n assert.isTrue(typeVal.columnInfo.isEnum());\n assert.equal(typeVal.getInteger(), 0);\n assert.deepEqual(typeVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassType\", key: \"Entity\", value: 0 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const modifierVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(modifierVal.isNull);\n assert.isTrue(modifierVal.columnInfo.isEnum());\n assert.equal(modifierVal.getInteger(), 2);\n assert.deepEqual(modifierVal.getEnum(), [{ schema: \"ECDbMeta\", name: \"ECClassModifier\", key: \"Sealed\", value: 2 }]);\n });\n\n assert.equal(await query(ecdb, \"SELECT Type,Modifier FROM meta.ECClassDef WHERE Name='Foo'\", QueryBinder.from([id]), undefined, (row: any) => {\n assert.deepEqual(row, { type: 0, modifier: 2 });\n }), 1);\n });\n\n it(\"check ORed ECEnums\", async () => {\n const slm = new SequentialLogMatcher();\n slm.append().error().category(\"ECDb\").message(/The value 9 cannot be broken down into a combination of ECEnumerators/gm);\n slm.append().error().category(\"ECDb\").message(/The value 'gov,de' cannot be broken down into a combination of ECEnumerators/gm);\n\n using ecdb = ECDbTestHelper.createECDb(outDir, \"oredecenums.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEnumeration typeName=\"Color\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Red\" value=\"1\" />\n <ECEnumerator name=\"Yellow\" value=\"2\" />\n <ECEnumerator name=\"Blue\" value=\"4\" />\n </ECEnumeration>\n <ECEnumeration typeName=\"Domain\" backingTypeName=\"string\" isStrict=\"true\">\n <ECEnumerator name=\"Org\" value=\"org\" />\n <ECEnumerator name=\"Com\" value=\"com\" />\n <ECEnumerator name=\"Gov\" value=\"gov\" />\n </ECEnumeration>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyColor\" typeName=\"Color\"/>\n <ECProperty propertyName=\"MyDomain\" typeName=\"Domain\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const ids: { unored: Id64String, ored: Id64String, unmatched: Id64String } = ecdb.withCachedWriteStatement(\"INSERT INTO test.Foo(MyColor,MyDomain) VALUES(?,?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindValue(1, 4);\n stmt.bindValue(2, \"com\");\n let res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 5);\n stmt.bindValue(2, \"gov,com\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const ored: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindValue(1, 9);\n stmt.bindValue(2, \"gov,de\");\n res = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n const unmatched: Id64String = res.id!;\n stmt.reset();\n stmt.clearBindings();\n\n return { unored, ored, unmatched };\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, ids.unored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n let row: any = stmt.getRow();\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let colVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 4);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let domainVal: ECSqlValue = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }]);\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.ored);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 5);\n assert.deepEqual(colVal.getEnum(), [{ schema: \"Test\", name: \"Color\", key: \"Red\", value: 1 }, { schema: \"Test\", name: \"Color\", key: \"Blue\", value: 4 }]);\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,com\");\n assert.deepEqual(domainVal.getEnum(), [{ schema: \"Test\", name: \"Domain\", key: \"Com\", value: \"com\" }, { schema: \"Test\", name: \"Domain\", key: \"Gov\", value: \"gov\" }]);\n\n stmt.reset();\n stmt.clearBindings();\n\n stmt.bindId(1, ids.unmatched);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n row = stmt.getRow();\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n\n colVal = stmt.getValue(0);\n assert.isFalse(colVal.isNull);\n assert.isTrue(colVal.columnInfo.isEnum());\n assert.equal(colVal.getInteger(), 9);\n assert.isUndefined(colVal.getEnum());\n\n domainVal = stmt.getValue(1);\n assert.isFalse(domainVal.isNull);\n assert.isTrue(domainVal.columnInfo.isEnum());\n assert.equal(domainVal.getString(), \"gov,de\");\n assert.isUndefined(domainVal.getEnum());\n });\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unored]), undefined, (row: any) => {\n assert.equal(row.myColor, 4);\n assert.equal(row.myDomain, \"com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.ored]), undefined, (row: any) => {\n assert.equal(row.myColor, 5);\n assert.equal(row.myDomain, \"gov,com\");\n }), 1);\n\n assert.equal(await query(ecdb, \"SELECT MyColor,MyDomain FROM test.Foo WHERE ECInstanceId=?\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\n assert.equal(row.myColor, 9);\n assert.equal(row.myDomain, \"gov,de\");\n }), 1);\n\n // test some enums in the built-in schemas\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row: any = stmt.getRow();\n assert.equal(row.caType, 160);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const caTypeVal: ECSqlValue = stmt.getValue(0);\n assert.isFalse(caTypeVal.isNull);\n assert.isTrue(caTypeVal.columnInfo.isEnum());\n assert.equal(caTypeVal.getInteger(), 160);\n assert.deepEqual(caTypeVal.getEnum(), [\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveProperty\", value: 32 },\n { schema: \"ECDbMeta\", name: \"ECCustomAttributeContainerType\", key: \"PrimitiveArrayProperty\", value: 128 }]);\n });\n assert.equal(await query(ecdb, \"SELECT CustomAttributeContainerType caType FROM meta.ECClassDef WHERE Type=meta.ECClassType.CustomAttribute AND Name='DateTimeInfo'\", QueryBinder.from([ids.unmatched]), undefined, (row: any) => {\n assert.equal(row.caType, 160);\n }), 1);\n assert.isTrue(slm.finishAndDispose());\n });\n\n it(\"should get native sql\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"asyncmethodtest.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"fooId\" typeName=\"long\" extendedTypeName=\"Id\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const r = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n,dt,fooId) VALUES(20,TIMESTAMP '2018-10-18T12:00:00Z',20)\", async (stmt: ECSqlWriteStatement) => {\n const nativesql: string = stmt.getNativeSql();\n assert.isTrue(nativesql.startsWith(\"INSERT INTO [ts_Foo]\"));\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n });\n\n it(\"check column info\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"MyClass\" modifier=\"Sealed\">\n <ECProperty propertyName=\"MyProperty\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const id: Id64String = ecdb.withCachedWriteStatement(\"INSERT INTO test.MyClass(MyProperty) VALUES('Value')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n return res.id!;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT MyProperty as MyAlias, 1 as MyGenerated FROM test.MyClass WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.myAlias, \"Value\");\n assert.equal(row.myGenerated, 1);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"MyAlias\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"MyAlias\");\n const originPropertyName = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName);\n assert.equal(originPropertyName, \"MyProperty\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"MyGenerated\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"MyGenerated\");\n assert.isUndefined(colInfo1.getOriginPropertyName());\n });\n });\n\n it(\"check access string metadata in nested struct\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"columnInfo.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"ECDbMap\" version=\"02.00.00\" alias=\"ecdbmap\"/>\n <ECStructClass typeName=\"InnerStruct\">\n <ECProperty propertyName=\"a\" typeName=\"string\"/>\n <ECProperty propertyName=\"b\" typeName=\"string\"/>\n </ECStructClass>\n <ECStructClass typeName=\"OuterStruct\">\n <ECStructProperty propertyName=\"c\" typeName=\"InnerStruct\"/>\n <ECProperty propertyName=\"d\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Z\">\n <ECCustomAttributes>\n <ClassMap xmlns=\"ECDbMap.02.00.00\">\n <MapStrategy>TablePerHierarchy</MapStrategy>\n </ClassMap>\n <ShareColumns xmlns=\"ECDbMap.02.00.00\">\n <MaxSharedColumnsBeforeOverflow>32</MaxSharedColumnsBeforeOverflow>\n </ShareColumns>\n </ECCustomAttributes>\n </ECEntityClass>\n <ECEntityClass typeName=\"A\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"f\" typeName=\"OuterStruct\"/>\n <ECProperty propertyName=\"g\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"B\">\n <BaseClass>Z</BaseClass>\n <ECStructProperty propertyName=\"h\" typeName=\"InnerStruct\" />\n <ECProperty propertyName=\"i\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.A (f.c.a, f.c.b, f.d, g) VALUES ('f.c.a' ,'f.c.b', 'f.d', 'g')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT f, f.c.a, f.c.b, f.d, g FROM Test.A\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.f.c.a, \"f.c.a\");\n assert.equal(row.f.c.b, \"f.c.b\");\n assert.equal(row.f.d, \"f.d\");\n assert.equal(row.g, \"g\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"f\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"f\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"f\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"a\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"f.c.a\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"a\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val2: ECSqlValue = stmt.getValue(2);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo2: ECSqlColumnInfo = val2.columnInfo;\n\n assert.equal(colInfo2.getPropertyName(), \"b\");\n const accessString2 = colInfo2.getAccessString();\n assert.equal(accessString2, \"f.c.b\");\n const originPropertyName2 = colInfo2.getOriginPropertyName();\n assert.isDefined(originPropertyName2);\n assert.equal(originPropertyName2, \"b\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val3: ECSqlValue = stmt.getValue(3);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo3: ECSqlColumnInfo = val3.columnInfo;\n\n assert.equal(colInfo3.getPropertyName(), \"d\");\n const accessString3 = colInfo3.getAccessString();\n assert.equal(accessString3, \"f.d\");\n const originPropertyName3 = colInfo3.getOriginPropertyName();\n assert.isDefined(originPropertyName3);\n assert.equal(originPropertyName3, \"d\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val4: ECSqlValue = stmt.getValue(4);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo4: ECSqlColumnInfo = val4.columnInfo;\n\n assert.equal(colInfo4.getPropertyName(), \"g\");\n const accessString4 = colInfo4.getAccessString();\n assert.equal(accessString4, \"g\");\n const originPropertyName4 = colInfo4.getOriginPropertyName();\n assert.isDefined(originPropertyName4);\n assert.equal(originPropertyName4, \"g\");\n });\n\n ecdb.withCachedWriteStatement(\"INSERT INTO Test.B (h.a, h.b, i) VALUES ('h.a' ,'h.b', 'i')\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT h, i FROM Test.B\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n // getRow just returns the enum values\n const row: any = stmt.getRow();\n assert.equal(row.h.a, \"h.a\");\n assert.equal(row.h.b, \"h.b\");\n assert.equal(row.i, \"i\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val0: ECSqlValue = stmt.getValue(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo0: ECSqlColumnInfo = val0.columnInfo;\n\n assert.equal(colInfo0.getPropertyName(), \"h\");\n const accessString0 = colInfo0.getAccessString();\n assert.equal(accessString0, \"h\");\n const originPropertyName0 = colInfo0.getOriginPropertyName();\n assert.isDefined(originPropertyName0);\n assert.equal(originPropertyName0, \"h\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const val1: ECSqlValue = stmt.getValue(1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const colInfo1: ECSqlColumnInfo = val1.columnInfo;\n\n assert.equal(colInfo1.getPropertyName(), \"i\");\n const accessString1 = colInfo1.getAccessString();\n assert.equal(accessString1, \"i\");\n const originPropertyName1 = colInfo1.getOriginPropertyName();\n assert.isDefined(originPropertyName1);\n assert.equal(originPropertyName1, \"i\");\n });\n });\n\n it(\"ecsql statements with QueryBinder\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <ECProperty propertyName=\"booleanProperty\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"blobProperty\" typeName=\"binary\"/>\n <ECProperty propertyName=\"doubleProperty\" typeName=\"double\"/>\n <ECProperty propertyName=\"customIdProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"customIdSetProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"intProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"longProperty\" typeName=\"long\"/>\n <ECProperty propertyName=\"stringProperty\" typeName=\"string\"/>\n <ECProperty propertyName=\"nullProperty\" typeName=\"int\"/>\n <ECProperty propertyName=\"point2dProperty\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"point3dProperty\" typeName=\"point3d\"/>\n </ECEntityClass>\n <ECStructClass typeName=\"Bar\" modifier=\"Sealed\">\n <ECProperty propertyName=\"structClassProperty\" typeName=\"string\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Baz\" modifier=\"Sealed\">\n <ECStructProperty propertyName=\"structProperty\" typeName=\"Bar\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const booleanValue = true;\n const blobValue = new Uint8Array([0, 0, 0]);\n const doubleValue = 12.12;\n const customIdValue = \"1234\";\n const customIdSetValue = [\"0x9\"];\n const intValue = 10;\n const longValue = 1e9;\n const stringValue = \"test string value\";\n const point2dValue = new Point2d(10, 20);\n const point3dValue = new Point3d(15, 30, 45);\n const structValue = { structClassProperty: \"test string value for struct property\" };\n\n let r = await ecdb.withCachedWriteStatement(\n `INSERT INTO ts.Foo(booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty)\n VALUES(:booleanValue, :blobValue, :doubleValue, :customIdValue, :customIdSetValue, :intValue, :longValue, :stringValue, :nullValue, :point2dValue, :point3dValue)`,\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindBoolean(\"booleanValue\", booleanValue);\n stmt.bindBlob(\"blobValue\", blobValue);\n stmt.bindDouble(\"doubleValue\", doubleValue);\n stmt.bindId(\"customIdValue\", customIdValue);\n stmt.bindId(\"customIdSetValue\", customIdSetValue[0]);\n stmt.bindInteger(\"intValue\", intValue);\n stmt.bindInteger(\"longValue\", longValue);\n stmt.bindString(\"stringValue\", stringValue);\n stmt.bindNull(\"nullValue\");\n stmt.bindPoint2d(\"point2dValue\", point2dValue);\n stmt.bindPoint3d(\"point3dValue\", point3dValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x1\");\n\n const params = new QueryBinder();\n params.bindBoolean(\"booleanValue\", booleanValue);\n params.bindBlob(\"blobValue\", blobValue);\n params.bindDouble(\"doubleValue\", doubleValue);\n params.bindId(\"customIdValue\", customIdValue);\n params.bindInt(\"intValue\", intValue);\n params.bindLong(\"longValue\", longValue);\n params.bindString(\"stringValue\", stringValue);\n params.bindPoint2d(\"point2dValue\", point2dValue);\n params.bindPoint3d(\"point3dValue\", point3dValue);\n params.bindIdSet(\"customIdSetValue\", customIdSetValue);\n\n let reader = ecdb.createQueryReader(\n `SELECT booleanProperty, blobProperty, doubleProperty, customIdProperty, customIdSetProperty, intProperty, longProperty, stringProperty, nullProperty, point2dProperty, point3dProperty FROM ts.Foo\n WHERE booleanProperty = :booleanValue AND blobProperty = :blobValue AND doubleProperty = :doubleValue AND customIdProperty = :customIdValue AND InVirtualSet(:customIdSetValue, customIdSetProperty) AND\n intProperty = :intValue AND longProperty = :longValue AND stringProperty = :stringValue AND point2dProperty = :point2dValue AND point3dProperty = :point3dValue`,\n params,\n );\n const row = (await reader.toArray())[0];\n\n assert.isNotNull(row);\n assert.equal(row[0], booleanValue);\n assert.deepEqual(row[1], blobValue);\n assert.equal(row[2], doubleValue);\n assert.equal(row[3], customIdValue);\n assert.equal(row[4], \"9\");\n assert.equal(row[5], intValue);\n assert.equal(row[6], longValue);\n assert.equal(row[7], stringValue);\n assert.equal(row[8], null);\n assert.deepEqual(row[9], { X: 10, Y: 20 });\n assert.deepEqual(row[10], { X: 15, Y: 30, Z: 45 });\n\n assert.isFalse(await reader.step());\n\n r = await ecdb.withCachedWriteStatement(\n \"INSERT INTO ts.Baz(structProperty) VALUES(:structValue)\",\n async (stmt: ECSqlWriteStatement) => {\n stmt.bindStruct(\"structValue\", structValue);\n return stmt.stepForInsert();\n },\n );\n\n ecdb.saveChanges();\n assert.equal(r.status, DbResult.BE_SQLITE_DONE);\n assert.equal(r.id, \"0x2\");\n\n reader = ecdb.createQueryReader(\n `SELECT * FROM ts.Baz`,\n );\n\n await reader.step();\n\n assert.deepEqual(reader.current.structProperty, structValue);\n\n const paramsWithStruct = new QueryBinder();\n paramsWithStruct.bindStruct(\"structValue\", structValue);\n reader = ecdb.createQueryReader(\"SELECT * FROM ts.Baz WHERE structProperty = :structValue\", paramsWithStruct);\n\n await assert.isRejected(reader.toArray(), \"Struct type binding not supported\");\n });\n\n it(\"Statement closed with WithWriteStatement\", async () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test_hang.ecdb\",\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"Test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"X\">\n <ECProperty propertyName=\"Label\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>\n `);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withWriteStatement(`INSERT INTO Test.X (Label) VALUES (?)`, (stmt) => {\n stmt.bindString(1, \"TestLabel 1\");\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n });\n\n ecdb.saveChanges();\n\n const reader = ecdb.createQueryReader(\n `SELECT Label FROM Test.X`\n );\n const row = (await reader.toArray())[0];\n\n assert.isNotNull(row);\n assert.equal(row[0], \"TestLabel 1\");\n\n assert.isFalse(await reader.step());\n });\n\n describe(\"invalid RelECClassId with pragma validate_ecsql_writes\", () => {\n let ecdb: ECDb;\n let parentHasChildrenClassId: Id64String;\n let childHasFriendsClassId: Id64String;\n let validRelClassId: Id64String;\n\n before(async () => {\n ecdb = ECDbTestHelper.createECDb(outDir, \"bindnavigation.ecdb\",\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n\n <ECEntityClass typeName=\"Parent\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Code\" typeName=\"string\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildTemplate\" modifier=\"Abstract\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"Parent\" relationshipName=\"ParentHasChildren\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"Child\" modifier=\"Sealed\">\n <BaseClass>ChildTemplate</BaseClass>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECNavigationProperty propertyName=\"Friends\" relationshipName=\"ChildHasFriends\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ParentHasChildren\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Parent\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"ChildTemplate\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECRelationshipClass typeName=\"ChildHasFriends\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"Child\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`);\n\n assert.isTrue(ecdb.isOpen);\n\n let reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='Parent'\");\n assert.isTrue(await reader.step());\n parentHasChildrenClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(parentHasChildrenClassId));\n\n // When the ECSql insert validation is set to true, the invalid relClassId is detected and an error is thrown.\n assert.isTrue(await (ecdb.createQueryReader(\"PRAGMA validate_ecsql_writes=true\")).step());\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ParentHasChildren'\");\n assert.isTrue(await reader.step());\n validRelClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(validRelClassId));\n\n reader = ecdb.createQueryReader(\"SELECT ECInstanceId FROM meta.ECClassDef WHERE Name='ChildHasFriends'\");\n assert.isTrue(await reader.step());\n childHasFriendsClassId = reader.current.ECInstanceId;\n assert.isTrue(Id64.isValidId64(childHasFriendsClassId));\n\n ecdb.saveChanges();\n });\n\n after(() => {\n ecdb.closeDb();\n });\n\n function testECSqlWithoutBinders(testCaseNumber: number, sqlStmt: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let id: Id64String | undefined;\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n assert.isDefined(stmt);\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n return id;\n };\n\n function testECSqlWithBinders(testCaseNumber: number, sqlStmt: string, firstBinderValue: string, secondBinderValue: string, shouldSucceed: boolean, expectedError: string, isInsert: boolean = true, expectedResult: DbResult = DbResult.BE_SQLITE_DONE) {\n let stmt: ECSqlWriteStatement | undefined;\n try {\n stmt = ecdb.prepareWriteStatement(sqlStmt);\n if (firstBinderValue !== \"\")\n stmt.bindNavigation(1, { id: \"1\", relClassName: firstBinderValue });\n if (secondBinderValue !== \"\")\n stmt.bindNavigation(2, { id: \"2\", relClassName: secondBinderValue });\n\n if (isInsert) {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, expectedResult);\n assert.isDefined(res.id);\n } else {\n assert.equal(stmt.step(), expectedResult);\n }\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Test case ${testCaseNumber} should not have thrown an error: ${err.message}`);\n else\n assert.equal(err.message, expectedError, `Test case ${testCaseNumber} Expected error: ${err.message}`);\n }\n\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n stmt?.clearBindings();\n };\n\n it(\"insert statement with invalid relClassId in navigation properties\", async () => {\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, 9999)`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`);\n testECSqlWithoutBinders(2, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, NULL)`, false, `The ECSql statement contains an invalid relationship class id.`);\n testECSqlWithoutBinders(3, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${parentHasChildrenClassId})`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`);\n testECSqlWithoutBinders(4, `INSERT INTO test.Child(Parent.Id, Parent.RelECClassId) VALUES(1, ${validRelClassId})`, true, \"\");\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\");\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ParentHasChildren\", \"\", true, \"\");\n testECSqlWithBinders(7, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ChildHasFriends\", \"\", true, \"\");\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"INSERT INTO test.Child(Parent) VALUES(?)\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\");\n testECSqlWithBinders(9, \"INSERT INTO test.Child(Friends) VALUES(?)\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"INSERT INTO test.Child(Parent, Friends) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\");\n testECSqlWithBinders(11, \"INSERT INTO test.Child(Friends, Parent) VALUES(?, ?)\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\");\n });\n\n it(\"update statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `UPDATE test.Child SET Parent.RelECClassId = 9999`, false, `The ECSql statement contains a class with id '9999' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(2, `UPDATE test.Child SET Parent.RelECClassId = NULL`, false, `The ECSql statement contains an invalid relationship class id.`, false);\n testECSqlWithoutBinders(3, `UPDATE test.Child SET Parent.RelECClassId = ${parentHasChildrenClassId}`, false, `The ECSql statement contains a class with id '${parentHasChildrenClassId}' which is not a valid relationship class.`, false);\n testECSqlWithoutBinders(4, `UPDATE test.Child SET Parent.RelECClassId = ${validRelClassId}`, true, \"\", false);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"UPDATE test.Child SET Parent = ?\", \"Test.InvalidClass\", \"\", false, \"The ECSql statement contains a relationship class 'Test.InvalidClass' which does not correspond to any EC class.\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"UPDATE test.Child SET Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n testECSqlWithBinders(7, \"UPDATE test.Child SET Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"UPDATE test.Child SET Parent = ?\", \"Test.ChildHasFriends\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ChildHasFriends' which does not match the relationship class in the navigation property.\", false);\n testECSqlWithBinders(9, \"UPDATE test.Child SET Friends = ?\", \"Test.ParentHasChildren\", \"\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"UPDATE test.Child SET Parent = ?, Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n testECSqlWithBinders(11, \"UPDATE test.Child SET Friends = ?, Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", false, \"The ECSql statement contains a relationship class 'Test.ParentHasChildren' which does not match the relationship class in the navigation property.\", false);\n });\n\n it(\"select statement with invalid relClassId in navigation properties\", async () => {\n // insert a value that can be updated in the test suite\n ecdb.withWriteStatement(\"INSERT INTO test.Child(Name, Parent, Friends) VALUES('Test123', ?, ?)\", (stmt: ECSqlWriteStatement) => {\n stmt.bindNavigation(1, { id: \"1\", relClassName: \"Test.ParentHasChildren\" });\n stmt.bindNavigation(2, { id: \"2\", relClassName: \"Test.ChildHasFriends\" });\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n stmt.clearBindings();\n ecdb.saveChanges();\n });\n\n // Invalid RelECClassId values\n testECSqlWithoutBinders(1, `SELECT * from test.Child where Parent.RelECClassId = 9999`, true, \"\", false);\n testECSqlWithoutBinders(2, `SELECT * from test.Child where Parent.RelECClassId = NULL`, true, \"\", false);\n testECSqlWithoutBinders(3, `SELECT * from test.Child where Parent.RelECClassId = ${parentHasChildrenClassId}`, true, \"\", false);\n testECSqlWithoutBinders(4, `SELECT * from test.Child where Parent.RelECClassId = ${validRelClassId}`, true, \"\", false, DbResult.BE_SQLITE_ROW);\n\n // Invalid RelClassName values with binders\n testECSqlWithBinders(5, \"SELECT * from test.Child where Parent = ?\", \"Test.InvalidClass\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders\n testECSqlWithBinders(6, \"SELECT * from test.Child where Parent = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(7, \"SELECT * from test.Child where Friends = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n\n // Valid RelClassName values with binders but invalid relClassId\n testECSqlWithBinders(8, \"SELECT * from test.Child where Parent = ?\", \"Test.ChildHasFriends\", \"\", true, \"\", false);\n testECSqlWithBinders(9, \"SELECT * from test.Child where Friends = ?\", \"Test.ParentHasChildren\", \"\", true, \"\", false);\n\n // Valid multiple RelClassName values with binders\n testECSqlWithBinders(10, \"SELECT * from test.Child where Parent = ? and Friends = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false, DbResult.BE_SQLITE_ROW);\n testECSqlWithBinders(11, \"SELECT * from test.Child where Friends = ? and Parent = ?\", \"Test.ParentHasChildren\", \"Test.ChildHasFriends\", true, \"\", false);\n });\n });\n});\n"]}
|