@itwin/core-backend 5.8.0-dev.4 → 5.8.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/lib/cjs/ECDb.d.ts +26 -0
  2. package/lib/cjs/ECDb.d.ts.map +1 -1
  3. package/lib/cjs/ECDb.js +53 -2
  4. package/lib/cjs/ECDb.js.map +1 -1
  5. package/lib/cjs/ECSqlRowExecutor.d.ts +66 -0
  6. package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -0
  7. package/lib/cjs/ECSqlRowExecutor.js +135 -0
  8. package/lib/cjs/ECSqlRowExecutor.js.map +1 -0
  9. package/lib/cjs/ECSqlStatement.d.ts +13 -1
  10. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  11. package/lib/cjs/ECSqlStatement.js +30 -0
  12. package/lib/cjs/ECSqlStatement.js.map +1 -1
  13. package/lib/cjs/ECSqlSyncReader.d.ts +104 -0
  14. package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -0
  15. package/lib/cjs/ECSqlSyncReader.js +191 -0
  16. package/lib/cjs/ECSqlSyncReader.js.map +1 -0
  17. package/lib/cjs/IModelDb.d.ts +18 -0
  18. package/lib/cjs/IModelDb.d.ts.map +1 -1
  19. package/lib/cjs/IModelDb.js +39 -0
  20. package/lib/cjs/IModelDb.js.map +1 -1
  21. package/lib/cjs/core-backend.d.ts +1 -0
  22. package/lib/cjs/core-backend.d.ts.map +1 -1
  23. package/lib/cjs/core-backend.js +1 -0
  24. package/lib/cjs/core-backend.js.map +1 -1
  25. package/lib/esm/ECDb.d.ts +26 -0
  26. package/lib/esm/ECDb.d.ts.map +1 -1
  27. package/lib/esm/ECDb.js +54 -3
  28. package/lib/esm/ECDb.js.map +1 -1
  29. package/lib/esm/ECSqlRowExecutor.d.ts +66 -0
  30. package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -0
  31. package/lib/esm/ECSqlRowExecutor.js +131 -0
  32. package/lib/esm/ECSqlRowExecutor.js.map +1 -0
  33. package/lib/esm/ECSqlStatement.d.ts +13 -1
  34. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  35. package/lib/esm/ECSqlStatement.js +30 -0
  36. package/lib/esm/ECSqlStatement.js.map +1 -1
  37. package/lib/esm/ECSqlSyncReader.d.ts +104 -0
  38. package/lib/esm/ECSqlSyncReader.d.ts.map +1 -0
  39. package/lib/esm/ECSqlSyncReader.js +187 -0
  40. package/lib/esm/ECSqlSyncReader.js.map +1 -0
  41. package/lib/esm/IModelDb.d.ts +18 -0
  42. package/lib/esm/IModelDb.d.ts.map +1 -1
  43. package/lib/esm/IModelDb.js +39 -0
  44. package/lib/esm/IModelDb.js.map +1 -1
  45. package/lib/esm/core-backend.d.ts +1 -0
  46. package/lib/esm/core-backend.d.ts.map +1 -1
  47. package/lib/esm/core-backend.js +1 -0
  48. package/lib/esm/core-backend.js.map +1 -1
  49. package/lib/esm/test/ecdb/ECSqlQuery.test.js +79 -0
  50. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  51. package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts +2 -0
  52. package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts.map +1 -0
  53. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +122 -0
  54. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -0
  55. package/lib/esm/test/ecdb/QueryReaders.test.d.ts +2 -0
  56. package/lib/esm/test/ecdb/QueryReaders.test.d.ts.map +1 -0
  57. package/lib/esm/test/ecdb/QueryReaders.test.js +1421 -0
  58. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -0
  59. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts +1 -1
  60. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
  61. package/lib/esm/test/ecsql/src/ECSqlTestParser.js +7 -5
  62. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  63. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +172 -98
  64. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  65. package/package.json +13 -13
  66. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts +0 -2
  67. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts.map +0 -1
  68. package/lib/esm/test/ecdb/ECSqlReader.test.js +0 -669
  69. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +0 -1
