@itwin/core-backend 5.0.0-dev.97 → 5.0.0-dev.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/BackendHubAccess.d.ts +2 -8
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +12 -5
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +1 -0
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/CheckpointManager.d.ts +8 -15
- package/lib/cjs/CheckpointManager.d.ts.map +1 -1
- package/lib/cjs/CheckpointManager.js +23 -54
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +37 -1
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +81 -0
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +181 -2
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +224 -5
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +16 -4
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +40 -2
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +1 -0
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +4 -0
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/HubMock.d.ts +1 -1
- package/lib/cjs/HubMock.d.ts.map +1 -1
- package/lib/cjs/HubMock.js +13 -2
- package/lib/cjs/HubMock.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +4 -0
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +33 -3
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +2 -0
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/ViewStore.d.ts.map +1 -1
- package/lib/cjs/ViewStore.js +2 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +2 -0
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +2 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +3 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -0
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +11 -22
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +2 -8
- package/lib/esm/BackendHubAccess.d.ts.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.d.ts.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +12 -5
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +1 -0
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/CheckpointManager.d.ts +8 -15
- package/lib/esm/CheckpointManager.d.ts.map +1 -1
- package/lib/esm/CheckpointManager.js +22 -52
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ECDb.d.ts +37 -1
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +82 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts +181 -2
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +222 -4
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.d.ts +16 -4
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +40 -2
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +1 -0
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
- package/lib/esm/ElementTreeWalker.js +4 -0
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/HubMock.d.ts +1 -1
- package/lib/esm/HubMock.d.ts.map +1 -1
- package/lib/esm/HubMock.js +13 -2
- package/lib/esm/HubMock.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +4 -0
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +33 -3
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +2 -0
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/ViewStore.d.ts.map +1 -1
- package/lib/esm/ViewStore.js +2 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +2 -0
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +2 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +2 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -0
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js +13 -24
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/test/CloudSqliteMock.d.ts +37 -0
- package/lib/esm/test/CloudSqliteMock.d.ts.map +1 -0
- package/lib/esm/test/CloudSqliteMock.js +117 -0
- package/lib/esm/test/CloudSqliteMock.js.map +1 -0
- package/lib/esm/test/IModelTestUtils.d.ts +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +16 -4
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js +1 -0
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +2 -0
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +12 -1
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +1 -0
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -0
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +253 -163
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -0
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +1 -0
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +5 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +10 -0
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js +3 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +18 -7
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js +5 -91
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js +1 -0
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +14 -0
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js +1 -0
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +0 -4
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +1 -0
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.d.ts +2 -0
- package/lib/esm/test/standalone/Drawing.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/Drawing.test.js +120 -0
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -0
- package/lib/esm/test/standalone/IModelWrite.test.js +22 -6
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +1 -0
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js +4 -3
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/package.json +13 -12
|
@@ -24,6 +24,7 @@ export function printElementTree(loggerCategory, seen, iModel, elementId, indent
|
|
|
24
24
|
const subModel = iModel.models.tryGetModel(elementId);
|
|
25
25
|
if (subModel !== undefined) {
|
|
26
26
|
Logger.logTrace(loggerCategory, `${"\t".repeat(indent)} subModel ${fmtModel(subModel)}:`);
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
27
28
|
iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {
|
|
28
29
|
stmt.bindId(1, subModel.id);
|
|
29
30
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintElementTree.js","sourceRoot":"","sources":["../../../src/test/PrintElementTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,SAAqB;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,cAAsB,EAAE,IAAqB,EAAE,MAAgB,EAAE,SAAqB,EAAE,MAAc;IACrI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAQ,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"PrintElementTree.js","sourceRoot":"","sources":["../../../src/test/PrintElementTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,SAAqB;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,cAAsB,EAAE,IAAqB,EAAE,MAAgB,EAAE,SAAqB,EAAE,MAAc;IACrI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAQ,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1F,4DAA4D;QAC5D,MAAM,CAAC,qBAAqB,CAAC,4BAA4B,OAAO,CAAC,aAAa,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5G,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { DbResult, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { IModelDb } from \"../IModelDb\";\nimport { Model } from \"../Model\";\nimport { Element } from \"../Element\";\n\nexport function fmtElement(iModel: IModelDb, elementId: Id64String): string {\n const el = iModel.elements.getElement(elementId);\n return `${el.id} ${el.classFullName} ${el.getDisplayLabel()}`;\n}\n\nexport function fmtModel(model: Model): string {\n return `${model.id} ${model.classFullName} ${model.name}`;\n}\n\nexport function printElementTree(loggerCategory: string, seen: Set<Id64String>, iModel: IModelDb, elementId: Id64String, indent: number) {\n if (seen.has(elementId)) {\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)} (SEEN)`);\n return;\n }\n\n seen.add(elementId);\n\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)}`);\n\n for (const child of iModel.elements.queryChildren(elementId)) {\n printElementTree(loggerCategory, seen, iModel, child, indent + 1);\n }\n\n const subModel = iModel.models.tryGetModel<Model>(elementId);\n if (subModel !== undefined) {\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)} subModel ${fmtModel(subModel)}:`);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, subModel.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n printElementTree(loggerCategory, seen, iModel, stmt.getValue(0).getId(), indent + 1);\n }\n });\n }\n}\n"]}
|
|
@@ -55,6 +55,7 @@ describe("convertEC2Schemas", () => {
|
|
|
55
55
|
assert.isTrue(db !== undefined);
|
|
56
56
|
assert.isTrue(db.isOpen);
|
|
57
57
|
const propNamesInEntityClass = [];
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
58
59
|
let stmt = db.prepareStatement("SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestEntityClass' ORDER BY p.Ordinal");
|
|
59
60
|
let rowCount = 0;
|
|
60
61
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
@@ -77,6 +78,7 @@ describe("convertEC2Schemas", () => {
|
|
|
77
78
|
assert.isTrue(propNamesInEntityClass.includes("TargetId")); // The TargetId property is allowed on Entity classes and should not be renamed
|
|
78
79
|
assert.isTrue(propNamesInEntityClass.includes("TargetECClassId")); // The TargetECClassId property is allowed on Entity classes and should not be renamed
|
|
79
80
|
const propNamesInStructClass = [];
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
80
82
|
stmt = db.prepareStatement("SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestStructClass' ORDER BY p.Ordinal");
|
|
81
83
|
rowCount = 0;
|
|
82
84
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../src/test/SchemaUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { convertEC2SchemasToEC3Schemas, ECDb, ECSqlStatement, upgradeCustomAttributesToEC3 } from \"../core-backend\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ecdb/ECDbTestHelper\";\nimport { DbResult } from \"@itwin/core-bentley\";\n\ndescribe(\"convertEC2Schemas\", () => {\n it(\"verify namespace\", () => {\n const ec2SchemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECSchemaReference name=\"RefSchema\" version=\"01.00\" prefix=\"rs\" />\n <ECClass typeName=\"TestEntityClass\" isDomainClass=\"true\" />\n </ECSchema>`;\n\n const ec2RefSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RefSchema\" nameSpacePrefix=\"rs\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECClass typeName=\"TestStructClass\" isStruct=\"true\" />\n </ECSchema>`;\n\n const ec3Schemas: string[] = convertEC2SchemasToEC3Schemas([ec2SchemaXml, ec2RefSchema]);\n assert.equal(ec3Schemas.length, 2);\n // converted EC3 schemas are in the same order as of input schemas\n const ec3SchemaXml = ec3Schemas[0];\n const ec3RefSchema = ec3Schemas[1];\n\n assert.isTrue(ec3SchemaXml.includes(\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"));\n assert.isTrue(ec3RefSchema.includes(\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"));\n });\n\n it(\"rename reserved words\", async () => {\n const ec2SchemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECClass typeName=\"TestEntityClass\" isDomainClass=\"true\">\n <ECProperty propertyName=\"Id\" typeName=\"string\" />\n <ECProperty propertyName=\"ECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"ECClassId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceECClassId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetECClassId\" typeName=\"string\" />\n </ECClass>\n <ECClass typeName=\"TestStructClass\" isStruct=\"true\">\n <ECProperty propertyName=\"Id\" typeName=\"string\" />\n <ECProperty propertyName=\"ECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"ECClassId\" typeName=\"string\" />\n </ECClass>\n </ECSchema>`;\n\n const ec3Schemas: string[] = convertEC2SchemasToEC3Schemas([ec2SchemaXml]);\n assert.equal(ec3Schemas.length, 1);\n const schemasWithUpdatedCA: string[] = upgradeCustomAttributesToEC3(ec3Schemas);\n assert.equal(schemasWithUpdatedCA.length, 1);\n\n const outDir = KnownTestLocations.outputDir;\n const db: ECDb = ECDbTestHelper.createECDb(outDir, \"RenameReservedWords.ecdb\", schemasWithUpdatedCA[0]);\n assert.isTrue(db !== undefined);\n assert.isTrue(db.isOpen);\n\n const propNamesInEntityClass = [];\n let stmt: ECSqlStatement = db.prepareStatement(\"SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestEntityClass' ORDER BY p.Ordinal\");\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n propNamesInEntityClass.push(row.name);\n }\n stmt[Symbol.dispose]();\n assert.equal(rowCount, 9);\n\n assert.isFalse(propNamesInEntityClass.includes(\"Id\")); // The Id property is a reserved keyword and should have been renamed\n assert.isFalse(propNamesInEntityClass.includes(\"ECClassId\")); // The ECClassId property is a reserved keyword and should have been renamed\n assert.isFalse(propNamesInEntityClass.includes(\"ECInstanceId\")); // The ECInstanceId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_Id_\")); // The Id property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_ECClassId_\")); // The ECClassId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_ECInstanceId_\")); // The ECInstanceId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceECInstanceId\")); // The SourceECInstanceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceId\")); // The SourceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceECClassId\")); // The SourceECClassId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetECInstanceId\")); // The TargetECInstanceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetId\")); // The TargetId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetECClassId\")); // The TargetECClassId property is allowed on Entity classes and should not be renamed\n\n const propNamesInStructClass = [];\n stmt = db.prepareStatement(\"SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestStructClass' ORDER BY p.Ordinal\");\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n propNamesInStructClass.push(row.name);\n }\n stmt[Symbol.dispose]();\n assert.equal(rowCount, 3);\n\n assert.isTrue(propNamesInStructClass.includes(\"Id\")); // The Id property is not a reserved keyword for Struct classes and should not be renamed\n assert.isTrue(propNamesInStructClass.includes(\"ECClassId\")); // The ECClassId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isTrue(propNamesInStructClass.includes(\"ECInstanceId\")); // The ECInstanceId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_Id_\")); // The Id property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_ECClassId_\")); // The ECClassId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_ECInstanceId_\")); // The ECInstanceId property is not a reserved keyword for Struct classes and should not be renamed\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../src/test/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,6BAA6B,EAAwB,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,YAAY,GAAG;;;;kBAIP,CAAC;QAEf,MAAM,YAAY,GAAG;;;kBAGP,CAAC;QAEf,MAAM,UAAU,GAAa,6BAA6B,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,kEAAkE;QAClE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;kBAkBP,CAAC;QAEf,MAAM,UAAU,GAAa,6BAA6B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,oBAAoB,GAAa,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC5C,MAAM,EAAE,GAAS,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,0BAA0B,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,4DAA4D;QAC5D,IAAI,IAAI,GAAmB,EAAE,CAAC,gBAAgB,CAAC,mOAAmO,CAAC,CAAC;QACpR,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC9C,QAAQ,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,qEAAqE;QAC7H,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,4EAA4E;QAC1I,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAE,+EAA+E;QACjJ,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,qEAAqE;QACvI,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAE,4EAA4E;QACtJ,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,+EAA+E;QAC3J,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,yFAAyF;QAC/J,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,+EAA+E;QAC3I,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAE,sFAAsF;QAC1J,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,yFAAyF;QAC/J,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,+EAA+E;QAC3I,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAE,sFAAsF;QAE1J,MAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,4DAA4D;QAC5D,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,mOAAmO,CAAC,CAAC;QAChQ,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC9C,QAAQ,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yFAAyF;QAC/I,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,gGAAgG;QAC9J,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mGAAmG;QACnK,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAE,yFAAyF;QAC7J,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,gGAAgG;QAC1K,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAE,mGAAmG;IACnL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { convertEC2SchemasToEC3Schemas, ECDb, ECSqlStatement, upgradeCustomAttributesToEC3 } from \"../core-backend\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ecdb/ECDbTestHelper\";\nimport { DbResult } from \"@itwin/core-bentley\";\n\ndescribe(\"convertEC2Schemas\", () => {\n it(\"verify namespace\", () => {\n const ec2SchemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECSchemaReference name=\"RefSchema\" version=\"01.00\" prefix=\"rs\" />\n <ECClass typeName=\"TestEntityClass\" isDomainClass=\"true\" />\n </ECSchema>`;\n\n const ec2RefSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RefSchema\" nameSpacePrefix=\"rs\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECClass typeName=\"TestStructClass\" isStruct=\"true\" />\n </ECSchema>`;\n\n const ec3Schemas: string[] = convertEC2SchemasToEC3Schemas([ec2SchemaXml, ec2RefSchema]);\n assert.equal(ec3Schemas.length, 2);\n // converted EC3 schemas are in the same order as of input schemas\n const ec3SchemaXml = ec3Schemas[0];\n const ec3RefSchema = ec3Schemas[1];\n\n assert.isTrue(ec3SchemaXml.includes(\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"));\n assert.isTrue(ec3RefSchema.includes(\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"));\n });\n\n it(\"rename reserved words\", async () => {\n const ec2SchemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" version=\"1.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.2.0\">\n <ECClass typeName=\"TestEntityClass\" isDomainClass=\"true\">\n <ECProperty propertyName=\"Id\" typeName=\"string\" />\n <ECProperty propertyName=\"ECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"ECClassId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceId\" typeName=\"string\" />\n <ECProperty propertyName=\"SourceECClassId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetId\" typeName=\"string\" />\n <ECProperty propertyName=\"TargetECClassId\" typeName=\"string\" />\n </ECClass>\n <ECClass typeName=\"TestStructClass\" isStruct=\"true\">\n <ECProperty propertyName=\"Id\" typeName=\"string\" />\n <ECProperty propertyName=\"ECInstanceId\" typeName=\"string\" />\n <ECProperty propertyName=\"ECClassId\" typeName=\"string\" />\n </ECClass>\n </ECSchema>`;\n\n const ec3Schemas: string[] = convertEC2SchemasToEC3Schemas([ec2SchemaXml]);\n assert.equal(ec3Schemas.length, 1);\n const schemasWithUpdatedCA: string[] = upgradeCustomAttributesToEC3(ec3Schemas);\n assert.equal(schemasWithUpdatedCA.length, 1);\n\n const outDir = KnownTestLocations.outputDir;\n const db: ECDb = ECDbTestHelper.createECDb(outDir, \"RenameReservedWords.ecdb\", schemasWithUpdatedCA[0]);\n assert.isTrue(db !== undefined);\n assert.isTrue(db.isOpen);\n\n const propNamesInEntityClass = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let stmt: ECSqlStatement = db.prepareStatement(\"SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestEntityClass' ORDER BY p.Ordinal\");\n let rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n propNamesInEntityClass.push(row.name);\n }\n stmt[Symbol.dispose]();\n assert.equal(rowCount, 9);\n\n assert.isFalse(propNamesInEntityClass.includes(\"Id\")); // The Id property is a reserved keyword and should have been renamed\n assert.isFalse(propNamesInEntityClass.includes(\"ECClassId\")); // The ECClassId property is a reserved keyword and should have been renamed\n assert.isFalse(propNamesInEntityClass.includes(\"ECInstanceId\")); // The ECInstanceId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_Id_\")); // The Id property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_ECClassId_\")); // The ECClassId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TestSchema_ECInstanceId_\")); // The ECInstanceId property is a reserved keyword and should have been renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceECInstanceId\")); // The SourceECInstanceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceId\")); // The SourceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"SourceECClassId\")); // The SourceECClassId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetECInstanceId\")); // The TargetECInstanceId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetId\")); // The TargetId property is allowed on Entity classes and should not be renamed\n assert.isTrue(propNamesInEntityClass.includes(\"TargetECClassId\")); // The TargetECClassId property is allowed on Entity classes and should not be renamed\n\n const propNamesInStructClass = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n stmt = db.prepareStatement(\"SELECT p.Name FROM meta.ECPropertyDef p JOIN meta.ECClassDef c USING meta.ClassOwnsLocalProperties JOIN meta.ECSchemaDef s USING meta.SchemaOwnsClasses WHERE s.Name='TestSchema' AND c.Name='TestStructClass' ORDER BY p.Ordinal\");\n rowCount = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n const row = stmt.getRow();\n propNamesInStructClass.push(row.name);\n }\n stmt[Symbol.dispose]();\n assert.equal(rowCount, 3);\n\n assert.isTrue(propNamesInStructClass.includes(\"Id\")); // The Id property is not a reserved keyword for Struct classes and should not be renamed\n assert.isTrue(propNamesInStructClass.includes(\"ECClassId\")); // The ECClassId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isTrue(propNamesInStructClass.includes(\"ECInstanceId\")); // The ECInstanceId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_Id_\")); // The Id property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_ECClassId_\")); // The ECClassId property is not a reserved keyword for Struct classes and should not be renamed\n assert.isFalse(propNamesInStructClass.includes(\"TestSchema_ECInstanceId_\")); // The ECInstanceId property is not a reserved keyword for Struct classes and should not be renamed\n });\n});\n"]}
|
|
@@ -187,6 +187,7 @@ describe("ECDb", () => {
|
|
|
187
187
|
</ECEntityClass>
|
|
188
188
|
</ECSchema>`), false);
|
|
189
189
|
assert.isTrue(testECDb.isOpen);
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
190
191
|
testECDb.withPreparedStatement("INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)", (stmt) => {
|
|
191
192
|
const res = stmt.stepForInsert();
|
|
192
193
|
assert.equal(res.status, DbResult.BE_SQLITE_DONE);
|
|
@@ -201,6 +202,7 @@ describe("ECDb", () => {
|
|
|
201
202
|
WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`, (stmt) => { stmt.step(); });
|
|
202
203
|
testECDb.saveChanges();
|
|
203
204
|
const runDbListPragmaUsingStatement = (ecdb) => {
|
|
205
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
204
206
|
return ecdb.withPreparedStatement("PRAGMA db_list", (stmt) => {
|
|
205
207
|
const result = [];
|
|
206
208
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
@@ -220,6 +222,7 @@ describe("ECDb", () => {
|
|
|
220
222
|
const testECDb0 = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, "file2.ecdb"), false);
|
|
221
223
|
// following call will not fail but unknow ECDb profile will cause it to be attach as SQLite.
|
|
222
224
|
testECDb0.attachDb(ecdbPath1, "source");
|
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
223
226
|
expect(() => testECDb0.withPreparedStatement("SELECT Name, Age FROM source.test.Person", () => { })).to.throw("ECClass 'source.test.Person' does not exist or could not be loaded.");
|
|
224
227
|
expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([
|
|
225
228
|
{
|
|
@@ -244,6 +247,7 @@ describe("ECDb", () => {
|
|
|
244
247
|
profile: "ECDb"
|
|
245
248
|
},
|
|
246
249
|
]);
|
|
250
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
247
251
|
expect(() => testECDb0.withPreparedStatement("SELECT Name, Age FROM source.test.Person", () => { })).to.throw("ECClass 'source.test.Person' does not exist or could not be loaded.");
|
|
248
252
|
const testECDb1 = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, "file4.ecdb"), false);
|
|
249
253
|
testECDb1.attachDb(ecdbPath1, "source");
|
|
@@ -303,6 +307,7 @@ describe("ECDb", () => {
|
|
|
303
307
|
</ECEntityClass>
|
|
304
308
|
</ECSchema>`), false);
|
|
305
309
|
assert.isTrue(testECDb.isOpen);
|
|
310
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
306
311
|
testECDb.withPreparedStatement("INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)", (stmt) => {
|
|
307
312
|
const res = stmt.stepForInsert();
|
|
308
313
|
assert.equal(res.status, DbResult.BE_SQLITE_DONE);
|
|
@@ -312,6 +317,7 @@ describe("ECDb", () => {
|
|
|
312
317
|
});
|
|
313
318
|
testECDb.saveChanges();
|
|
314
319
|
const runDbListPragma = (ecdb) => {
|
|
320
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
315
321
|
return ecdb.withPreparedStatement("PRAGMA db_list", (stmt) => {
|
|
316
322
|
const result = [];
|
|
317
323
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
@@ -322,6 +328,7 @@ describe("ECDb", () => {
|
|
|
322
328
|
};
|
|
323
329
|
const testECDb0 = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, "file2.ecdb"), false);
|
|
324
330
|
testECDb0.attachDb(ecdbPath1, "source");
|
|
331
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
325
332
|
testECDb0.withPreparedStatement("SELECT Name, Age FROM source.test.Person", (stmt) => {
|
|
326
333
|
assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
|
|
327
334
|
const row = stmt.getRow();
|
|
@@ -351,6 +358,7 @@ describe("ECDb", () => {
|
|
|
351
358
|
profile: "ECDb"
|
|
352
359
|
},
|
|
353
360
|
]);
|
|
361
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
354
362
|
expect(() => testECDb0.withPreparedStatement("SELECT Name, Age FROM source.test.Person", () => { })).to.throw("ECClass 'source.test.Person' does not exist or could not be loaded.");
|
|
355
363
|
const testECDb1 = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, "file3.ecdb"), false);
|
|
356
364
|
testECDb1.attachDb(ecdbPath1, "source");
|
|
@@ -403,7 +411,7 @@ describe("ECDb", () => {
|
|
|
403
411
|
</ECEntityClass>
|
|
404
412
|
</ECSchema>`), false);
|
|
405
413
|
assert.isTrue(testECDb.isOpen);
|
|
406
|
-
id = testECDb.
|
|
414
|
+
id = testECDb.withCachedWriteStatement("INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)", (stmt) => {
|
|
407
415
|
const res = stmt.stepForInsert();
|
|
408
416
|
assert.equal(res.status, DbResult.BE_SQLITE_DONE);
|
|
409
417
|
assert.isDefined(res.id);
|
|
@@ -423,6 +431,7 @@ describe("ECDb", () => {
|
|
|
423
431
|
const ecdb = __addDisposableResource(env_10, new ECDb(), false);
|
|
424
432
|
ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);
|
|
425
433
|
assert.isTrue(ecdb.isOpen);
|
|
434
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
426
435
|
ecdb.withPreparedStatement("SELECT Name, Age FROM test.Person WHERE ECInstanceId=?", (stmt) => {
|
|
427
436
|
stmt.bindId(1, id);
|
|
428
437
|
assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
|
|
@@ -571,6 +580,7 @@ describe("ECDb", () => {
|
|
|
571
580
|
ecdb.saveChanges();
|
|
572
581
|
const expectedLabels = [undefined, "m", "", "mm"];
|
|
573
582
|
let index = 0;
|
|
583
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
574
584
|
ecdb.withStatement("select label from meta.FormatCompositeUnitDef where Format.Id=0x1", (stmt) => {
|
|
575
585
|
for (let i = 1; i <= 4; i++) {
|
|
576
586
|
assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
|
|
@@ -596,6 +606,7 @@ describe("ECDb", () => {
|
|
|
596
606
|
ecdb.saveChanges();
|
|
597
607
|
const expectedLabelsUpdated = ["", "m", undefined, "mm"];
|
|
598
608
|
index = 0;
|
|
609
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
599
610
|
ecdb.withStatement("select label from meta.FormatCompositeUnitDef where Format.Id=0x1", (stmt) => {
|
|
600
611
|
for (let i = 1; i <= 4; i++) {
|
|
601
612
|
assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECDb.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Id64, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { ECDb, ECDbOpenMode, ECSqlInsertResult, ECSqlStatement, IModelJsFs, SqliteStatement, SqliteValue, SqliteValueType } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { QueryOptionsBuilder } from \"@itwin/core-common\";\n\ndescribe(\"ECDb\", () => {\n const outDir = KnownTestLocations.outputDir;\n\n it(\"should be able to create a new ECDb\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"create.ecdb\");\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"should be able to close an ECDb\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"close.ecdb\");\n assert.isTrue(ecdb.isOpen);\n ecdb.closeDb();\n assert.isFalse(ecdb.isOpen);\n });\n\n it(\"should be able to open an ECDb\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite);\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"Open ECDb with upgrade option\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.FileUpgrade));\n }\n\n });\n it(\"attach/detach newer profile version\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n\n // override profile version to 55.0.0 which is currently not supported\n testECDb.withSqliteStatement(`\n UPDATE be_Prop SET\n StrData = '{\"major\":55,\"minor\":0,\"sub1\":0,\"sub2\":0}'\n WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`,\n (stmt: SqliteStatement) => { stmt.step(); });\n testECDb.saveChanges();\n\n const runDbListPragmaUsingStatement = (ecdb: ECDb) => {\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n const runDbListPragmaCCQ = async (ecdb: ECDb) => {\n const reader = ecdb.createQueryReader(\"PRAGMA db_list\");\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (await reader.step()) {\n result.push(reader.current.toRow());\n }\n return result;\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n // following call will not fail but unknow ECDb profile will cause it to be attach as SQLite.\n testECDb0.attachDb(ecdbPath1, \"source\");\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader1.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb1.detachDb(\"source\");\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n });\n it(\"attach/detach file & db_list pragma\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n\n const runDbListPragma = (ecdb: ECDb) => {\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n testECDb0.attachDb(ecdbPath1, \"source\");\n testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"ECDb\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file3.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\", undefined, new QueryOptionsBuilder().setUsePrimaryConnection(true).getOptions());\n assert.equal(await reader1.step(), true);\n assert.equal(reader1.current.name, \"Mary\");\n assert.equal(reader1.current.age, 45);\n testECDb1.detachDb(\"source\");\n\n\n using testECDb2 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb2.attachDb(ecdbPath1, \"source\");\n const reader2 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n assert.equal(await reader2.step(), true);\n assert.equal(reader2.current.name, \"Mary\");\n assert.equal(reader2.current.age, 45);\n testECDb2.detachDb(\"source\");\n const reader3 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader3.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n });\n it(\"should be able to import a schema\", () => {\n const fileName = \"schemaimport.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n let id: Id64String;\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n id = testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withPreparedStatement(\"SELECT Name, Age FROM test.Person WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n });\n\n it(\"should be able to get schema props\", () => {\n const fileName = \"schema-props.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath);\n const schema = ecdb.getSchemaProps(\"ECDbMeta\");\n assert.equal(schema.name, \"ECDbMeta\");\n });\n\n it(\"Run plain SQL\", () => {\n const fileName = \"plainseql.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n\n testECDb.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"Dummy 1\");\n stmt.bindValue(2, 100);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValues([\"Dummy 2\", 200]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValue(\":p1\", \"Dummy 3\");\n stmt.bindValue(\":p2\", 300);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n assert.equal(stmt.getColumnCount(), 3);\n const val0: SqliteValue = stmt.getValue(0);\n assert.equal(val0.columnName, \"Id\");\n assert.equal(val0.type, SqliteValueType.Integer);\n assert.isFalse(val0.isNull);\n assert.equal(val0.getInteger(), i);\n\n const val1: SqliteValue = stmt.getValue(1);\n assert.equal(val1.columnName, \"Name\");\n assert.equal(val1.type, SqliteValueType.String);\n assert.isFalse(val1.isNull);\n assert.equal(val1.getString(), `Dummy ${i}`);\n\n const val2: SqliteValue = stmt.getValue(2);\n assert.equal(val2.columnName, \"Code\");\n assert.equal(val2.type, SqliteValueType.Integer);\n assert.isFalse(val2.isNull);\n assert.equal(val2.getInteger(), i * 100);\n\n const row: any = stmt.getRow();\n assert.equal(row.id, i);\n assert.equal(row.name, `Dummy ${i}`);\n assert.equal(row.code, i * 100);\n }\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n it(\"test unit labels in composite formats\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"TestCompositeFormats.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"compositeFormats1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite>\n <Unit>u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit label=\"\">u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const expectedLabels = [undefined, \"m\", \"\", \"mm\"];\n let index = 0;\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabels[index++]);\n }\n });\n\n const xmlpathUpdated = path.join(outDir, \"compositeFormats2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite spacer=\"=\" includeZero=\"False\">\n <Unit label=\"\">u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit>u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n\n ecdb.importSchema(xmlpathUpdated);\n ecdb.saveChanges();\n\n const expectedLabelsUpdated = [\"\", \"m\", undefined, \"mm\"];\n index = 0;\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabelsUpdated[index++]);\n }\n });\n\n ecdb.closeDb();\n });\n\n it(\"should make importSchema fail if new schema changes are observed without version bump\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"importSchemaNoVersionBump.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"importSchemaNoVersionBump1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const xmlpathUpdated = path.join(outDir, \"importSchemaNoVersionBump2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECProperty propertyName=\"Height\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n let calledCategory = \"\";\n let calledMessage = \"\";\n const stubbedLogError = sinon.stub(Logger, \"logError\").callsFake((category: string, message: string) => {\n calledCategory = category;\n calledMessage = message;\n });\n\n // although an error should be logged, no error is actually returned to not disrupt currently existing workflows and to alert the user about some wrong/unexpected behavior\n expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;\n expect(calledCategory).to.equal(\"ECDb\");\n expect(calledMessage).to.equal(\"ECSchema import has failed. Schema Test has new changes, but the schema version is not incremented.\");\n\n stubbedLogError.restore();\n ecdb.closeDb();\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ECDb.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ECDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Id64, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { ECDb, ECDbOpenMode, ECSqlInsertResult, ECSqlStatement, ECSqlWriteStatement, IModelJsFs, SqliteStatement, SqliteValue, SqliteValueType } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECDbTestHelper } from \"./ECDbTestHelper\";\nimport { QueryOptionsBuilder } from \"@itwin/core-common\";\n\ndescribe(\"ECDb\", () => {\n const outDir = KnownTestLocations.outputDir;\n\n it(\"should be able to create a new ECDb\", () => {\n using ecdb = ECDbTestHelper.createECDb(outDir, \"create.ecdb\");\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"should be able to close an ECDb\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"close.ecdb\");\n assert.isTrue(ecdb.isOpen);\n ecdb.closeDb();\n assert.isFalse(ecdb.isOpen);\n });\n\n it(\"should be able to open an ECDb\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite);\n assert.isTrue(ecdb.isOpen);\n });\n\n it(\"Open ECDb with upgrade option\", () => {\n const fileName = \"open.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.ReadWrite));\n }\n {\n using ecdb = new ECDb();\n assert.doesNotThrow(() => ecdb.openDb(ecdbPath, ECDbOpenMode.FileUpgrade));\n }\n\n });\n it(\"attach/detach newer profile version\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n\n // override profile version to 55.0.0 which is currently not supported\n testECDb.withSqliteStatement(`\n UPDATE be_Prop SET\n StrData = '{\"major\":55,\"minor\":0,\"sub1\":0,\"sub2\":0}'\n WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`,\n (stmt: SqliteStatement) => { stmt.step(); });\n testECDb.saveChanges();\n\n const runDbListPragmaUsingStatement = (ecdb: ECDb) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n const runDbListPragmaCCQ = async (ecdb: ECDb) => {\n const reader = ecdb.createQueryReader(\"PRAGMA db_list\");\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (await reader.step()) {\n result.push(reader.current.toRow());\n }\n return result;\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n // following call will not fail but unknow ECDb profile will cause it to be attach as SQLite.\n testECDb0.attachDb(ecdbPath1, \"source\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragmaUsingStatement(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader1.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"SQLite\"\n }\n ]);\n testECDb1.detachDb(\"source\");\n expect(await runDbListPragmaCCQ(testECDb1)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file4.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n });\n it(\"attach/detach file & db_list pragma\", async () => {\n const fileName1 = \"source_file.ecdb\";\n const ecdbPath1: string = path.join(outDir, fileName1);\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName1,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb.withPreparedStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n\n const runDbListPragma = (ecdb: ECDb) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return ecdb.withPreparedStatement(\"PRAGMA db_list\", (stmt: ECSqlStatement) => {\n const result: { alias: string, filename: string, profile: string }[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n result.push(stmt.getRow());\n }\n return result;\n });\n }\n using testECDb0 = ECDbTestHelper.createECDb(outDir, \"file2.ecdb\");\n testECDb0.attachDb(ecdbPath1, \"source\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n {\n sno: 1,\n alias: \"source\",\n fileName: path.join(outDir, \"source_file.ecdb\"),\n profile: \"ECDb\"\n }\n ]);\n testECDb0.detachDb(\"source\");\n expect(runDbListPragma(testECDb0)).deep.equals([\n {\n sno: 0,\n alias: \"main\",\n fileName: path.join(outDir, \"file2.ecdb\"),\n profile: \"ECDb\"\n },\n ]);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testECDb0.withPreparedStatement(\"SELECT Name, Age FROM source.test.Person\", () => { })).to.throw(\"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n\n using testECDb1 = ECDbTestHelper.createECDb(outDir, \"file3.ecdb\");\n testECDb1.attachDb(ecdbPath1, \"source\");\n const reader1 = testECDb1.createQueryReader(\"SELECT Name, Age FROM source.test.Person\", undefined, new QueryOptionsBuilder().setUsePrimaryConnection(true).getOptions());\n assert.equal(await reader1.step(), true);\n assert.equal(reader1.current.name, \"Mary\");\n assert.equal(reader1.current.age, 45);\n testECDb1.detachDb(\"source\");\n\n\n using testECDb2 = ECDbTestHelper.createECDb(outDir, \"file4.ecdb\");\n testECDb2.attachDb(ecdbPath1, \"source\");\n const reader2 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n assert.equal(await reader2.step(), true);\n assert.equal(reader2.current.name, \"Mary\");\n assert.equal(reader2.current.age, 45);\n testECDb2.detachDb(\"source\");\n const reader3 = testECDb2.createQueryReader(\"SELECT Name, Age FROM source.test.Person\");\n let expectThrow = false;\n try {\n await reader3.step();\n } catch (err) {\n if (err instanceof Error) {\n assert.equal(err.message, \"ECClass 'source.test.Person' does not exist or could not be loaded.\");\n expectThrow = true;\n }\n }\n assert.isTrue(expectThrow);\n });\n it(\"should be able to import a schema\", () => {\n const fileName = \"schemaimport.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n let id: Id64String;\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName,\n `<ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n assert.isTrue(testECDb.isOpen);\n id = testECDb.withCachedWriteStatement(\"INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)\", (stmt: ECSqlWriteStatement) => {\n const res: ECSqlInsertResult = stmt.stepForInsert();\n assert.equal(res.status, DbResult.BE_SQLITE_DONE);\n assert.isDefined(res.id);\n assert.isTrue(Id64.isValidId64(res.id!));\n return res.id!;\n });\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withPreparedStatement(\"SELECT Name, Age FROM test.Person WHERE ECInstanceId=?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, id);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const row = stmt.getRow();\n assert.equal(row.name, \"Mary\");\n assert.equal(row.age, 45);\n });\n });\n\n it(\"should be able to get schema props\", () => {\n const fileName = \"schema-props.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n }\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath);\n const schema = ecdb.getSchemaProps(\"ECDbMeta\");\n assert.equal(schema.name, \"ECDbMeta\");\n });\n\n it(\"Run plain SQL\", () => {\n const fileName = \"plainseql.ecdb\";\n const ecdbPath: string = path.join(outDir, fileName);\n {\n using testECDb = ECDbTestHelper.createECDb(outDir, fileName);\n assert.isTrue(testECDb.isOpen);\n\n testECDb.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"Dummy 1\");\n stmt.bindValue(2, 100);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValues([\"Dummy 2\", 200]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValue(\":p1\", \"Dummy 3\");\n stmt.bindValue(\":p2\", 300);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n testECDb.saveChanges();\n }\n\n using ecdb = new ECDb();\n ecdb.openDb(ecdbPath, ECDbOpenMode.Readonly);\n assert.isTrue(ecdb.isOpen);\n\n ecdb.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n assert.equal(stmt.getColumnCount(), 3);\n const val0: SqliteValue = stmt.getValue(0);\n assert.equal(val0.columnName, \"Id\");\n assert.equal(val0.type, SqliteValueType.Integer);\n assert.isFalse(val0.isNull);\n assert.equal(val0.getInteger(), i);\n\n const val1: SqliteValue = stmt.getValue(1);\n assert.equal(val1.columnName, \"Name\");\n assert.equal(val1.type, SqliteValueType.String);\n assert.isFalse(val1.isNull);\n assert.equal(val1.getString(), `Dummy ${i}`);\n\n const val2: SqliteValue = stmt.getValue(2);\n assert.equal(val2.columnName, \"Code\");\n assert.equal(val2.type, SqliteValueType.Integer);\n assert.isFalse(val2.isNull);\n assert.equal(val2.getInteger(), i * 100);\n\n const row: any = stmt.getRow();\n assert.equal(row.id, i);\n assert.equal(row.name, `Dummy ${i}`);\n assert.equal(row.code, i * 100);\n }\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n it(\"test unit labels in composite formats\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"TestCompositeFormats.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"compositeFormats1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite>\n <Unit>u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit label=\"\">u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const expectedLabels = [undefined, \"m\", \"\", \"mm\"];\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabels[index++]);\n }\n });\n\n const xmlpathUpdated = path.join(outDir, \"compositeFormats2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n <ECSchema schemaName=\"TestCompositeFormats\" alias=\"tcf\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.00\" alias=\"u\" />\n <Unit typeName=\"TestUnit\" displayLabel=\"Test Unit\" definition=\"u:M\" numerator=\"1.0\" phenomenon=\"u:LENGTH\" unitSystem=\"u:METRIC\" />\n <Format typeName=\"TestFormat\" displayLabel=\"TestFormat\" roundFactor=\"0.3\" type=\"Fractional\" showSignOption=\"OnlyNegative\" formatTraits=\"TrailZeroes|KeepSingleZero\" precision=\"4\" decimalSeparator=\".\" thousandSeparator=\",\" uomSeparator=\" \">\n <Composite spacer=\"=\" includeZero=\"False\">\n <Unit label=\"\">u:KM</Unit>\n <Unit label=\"m\">TestUnit</Unit>\n <Unit>u:CM</Unit>\n <Unit label=\"mm\">u:MM</Unit>\n </Composite>\n </Format>\n <KindOfQuantity typeName=\"TestKOQ2\" description=\"Test KOQ2\" displayLabel=\"TestKOQ2\" persistenceUnit=\"u:M\" presentationUnits=\"TestFormat\" relativeError=\"10e-3\" />\n </ECSchema>`);\n\n ecdb.importSchema(xmlpathUpdated);\n ecdb.saveChanges();\n\n const expectedLabelsUpdated = [\"\", \"m\", undefined, \"mm\"];\n index = 0;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ecdb.withStatement(\"select label from meta.FormatCompositeUnitDef where Format.Id=0x1\", (stmt: ECSqlStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n expect(stmt.getRow().label).to.eql(expectedLabelsUpdated[index++]);\n }\n });\n\n ecdb.closeDb();\n });\n\n it(\"should make importSchema fail if new schema changes are observed without version bump\", () => {\n const ecdb: ECDb = ECDbTestHelper.createECDb(outDir, \"importSchemaNoVersionBump.ecdb\");\n const xmlpathOriginal = path.join(outDir, \"importSchemaNoVersionBump1.ecschema.xml\");\n\n IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n ecdb.importSchema(xmlpathOriginal);\n ecdb.saveChanges();\n\n const xmlpathUpdated = path.join(outDir, \"importSchemaNoVersionBump2.ecschema.xml\");\n IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECEntityClass typeName=\"Person\" modifier=\"Sealed\">\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n <ECProperty propertyName=\"Age\" typeName=\"int\"/>\n <ECProperty propertyName=\"Height\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`);\n\n let calledCategory = \"\";\n let calledMessage = \"\";\n const stubbedLogError = sinon.stub(Logger, \"logError\").callsFake((category: string, message: string) => {\n calledCategory = category;\n calledMessage = message;\n });\n\n // although an error should be logged, no error is actually returned to not disrupt currently existing workflows and to alert the user about some wrong/unexpected behavior\n expect(ecdb.importSchema(xmlpathUpdated)).to.not.throw;\n expect(calledCategory).to.equal(\"ECDb\");\n expect(calledMessage).to.equal(\"ECSchema import has failed. Schema Test has new changes, but the schema version is not incremented.\");\n\n stubbedLogError.restore();\n ecdb.closeDb();\n });\n});\n"]}
|
|
@@ -18,6 +18,7 @@ describe("ECSql Abstract Syntax Tree", () => {
|
|
|
18
18
|
async function parseECSql(ecsql) {
|
|
19
19
|
const parseTreeECSql = `PRAGMA PARSE_TREE("${ecsql}") ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES`;
|
|
20
20
|
if (true) {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
21
22
|
return ecdb.withPreparedStatement(parseTreeECSql, (stmt) => {
|
|
22
23
|
if (DbResult.BE_SQLITE_ROW !== stmt.step()) {
|
|
23
24
|
throw new Error("unable to get parse tree.");
|