@itwin/core-backend 5.8.0-dev.5 → 5.8.0-dev.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -1
- package/lib/cjs/ECDb.d.ts +26 -0
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +53 -2
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.d.ts +66 -0
- package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -0
- package/lib/cjs/ECSqlRowExecutor.js +135 -0
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -0
- package/lib/cjs/ECSqlStatement.d.ts +13 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +30 -0
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts +104 -0
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -0
- package/lib/cjs/ECSqlSyncReader.js +191 -0
- package/lib/cjs/ECSqlSyncReader.js.map +1 -0
- package/lib/cjs/IModelDb.d.ts +21 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +43 -0
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +10 -2
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/ECDb.d.ts +26 -0
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +54 -3
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.d.ts +66 -0
- package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -0
- package/lib/esm/ECSqlRowExecutor.js +131 -0
- package/lib/esm/ECSqlRowExecutor.js.map +1 -0
- package/lib/esm/ECSqlStatement.d.ts +13 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +30 -0
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts +104 -0
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -0
- package/lib/esm/ECSqlSyncReader.js +187 -0
- package/lib/esm/ECSqlSyncReader.js.map +1 -0
- package/lib/esm/IModelDb.d.ts +21 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +43 -0
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IpcHost.d.ts.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +10 -2
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +21 -12
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts +2 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts.map +1 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +122 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -0
- package/lib/esm/test/ecdb/QueryReaders.test.d.ts +2 -0
- package/lib/esm/test/ecdb/QueryReaders.test.d.ts.map +1 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js +1427 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -0
- package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js +7 -5
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +172 -98
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +53 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.d.ts +2 -0
- package/lib/esm/test/standalone/iModelDb.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/iModelDb.test.js +35 -0
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -0
- package/package.json +13 -13
- package/lib/esm/test/ecdb/ECSqlReader.test.d.ts +0 -2
- package/lib/esm/test/ecdb/ECSqlReader.test.d.ts.map +0 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +0 -669
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryReaders.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/QueryReaders.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { DbResult, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ColorDef, ECSqlReader, IModel, PhysicalElementProps, QueryBinder, QueryOptionsBuilder, QueryRowFormat, QueryRowProxy } from \"@itwin/core-common\";\r\nimport { DefinitionModel, ECSqlSyncReader, ElementTreeDeleter, ElementTreeWalkerScope, PhysicalModel, PhysicalObject, SnapshotDb, Subject } from \"../../core-backend\";\r\nimport { ECSqlWriteStatement } from \"../../ECSqlStatement\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\r\nimport * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nchai.use(chaiAsPromised);\r\nconst assert = chai.assert;\r\nconst expect = chai.expect;\r\n\r\n\r\ndescribe(\"QueryReaders - createQueryReader() and withQueryReader() api tests\", (() => {\r\n let iModel: SnapshotDb;\r\n\r\n before(async () => {\r\n iModel = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n });\r\n\r\n after(async () => {\r\n iModel.close();\r\n });\r\n\r\n describe(\"bind Id64 enumerable\", async () => {\r\n const outDir = KnownTestLocations.outputDir;\r\n\r\n it(\"ecsql reader simple\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n ecdb.saveChanges();\r\n const params = new QueryBinder();\r\n params.bindIdSet(1, [\"0x32\"]);\r\n const optionBuilder = new QueryOptionsBuilder();\r\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const rows = await readerObj.toArray();\r\n assert.equal(rows[0].id, \"0x32\");\r\n assert.equal(rows.length, 1);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const rows = syncReader.toArray();\r\n assert.equal(rows[0].id, \"0x32\");\r\n assert.equal(rows.length, 1);\r\n }\r\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncReaderCallback, params, optionBuilder.getOptions());\r\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"ecsql reader simple for IdSet\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n ecdb.saveChanges();\r\n const params = new QueryBinder();\r\n params.bindIdSet(1, [\"0x32\"]);\r\n const optionBuilder = new QueryOptionsBuilder();\r\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const rows = await readerObj.toArray();\r\n assert.equal(rows[0].id, \"0x32\");\r\n assert.equal(rows.length, 1);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const rows = syncReader.toArray();\r\n assert.equal(rows[0].id, \"0x32\");\r\n assert.equal(rows.length, 1);\r\n }\r\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", syncReaderCallback, params, optionBuilder.getOptions());\r\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef, IdSet(?) WHERE id = ECInstanceId ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\", params, optionBuilder.getOptions());\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"bindIdSet not working with integer Ids\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`)\r\n assert.isTrue(ecdb.isOpen);\r\n ecdb.saveChanges();\r\n const params = new QueryBinder();\r\n params.bindIdSet(1, [\"50\"]);\r\n const optionBuilder = new QueryOptionsBuilder();\r\n optionBuilder.setRowFormat(QueryRowFormat.UseJsPropertyNames);\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const rows = await readerObj.toArray();\r\n assert.equal(rows.length, 0);\r\n }\r\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const rows = syncReader.toArray();\r\n assert.equal(rows.length, 0);\r\n }\r\n ecdb.withQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", syncreaderCallback, params, optionBuilder.getOptions());\r\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, Name FROM meta.ECClassDef WHERE InVirtualSet(?, ECInstanceId)\", params, optionBuilder.getOptions());\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"ecsql reader simple using query reader\", async () => {\r\n using ecdb = ECDbTestHelper.createECDb(outDir, \"test.ecdb\",\r\n `<ECSchema schemaName=\"Test\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\r\n <ECProperty propertyName=\"n\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`);\r\n assert.isTrue(ecdb.isOpen);\r\n\r\n const insertResult = await ecdb.withCachedWriteStatement(\"INSERT INTO ts.Foo(n) VALUES(20)\", async (stmt: ECSqlWriteStatement) => {\r\n return stmt.stepForInsert();\r\n });\r\n ecdb.saveChanges();\r\n assert.equal(insertResult.status, DbResult.BE_SQLITE_DONE);\r\n assert.equal(insertResult.id, \"0x1\");\r\n\r\n const params = new QueryBinder();\r\n params.bindId(\"firstId\", insertResult.id!);\r\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\r\n assert.equal(queryReader.current.id, \"0x1\");\r\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\r\n assert.equal(queryReader.current.n, 20);\r\n assert.equal(queryReader.current.ID, \"0x1\");\r\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\r\n assert.equal(queryReader.current[0], \"0x1\");\r\n assert.equal(queryReader.current[1], 20);\r\n\r\n const row0 = queryReader.current.toRow();\r\n assert.equal(row0.ECInstanceId, \"0x1\");\r\n assert.equal(row0.n, 20);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n assert.isTrue(await readerObj.step());\r\n resultAssertCallback(readerObj);\r\n assert.isFalse(await readerObj.step());\r\n }\r\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n assert.isTrue(syncReader.step());\r\n resultAssertCallback(syncReader);\r\n assert.isFalse(syncReader.step());\r\n }\r\n ecdb.withQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId LIMIT 1\", synReaderCallback, params);\r\n const reader = ecdb.createQueryReader(\"SELECT ECInstanceId, n FROM ts.Foo WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"ecsql reader simple using query row reader\", async () => {\r\n // Use existing element from test.bim\r\n const elementId = \"0x1\";\r\n const params = new QueryBinder();\r\n params.bindId(\"firstId\", elementId);\r\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader) => {\r\n assert.equal(queryReader.current.id, \"0x1\");\r\n assert.equal(queryReader.current.ecinstanceid, \"0x1\");\r\n assert.isDefined(queryReader.current.ecclassid);\r\n assert.equal(queryReader.current.ID, \"0x1\");\r\n assert.equal(queryReader.current.ECINSTANCEID, \"0x1\");\r\n assert.equal(queryReader.current[0], \"0x1\");\r\n assert.isDefined(queryReader.current[1]);\r\n\r\n const row0 = queryReader.current.toRow();\r\n assert.equal(row0.ECInstanceId, \"0x1\");\r\n assert.isDefined(row0.ECClassId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n assert.isTrue(await readerObj.step());\r\n resultAssertCallback(readerObj);\r\n assert.isFalse(await readerObj.step());\r\n }\r\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n assert.isTrue(syncReader.step());\r\n resultAssertCallback(syncReader);\r\n assert.isFalse(syncReader.step());\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", synReaderCallback, params);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element WHERE ECInstanceId=:firstId\", params, { limit: { count: 1 } });\r\n await readerCallback(reader);\r\n });\r\n });\r\n\r\n describe(\"Works as iterable iterator\", () => {\r\n\r\n it(\"iterable in for loop\", async () => {\r\n const expectedRowCount = 46; // 46 Elements in test.bim\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let actualRowCount = 0;\r\n for await (const row of readerObj) {\r\n actualRowCount++;\r\n assert.isDefined(row[0]);\r\n }\r\n assert.equal(actualRowCount, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let actualRowCount = 0;\r\n for (const row of syncReader) {\r\n actualRowCount++;\r\n assert.isDefined(row[0]);\r\n }\r\n assert.equal(actualRowCount, expectedRowCount);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"iterable with .next()\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let row: any;\r\n let actualRowCount = 0;\r\n while ((row = await readerObj.next()).done === false) {\r\n actualRowCount++;\r\n assert.equal(row.value[0], `0x${actualRowCount}`);\r\n }\r\n assert.equal(actualRowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let row: any;\r\n let actualRowCount = 0;\r\n while ((row = syncReader.next()).done === false) {\r\n actualRowCount++;\r\n assert.equal(row.value[0], `0x${actualRowCount}`);\r\n }\r\n assert.equal(actualRowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Should not fail on empty array\", async () => {\r\n const idSet: Id64String[] = [];\r\n const binder = QueryBinder.from([idSet]);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ECClassId, Name from ecdbf.ExternalFileInfo WHERE InVirtualSet(?, ECInstanceId)\", binder);\r\n assert.isFalse(await reader.step());\r\n });\r\n\r\n });\r\n\r\n describe(\"Common usages\", () => {\r\n\r\n describe(\"Get all rows\", () => {\r\n const expectedRowCount = 46; // 46 Elements in test.bim\r\n\r\n it(\"Get all rows using iterable iterator\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let rowCount = 0;\r\n for await (const _row of readerObj) {\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let rowCount = 0;\r\n for (const _row of syncReader) {\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, expectedRowCount);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get all rows using step\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, expectedRowCount);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get all rows using toArray\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const rows = await readerObj.toArray();\r\n assert.equal(rows.length, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const rows = syncReader.toArray();\r\n assert.equal(rows.length, expectedRowCount);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element\");\r\n await readerCallback(reader);\r\n });\r\n\r\n });\r\n\r\n describe(\"Get id from each row\", () => {\r\n\r\n it(\"Get id using iterable iterator with unspecified rowFormat\", async () => {\r\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\r\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().id, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\r\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\r\n const resultAssertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using step with unspecified rowFormat\", async () => {\r\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const synReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", synReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using step with UseJsPropertyNames rowFormat\", async () => {\r\n const resultAssertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().id, expectedId);\r\n }\r\n\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultAssertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using step with UseECSqlPropertyNames rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get id using step with UseECSqlPropertyIndexes rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM meta.ECSchemaDef LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n const reader = iModel.createQueryReader(\"SELECT * FROM meta.ECSchemaDef\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n await readerCallback(reader);\r\n });\r\n });\r\n\r\n describe(\"Get duplicate property names\", () => {\r\n\r\n it(\"Get duplicate property names using iterable iterator with unspecified rowFormat\", async () => {\r\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\r\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get duplicate property names using iterable iterator with UseJsPropertyNames rowFormat\", async () => {\r\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\r\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().id, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\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 });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyNames rowFormat\", async () => {\r\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\r\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\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 });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get duplicate property names using iterable iterator with UseECSqlPropertyIndexes rowFormat\", async () => {\r\n const expectedIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\"];\r\n const resultassertCallback = (row: QueryRowProxy, expectedId: string) => {\r\n assert.equal(row[0], expectedId);\r\n assert.equal(row.id, expectedId);\r\n assert.equal(row.ecinstanceid, expectedId);\r\n assert.equal(row.ECINSTANCEID, expectedId);\r\n assert.equal(row.ECInstanceId, expectedId);\r\n assert.equal(row.toArray()[0], expectedId);\r\n assert.equal(row.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for await (const row of readerObj) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncreaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n for (const row of syncReader) {\r\n const currentExpectedId = expectedIds[counter - 1];\r\n resultassertCallback(row, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT * FROM bis.Element c JOIN bis.Element p ON p.ECInstanceId = c.ECInstanceId LIMIT 5\", syncreaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\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 });\r\n await readerCallback(reader);\r\n });\r\n });\r\n\r\n describe(\"Get specific values\", () => {\r\n\r\n it(\"Get only ECInstanceId with unspecified rowFormat\", async () => {\r\n const resuktassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resuktassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resuktassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get only ECInstanceId with UseJsPropertyNames rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().id, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get only ECInstanceId with UseECSqlPropertyNames rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get only ECInstanceId with UseECSqlPropertyIndexes rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.id, expectedId);\r\n assert.equal(queryReader.current.ecinstanceid, expectedId);\r\n assert.equal(queryReader.current.ECINSTANCEID, expectedId);\r\n assert.equal(queryReader.current.ECInstanceId, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().ECInstanceId, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get one column with custom name with unspecified rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.customColumnName, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 } });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get one column with custom name with UseJsPropertyNames rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.customColumnName, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get one column with custom name with UseECSqlPropertyNames rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.customColumnName, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get one column with custom name with UseECSqlPropertyIndexes rowFormat\", async () => {\r\n const resultassertCallback = (queryReader: ECSqlReader | ECSqlSyncReader, expectedId: string) => {\r\n assert.equal(queryReader.current[0], expectedId);\r\n assert.equal(queryReader.current.customColumnName, expectedId);\r\n assert.equal(queryReader.current.toArray()[0], expectedId);\r\n assert.equal(queryReader.current.toRow().customColumnName, expectedId);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (await readerObj.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(readerObj, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let counter = 1;\r\n let rowCount = 0;\r\n while (syncReader.step()) {\r\n const currentExpectedId = `0x${counter}`;\r\n resultassertCallback(syncReader, currentExpectedId);\r\n counter++;\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 5);\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC LIMIT 5\", syncReaderCallback, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", undefined, { limit: { count: 5 }, rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\r\n await readerCallback(reader);\r\n });\r\n });\r\n\r\n describe(\"Get count of results\", () => {\r\n const expectedRowCount = 46; // 46 Elements in test.bim\r\n const sql = \"SELECT COUNT(*) numResults FROM (SELECT * FROM bis.Element)\";\r\n\r\n it(\"Get count of rows using current index\", async () => {\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n syncReader.step();\r\n assert.equal(syncReader.current[0] as number, expectedRowCount);\r\n }\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n await readerObj.step();\r\n assert.equal(readerObj.current[0] as number, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using current column name\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n await readerObj.step();\r\n assert.equal(readerObj.current.numResults as number, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n syncReader.step();\r\n assert.equal(syncReader.current.numResults as number, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using current and toRow\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n await readerObj.step();\r\n assert.equal(readerObj.current.toRow().numResults as number, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n syncReader.step();\r\n assert.equal(syncReader.current.toRow().numResults as number, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using toArray result itself\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n await readerObj.step();\r\n assert.equal(readerObj.current.toArray()[0] as number, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n syncReader.step();\r\n assert.equal(syncReader.current.toArray()[0] as number, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using iterable iterator and index\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let count = 0;\r\n for await (const row of readerObj) {\r\n count = row[0] as number;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let count = 0;\r\n for (const row of syncReader) {\r\n count = row[0] as number;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using iterable iterator and column name\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let count = 0;\r\n for await (const row of readerObj) {\r\n count = row.numResults as number;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let count = 0;\r\n for (const row of syncReader) {\r\n count = row.numResults as number;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Get count of rows using iterable iterator and toRow\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n let count = 0;\r\n for await (const row of readerObj) {\r\n count = row.toRow().numResults;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n let count = 0;\r\n for (const row of syncReader) {\r\n count = row.toRow().numResults;\r\n }\r\n assert.equal(count, expectedRowCount);\r\n }\r\n iModel.withQueryReader(sql, syncReaderCallback);\r\n const reader = iModel.createQueryReader(sql);\r\n await readerCallback(reader);\r\n });\r\n\r\n });\r\n\r\n describe(\"Tests for extendedType and extendType property behaviour of QueryPropertyMetaData\", () => {\r\n\r\n it(\"Id type column with alias\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(\"Id\", metaData[0].extendedType);\r\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(\"Id\", metaData[0].extendedType);\r\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId customColumnName FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Id type column without alias\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(\"Id\", metaData[0].extendedType);\r\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(\"Id\", metaData[0].extendedType);\r\n assert.equal(\"Id\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM meta.ECSchemaDef ORDER BY ECInstanceId ASC\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"ClassId type column\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(\"ClassId\", metaData[0].extendedType);\r\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(\"ClassId\", metaData[0].extendedType);\r\n assert.equal(\"ClassId\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT ECClassId FROM bis.Element ORDER BY ECClassId ASC\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Column without extended type\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(undefined, metaData[0].extendedType);\r\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(undefined, metaData[0].extendedType);\r\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT s.Name FROM meta.ECSchemaDef s ORDER BY s.Name ASC\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Column without extended type with alias\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(undefined, metaData[0].extendedType);\r\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(undefined, metaData[0].extendedType);\r\n assert.equal(\"\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"SELECT s.Name a FROM meta.ECSchemaDef s ORDER BY a ASC\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Geometric type column with alias\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader | ECSqlSyncReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\r\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\r\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"select GeometryStream A from bis.GeometricElement3d LIMIT 1\");\r\n await readerCallback(reader);\r\n });\r\n\r\n it(\"Geometric type column without alias\", async () => {\r\n const readerCallback = async (readerObj: ECSqlReader) => {\r\n const metaData = await readerObj.getMetaData();\r\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\r\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n const syncReaderCallback = (syncReader: ECSqlSyncReader) => {\r\n const metaData = syncReader.getMetaData();\r\n assert.equal(\"GeometryStream\", metaData[0].extendedType);\r\n assert.equal(\"GeometryStream\", metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(metaData[0].extendedType, metaData[0].extendType); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n iModel.withQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\", syncReaderCallback);\r\n const reader = iModel.createQueryReader(\"select GeometryStream from bis.GeometricElement3d LIMIT 1\");\r\n await readerCallback(reader);\r\n });\r\n\r\n });\r\n });\r\n}));\r\n\r\ndescribe(\"createQueryReader vs withQueryReader \", () => {\r\n /** Deletes an entire element tree, including sub-models, child elements and code scope references.\r\n * Items are deleted in bottom-up order. Definitions and Subjects are deleted after normal elements.\r\n * Call deleteNormalElements on each tree. Then call deleteSpecialElements.\r\n */\r\n class TestElementCascadingDeleter extends ElementTreeDeleter {\r\n protected shouldVisitCodeScopes(\r\n _elementId: Id64String,\r\n _scope: ElementTreeWalkerScope\r\n ) {\r\n return true;\r\n }\r\n\r\n /** The main tree-walking function */\r\n protected override processElementTree(\r\n element: Id64String,\r\n scope: ElementTreeWalkerScope\r\n ): void {\r\n if (this.shouldVisitCodeScopes(element, scope)) {\r\n this._processCodeScopes(element, scope);\r\n }\r\n super.processElementTree(element, scope);\r\n }\r\n /** Process code scope references */\r\n private _processCodeScopes(\r\n element: Id64String,\r\n scope: ElementTreeWalkerScope\r\n ) {\r\n const newScope = new ElementTreeWalkerScope(scope, element);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._iModel.withPreparedStatement(\r\n `\r\n SELECT ECInstanceId\r\n FROM bis.Element\r\n WHERE CodeScope.id=?\r\n AND Parent.id IS NULL\r\n `,\r\n (stmt) => {\r\n stmt.bindId(1, element);\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const elementId = stmt.getValue(0).getId();\r\n this.processElementTree(elementId, newScope);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n // Actual test begins here\r\n let iModelDb: SnapshotDb;\r\n\r\n function createTestIModelWithScopedPhysicalObject() {\r\n const pathForEmpty = IModelTestUtils.prepareOutputFile(\r\n \"ECReferenceTypesCache\",\r\n \"empty.bim\"\r\n );\r\n const testIModelDb = SnapshotDb.createEmpty(pathForEmpty, {\r\n rootSubject: { name: \"empty \" },\r\n });\r\n\r\n const subjectId = Subject.insert(\r\n testIModelDb,\r\n IModel.rootSubjectId,\r\n \"Subject\",\r\n \"Subject Description\"\r\n );\r\n\r\n const physicalModelId = PhysicalModel.insert(\r\n testIModelDb,\r\n subjectId,\r\n \"Physical\"\r\n );\r\n\r\n const definitionModelId = DefinitionModel.insert(\r\n testIModelDb,\r\n subjectId,\r\n \"Definition\"\r\n );\r\n\r\n const spatialCategoryId = IModelTestUtils.insertSpatialCategory(\r\n testIModelDb,\r\n definitionModelId,\r\n \"SpatialCategory\",\r\n ColorDef.green\r\n );\r\n\r\n const physicalObjectProps5: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"ScopingElement\",\r\n };\r\n\r\n const scopingElement =\r\n testIModelDb.elements.insertElement(physicalObjectProps5);\r\n\r\n const childElement: PhysicalElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: { spec: \"0x1\", scope: scopingElement },\r\n userLabel: \"ScopedElement\",\r\n };\r\n testIModelDb.elements.insertElement(childElement);\r\n testIModelDb.saveChanges();\r\n return testIModelDb;\r\n }\r\n\r\n beforeEach(async () => {\r\n iModelDb = createTestIModelWithScopedPhysicalObject();\r\n });\r\n\r\n afterEach(async () => {\r\n iModelDb.close();\r\n });\r\n\r\n it(\"Failing while using createQueryReader()\", async () => {\r\n const sql = `\r\n SELECT ECInstanceId\r\n FROM ${PhysicalObject.classFullName}\r\n `;\r\n const reader = iModelDb.createQueryReader(sql, undefined, { usePrimaryConn: true });\r\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\r\n await reader.step(); // step to initialize reader\r\n const firstId = reader.current[0];\r\n elementTreeDeleter.deleteNormalElements(firstId);\r\n await reader.step(); // step to initialize reader\r\n const secondId = reader.current[0];\r\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.\r\n expect(() => elementTreeDeleter.deleteNormalElements(secondId)).to.throw();\r\n });\r\n\r\n it(\"Passing while using withQueryReader()\", async () => {\r\n const sql = `\r\n SELECT ECInstanceId\r\n FROM ${PhysicalObject.classFullName}\r\n `;\r\n iModelDb.withQueryReader(sql, (reader) => {\r\n const elementTreeDeleter = new TestElementCascadingDeleter(iModelDb);\r\n let cntSteps = 0;\r\n while (reader.step()) {\r\n const id = reader.current[0];\r\n elementTreeDeleter.deleteNormalElements(id);\r\n cntSteps++;\r\n }\r\n assert.equal(cntSteps, 1);\r\n });\r\n });\r\n});\r\n\r\n"]}
|
|
@@ -39,7 +39,7 @@ export declare const columnInfoPropsKeys: Set<keyof ColumnInfoProps>;
|
|
|
39
39
|
export declare enum ECDbTestMode {
|
|
40
40
|
Both = "Both",
|
|
41
41
|
Statement = "Statement",
|
|
42
|
-
|
|
42
|
+
QueryReader = "QueryReader"
|
|
43
43
|
}
|
|
44
44
|
export declare enum ECDbTestRowFormat {
|
|
45
45
|
ECSqlNames = "ECSqlNames",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestParser.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,2BAA2B,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IAMrC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAG/B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,eAAe,CAWzD,CAAC;AA6CH,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,
|
|
1
|
+
{"version":3,"file":"ECSqlTestParser.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,2BAA2B,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IAMrC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAG/B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,eAAe,CAWzD,CAAC;AA6CH,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AA+BD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAQ7C;AAkBD,qBAAa,sBAAsB;WACnB,KAAK,IAAI,aAAa,EAAE;IAgBtC,OAAO,CAAC,MAAM,CAAC,SAAS;IA+CxB,OAAO,CAAC,MAAM,CAAC,eAAe;IAuD9B,OAAO,CAAC,MAAM,CAAC,UAAU;IAgBzB,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAcnC,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAqBvC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAIxC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAS/B,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmBhC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAwBzC,OAAO,CAAC,MAAM,CAAC,uDAAuD;CAsBvE"}
|
|
@@ -71,7 +71,7 @@ export var ECDbTestMode;
|
|
|
71
71
|
(function (ECDbTestMode) {
|
|
72
72
|
ECDbTestMode["Both"] = "Both";
|
|
73
73
|
ECDbTestMode["Statement"] = "Statement";
|
|
74
|
-
ECDbTestMode["
|
|
74
|
+
ECDbTestMode["QueryReader"] = "QueryReader";
|
|
75
75
|
})(ECDbTestMode || (ECDbTestMode = {}));
|
|
76
76
|
;
|
|
77
77
|
export var ECDbTestRowFormat;
|
|
@@ -162,8 +162,10 @@ export class ECDbMarkdownTestParser {
|
|
|
162
162
|
if (currentTest !== undefined) {
|
|
163
163
|
out.push(currentTest);
|
|
164
164
|
}
|
|
165
|
-
currentTest = {
|
|
166
|
-
|
|
165
|
+
currentTest = {
|
|
166
|
+
title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,
|
|
167
|
+
rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false
|
|
168
|
+
};
|
|
167
169
|
break;
|
|
168
170
|
case "list":
|
|
169
171
|
this.handleListToken(token, currentTest, markdownFilePath);
|
|
@@ -242,8 +244,8 @@ export class ECDbMarkdownTestParser {
|
|
|
242
244
|
case "statement":
|
|
243
245
|
currentTest.mode = ECDbTestMode.Statement;
|
|
244
246
|
break;
|
|
245
|
-
case "
|
|
246
|
-
currentTest.mode = ECDbTestMode.
|
|
247
|
+
case "queryreader":
|
|
248
|
+
currentTest.mode = ECDbTestMode.QueryReader;
|
|
247
249
|
break;
|
|
248
250
|
case "both":
|
|
249
251
|
currentTest.mode = ECDbTestMode.Both;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { marked, Tokens } from \"marked\";\r\n\r\nexport interface ECDbTestProps {\r\n fileName: string;\r\n title: string;\r\n\r\n // Things from properties:\r\n only?: boolean; // This flag handles the only property to filter tests\r\n skip?: string; // This flag handles the skip property to filter tests\r\n dataset?: string;\r\n mode: ECDbTestMode;\r\n rowFormat: ECDbTestRowFormat;\r\n abbreviateBlobs: boolean;\r\n convertClassIdsToClassNames: boolean;\r\n errorDuringPrepare?: boolean;\r\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\r\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\r\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\r\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\r\n\r\n // TODO: implement, it's currently being parsed but not used\r\n stepStatus?: string;\r\n\r\n // Things from code blocks or tables\r\n sql?: string;\r\n expectedResults?: { [key: string]: any }[] | any[];\r\n columnInfo?: ColumnInfoProps[];\r\n\r\n // Things from lists\r\n binders?: ECDbTestBinderProps[];\r\n}\r\n\r\nexport interface ECDbTestBinderProps {\r\n indexOrName: string;\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface ColumnInfoProps{\r\n name: string;\r\n className?: string;\r\n accessString?: string;\r\n generated?: boolean;\r\n index?: number;\r\n jsonName?: string;\r\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\r\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\r\n extendedType?: string;\r\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\r\n typeName?: string; // typeName is used on ConcurrentQuery\r\n originPropertyName?: string; // only supported for ECSqlStatement\r\n}\r\n\r\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\r\n \"name\",\r\n \"className\",\r\n \"accessString\",\r\n \"generated\",\r\n \"index\",\r\n \"jsonName\",\r\n \"extendedType\",\r\n \"type\",\r\n \"typeName\",\r\n \"originPropertyName\",\r\n]);\r\n\r\n/* interface QueryPropertyMetaData\r\n className: string;\r\n accessString?: string;\r\n generated: boolean;\r\n index: number;\r\n jsonName: string;\r\n name: string;\r\n extendType: string;\r\n typeName: string;\r\n*/\r\n\r\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\r\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\r\n const isValid = typeof obj === \"object\" &&\r\n typeof obj.name === \"string\" &&\r\n (obj.className === undefined || typeof obj.className === \"string\") &&\r\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\r\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\r\n (obj.index === undefined || typeof obj.index === \"number\") &&\r\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\r\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\r\n (obj.type === undefined || typeof obj.type === \"string\") &&\r\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\r\n\r\n if (!isValid) {\r\n const errors: string[] = [];\r\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\r\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\r\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\r\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\r\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\r\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\r\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\r\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\r\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\r\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\r\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\r\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nexport enum ECDbTestMode{\r\n Both = \"Both\",\r\n Statement = \"Statement\",\r\n ConcurrentQuery = \"ConcurrentQuery\",\r\n};\r\n\r\nexport enum ECDbTestRowFormat {\r\n ECSqlNames = \"ECSqlNames\",\r\n ECSqlIndexes = \"ECSqlIndexes\",\r\n JsNames = \"JsNames\",\r\n}\r\n\r\nfunction tableTextToValue(text: string) : any {\r\n if(text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\r\n return text.slice(1,text.length-1);\r\n if(text === \"null\")\r\n return null;\r\n if(text === \"undefined\")\r\n return undefined;\r\n if(text.startsWith(\"{\") || text.startsWith(\"[\"))\r\n return JSON.parse(text);\r\n if(text === \"true\" || text === \"false\")\r\n return text === \"true\";\r\n if(text.startsWith(\"0x\"))\r\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\r\n if(/^-?\\d+(\\.\\d+)?$/.test(text)) {\r\n const flt = parseFloat(text);\r\n if(!Number.isNaN(flt))\r\n return flt;\r\n }\r\n\r\n if(/^-?\\d+$/.test(text)) {\r\n // eslint-disable-next-line radix\r\n const asInt = parseInt(text);\r\n if(!Number.isNaN(asInt))\r\n return asInt;\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\r\n for(const key in obj) {\r\n if(typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\r\n obj[key] = understandAndReplaceBinaryData(obj[key])\r\n else if(typeof obj[key] === \"object\" || Array.isArray(obj[key]))\r\n obj[key] = buildBinaryData(obj[key])\r\n }\r\n return obj;\r\n}\r\n\r\nfunction understandAndReplaceBinaryData(str: string): any{\r\n const startInd = str.indexOf(\"(\") + 1;\r\n const endInd = str.indexOf(\")\");\r\n str = str.slice(startInd, endInd);\r\n const ans: number[] = []\r\n const numbers: string[] = str.split(\",\");\r\n numbers.forEach((value:string)=>\r\n {\r\n value = value.trim();\r\n // eslint-disable-next-line radix\r\n ans.push(parseInt(value));\r\n }\r\n );\r\n return Uint8Array.of(...ans);\r\n}\r\n\r\n\r\nexport class ECDbMarkdownTestParser {\r\n public static parse(): ECDbTestProps[] {\r\n const testAssetsDir = path.join(__dirname ,\"..\",\"queries\");\r\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\r\n const out: ECDbTestProps[] = [];\r\n\r\n for (const fileName of testFiles) {\r\n try {\r\n const tests = this.parseFile(testAssetsDir, fileName);\r\n out.push(...tests);\r\n } catch (error) {\r\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\r\n const markdownFilePath = path.join(testAssetsDir, fileName);\r\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\r\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\r\n const tokens = marked.lexer(markdownContent);\r\n\r\n const out: ECDbTestProps[] = [];\r\n let currentTest: ECDbTestProps | undefined;\r\n\r\n for (const token of tokens) {\r\n switch (token.type) {\r\n case \"space\":\r\n case \"html\":\r\n case \"paragraph\":\r\n case \"hr\":\r\n continue;\r\n case \"heading\":\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n currentTest = { title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\r\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false };\r\n break;\r\n case \"list\":\r\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\r\n break;\r\n case \"code\":\r\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\r\n break;\r\n case \"table\":\r\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\r\n break;\r\n default:\r\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\r\n break;\r\n }\r\n }\r\n\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n return out;\r\n }\r\n\r\n\r\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n const variableRegex = /^(\\w+):\\s*(.+)$/;\r\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\r\n for (const item of token.items) {\r\n const match = item.text.match(variableRegex);\r\n if (match) {\r\n const key = match[1];\r\n const value = match[2];\r\n switch (key.toLowerCase()) {\r\n case \"dataset\":\r\n currentTest.dataset = value;\r\n continue;\r\n case \"errorduringprepare\":\r\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"stepstatus\":\r\n currentTest.stepStatus = value;\r\n continue;\r\n case \"only\":\r\n currentTest.only = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"skip\":\r\n currentTest.skip = value;\r\n continue;\r\n case \"mode\":\r\n this.handleMode(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"rowformat\":\r\n this.handleRowFormat(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"abbreviateblobs\":\r\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"convertclassidstoclassnames\":\r\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"indexestoinclude\":\r\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\r\n continue;\r\n }\r\n }\r\n const bindMatch = item.text.match(bindRegex);\r\n if (bindMatch) {\r\n currentTest.binders = currentTest.binders || [];\r\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"statement\":\r\n currentTest.mode = ECDbTestMode.Statement;\r\n break;\r\n case \"concurrentquery\":\r\n currentTest.mode = ECDbTestMode.ConcurrentQuery;\r\n break;\r\n case \"both\":\r\n currentTest.mode = ECDbTestMode.Both;\r\n break;\r\n default:\r\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"ecsqlnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\r\n break;\r\n case \"ecsqlindexes\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\r\n break;\r\n case \"jsnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\r\n break;\r\n default:\r\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\nprivate static handleValidIndexList(obj: string): number[] | undefined {\r\n try{\r\n const numsArr = JSON.parse(obj);\r\n if(Array.isArray(numsArr) && numsArr.every((val: any)=> typeof val === \"number\"))\r\n return numsArr;\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n catch{\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n}\r\n\r\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n if (token.lang === \"sql\") {\r\n currentTest.sql = token.text;\r\n } else if (token.lang === \"json\") {\r\n let json: any;\r\n try {\r\n json = JSON.parse(token.text);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\r\n } else {\r\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\r\n }\r\n }\r\n\r\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\r\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\r\n return;\r\n }\r\n\r\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\r\n } else {\r\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const extraProps: Set<string> = new Set();\r\n\r\n if (json.columns.every(isColumnInfoProps)) {\r\n currentTest.columnInfo = json.columns;\r\n for (const column of json.columns) {\r\n for (const key in column) {\r\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\r\n extraProps.add(key);\r\n }\r\n }\r\n }\r\n\r\n if (extraProps.size > 0) {\r\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\r\n }\r\n } else {\r\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\r\n currentTest.expectedResults = json\r\n }\r\n\r\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n this.handleTable(token, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\r\n this.handleColumnTable(token, currentTest, markdownFilePath);\r\n return;\r\n }\r\n else if(token.header.length > 0 && token.header[0].text === \"\"){\r\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\r\n } else {\r\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\r\n }\r\n }\r\n\r\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const columnInfos: any[] = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n const columnInfo: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n columnInfo[header] = tableTextToValue(cell);\r\n }\r\n columnInfos.push(columnInfo);\r\n }\r\n\r\n this.handleJSONColumnMetadata({columns: columnInfos}, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult[header] = value;\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n\r\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: any[] = [];\r\n for (let i = 0; i < token.header.length; i++) {\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult.push(value);\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n}\r\n\r\nfunction logWarning(message: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`\\x1b[33m${message}\\x1b[0m`);\r\n}"]}
|
|
1
|
+
{"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { marked, Tokens } from \"marked\";\r\n\r\nexport interface ECDbTestProps {\r\n fileName: string;\r\n title: string;\r\n\r\n // Things from properties:\r\n only?: boolean; // This flag handles the only property to filter tests\r\n skip?: string; // This flag handles the skip property to filter tests\r\n dataset?: string;\r\n mode: ECDbTestMode;\r\n rowFormat: ECDbTestRowFormat;\r\n abbreviateBlobs: boolean;\r\n convertClassIdsToClassNames: boolean;\r\n errorDuringPrepare?: boolean;\r\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\r\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\r\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\r\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\r\n\r\n // TODO: implement, it's currently being parsed but not used\r\n stepStatus?: string;\r\n\r\n // Things from code blocks or tables\r\n sql?: string;\r\n expectedResults?: { [key: string]: any }[] | any[];\r\n columnInfo?: ColumnInfoProps[];\r\n\r\n // Things from lists\r\n binders?: ECDbTestBinderProps[];\r\n}\r\n\r\nexport interface ECDbTestBinderProps {\r\n indexOrName: string;\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface ColumnInfoProps {\r\n name: string;\r\n className?: string;\r\n accessString?: string;\r\n generated?: boolean;\r\n index?: number;\r\n jsonName?: string;\r\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\r\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\r\n extendedType?: string;\r\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\r\n typeName?: string; // typeName is used on ConcurrentQuery\r\n originPropertyName?: string; // only supported for ECSqlStatement\r\n}\r\n\r\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\r\n \"name\",\r\n \"className\",\r\n \"accessString\",\r\n \"generated\",\r\n \"index\",\r\n \"jsonName\",\r\n \"extendedType\",\r\n \"type\",\r\n \"typeName\",\r\n \"originPropertyName\",\r\n]);\r\n\r\n/* interface QueryPropertyMetaData\r\n className: string;\r\n accessString?: string;\r\n generated: boolean;\r\n index: number;\r\n jsonName: string;\r\n name: string;\r\n extendType: string;\r\n typeName: string;\r\n*/\r\n\r\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\r\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\r\n const isValid = typeof obj === \"object\" &&\r\n typeof obj.name === \"string\" &&\r\n (obj.className === undefined || typeof obj.className === \"string\") &&\r\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\r\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\r\n (obj.index === undefined || typeof obj.index === \"number\") &&\r\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\r\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\r\n (obj.type === undefined || typeof obj.type === \"string\") &&\r\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\r\n\r\n if (!isValid) {\r\n const errors: string[] = [];\r\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\r\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\r\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\r\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\r\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\r\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\r\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\r\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\r\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\r\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\r\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\r\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nexport enum ECDbTestMode {\r\n Both = \"Both\",\r\n Statement = \"Statement\",\r\n QueryReader = \"QueryReader\",\r\n};\r\n\r\nexport enum ECDbTestRowFormat {\r\n ECSqlNames = \"ECSqlNames\",\r\n ECSqlIndexes = \"ECSqlIndexes\",\r\n JsNames = \"JsNames\",\r\n}\r\n\r\nfunction tableTextToValue(text: string): any {\r\n if (text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\r\n return text.slice(1, text.length - 1);\r\n if (text === \"null\")\r\n return null;\r\n if (text === \"undefined\")\r\n return undefined;\r\n if (text.startsWith(\"{\") || text.startsWith(\"[\"))\r\n return JSON.parse(text);\r\n if (text === \"true\" || text === \"false\")\r\n return text === \"true\";\r\n if (text.startsWith(\"0x\"))\r\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\r\n if (/^-?\\d+(\\.\\d+)?$/.test(text)) {\r\n const flt = parseFloat(text);\r\n if (!Number.isNaN(flt))\r\n return flt;\r\n }\r\n\r\n if (/^-?\\d+$/.test(text)) {\r\n // eslint-disable-next-line radix\r\n const asInt = parseInt(text);\r\n if (!Number.isNaN(asInt))\r\n return asInt;\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\r\n for (const key in obj) {\r\n if (typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\r\n obj[key] = understandAndReplaceBinaryData(obj[key])\r\n else if (typeof obj[key] === \"object\" || Array.isArray(obj[key]))\r\n obj[key] = buildBinaryData(obj[key])\r\n }\r\n return obj;\r\n}\r\n\r\nfunction understandAndReplaceBinaryData(str: string): any {\r\n const startInd = str.indexOf(\"(\") + 1;\r\n const endInd = str.indexOf(\")\");\r\n str = str.slice(startInd, endInd);\r\n const ans: number[] = []\r\n const numbers: string[] = str.split(\",\");\r\n numbers.forEach((value: string) => {\r\n value = value.trim();\r\n // eslint-disable-next-line radix\r\n ans.push(parseInt(value));\r\n }\r\n );\r\n return Uint8Array.of(...ans);\r\n}\r\n\r\n\r\nexport class ECDbMarkdownTestParser {\r\n public static parse(): ECDbTestProps[] {\r\n const testAssetsDir = path.join(__dirname, \"..\", \"queries\");\r\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\r\n const out: ECDbTestProps[] = [];\r\n\r\n for (const fileName of testFiles) {\r\n try {\r\n const tests = this.parseFile(testAssetsDir, fileName);\r\n out.push(...tests);\r\n } catch (error) {\r\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\r\n const markdownFilePath = path.join(testAssetsDir, fileName);\r\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\r\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\r\n const tokens = marked.lexer(markdownContent);\r\n\r\n const out: ECDbTestProps[] = [];\r\n let currentTest: ECDbTestProps | undefined;\r\n\r\n for (const token of tokens) {\r\n switch (token.type) {\r\n case \"space\":\r\n case \"html\":\r\n case \"paragraph\":\r\n case \"hr\":\r\n continue;\r\n case \"heading\":\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n currentTest = {\r\n title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\r\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false\r\n };\r\n break;\r\n case \"list\":\r\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\r\n break;\r\n case \"code\":\r\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\r\n break;\r\n case \"table\":\r\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\r\n break;\r\n default:\r\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\r\n break;\r\n }\r\n }\r\n\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n return out;\r\n }\r\n\r\n\r\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n const variableRegex = /^(\\w+):\\s*(.+)$/;\r\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\r\n for (const item of token.items) {\r\n const match = item.text.match(variableRegex);\r\n if (match) {\r\n const key = match[1];\r\n const value = match[2];\r\n switch (key.toLowerCase()) {\r\n case \"dataset\":\r\n currentTest.dataset = value;\r\n continue;\r\n case \"errorduringprepare\":\r\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"stepstatus\":\r\n currentTest.stepStatus = value;\r\n continue;\r\n case \"only\":\r\n currentTest.only = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"skip\":\r\n currentTest.skip = value;\r\n continue;\r\n case \"mode\":\r\n this.handleMode(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"rowformat\":\r\n this.handleRowFormat(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"abbreviateblobs\":\r\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"convertclassidstoclassnames\":\r\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"indexestoinclude\":\r\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\r\n continue;\r\n }\r\n }\r\n const bindMatch = item.text.match(bindRegex);\r\n if (bindMatch) {\r\n currentTest.binders = currentTest.binders || [];\r\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch (value.toLowerCase()) {\r\n case \"statement\":\r\n currentTest.mode = ECDbTestMode.Statement;\r\n break;\r\n case \"queryreader\":\r\n currentTest.mode = ECDbTestMode.QueryReader;\r\n break;\r\n case \"both\":\r\n currentTest.mode = ECDbTestMode.Both;\r\n break;\r\n default:\r\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch (value.toLowerCase()) {\r\n case \"ecsqlnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\r\n break;\r\n case \"ecsqlindexes\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\r\n break;\r\n case \"jsnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\r\n break;\r\n default:\r\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleValidIndexList(obj: string): number[] | undefined {\r\n try {\r\n const numsArr = JSON.parse(obj);\r\n if (Array.isArray(numsArr) && numsArr.every((val: any) => typeof val === \"number\"))\r\n return numsArr;\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n catch {\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n }\r\n\r\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n if (token.lang === \"sql\") {\r\n currentTest.sql = token.text;\r\n } else if (token.lang === \"json\") {\r\n let json: any;\r\n try {\r\n json = JSON.parse(token.text);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\r\n } else {\r\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\r\n }\r\n }\r\n\r\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\r\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\r\n return;\r\n }\r\n\r\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\r\n } else {\r\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const extraProps: Set<string> = new Set();\r\n\r\n if (json.columns.every(isColumnInfoProps)) {\r\n currentTest.columnInfo = json.columns;\r\n for (const column of json.columns) {\r\n for (const key in column) {\r\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\r\n extraProps.add(key);\r\n }\r\n }\r\n }\r\n\r\n if (extraProps.size > 0) {\r\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\r\n }\r\n } else {\r\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\r\n currentTest.expectedResults = json\r\n }\r\n\r\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n this.handleTable(token, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\r\n this.handleColumnTable(token, currentTest, markdownFilePath);\r\n return;\r\n }\r\n else if (token.header.length > 0 && token.header[0].text === \"\") {\r\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\r\n } else {\r\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\r\n }\r\n }\r\n\r\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const columnInfos: any[] = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n const columnInfo: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n columnInfo[header] = tableTextToValue(cell);\r\n }\r\n columnInfos.push(columnInfo);\r\n }\r\n\r\n this.handleJSONColumnMetadata({ columns: columnInfos }, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult[header] = value;\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n\r\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: any[] = [];\r\n for (let i = 0; i < token.header.length; i++) {\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult.push(value);\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n}\r\n\r\nfunction logWarning(message: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`\\x1b[33m${message}\\x1b[0m`);\r\n}"]}
|