@itwin/core-backend 5.8.0-dev.16 → 5.8.0-dev.18
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/lib/esm/test/ecdb/QueryReaders.test.js +35 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +8 -0
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/package.json +13 -13
|
@@ -60,6 +60,7 @@ import { DefinitionModel, ElementTreeDeleter, ElementTreeWalkerScope, PhysicalMo
|
|
|
60
60
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
61
61
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
62
62
|
import { ECDbTestHelper } from "./ECDbTestHelper";
|
|
63
|
+
import { Range3d } from "@itwin/core-geometry";
|
|
63
64
|
import * as chai from "chai";
|
|
64
65
|
import * as chaiAsPromised from "chai-as-promised";
|
|
65
66
|
chai.use(chaiAsPromised);
|
|
@@ -263,6 +264,40 @@ describe("QueryReaders - createQueryReader() and withQueryReader() api tests", (
|
|
|
263
264
|
const reader = iModel.createQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId", params, { limit: { count: 1 } });
|
|
264
265
|
await readerCallback(reader);
|
|
265
266
|
});
|
|
267
|
+
it("should bind Range3d", async () => {
|
|
268
|
+
const env_5 = { stack: [], error: void 0, hasError: false };
|
|
269
|
+
try {
|
|
270
|
+
const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);
|
|
271
|
+
const ecdb = __addDisposableResource(env_5, ECDbTestHelper.createECDb(outDir, "bindrange3d.ecdb", `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
272
|
+
<ECEntityClass typeName="Foo" modifier="Sealed">
|
|
273
|
+
<ECProperty propertyName="Range3d" typeName="binary"/>
|
|
274
|
+
</ECEntityClass>
|
|
275
|
+
</ECSchema>`), false);
|
|
276
|
+
assert.isTrue(ecdb.isOpen);
|
|
277
|
+
ecdb.withCachedWriteStatement("INSERT INTO test.Foo([Range3d]) VALUES(?)", (stmt) => {
|
|
278
|
+
stmt.bindRange3d(1, testRange);
|
|
279
|
+
const res = stmt.stepForInsert();
|
|
280
|
+
assert.equal(res.status, DbResult.BE_SQLITE_DONE);
|
|
281
|
+
});
|
|
282
|
+
ecdb.saveChanges();
|
|
283
|
+
const params = new QueryBinder();
|
|
284
|
+
params.bindRange3d(1, testRange);
|
|
285
|
+
const reader = ecdb.createQueryReader("SELECT ECInstanceId, [Range3d] FROM test.Foo WHERE Range3d=?", params);
|
|
286
|
+
const rows = await reader.toArray();
|
|
287
|
+
const rangeBlob = rows[0][1];
|
|
288
|
+
const rangeFloatArray = new Float64Array(rangeBlob.buffer);
|
|
289
|
+
assert.equal(rangeFloatArray.length, 6);
|
|
290
|
+
const actualRange = new Range3d(...rangeFloatArray);
|
|
291
|
+
assert.isTrue(actualRange.isAlmostEqual(testRange));
|
|
292
|
+
}
|
|
293
|
+
catch (e_5) {
|
|
294
|
+
env_5.error = e_5;
|
|
295
|
+
env_5.hasError = true;
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
__disposeResources(env_5);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
266
301
|
});
|
|
267
302
|
describe("Works as iterable iterator", () => {
|
|
268
303
|
it("iterable in for loop", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryReaders.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/QueryReaders.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 { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, ECSqlReader, IModel, PhysicalElementProps, QueryBinder, QueryOptionsBuilder, QueryRowFormat, QueryRowProxy } from \"@itwin/core-common\";\nimport { DefinitionModel, ECSqlSyncReader, ElementTreeDeleter, ElementTreeWalkerScope, PhysicalModel, PhysicalObject, SnapshotDb, Subject } from \"../../core-backend\";\nimport { ECSqlWriteStatement } from \"../../ECSqlStatement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nchai.use(chaiAsPromised);\nconst assert = chai.assert;\nconst expect = chai.expect;\n\n\ndescribe(\"QueryReaders - createQueryReader() and withQueryReader() api tests\", (() => {\n let iModel: SnapshotDb;\n\n before(async () => {\n iModel = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(async () => {\n iModel.close();\n });\n\n describe(\"bind Id64 enumerable\", async () => {\n const outDir = KnownTestLocations.outputDir;\n\n it(\"ecsql reader simple\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"0x32\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncReaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple for IdSet\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"0x32\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", syncReaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"bindIdSet not working with integer Ids\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`)\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"50\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows.length, 0);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows.length, 0);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncreaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple using query reader\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const insertResult = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n) VALUES(20)\", async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(insertResult.status, DbResult.BE_SQLITE_DONE);\n assert.equal(insertResult.id, \"0x1\");\n\n const params = new QueryBinder();\n params.bindId(\"firstId\", insertResult.id!);\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\n assert.equal(queryReader.current.id, \"0x1\");\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\n assert.equal(queryReader.current.n, 20);\n assert.equal(queryReader.current.ID, \"0x1\");\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\n assert.equal(queryReader.current[0], \"0x1\");\n assert.equal(queryReader.current[1], 20);\n\n const row0 = queryReader.current.toRow();\n assert.equal(row0.ECInstanceId, \"0x1\");\n assert.equal(row0.n, 20);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n assert.isTrue(await readerObj.step());\n resultAssertCallback(readerObj);\n assert.isFalse(await readerObj.step());\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n assert.isTrue(syncReader.step());\n resultAssertCallback(syncReader);\n assert.isFalse(syncReader.step());\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId LIMIT 1\", synReaderCallback, params);\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple using query row reader\", async () => {\n // Use existing element from test.bim\n const elementId = \"0x1\";\n const params = new QueryBinder();\n params.bindId(\"firstId\", elementId);\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\n assert.equal(queryReader.current.id, \"0x1\");\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\n assert.isDefined(queryReader.current.ecclassid);\n assert.equal(queryReader.current.ID, \"0x1\");\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\n assert.equal(queryReader.current[0], \"0x1\");\n assert.isDefined(queryReader.current[1]);\n\n const row0 = queryReader.current.toRow();\n assert.equal(row0.ECInstanceId, \"0x1\");\n assert.isDefined(row0.ECClassId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n assert.isTrue(await readerObj.step());\n resultAssertCallback(readerObj);\n assert.isFalse(await readerObj.step());\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n assert.isTrue(syncReader.step());\n resultAssertCallback(syncReader);\n assert.isFalse(syncReader.step());\n }\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", synReaderCallback, params);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\n await readerCallback(reader);\n });\n });\n\n describe(\"Works as iterable iterator\", () => {\n\n it(\"iterable in for loop\", async () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n const readerCallback = async (readerObj: ECSqlReader) => {\n let actualRowCount = 0;\n for await (const row of readerObj) {\n actualRowCount++;\n assert.isDefined(row[0]);\n }\n assert.equal(actualRowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let actualRowCount = 0;\n for (const row of syncReader) {\n actualRowCount++;\n assert.isDefined(row[0]);\n }\n assert.equal(actualRowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"iterable with .next()\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let row: any;\n let actualRowCount = 0;\n while ((row = await readerObj.next()).done === false) {\n actualRowCount++;\n assert.equal(row.value[0], `0x${actualRowCount}`);\n }\n assert.equal(actualRowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let row: any;\n let actualRowCount = 0;\n while ((row = syncReader.next()).done === false) {\n actualRowCount++;\n assert.equal(row.value[0], `0x${actualRowCount}`);\n }\n assert.equal(actualRowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Should not fail on empty array\", async () => {\n const idSet: Id64String[] = [];\n const binder = QueryBinder.from([idSet]);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", binder);\n assert.isFalse(await reader.step());\n });\n\n });\n\n describe(\"Common usages\", () => {\n\n describe(\"Get all rows\", () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n\n it(\"Get all rows using iterable iterator\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let rowCount = 0;\n for await (const _row of readerObj) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let rowCount = 0;\n for (const _row of syncReader) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"Get all rows using step\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let rowCount = 0;\n while (await readerObj.step()) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let rowCount = 0;\n while (syncReader.step()) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"Get all rows using toArray\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows.length, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows.length, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n });\n\n describe(\"Get id from each row\", () => {\n\n it(\"Get id using iterable iterator with unspecified rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with unspecified rowFormat\", async () => {\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", synReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseJsPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().id, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get duplicate property names\", () => {\n\n it(\"Get duplicate property names using iterable iterator with unspecified rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get specific values\", () => {\n\n it(\"Get only ECInstanceId with unspecified rowFormat\", async () => {\n const resuktassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resuktassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resuktassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseJsPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with unspecified rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseJsPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get count of results\", () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n const sql = \"SELECT COUNT(*) numResults FROM (SELECT * FROM bis.Element)\";\n\n it(\"Get count of rows using current index\", async () => {\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current[0] as number, expectedRowCount);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current[0] as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using current column name\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.numResults as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.numResults as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using current and toRow\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.toRow().numResults as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.toRow().numResults as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using toArray result itself\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.toArray()[0] as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.toArray()[0] as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and index\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row[0] as number;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row[0] as number;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and column name\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row.numResults as number;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row.numResults as number;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and toRow\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row.toRow().numResults;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row.toRow().numResults;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n });\n\n describe(\"Tests for extendedType and extendType property behaviour of QueryPropertyMetaData\", () => {\n\n it(\"Id type column with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\n await readerCallback(reader);\n });\n\n it(\"Id type column without alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\n await readerCallback(reader);\n });\n\n it(\"ClassId type column\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"ClassId\", metaData[0].extendedType);\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"ClassId\", metaData[0].extendedType);\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\");\n await readerCallback(reader);\n });\n\n it(\"Column without extended type\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\");\n await readerCallback(reader);\n });\n\n it(\"Column without extended type with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\");\n await readerCallback(reader);\n });\n\n it(\"Geometric type column with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader | ECSqlSyncReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\");\n await readerCallback(reader);\n });\n\n it(\"Geometric type column without alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\");\n await readerCallback(reader);\n });\n\n });\n });\n}));\n\ndescribe(\"createQueryReader vs withQueryReader \", () => {\n /** Deletes an entire element tree, including sub-models, child elements and code scope references.\n * Items are deleted in bottom-up order. Definitions and Subjects are deleted after normal elements.\n * Call deleteNormalElements on each tree. Then call deleteSpecialElements.\n */\n class TestElementCascadingDeleter extends ElementTreeDeleter {\n protected shouldVisitCodeScopes(\n _elementId: Id64String,\n _scope: ElementTreeWalkerScope\n ) {\n return true;\n }\n\n /** The main tree-walking function */\n protected override processElementTree(\n element: Id64String,\n scope: ElementTreeWalkerScope\n ): void {\n if (this.shouldVisitCodeScopes(element, scope)) {\n this._processCodeScopes(element, scope);\n }\n super.processElementTree(element, scope);\n }\n /** Process code scope references */\n private _processCodeScopes(\n element: Id64String,\n scope: ElementTreeWalkerScope\n ) {\n const newScope = new ElementTreeWalkerScope(scope, element);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._iModel.withPreparedStatement(\n `\n SELECT ECInstanceId\n FROM bis.Element\n WHERE CodeScope.id=?\n AND Parent.id IS NULL\n `,\n (stmt) => {\n stmt.bindId(1, element);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, newScope);\n }\n }\n );\n }\n }\n\n // Actual test begins here\n let iModelDb: SnapshotDb;\n\n function createTestIModelWithScopedPhysicalObject() {\n const pathForEmpty = IModelTestUtils.prepareOutputFile(\n \"ECReferenceTypesCache\",\n \"empty.bim\"\n );\n const testIModelDb = SnapshotDb.createEmpty(pathForEmpty, {\n rootSubject: { name: \"empty \" },\n });\n\n const subjectId = Subject.insert(\n testIModelDb,\n IModel.rootSubjectId,\n \"Subject\",\n \"Subject Description\"\n );\n\n const physicalModelId = PhysicalModel.insert(\n testIModelDb,\n subjectId,\n \"Physical\"\n );\n\n const definitionModelId = DefinitionModel.insert(\n testIModelDb,\n subjectId,\n \"Definition\"\n );\n\n const spatialCategoryId = IModelTestUtils.insertSpatialCategory(\n testIModelDb,\n definitionModelId,\n \"SpatialCategory\",\n ColorDef.green\n );\n\n const physicalObjectProps5: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n userLabel: \"ScopingElement\",\n };\n\n const scopingElement =\n testIModelDb.elements.insertElement(physicalObjectProps5);\n\n const childElement: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: { spec: \"0x1\", scope: scopingElement },\n userLabel: \"ScopedElement\",\n };\n testIModelDb.elements.insertElement(childElement);\n testIModelDb.saveChanges();\n return testIModelDb;\n }\n\n beforeEach(async () => {\n iModelDb = createTestIModelWithScopedPhysicalObject();\n });\n\n afterEach(async () => {\n iModelDb.close();\n });\n\n it(\"Failing while using createQueryReader()\", async () => {\n const sql = `\n SELECT ECInstanceId\n FROM ${PhysicalObject.classFullName}\n `;\n const reader = iModelDb.createQueryReader(sql, undefined, { usePrimaryConn: true });\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\n await reader.step(); // step to initialize reader\n const firstId = reader.current[0];\n elementTreeDeleter.deleteNormalElements(firstId);\n await reader.step(); // step to initialize reader\n const secondId = reader.current[0];\n // This is because ecsqlreader built using createQueryReader caches results and so when it tries to access the second element, it is already deleted from the database and it throws \"Not Found\" error.\n expect(() => elementTreeDeleter.deleteNormalElements(secondId)).to.throw();\n });\n\n it(\"Passing while using withQueryReader()\", async () => {\n const sql = `\n SELECT ECInstanceId\n FROM ${PhysicalObject.classFullName}\n `;\n iModelDb.withQueryReader(sql, (reader) => {\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\n let cntSteps = 0;\n while (reader.step()) {\n const id = reader.current[0];\n elementTreeDeleter.deleteNormalElements(id);\n cntSteps++;\n }\n assert.equal(cntSteps, 1);\n });\n });\n});\n\n"]}
|
|
1
|
+
{"version":3,"file":"QueryReaders.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/QueryReaders.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 { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, ECSqlReader, IModel, PhysicalElementProps, QueryBinder, QueryOptionsBuilder, QueryRowFormat, QueryRowProxy } from \"@itwin/core-common\";\nimport { DefinitionModel, ECSqlInsertResult, ECSqlSyncReader, ElementTreeDeleter, ElementTreeWalkerScope, PhysicalModel, PhysicalObject, SnapshotDb, Subject } from \"../../core-backend\";\nimport { ECSqlWriteStatement } from \"../../ECSqlStatement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nchai.use(chaiAsPromised);\nconst assert = chai.assert;\nconst expect = chai.expect;\n\n\ndescribe(\"QueryReaders - createQueryReader() and withQueryReader() api tests\", (() => {\n let iModel: SnapshotDb;\n\n before(async () => {\n iModel = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(async () => {\n iModel.close();\n });\n\n describe(\"bind Id64 enumerable\", async () => {\n const outDir = KnownTestLocations.outputDir;\n\n it(\"ecsql reader simple\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"0x32\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncReaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple for IdSet\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"0x32\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows[0].id, \"0x32\");\n assert.equal(rows.length, 1);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", syncReaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"bindIdSet not working with integer Ids\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`)\n assert.isTrue(ecdb.isOpen);\n ecdb.saveChanges();\n const params = new QueryBinder();\n params.bindIdSet(1, [\"50\"]);\n const optionBuilder = new QueryOptionsBuilder();\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows.length, 0);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows.length, 0);\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncreaderCallback, params, optionBuilder.getOptions());\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple using query reader\", 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=\"n\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(ecdb.isOpen);\n\n const insertResult = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n) VALUES(20)\", async (stmt: ECSqlWriteStatement) => {\n return stmt.stepForInsert();\n });\n ecdb.saveChanges();\n assert.equal(insertResult.status, DbResult.BE_SQLITE_DONE);\n assert.equal(insertResult.id, \"0x1\");\n\n const params = new QueryBinder();\n params.bindId(\"firstId\", insertResult.id!);\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\n assert.equal(queryReader.current.id, \"0x1\");\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\n assert.equal(queryReader.current.n, 20);\n assert.equal(queryReader.current.ID, \"0x1\");\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\n assert.equal(queryReader.current[0], \"0x1\");\n assert.equal(queryReader.current[1], 20);\n\n const row0 = queryReader.current.toRow();\n assert.equal(row0.ECInstanceId, \"0x1\");\n assert.equal(row0.n, 20);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n assert.isTrue(await readerObj.step());\n resultAssertCallback(readerObj);\n assert.isFalse(await readerObj.step());\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n assert.isTrue(syncReader.step());\n resultAssertCallback(syncReader);\n assert.isFalse(syncReader.step());\n }\n ecdb.withQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId LIMIT 1\", synReaderCallback, params);\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\n await readerCallback(reader);\n });\n\n it(\"ecsql reader simple using query row reader\", async () => {\n // Use existing element from test.bim\n const elementId = \"0x1\";\n const params = new QueryBinder();\n params.bindId(\"firstId\", elementId);\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\n assert.equal(queryReader.current.id, \"0x1\");\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\n assert.isDefined(queryReader.current.ecclassid);\n assert.equal(queryReader.current.ID, \"0x1\");\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\n assert.equal(queryReader.current[0], \"0x1\");\n assert.isDefined(queryReader.current[1]);\n\n const row0 = queryReader.current.toRow();\n assert.equal(row0.ECInstanceId, \"0x1\");\n assert.isDefined(row0.ECClassId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n assert.isTrue(await readerObj.step());\n resultAssertCallback(readerObj);\n assert.isFalse(await readerObj.step());\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n assert.isTrue(syncReader.step());\n resultAssertCallback(syncReader);\n assert.isFalse(syncReader.step());\n }\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", synReaderCallback, params);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\n await readerCallback(reader);\n });\n\n it(\"should bind Range3d\", async () => {\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n\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 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 });\n ecdb.saveChanges();\n\n const params = new QueryBinder();\n params.bindRange3d(1, testRange);\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, [Range3d] FROM test.Foo WHERE Range3d=?\", params);\n\n const rows = await reader.toArray();\n const rangeBlob: Uint8Array = rows[0][1];\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\n describe(\"Works as iterable iterator\", () => {\n\n it(\"iterable in for loop\", async () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n const readerCallback = async (readerObj: ECSqlReader) => {\n let actualRowCount = 0;\n for await (const row of readerObj) {\n actualRowCount++;\n assert.isDefined(row[0]);\n }\n assert.equal(actualRowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let actualRowCount = 0;\n for (const row of syncReader) {\n actualRowCount++;\n assert.isDefined(row[0]);\n }\n assert.equal(actualRowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"iterable with .next()\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let row: any;\n let actualRowCount = 0;\n while ((row = await readerObj.next()).done === false) {\n actualRowCount++;\n assert.equal(row.value[0], `0x${actualRowCount}`);\n }\n assert.equal(actualRowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let row: any;\n let actualRowCount = 0;\n while ((row = syncReader.next()).done === false) {\n actualRowCount++;\n assert.equal(row.value[0], `0x${actualRowCount}`);\n }\n assert.equal(actualRowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Should not fail on empty array\", async () => {\n const idSet: Id64String[] = [];\n const binder = QueryBinder.from([idSet]);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", binder);\n assert.isFalse(await reader.step());\n });\n\n });\n\n describe(\"Common usages\", () => {\n\n describe(\"Get all rows\", () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n\n it(\"Get all rows using iterable iterator\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let rowCount = 0;\n for await (const _row of readerObj) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let rowCount = 0;\n for (const _row of syncReader) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"Get all rows using step\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let rowCount = 0;\n while (await readerObj.step()) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let rowCount = 0;\n while (syncReader.step()) {\n rowCount++;\n }\n assert.equal(rowCount, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n it(\"Get all rows using toArray\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const rows = await readerObj.toArray();\n assert.equal(rows.length, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const rows = syncReader.toArray();\n assert.equal(rows.length, expectedRowCount);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\n await readerCallback(reader);\n });\n\n });\n\n describe(\"Get id from each row\", () => {\n\n it(\"Get id using iterable iterator with unspecified rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with unspecified rowFormat\", async () => {\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", synReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseJsPropertyNames rowFormat\", async () => {\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().id, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultAssertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get id using step with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get duplicate property names\", () => {\n\n it(\"Get duplicate property names using iterable iterator with unspecified rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\n assert.equal(row[0], expectedId);\n assert.equal(row.id, expectedId);\n assert.equal(row.ecinstanceid, expectedId);\n assert.equal(row.ECINSTANCEID, expectedId);\n assert.equal(row.ECInstanceId, expectedId);\n assert.equal(row.toArray()[0], expectedId);\n assert.equal(row.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n for await (const row of readerObj) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n for (const row of syncReader) {\n const currentExpectedId = expectedIds[counter - 1];\n resultassertCallback(row, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get specific values\", () => {\n\n it(\"Get only ECInstanceId with unspecified rowFormat\", async () => {\n const resuktassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resuktassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resuktassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseJsPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().id, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get only ECInstanceId with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.id, expectedId);\n assert.equal(queryReader.current.ecinstanceid, expectedId);\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\n assert.equal(queryReader.current.ECInstanceId, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with unspecified rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseJsPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseECSqlPropertyNames rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n await readerCallback(reader);\n });\n\n it(\"Get one column with custom name with UseECSqlPropertyIndexes rowFormat\", async () => {\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\n assert.equal(queryReader.current[0], expectedId);\n assert.equal(queryReader.current.customColumnName, expectedId);\n assert.equal(queryReader.current.toArray()[0], expectedId);\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n let counter = 1;\n let rowCount = 0;\n while (await readerObj.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(readerObj, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let counter = 1;\n let rowCount = 0;\n while (syncReader.step()) {\n const currentExpectedId = `0x${counter}`;\n resultassertCallback(syncReader, currentExpectedId);\n counter++;\n rowCount++;\n }\n assert.equal(rowCount, 5);\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n await readerCallback(reader);\n });\n });\n\n describe(\"Get count of results\", () => {\n const expectedRowCount = 46; // 46 Elements in test.bim\n const sql = \"SELECT COUNT(*) numResults FROM (SELECT * FROM bis.Element)\";\n\n it(\"Get count of rows using current index\", async () => {\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current[0] as number, expectedRowCount);\n }\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current[0] as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using current column name\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.numResults as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.numResults as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using current and toRow\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.toRow().numResults as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.toRow().numResults as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using toArray result itself\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n await readerObj.step();\n assert.equal(readerObj.current.toArray()[0] as number, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n syncReader.step();\n assert.equal(syncReader.current.toArray()[0] as number, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and index\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row[0] as number;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row[0] as number;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and column name\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row.numResults as number;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row.numResults as number;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n it(\"Get count of rows using iterable iterator and toRow\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n let count = 0;\n for await (const row of readerObj) {\n count = row.toRow().numResults;\n }\n assert.equal(count, expectedRowCount);\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n let count = 0;\n for (const row of syncReader) {\n count = row.toRow().numResults;\n }\n assert.equal(count, expectedRowCount);\n }\n iModel.withQueryReader(sql, syncReaderCallback);\n const reader = iModel.createQueryReader(sql);\n await readerCallback(reader);\n });\n\n });\n\n describe(\"Tests for extendedType and extendType property behaviour of QueryPropertyMetaData\", () => {\n\n it(\"Id type column with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\n await readerCallback(reader);\n });\n\n it(\"Id type column without alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"Id\", metaData[0].extendedType);\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\n await readerCallback(reader);\n });\n\n it(\"ClassId type column\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"ClassId\", metaData[0].extendedType);\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"ClassId\", metaData[0].extendedType);\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\");\n await readerCallback(reader);\n });\n\n it(\"Column without extended type\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\");\n await readerCallback(reader);\n });\n\n it(\"Column without extended type with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(undefined, metaData[0].extendedType);\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\");\n await readerCallback(reader);\n });\n\n it(\"Geometric type column with alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader | ECSqlSyncReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\");\n await readerCallback(reader);\n });\n\n it(\"Geometric type column without alias\", async () => {\n const readerCallback = async (readerObj: ECSqlReader) => {\n const metaData = await readerObj.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\n const metaData = syncReader.getMetaData();\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n iModel.withQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\n const reader = iModel.createQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\");\n await readerCallback(reader);\n });\n\n });\n });\n}));\n\ndescribe(\"createQueryReader vs withQueryReader \", () => {\n /** Deletes an entire element tree, including sub-models, child elements and code scope references.\n * Items are deleted in bottom-up order. Definitions and Subjects are deleted after normal elements.\n * Call deleteNormalElements on each tree. Then call deleteSpecialElements.\n */\n class TestElementCascadingDeleter extends ElementTreeDeleter {\n protected shouldVisitCodeScopes(\n _elementId: Id64String,\n _scope: ElementTreeWalkerScope\n ) {\n return true;\n }\n\n /** The main tree-walking function */\n protected override processElementTree(\n element: Id64String,\n scope: ElementTreeWalkerScope\n ): void {\n if (this.shouldVisitCodeScopes(element, scope)) {\n this._processCodeScopes(element, scope);\n }\n super.processElementTree(element, scope);\n }\n /** Process code scope references */\n private _processCodeScopes(\n element: Id64String,\n scope: ElementTreeWalkerScope\n ) {\n const newScope = new ElementTreeWalkerScope(scope, element);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._iModel.withPreparedStatement(\n `\n SELECT ECInstanceId\n FROM bis.Element\n WHERE CodeScope.id=?\n AND Parent.id IS NULL\n `,\n (stmt) => {\n stmt.bindId(1, element);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const elementId = stmt.getValue(0).getId();\n this.processElementTree(elementId, newScope);\n }\n }\n );\n }\n }\n\n // Actual test begins here\n let iModelDb: SnapshotDb;\n\n function createTestIModelWithScopedPhysicalObject() {\n const pathForEmpty = IModelTestUtils.prepareOutputFile(\n \"ECReferenceTypesCache\",\n \"empty.bim\"\n );\n const testIModelDb = SnapshotDb.createEmpty(pathForEmpty, {\n rootSubject: { name: \"empty \" },\n });\n\n const subjectId = Subject.insert(\n testIModelDb,\n IModel.rootSubjectId,\n \"Subject\",\n \"Subject Description\"\n );\n\n const physicalModelId = PhysicalModel.insert(\n testIModelDb,\n subjectId,\n \"Physical\"\n );\n\n const definitionModelId = DefinitionModel.insert(\n testIModelDb,\n subjectId,\n \"Definition\"\n );\n\n const spatialCategoryId = IModelTestUtils.insertSpatialCategory(\n testIModelDb,\n definitionModelId,\n \"SpatialCategory\",\n ColorDef.green\n );\n\n const physicalObjectProps5: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n userLabel: \"ScopingElement\",\n };\n\n const scopingElement =\n testIModelDb.elements.insertElement(physicalObjectProps5);\n\n const childElement: PhysicalElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: physicalModelId,\n category: spatialCategoryId,\n code: { spec: \"0x1\", scope: scopingElement },\n userLabel: \"ScopedElement\",\n };\n testIModelDb.elements.insertElement(childElement);\n testIModelDb.saveChanges();\n return testIModelDb;\n }\n\n beforeEach(async () => {\n iModelDb = createTestIModelWithScopedPhysicalObject();\n });\n\n afterEach(async () => {\n iModelDb.close();\n });\n\n it(\"Failing while using createQueryReader()\", async () => {\n const sql = `\n SELECT ECInstanceId\n FROM ${PhysicalObject.classFullName}\n `;\n const reader = iModelDb.createQueryReader(sql, undefined, { usePrimaryConn: true });\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\n await reader.step(); // step to initialize reader\n const firstId = reader.current[0];\n elementTreeDeleter.deleteNormalElements(firstId);\n await reader.step(); // step to initialize reader\n const secondId = reader.current[0];\n // This is because ecsqlreader built using createQueryReader caches results and so when it tries to access the second element, it is already deleted from the database and it throws \"Not Found\" error.\n expect(() => elementTreeDeleter.deleteNormalElements(secondId)).to.throw();\n });\n\n it(\"Passing while using withQueryReader()\", async () => {\n const sql = `\n SELECT ECInstanceId\n FROM ${PhysicalObject.classFullName}\n `;\n iModelDb.withQueryReader(sql, (reader) => {\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\n let cntSteps = 0;\n while (reader.step()) {\n const id = reader.current[0];\n elementTreeDeleter.deleteNormalElements(id);\n cntSteps++;\n }\n assert.equal(cntSteps, 1);\n });\n });\n});\n\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlDatasets.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ECSqlDatasets.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"AA0KA,qBAAa,aAAa;WACJ,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CA4CnD"}
|
|
@@ -8,7 +8,7 @@ import { Id64 } from "@itwin/core-bentley";
|
|
|
8
8
|
import { IModelHost, SnapshotDb, SpatialCategory } from "../../../core-backend";
|
|
9
9
|
import { IModelTestUtils } from "../../IModelTestUtils";
|
|
10
10
|
import { Code, ColorDef, IModel, SubCategoryAppearance } from "@itwin/core-common";
|
|
11
|
-
import { Arc3d, IModelJson, Point2d, Point3d } from "@itwin/core-geometry";
|
|
11
|
+
import { Arc3d, IModelJson, Point2d, Point3d, Range3d } from "@itwin/core-geometry";
|
|
12
12
|
import { KnownTestLocations } from "../../KnownTestLocations";
|
|
13
13
|
function createElemProps(className, _iModelName, modId, catId, index) {
|
|
14
14
|
// add Geometry
|
|
@@ -39,6 +39,9 @@ function createElemProps(className, _iModelName, modId, catId, index) {
|
|
|
39
39
|
p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),
|
|
40
40
|
p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),
|
|
41
41
|
b: true,
|
|
42
|
+
range3d: index === 0
|
|
43
|
+
? new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer)
|
|
44
|
+
: new Uint8Array(new Range3d(2.2, 3.3, 4.4, 5.5, 6.6, 7.7).toFloat64Array().buffer),
|
|
42
45
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
43
46
|
array_b: [true, false, true],
|
|
44
47
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n } as TestElementWithNavProps;\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = iModel.elements.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n iModel.saveChanges();\n iModel.close();\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n range3d?: Uint8Array;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n range3d: index === 0\n ? new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer)\n : new Uint8Array(new Range3d(2.2, 3.3, 4.4, 5.5, 6.6, 7.7).toFloat64Array().buffer),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n } as TestElementWithNavProps;\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = iModel.elements.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n iModel.saveChanges();\n iModel.close();\n }\n}"]}
|
|
@@ -144,6 +144,10 @@ function runECSqlStatementTest(test, dataset) {
|
|
|
144
144
|
const parsedVal3d = JSON.parse(binder.value);
|
|
145
145
|
stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });
|
|
146
146
|
break;
|
|
147
|
+
case "range3d":
|
|
148
|
+
const parsedRange3d = JSON.parse(binder.value);
|
|
149
|
+
stmt.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });
|
|
150
|
+
break;
|
|
147
151
|
case "blob":
|
|
148
152
|
const arrayValues = binder.value.slice(1, -1).split(",");
|
|
149
153
|
const numbers = arrayValues.map((value) =>
|
|
@@ -270,6 +274,10 @@ function buildQueryBinder(test) {
|
|
|
270
274
|
const parsedVal3d = JSON.parse(binder.value);
|
|
271
275
|
params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));
|
|
272
276
|
break;
|
|
277
|
+
case "range3d":
|
|
278
|
+
const parsedRange3d = JSON.parse(binder.value);
|
|
279
|
+
params.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });
|
|
280
|
+
break;
|
|
273
281
|
case "blob":
|
|
274
282
|
const arrayValues = binder.value.slice(1, -1).split(",");
|
|
275
283
|
const numbers = arrayValues.map((value) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestRunner.test.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestRunner.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 } from \"@itwin/core-bentley\";\nimport { ECSqlRowArg, ECSqlStatement, ECSqlSyncReader, SnapshotDb, SynchronousQueryOptions } from \"../../../core-backend\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport { buildBinaryData, ECDbMarkdownTestParser, ECDbTestMode, ECDbTestProps, ECDbTestRowFormat } from \"./ECSqlTestParser\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\n\nenum TestDataset {\n AllProperties = \"AllProperties.bim\"\n}\n\nconst snapshotDbs: { [key in TestDataset]?: SnapshotDb } = {};\n\ndescribe(\"Markdown based ECDb test runner\", async () => {\n before(async () => {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", TestDataset.AllProperties);\n if (!fs.existsSync(datasetFilePath)) {\n throw new Error(`Dataset file ${datasetFilePath} does not exist`);\n }\n snapshotDbs[TestDataset.AllProperties] = SnapshotDb.openFile(datasetFilePath);\n });\n\n after(() => {\n for (const key in snapshotDbs) {\n if (snapshotDbs.hasOwnProperty(key)) {\n (snapshotDbs[key as keyof typeof snapshotDbs])?.close();\n }\n }\n });\n const tests: ECDbTestProps[] = ECDbMarkdownTestParser.parse();\n\n //TODO: Mechanism to run a single test, put something like it.only into the test md which causes this loop to only run those tests\n for (const test of tests) {\n if (!test.dataset) {\n logWarning(`Skipping test ${test.title} because it does not have a dataset`);\n continue;\n }\n\n if (test.dataset.toLowerCase() !== TestDataset.AllProperties.toLowerCase()) {\n logWarning(`Skipping test ${test.title} because dataset ${test.dataset} is not recognized`);\n continue;\n }\n const dataset = TestDataset.AllProperties;\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.Statement) {\n if (test.skip)\n it(`${test.fileName}: ${test.title} (Statement) skipped. Reason: ${test.skip}`);\n else if (test.only)\n it.only(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n else\n it(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n }\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.QueryReader) {\n if (test.skip) {\n it(`${test.fileName}: ${test.title} (ECSqlReader) skipped. Reason: ${test.skip}`);\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader) skipped. Reason: ${test.skip}`);\n }\n else if (test.only) {\n it.only(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it.only(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n else {\n it(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n }\n }\n});\n\nfunction runECSqlStatementTest(test: ECDbTestProps, dataset: TestDataset) {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let stmt: ECSqlStatement | undefined;\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n try {\n // TODO: statement options should be exposed through the markdown\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n stmt = imodel.prepareStatement(test.sql); // TODO: Wire up logic for tests we expect to fail during prepare\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during prepare of Statement: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n try {\n if (test.binders !== undefined) {\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n stmt.bindNull(id);\n break;\n case \"string\":\n stmt.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n stmt.bindInteger(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n stmt.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n stmt.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n stmt.bindIdSet(id, trimmedValues);\n break;\n case \"datetime\":\n stmt.bindDateTime(id, binder.value);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n stmt.bindPoint2d(id, { x: parsedVal2d.X, y: parsedVal2d.Y });\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n stmt.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"navigation\":\n stmt.bindNavigation(id, JSON.parse(binder.value));\n break;\n case \"array\":\n stmt.bindArray(id, JSON.parse(binder.value));\n break;\n case \"struct\":\n stmt.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n } // if test.binders\n\n let resultCount = 0;\n let stepResult: DbResult;\n while ((stepResult = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n const colCount = stmt.getColumnCount();\n assert.strictEqual(colCount, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colCount}`);\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.getPropertyName(), expectedColInfo.name, `Expected property name ${expectedColInfo.name} but got ${colInfo.getPropertyName()} for column index ${i}`);\n //if (expectedColInfo.isDynamicProp !== undefined) TODO: Is this not exposed?\n // assert.strictEqual(colInfo..isDynamicProperty, expectedColInfo.isDynamicProp, `Expected dynamic property ${expectedColInfo.isDynamicProp} but got ${colInfo.isDynamicProperty} for column index ${i}`);\n // TODO: Extended type name not exposed??\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.isGeneratedProperty(), expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.isGeneratedProperty()} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.getAccessString(), expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.getAccessString()} for column index ${i}`);\n if (expectedColInfo.type !== undefined)\n assert.strictEqual(ECSqlValueType[colInfo.getType()], expectedColInfo.type, `Expected type ${expectedColInfo.type} but got ${ECSqlValueType[colInfo.getType()]} for column index ${i}`);\n if (expectedColInfo.originPropertyName !== undefined)\n assert.strictEqual(colInfo.getOriginPropertyName(), expectedColInfo.originPropertyName, `Expected Origin PropertyName ${expectedColInfo.originPropertyName} but got ${colInfo.getOriginPropertyName()} for column index ${i}`);\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n expectedResult = buildBinaryData(expectedResult);\n const rowArgs: ECSqlRowArg = { rowFormat: getRowFormat(test.rowFormat), classIdsToClassNames: test.convertClassIdsToClassNames };\n const actualResult = stmt.getRow(rowArgs);\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n stmt[Symbol.dispose]();\n stmt = undefined;\n\n if (resultCount === 0 && test.stepStatus) {\n const stepResultString = DbResult[stepResult];\n assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n } finally {\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n }\n}\n\nfunction getRowFormat(rowFormat: ECDbTestRowFormat): QueryRowFormat {\n switch (rowFormat) {\n case ECDbTestRowFormat.ECSqlNames:\n return QueryRowFormat.UseECSqlPropertyNames;\n case ECDbTestRowFormat.ECSqlIndexes:\n return QueryRowFormat.UseECSqlPropertyIndexes;\n case ECDbTestRowFormat.JsNames:\n return QueryRowFormat.UseJsPropertyNames;\n default:\n return QueryRowFormat.UseECSqlPropertyNames;\n }\n}\n\n/** Builds a QueryBinder from the test's binder definitions. Returns undefined when the test has no binders. */\nfunction buildQueryBinder(test: ECDbTestProps): QueryBinder | undefined {\n if (test.binders === undefined)\n return undefined;\n\n const params = new QueryBinder();\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n params.bindNull(id);\n break;\n case \"string\":\n params.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n params.bindInt(id, Number.parseInt(binder.value));\n break;\n case \"long\":\n // eslint-disable-next-line radix\n params.bindLong(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n params.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n params.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n params.bindIdSet(id, trimmedValues);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n params.bindPoint2d(id, new Point2d(parsedVal2d.X, parsedVal2d.Y));\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n params.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"struct\":\n params.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n return params;\n}\n\n/** Builds the common query options object from the test configuration. */\nfunction buildReaderQueryOptions(test: ECDbTestProps): QueryOptions {\n const queryOptions: QueryOptions = {};\n queryOptions.rowFormat = getRowFormat(test.rowFormat);\n if (test.abbreviateBlobs)\n queryOptions.abbreviateBlobs = true;\n if (test.convertClassIdsToClassNames) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n queryOptions.convertClassIdsToClassNames = true;\n }\n return queryOptions;\n}\n\n/**\n * Shared assertion logic for QueryReader tests that operates on the result rows and column metadata.\n * Used by both ECSqlReader and ECSqlSyncReader test paths.\n */\nfunction runResultAssertions(test: ECDbTestProps, rows: any, colMetaData: QueryPropertyMetaData[]) {\n let resultCount = 0;\n while (resultCount < rows.length) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n assert.strictEqual(colMetaData.length, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colMetaData.length}`);\n for (let i = 0; i < colMetaData.length; i++) {\n const colInfo = colMetaData[i];\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.name, expectedColInfo.name, `Expected name ${expectedColInfo.name} but got ${colInfo.name} for column index ${i}`);\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.generated, expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.generated} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.accessString, expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.accessString} for column index ${i}`);\n if (expectedColInfo.typeName !== undefined)\n assert.strictEqual(colInfo.typeName, expectedColInfo.typeName, `Expected type name ${expectedColInfo.typeName} but got ${colInfo.typeName} for column index ${i}`);\n if (expectedColInfo.className !== undefined)\n assert.strictEqual(colInfo.className, expectedColInfo.className, `Expected class name ${expectedColInfo.className} but got ${colInfo.className} for column index ${i}`);\n assert.strictEqual(colInfo.extendedType, expectedColInfo.extendedType, `Expected extended type ${expectedColInfo.extendedType} but got ${colInfo.extendedType} for column index ${i}`);\n assert.strictEqual(colInfo.extendType, expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType, `Expected extend type ${expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType} but got ${colInfo.extendType} for column index ${i}`); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n // replace props in expected result, TODO: optimize this\n expectedResult = buildBinaryData(expectedResult);\n\n const actualResult = rows[resultCount]; // TODO: should we test getValue() as well?\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlReader test paths.\n */\nasync function runAssertionsOnReader(test: ECDbTestProps, reader: ECSqlReader, label: string): Promise<void> {\n let rows;\n try {\n rows = await reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = await reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlSyncReader test paths.\n */\nfunction runAssertionsOnSyncReader(test: ECDbTestProps, reader: ECSqlSyncReader, label: string): void {\n let rows;\n try {\n rows = reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\nasync function runECSqlReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n let reader: ECSqlReader;\n try {\n reader = imodel.createQueryReader(test.sql, params, queryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlReader: ${error.message}`);\n }\n\n await runAssertionsOnReader(test, reader, \"ECSqlReader\");\n}\n\nasync function runECSqlSyncReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n try {\n imodel.withQueryReader(test.sql, reader => {\n runAssertionsOnSyncReader(test, reader, \"ECSqlSyncReader\");\n }, params, queryOptions as SynchronousQueryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlSyncReader: ${error.message}`);\n }\n}\n\nfunction checkingExpectedResults(rowFormat: ECDbTestRowFormat, actualResult: any, expectedResult: any, indexesToInclude?: number[]) {\n if (rowFormat === ECDbTestRowFormat.ECSqlIndexes && indexesToInclude) {\n let i: any = 0;\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[indexesToInclude[i]] === \"string\" ? actualResult[indexesToInclude[i]].trim() : actualResult[indexesToInclude[i]];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[indexesToInclude[i]])}`);\n i++;\n }\n }\n else {\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[key] === \"string\" ? actualResult[key].trim() : actualResult[key];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[key])}`);\n }\n }\n}\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}"]}
|
|
1
|
+
{"version":3,"file":"ECSqlTestRunner.test.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestRunner.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 } from \"@itwin/core-bentley\";\nimport { ECSqlRowArg, ECSqlStatement, ECSqlSyncReader, SnapshotDb, SynchronousQueryOptions } from \"../../../core-backend\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport { buildBinaryData, ECDbMarkdownTestParser, ECDbTestMode, ECDbTestProps, ECDbTestRowFormat } from \"./ECSqlTestParser\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\n\nenum TestDataset {\n AllProperties = \"AllProperties.bim\"\n}\n\nconst snapshotDbs: { [key in TestDataset]?: SnapshotDb } = {};\n\ndescribe(\"Markdown based ECDb test runner\", async () => {\n before(async () => {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", TestDataset.AllProperties);\n if (!fs.existsSync(datasetFilePath)) {\n throw new Error(`Dataset file ${datasetFilePath} does not exist`);\n }\n snapshotDbs[TestDataset.AllProperties] = SnapshotDb.openFile(datasetFilePath);\n });\n\n after(() => {\n for (const key in snapshotDbs) {\n if (snapshotDbs.hasOwnProperty(key)) {\n (snapshotDbs[key as keyof typeof snapshotDbs])?.close();\n }\n }\n });\n const tests: ECDbTestProps[] = ECDbMarkdownTestParser.parse();\n\n //TODO: Mechanism to run a single test, put something like it.only into the test md which causes this loop to only run those tests\n for (const test of tests) {\n if (!test.dataset) {\n logWarning(`Skipping test ${test.title} because it does not have a dataset`);\n continue;\n }\n\n if (test.dataset.toLowerCase() !== TestDataset.AllProperties.toLowerCase()) {\n logWarning(`Skipping test ${test.title} because dataset ${test.dataset} is not recognized`);\n continue;\n }\n const dataset = TestDataset.AllProperties;\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.Statement) {\n if (test.skip)\n it(`${test.fileName}: ${test.title} (Statement) skipped. Reason: ${test.skip}`);\n else if (test.only)\n it.only(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n else\n it(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n }\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.QueryReader) {\n if (test.skip) {\n it(`${test.fileName}: ${test.title} (ECSqlReader) skipped. Reason: ${test.skip}`);\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader) skipped. Reason: ${test.skip}`);\n }\n else if (test.only) {\n it.only(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it.only(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n else {\n it(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n }\n }\n});\n\nfunction runECSqlStatementTest(test: ECDbTestProps, dataset: TestDataset) {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let stmt: ECSqlStatement | undefined;\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n try {\n // TODO: statement options should be exposed through the markdown\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n stmt = imodel.prepareStatement(test.sql); // TODO: Wire up logic for tests we expect to fail during prepare\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during prepare of Statement: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n try {\n if (test.binders !== undefined) {\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n stmt.bindNull(id);\n break;\n case \"string\":\n stmt.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n stmt.bindInteger(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n stmt.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n stmt.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n stmt.bindIdSet(id, trimmedValues);\n break;\n case \"datetime\":\n stmt.bindDateTime(id, binder.value);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n stmt.bindPoint2d(id, { x: parsedVal2d.X, y: parsedVal2d.Y });\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n stmt.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n stmt.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"navigation\":\n stmt.bindNavigation(id, JSON.parse(binder.value));\n break;\n case \"array\":\n stmt.bindArray(id, JSON.parse(binder.value));\n break;\n case \"struct\":\n stmt.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n } // if test.binders\n\n let resultCount = 0;\n let stepResult: DbResult;\n while ((stepResult = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n const colCount = stmt.getColumnCount();\n assert.strictEqual(colCount, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colCount}`);\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.getPropertyName(), expectedColInfo.name, `Expected property name ${expectedColInfo.name} but got ${colInfo.getPropertyName()} for column index ${i}`);\n //if (expectedColInfo.isDynamicProp !== undefined) TODO: Is this not exposed?\n // assert.strictEqual(colInfo..isDynamicProperty, expectedColInfo.isDynamicProp, `Expected dynamic property ${expectedColInfo.isDynamicProp} but got ${colInfo.isDynamicProperty} for column index ${i}`);\n // TODO: Extended type name not exposed??\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.isGeneratedProperty(), expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.isGeneratedProperty()} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.getAccessString(), expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.getAccessString()} for column index ${i}`);\n if (expectedColInfo.type !== undefined)\n assert.strictEqual(ECSqlValueType[colInfo.getType()], expectedColInfo.type, `Expected type ${expectedColInfo.type} but got ${ECSqlValueType[colInfo.getType()]} for column index ${i}`);\n if (expectedColInfo.originPropertyName !== undefined)\n assert.strictEqual(colInfo.getOriginPropertyName(), expectedColInfo.originPropertyName, `Expected Origin PropertyName ${expectedColInfo.originPropertyName} but got ${colInfo.getOriginPropertyName()} for column index ${i}`);\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n expectedResult = buildBinaryData(expectedResult);\n const rowArgs: ECSqlRowArg = { rowFormat: getRowFormat(test.rowFormat), classIdsToClassNames: test.convertClassIdsToClassNames };\n const actualResult = stmt.getRow(rowArgs);\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n stmt[Symbol.dispose]();\n stmt = undefined;\n\n if (resultCount === 0 && test.stepStatus) {\n const stepResultString = DbResult[stepResult];\n assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n } finally {\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n }\n}\n\nfunction getRowFormat(rowFormat: ECDbTestRowFormat): QueryRowFormat {\n switch (rowFormat) {\n case ECDbTestRowFormat.ECSqlNames:\n return QueryRowFormat.UseECSqlPropertyNames;\n case ECDbTestRowFormat.ECSqlIndexes:\n return QueryRowFormat.UseECSqlPropertyIndexes;\n case ECDbTestRowFormat.JsNames:\n return QueryRowFormat.UseJsPropertyNames;\n default:\n return QueryRowFormat.UseECSqlPropertyNames;\n }\n}\n\n/** Builds a QueryBinder from the test's binder definitions. Returns undefined when the test has no binders. */\nfunction buildQueryBinder(test: ECDbTestProps): QueryBinder | undefined {\n if (test.binders === undefined)\n return undefined;\n\n const params = new QueryBinder();\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n params.bindNull(id);\n break;\n case \"string\":\n params.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n params.bindInt(id, Number.parseInt(binder.value));\n break;\n case \"long\":\n // eslint-disable-next-line radix\n params.bindLong(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n params.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n params.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n params.bindIdSet(id, trimmedValues);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n params.bindPoint2d(id, new Point2d(parsedVal2d.X, parsedVal2d.Y));\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n params.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n params.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"struct\":\n params.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n return params;\n}\n\n/** Builds the common query options object from the test configuration. */\nfunction buildReaderQueryOptions(test: ECDbTestProps): QueryOptions {\n const queryOptions: QueryOptions = {};\n queryOptions.rowFormat = getRowFormat(test.rowFormat);\n if (test.abbreviateBlobs)\n queryOptions.abbreviateBlobs = true;\n if (test.convertClassIdsToClassNames) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n queryOptions.convertClassIdsToClassNames = true;\n }\n return queryOptions;\n}\n\n/**\n * Shared assertion logic for QueryReader tests that operates on the result rows and column metadata.\n * Used by both ECSqlReader and ECSqlSyncReader test paths.\n */\nfunction runResultAssertions(test: ECDbTestProps, rows: any, colMetaData: QueryPropertyMetaData[]) {\n let resultCount = 0;\n while (resultCount < rows.length) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n assert.strictEqual(colMetaData.length, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colMetaData.length}`);\n for (let i = 0; i < colMetaData.length; i++) {\n const colInfo = colMetaData[i];\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.name, expectedColInfo.name, `Expected name ${expectedColInfo.name} but got ${colInfo.name} for column index ${i}`);\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.generated, expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.generated} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.accessString, expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.accessString} for column index ${i}`);\n if (expectedColInfo.typeName !== undefined)\n assert.strictEqual(colInfo.typeName, expectedColInfo.typeName, `Expected type name ${expectedColInfo.typeName} but got ${colInfo.typeName} for column index ${i}`);\n if (expectedColInfo.className !== undefined)\n assert.strictEqual(colInfo.className, expectedColInfo.className, `Expected class name ${expectedColInfo.className} but got ${colInfo.className} for column index ${i}`);\n assert.strictEqual(colInfo.extendedType, expectedColInfo.extendedType, `Expected extended type ${expectedColInfo.extendedType} but got ${colInfo.extendedType} for column index ${i}`);\n assert.strictEqual(colInfo.extendType, expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType, `Expected extend type ${expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType} but got ${colInfo.extendType} for column index ${i}`); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n // replace props in expected result, TODO: optimize this\n expectedResult = buildBinaryData(expectedResult);\n\n const actualResult = rows[resultCount]; // TODO: should we test getValue() as well?\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlReader test paths.\n */\nasync function runAssertionsOnReader(test: ECDbTestProps, reader: ECSqlReader, label: string): Promise<void> {\n let rows;\n try {\n rows = await reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = await reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlSyncReader test paths.\n */\nfunction runAssertionsOnSyncReader(test: ECDbTestProps, reader: ECSqlSyncReader, label: string): void {\n let rows;\n try {\n rows = reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\nasync function runECSqlReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n let reader: ECSqlReader;\n try {\n reader = imodel.createQueryReader(test.sql, params, queryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlReader: ${error.message}`);\n }\n\n await runAssertionsOnReader(test, reader, \"ECSqlReader\");\n}\n\nasync function runECSqlSyncReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n try {\n imodel.withQueryReader(test.sql, reader => {\n runAssertionsOnSyncReader(test, reader, \"ECSqlSyncReader\");\n }, params, queryOptions as SynchronousQueryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlSyncReader: ${error.message}`);\n }\n}\n\nfunction checkingExpectedResults(rowFormat: ECDbTestRowFormat, actualResult: any, expectedResult: any, indexesToInclude?: number[]) {\n if (rowFormat === ECDbTestRowFormat.ECSqlIndexes && indexesToInclude) {\n let i: any = 0;\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[indexesToInclude[i]] === \"string\" ? actualResult[indexesToInclude[i]].trim() : actualResult[indexesToInclude[i]];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[indexesToInclude[i]])}`);\n i++;\n }\n }\n else {\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[key] === \"string\" ? actualResult[key].trim() : actualResult[key];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[key])}`);\n }\n }\n}\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-backend",
|
|
3
|
-
"version": "5.8.0-dev.
|
|
3
|
+
"version": "5.8.0-dev.18",
|
|
4
4
|
"description": "iTwin.js backend components",
|
|
5
5
|
"main": "lib/cjs/core-backend.js",
|
|
6
6
|
"module": "lib/esm/core-backend.js",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@opentelemetry/api": "^1.0.4",
|
|
30
|
-
"@itwin/core-bentley": "5.8.0-dev.
|
|
31
|
-
"@itwin/
|
|
32
|
-
"@itwin/core-common": "5.8.0-dev.
|
|
33
|
-
"@itwin/
|
|
30
|
+
"@itwin/core-bentley": "5.8.0-dev.18",
|
|
31
|
+
"@itwin/core-geometry": "5.8.0-dev.18",
|
|
32
|
+
"@itwin/core-common": "5.8.0-dev.18",
|
|
33
|
+
"@itwin/ecschema-metadata": "5.8.0-dev.18"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
36
36
|
"@opentelemetry/api": {
|
|
@@ -77,17 +77,17 @@
|
|
|
77
77
|
"marked": "^14.1.3",
|
|
78
78
|
"sql-formatter": "^15.4.6",
|
|
79
79
|
"webpack": "^5.97.1",
|
|
80
|
-
"@itwin/
|
|
81
|
-
"@itwin/
|
|
82
|
-
"@itwin/
|
|
83
|
-
"@itwin/
|
|
84
|
-
"@itwin/
|
|
85
|
-
"@itwin/
|
|
80
|
+
"@itwin/core-bentley": "5.8.0-dev.18",
|
|
81
|
+
"@itwin/build-tools": "5.8.0-dev.18",
|
|
82
|
+
"@itwin/core-geometry": "5.8.0-dev.18",
|
|
83
|
+
"@itwin/ecschema-metadata": "5.8.0-dev.18",
|
|
84
|
+
"@itwin/ecschema-locaters": "5.8.0-dev.18",
|
|
85
|
+
"@itwin/ecsql-common": "5.8.0-dev.18",
|
|
86
86
|
"internal-tools": "3.0.0-dev.69",
|
|
87
|
-
"@itwin/core-common": "5.8.0-dev.
|
|
87
|
+
"@itwin/core-common": "5.8.0-dev.18"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@bentley/imodeljs-native": "5.8.
|
|
90
|
+
"@bentley/imodeljs-native": "5.8.21",
|
|
91
91
|
"@itwin/object-storage-azure": "^3.0.4",
|
|
92
92
|
"@azure/storage-blob": "^12.28.0",
|
|
93
93
|
"form-data": "^4.0.4",
|