@@ -0,0 +1,122 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { assert, expect } from "chai";
6
+ import { QueryOptionsBuilder, QueryRowFormat } from "@itwin/core-common";
7
+ import { SnapshotDb } from "../../IModelDb";
8
+ import { IModelTestUtils } from "../IModelTestUtils";
9
+ import { Id64 } from "@itwin/core-bentley";
10
+ describe("WithQueryReaderTests", () => {
11
+ let iModel;
12
+ before(async () => {
13
+ iModel = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile("test.bim"));
14
+ });
15
+ after(async () => {
16
+ iModel.close();
17
+ });
18
+ it("check behvaiour if we call clearCaches in between", () => {
19
+ let actualRowCount = 0;
20
+ const expectedInstanceIds = ["0x1", "0xe", "0x10", "0x11", "0x12",
21
+ "0x13", "0x14", "0x15", "0x16", "0x17"];
22
+ expect(() => iModel.withQueryReader("SELECT * FROM bis.Element", (reader) => {
23
+ let loopCount = 0;
24
+ // First loop - read first 10 rows
25
+ while (loopCount < 10) {
26
+ reader.step();
27
+ actualRowCount++;
28
+ loopCount++;
29
+ assert.isDefined(reader.current[0]);
30
+ assert.equal(reader.current[0], expectedInstanceIds[actualRowCount - 1]);
31
+ }
32
+ assert.equal(loopCount, 10);
33
+ iModel.clearCaches();
34
+ reader.step(); // step should fail after clearCaches
35
+ })).to.throw("Step failed");
36
+ });
37
+ it("should throw error if we try to step on a closed iModelDb object", () => {
38
+ const imodelPath = iModel.pathName;
39
+ expect(() => iModel.withQueryReader("SELECT * FROM bis.Element", (reader) => {
40
+ let loopCount = 0;
41
+ while (loopCount < 10) {
42
+ reader.step();
43
+ assert.isDefined(reader.current[0]);
44
+ loopCount++;
45
+ }
46
+ assert.equal(loopCount, 10);
47
+ iModel.close();
48
+ iModel = SnapshotDb.openFile(imodelPath);
49
+ assert.isDefined(reader.current[0]);
50
+ reader.step(); // step should fail after iModelDb is closed
51
+ })).to.throw("Statement is not prepared");
52
+ });
53
+ it("returning reader from withQueryReader callback should throw error if we try to step on it", () => {
54
+ const readerObj = iModel.withQueryReader("SELECT * FROM bis.Element", (reader) => {
55
+ reader.step();
56
+ return reader;
57
+ });
58
+ expect(readerObj.current[0]).to.equal("0x1"); // will not throw error as we are just accessing current row
59
+ expect(() => readerObj.step()).to.throw("Statement is not prepared");
60
+ });
61
+ it("checking rowFormat unspecified case - values accessed by index", () => {
62
+ // Default rowFormat is UseECSqlPropertyIndexes: columns are accessed by their SELECT-order index.
63
+ iModel.withQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element", (reader) => {
64
+ assert.isTrue(reader.step());
65
+ const id = reader.current[0];
66
+ const classId = reader.current[1];
67
+ assert.isTrue(Id64.isValid(classId));
68
+ assert.isTrue(Id64.isValid(id));
69
+ assert.equal(id, "0x19");
70
+ });
71
+ });
72
+ it("checking rowFormat UseECSqlPropertyIndexes - values accessed by index", () => {
73
+ const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes).getOptions();
74
+ iModel.withQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element", (reader) => {
75
+ assert.isTrue(reader.step());
76
+ // Index 0 → ECInstanceId, index 1 → ECClassId
77
+ const id = reader.current[0];
78
+ const classId = reader.current[1];
79
+ assert.equal(id, "0x19");
80
+ assert.isTrue(Id64.isValid(classId));
81
+ // Swapping column order changes index, not value
82
+ }, undefined, config);
83
+ });
84
+ it("checking rowFormat UseECSqlPropertyNames - values accessed by ECSQL property name", () => {
85
+ const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseECSqlPropertyNames).getOptions();
86
+ iModel.withQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element", (reader) => {
87
+ assert.isTrue(reader.step());
88
+ const id = reader.current.ECInstanceId;
89
+ const classId = reader.current.ECClassId;
90
+ assert.equal(id, "0x19");
91
+ assert.isTrue(Id64.isValid(classId));
92
+ }, undefined, config);
93
+ });
94
+ it("checking rowFormat UseJsPropertyNames - values accessed by JavaScript property name", () => {
95
+ const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();
96
+ iModel.withQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element", (reader) => {
97
+ assert.isTrue(reader.step());
98
+ // ECInstanceId → id, ECClassId → className (resolved to a fully-qualified class name string)
99
+ const id = reader.current.id;
100
+ const className = reader.current.className;
101
+ assert.equal(id, "0x19");
102
+ // className should be in the form "SchemaName.ClassName"
103
+ assert.equal(className, "BisCore.DrawingCategory");
104
+ }, undefined, config);
105
+ });
106
+ it("checking rowFormat UseECSqlPropertyNames with convertClassIdsToClassNames - ECClassId returned as class name string", () => {
107
+ const config = new QueryOptionsBuilder()
108
+ .setRowFormat(QueryRowFormat.UseECSqlPropertyNames)
109
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
110
+ .setConvertClassIdsToNames(true)
111
+ .getOptions();
112
+ iModel.withQueryReader("SELECT ECInstanceId, ECClassId FROM bis.Element", (reader) => {
113
+ assert.isTrue(reader.step());
114
+ const id = reader.current.ECInstanceId;
115
+ const classId = reader.current.ECClassId;
116
+ assert.equal(id, "0x19");
117
+ // With convertClassIdsToClassNames, ECClassId is resolved to "SchemaName.ClassName" instead of an Id
118
+ assert.equal(classId, "BisCore.DrawingCategory");
119
+ }, undefined, config);
120
+ });
121
+ });
122
+ //# sourceMappingURL=ECSqlSyncReader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSqlSyncReader.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECSqlSyncReader.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\n\r\nimport { assert, expect } from \"chai\";\r\nimport { QueryOptionsBuilder, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\n\r\ndescribe(\"WithQueryReaderTests\", () => {\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 it(\"check behvaiour if we call clearCaches in between\", () => {\r\n let actualRowCount = 0;\r\n const expectedInstanceIds = [\"0x1\", \"0xe\", \"0x10\", \"0x11\", \"0x12\",\r\n \"0x13\", \"0x14\", \"0x15\", \"0x16\", \"0x17\"];\r\n\r\n expect(() => iModel.withQueryReader(\"SELECT * FROM bis.Element\", (reader) => {\r\n let loopCount = 0;\r\n // First loop - read first 10 rows\r\n while (loopCount < 10) {\r\n reader.step()\r\n actualRowCount++;\r\n loopCount++;\r\n assert.isDefined(reader.current[0]);\r\n assert.equal(reader.current[0], expectedInstanceIds[actualRowCount - 1]);\r\n }\r\n assert.equal(loopCount, 10);\r\n iModel.clearCaches();\r\n\r\n reader.step(); // step should fail after clearCaches\r\n })).to.throw(\"Step failed\");\r\n });\r\n it(\"should throw error if we try to step on a closed iModelDb object\", () => {\r\n const imodelPath = iModel.pathName;\r\n expect(() => iModel.withQueryReader(\"SELECT * FROM bis.Element\", (reader) => {\r\n let loopCount = 0;\r\n while (loopCount < 10) {\r\n reader.step();\r\n assert.isDefined(reader.current[0]);\r\n loopCount++;\r\n }\r\n assert.equal(loopCount, 10);\r\n iModel.close();\r\n\r\n iModel = SnapshotDb.openFile(imodelPath);\r\n assert.isDefined(reader.current[0]);\r\n reader.step(); // step should fail after iModelDb is closed\r\n })).to.throw(\"Statement is not prepared\");\r\n });\r\n it(\"returning reader from withQueryReader callback should throw error if we try to step on it\", () => {\r\n const readerObj = iModel.withQueryReader(\"SELECT * FROM bis.Element\", (reader) => {\r\n reader.step();\r\n return reader;\r\n });\r\n expect(readerObj.current[0]).to.equal(\"0x1\"); // will not throw error as we are just accessing current row\r\n expect(() => readerObj.step()).to.throw(\"Statement is not prepared\");\r\n });\r\n it(\"checking rowFormat unspecified case - values accessed by index\", () => {\r\n // Default rowFormat is UseECSqlPropertyIndexes: columns are accessed by their SELECT-order index.\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element\", (reader) => {\r\n assert.isTrue(reader.step());\r\n const id: string = reader.current[0];\r\n const classId: string = reader.current[1];\r\n assert.isTrue(Id64.isValid(classId));\r\n assert.isTrue(Id64.isValid(id));\r\n assert.equal(id, \"0x19\");\r\n });\r\n });\r\n\r\n it(\"checking rowFormat UseECSqlPropertyIndexes - values accessed by index\", () => {\r\n const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseECSqlPropertyIndexes).getOptions();\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element\", (reader) => {\r\n assert.isTrue(reader.step());\r\n // Index 0 → ECInstanceId, index 1 → ECClassId\r\n const id: string = reader.current[0];\r\n const classId: string = reader.current[1];\r\n assert.equal(id, \"0x19\");\r\n assert.isTrue(Id64.isValid(classId));\r\n // Swapping column order changes index, not value\r\n }, undefined, config);\r\n });\r\n\r\n it(\"checking rowFormat UseECSqlPropertyNames - values accessed by ECSQL property name\", () => {\r\n const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseECSqlPropertyNames).getOptions();\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element\", (reader) => {\r\n assert.isTrue(reader.step());\r\n const id: string = reader.current.ECInstanceId;\r\n const classId: string = reader.current.ECClassId;\r\n assert.equal(id, \"0x19\");\r\n assert.isTrue(Id64.isValid(classId));\r\n }, undefined, config);\r\n });\r\n\r\n it(\"checking rowFormat UseJsPropertyNames - values accessed by JavaScript property name\", () => {\r\n const config = new QueryOptionsBuilder().setRowFormat(QueryRowFormat.UseJsPropertyNames).getOptions();\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element\", (reader) => {\r\n assert.isTrue(reader.step());\r\n // ECInstanceId → id, ECClassId → className (resolved to a fully-qualified class name string)\r\n const id: string = reader.current.id;\r\n const className: string = reader.current.className;\r\n assert.equal(id, \"0x19\");\r\n // className should be in the form \"SchemaName.ClassName\"\r\n assert.equal(className, \"BisCore.DrawingCategory\");\r\n }, undefined, config);\r\n });\r\n\r\n it(\"checking rowFormat UseECSqlPropertyNames with convertClassIdsToClassNames - ECClassId returned as class name string\", () => {\r\n const config = new QueryOptionsBuilder()\r\n .setRowFormat(QueryRowFormat.UseECSqlPropertyNames)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n .setConvertClassIdsToNames(true)\r\n .getOptions();\r\n iModel.withQueryReader(\"SELECT ECInstanceId, ECClassId FROM bis.Element\", (reader) => {\r\n assert.isTrue(reader.step());\r\n const id: string = reader.current.ECInstanceId;\r\n const classId: string = reader.current.ECClassId;\r\n assert.equal(id, \"0x19\");\r\n // With convertClassIdsToClassNames, ECClassId is resolved to \"SchemaName.ClassName\" instead of an Id\r\n assert.equal(classId, \"BisCore.DrawingCategory\");\r\n }, undefined, config);\r\n });\r\n});\r\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=QueryReaders.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryReaders.test.d.ts","sourceRoot":"","sources":["../../../../src/test/ecdb/QueryReaders.test.ts"],"names":[],"mappings":""}