@itwin/core-backend 5.15.0-dev.2 → 5.15.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -1
- package/lib/cjs/BriefcaseManager.d.ts +2 -2
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/ChangesetReaderTypes.d.ts +1 -1
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.d.ts +3 -3
- package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.js +2 -2
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +5 -0
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +15 -2
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js +2 -2
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +2 -2
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/ChangesetReaderTypes.d.ts +1 -1
- package/lib/esm/ChangesetReaderTypes.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.d.ts +3 -3
- package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -1
- package/lib/esm/ECSqlRowExecutor.js +2 -2
- package/lib/esm/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts +5 -0
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +15 -2
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/esm/ECSqlSyncReader.js +3 -3
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +140 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/standalone/SessionApplyIndirect.test.d.ts +2 -0
- package/lib/esm/test/standalone/SessionApplyIndirect.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SessionApplyIndirect.test.js +211 -0
- package/lib/esm/test/standalone/SessionApplyIndirect.test.js.map +1 -0
- package/package.json +15 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionApplyIndirect.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SessionApplyIndirect.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/F,mGAAmG;AACnG,kFAAkF;AAClF,EAAE;AACF,+FAA+F;AAC/F,2CAA2C;AAC3C,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,kGAAkG;AAClG,mGAAmG;AACnG,EAAE;AACF,iGAAiG;AACjG,8FAA8F;AAC9F,mGAAmG;AACnG,oGAAoG;AACpG,iGAAiG;AACjG,uBAAuB;AACvB,EAAE;AACF,+FAA+F;AAC/F,+FAA+F;AAC/F,iGAAiG;AACjG,2EAA2E;AAC3E,EAAE;AACF,2BAA2B;AAC3B,mGAAmG;AACnG,6FAA6F;AAC7F,mGAAmG;AACnG,oGAAoG;AACpG,sBAAsB;AACtB,EAAE;AACF,gGAAgG;AAChG,mFAAmF;AACnF,kGAAkG;AAClG,uFAAuF;AACvF,mGAAmG;AAEnG,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAEL,cAAc,EAEd,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,YAAY,CAAC,SAAsB;IAC1C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAC7D,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,QAAQ,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAClF,MAAM,GAAG,GAAG;QACV,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,sBAAsB;QAClC,WAAW,EAAE,sBAAsB;QACnC,aAAa,EAAE,KAAK,EAAE,IAAuB,EAAE,MAAa,EAAE,EAAE;YAC9D,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACpJ,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,MAAa,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;QACnE,MAAM,EAAE,KAAK,EAAE,MAAa,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;KACpE,CAAC;IAEF,KAAK,UAAU,oBAAoB,CAAC,GAAY;QAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAqB,CAAC;QAC5C,MAAM,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzH,CAAC;IAED,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC9B,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACrF,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChF,GAAG,CAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEhC,uFAAuF;QACvF,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,wCAAwC,CACxE,OAAO,EACP,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,EACvD,IAAI,CAAC,CAAC;QACR,MAAM,UAAU,GAAoB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,YAAY,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAClG,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC5C,OAAO,EACP,UAAU,CAAC,EAAE,EACb,YAAY,CAAC,KAAK,EAClB,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC/D,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,uFAAuF;QACvF,0FAA0F;QAC1F,8EAA8E;QAC9E,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;QACnE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAE3D,8FAA8F;QAC9F,8FAA8F;QAC9F,8FAA8F;QAC9F,+EAA+E;QAC/E,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;QAEzD,8FAA8F;QAC9F,2FAA2F;QAC3F,qDAAqD;QACrD,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,+FAA+F;QAC/F,4FAA4F;QAC5F,4FAA4F;QAC5F,qFAAqF;QACrF,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;;;gBAC/G,MAAM,MAAM,kCAAG,qBAAqB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,QAAA,CAAC;gBAChE,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrB,IAAI,MAAM,CAAC,SAAS,KAAK,WAAW,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;wBAChE,cAAc,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,MAAM,CAAC,UAAU;4BACpB,oBAAoB,GAAG,IAAI,CAAC;oBAChC,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,KAAK,EAAE,CAAC;;;;;;;;;SAChB;QAED,6FAA6F;QAC7F,gDAAgD;QAChD,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,iEAAiE,CAAC,CAAC;QAEjG,4FAA4F;QAC5F,+FAA+F;QAC/F,4CAA4C;QAC5C,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,oIAAoI,CAAC,CAAC;QAE3K,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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\n//=================================================================================================\r\n// Tests for the \"indirect flag is preserved while applying a changeset\" behavior.\r\n//\r\n// Background (iTwin/itwinjs-backlog#2474, scenario iTwin/itwinjs-backlog#2346, SQLite check-in\r\n// https://sqlite.org/src/info/9d36067e76):\r\n//\r\n// Every row change recorded by a SQLite session is flagged as either \"direct\" (made explicitly\r\n// by the user) or \"indirect\" (a side effect - e.g. produced by a trigger/foreign-key action, or\r\n// produced by applying a changeset entry that was itself flagged indirect). iTwin surfaces this\r\n// flag through `SqliteChangesetReader.isIndirect` (and `ChangeInstance.$meta.isIndirectChange`).\r\n//\r\n// Before the SQLite fix, when a changeset was applied to a briefcase that had an active change\r\n// session (as happens during a `pullChanges` that must rebase local, un-pushed txns), EVERY\r\n// applied row change was re-recorded as DIRECT, regardless of how it was flagged in the incoming\r\n// changeset. In OpenSite+ this caused a whole site to be flagged as \"directly modified\" when only\r\n// a pond (whose trigger indirectly touched the site row) had actually been edited, which broke\r\n// the Blame feature.\r\n//\r\n// The fix makes `sqlite3changeset_apply()` temporarily set the session \"indirect\" flag while\r\n// stepping a row change that was flagged indirect in the incoming changeset. As a result the\r\n// per-change direct/indirect classification is preserved end-to-end: a direct source change is\r\n// re-recorded direct, an indirect source change is re-recorded indirect.\r\n//\r\n// What these tests assert:\r\n// When briefcase B2 has a local, un-pushed change and pulls a changeset from B1 that contains an\r\n// INDIRECT change (a `bis_Model` LastMod/GeometryGuid update produced by a trigger when B1\r\n// inserted an element), the incoming indirect change is applied under B2's active session during\r\n// rebase. After the fix, that re-recorded change is still INDIRECT in B2; before the fix it would\r\n// have been DIRECT.\r\n//\r\n// NOTE: This test exercises behavior that lives in the native addon (@bentley/imodeljs-native).\r\n// It can only pass once an addon built from iTwin/imodel-native#1621 (SQLite tag\r\n// itwin-sqlite-v3.53.4-r3) is published and consumed by itwinjs-core. Until then it is expected\r\n// to fail locally, which is why it is parked on a branch rather than opened as a PR.\r\n//=================================================================================================\r\n\r\nimport { assert } from \"chai\";\r\nimport { IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { EditTxn } from \"../../EditTxn\";\r\nimport {\r\n BriefcaseDb,\r\n ChannelControl,\r\n DictionaryModel,\r\n SpatialCategory,\r\n SqliteChangesetReader,\r\n} from \"../../core-backend\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { HubWrappers, KnownTestLocations } from \"..\";\r\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\nfunction startTestTxn(briefcase: BriefcaseDb): EditTxn {\r\n const txn = new EditTxn(briefcase, \"session apply indirect\");\r\n txn.start();\r\n return txn;\r\n}\r\n\r\ndescribe(\"Session apply preserves indirect flag (iTwin/itwinjs-backlog#2346)\", () => {\r\n const ctx = {\r\n accessTokens: { user1: \"\", user2: \"\" },\r\n iModelId: \"\",\r\n iTwinId: \"\",\r\n modelId: \"\",\r\n spatialCategoryId: \"\",\r\n iModelName: \"SessionApplyIndirect\",\r\n rootSubject: \"SessionApplyIndirect\",\r\n openBriefcase: async (user: \"user1\" | \"user2\", noLock?: true) => {\r\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });\r\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n return b;\r\n },\r\n openB1: async (noLock?: true) => ctx.openBriefcase(\"user1\", noLock),\r\n openB2: async (noLock?: true) => ctx.openBriefcase(\"user2\", noLock),\r\n };\r\n\r\n async function insertPhysicalObject(txn: EditTxn): Promise<string> {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n await briefcase.locks.acquireLocks({ shared: ctx.modelId });\r\n return txn.insertElement(IModelTestUtils.createPhysicalObject(briefcase, ctx.modelId, ctx.spatialCategoryId).toJSON());\r\n }\r\n\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n HubMock.startup(\"SessionApplyIndirect\", KnownTestLocations.outputDir);\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown();\r\n });\r\n\r\n beforeEach(async () => {\r\n ctx.iTwinId = HubMock.iTwinId;\r\n ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });\r\n assert.isNotEmpty(ctx.iModelId);\r\n\r\n // Seed the iModel with a physical model + spatial category that both briefcases share.\r\n const b1 = await ctx.openB1();\r\n const seedTxn = startTestTxn(b1);\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n [, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n seedTxn,\r\n IModelTestUtils.getUniqueModelCode(b1, \"indirectModel\"),\r\n true);\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const categoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"IndirectCategory\");\r\n ctx.spatialCategoryId = SpatialCategory.insert(\r\n seedTxn,\r\n dictionary.id,\r\n categoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n seedTxn.saveChanges();\r\n await b1.pushChanges({ description: \"seed model + category\" });\r\n b1.close();\r\n });\r\n\r\n it(\"re-recorded indirect bis_Model update stays indirect after a rebasing pull\", async () => {\r\n // B1 inserts an element. Inserting an element DIRECTLY writes the bis_Element row, and\r\n // INDIRECTLY updates the owning bis_Model row (LastMod / GeometryGuid) via a trigger. The\r\n // pushed changeset therefore contains at least one indirect bis_Model update.\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(\"B1 inserts element (indirectly updates model)\");\r\n await b1.pushChanges({ description: \"B1 element insert\" });\r\n\r\n // B2 makes its own local change into the SAME model but does NOT push it. This leaves B2 with\r\n // an active change session and un-pushed local txns, so the subsequent pull must REBASE: B1's\r\n // changeset is applied into B2 while B2's session is recording. This is exactly the path that\r\n // re-records applied changes and, before the fix, dropped their indirect flag.\r\n const b2 = await ctx.openB2();\r\n const b2Txn = startTestTxn(b2);\r\n await insertPhysicalObject(b2Txn);\r\n b2Txn.saveChanges(\"B2 local element insert (un-pushed)\");\r\n\r\n // Pulling B1's changeset forces the rebase/apply of B1's indirect bis_Model update under B2's\r\n // active session. noFastForward guarantees a rebase actually happens rather than a trivial\r\n // fast-forward (which would not re-record anything).\r\n await b2.pullChanges();\r\n\r\n // Walk every local txn recorded in B2 (the result of applying B1's changeset and rebasing B2's\r\n // own txn on top of it) and inspect each bis_Model update. The #2346 invariant: a bis_Model\r\n // update must NEVER be recorded as a direct change - model LastMod/GeometryGuid changes are\r\n // always a trigger side effect, so they must stay indirect through the apply/rebase.\r\n let sawModelUpdate = false;\r\n let sawDirectModelUpdate = false;\r\n for (let txnId = b2.txns.queryFirstTxnId(); b2.txns.isTxnIdValid(txnId); txnId = b2.txns.queryNextTxnId(txnId)) {\r\n using reader = SqliteChangesetReader.openTxn({ db: b2, txnId });\r\n while (reader.step()) {\r\n if (reader.tableName === \"bis_Model\" && reader.op === \"Updated\") {\r\n sawModelUpdate = true;\r\n if (!reader.isIndirect)\r\n sawDirectModelUpdate = true;\r\n }\r\n }\r\n reader.close();\r\n }\r\n\r\n // We must have observed at least one bis_Model update (otherwise the test setup is wrong and\r\n // the assertion below would be vacuously true).\r\n assert.isTrue(sawModelUpdate, \"expected at least one bis_Model update among B2's local changes\");\r\n\r\n // The core assertion: after applying B1's changeset under B2's active session, no bis_Model\r\n // update was re-recorded as a DIRECT change. Before the SQLite fix this would be false because\r\n // every applied change was recorded direct.\r\n assert.isFalse(sawDirectModelUpdate, \"a bis_Model update was re-recorded as direct; the indirect flag was lost while applying the changeset (iTwin/itwinjs-backlog#2346)\");\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n});\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-backend",
|
|
3
|
-
"version": "5.15.0-dev.
|
|
3
|
+
"version": "5.15.0-dev.3",
|
|
4
4
|
"description": "iTwin.js backend components",
|
|
5
5
|
"main": "lib/cjs/core-backend.js",
|
|
6
6
|
"module": "lib/esm/core-backend.js",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@opentelemetry/api": "^1.0.4",
|
|
30
|
-
"@itwin/core-bentley": "5.15.0-dev.
|
|
31
|
-
"@itwin/core-
|
|
32
|
-
"@itwin/core-
|
|
33
|
-
"@itwin/ecschema-metadata": "5.15.0-dev.
|
|
34
|
-
"@itwin/core-
|
|
30
|
+
"@itwin/core-bentley": "5.15.0-dev.3",
|
|
31
|
+
"@itwin/core-common": "5.15.0-dev.3",
|
|
32
|
+
"@itwin/core-quantity": "5.15.0-dev.3",
|
|
33
|
+
"@itwin/ecschema-metadata": "5.15.0-dev.3",
|
|
34
|
+
"@itwin/core-geometry": "5.15.0-dev.3"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
37
37
|
"@opentelemetry/api": {
|
|
@@ -72,18 +72,18 @@
|
|
|
72
72
|
"marked": "^14.1.3",
|
|
73
73
|
"sql-formatter": "^15.4.6",
|
|
74
74
|
"vite": "^6.4.3",
|
|
75
|
-
"@itwin/build-tools": "5.15.0-dev.
|
|
76
|
-
"@itwin/
|
|
77
|
-
"@itwin/
|
|
78
|
-
"@itwin/core-geometry": "5.15.0-dev.
|
|
79
|
-
"@itwin/
|
|
80
|
-
"@itwin/core-
|
|
81
|
-
"@itwin/
|
|
75
|
+
"@itwin/build-tools": "5.15.0-dev.3",
|
|
76
|
+
"@itwin/core-bentley": "5.15.0-dev.3",
|
|
77
|
+
"@itwin/ecschema-locaters": "5.15.0-dev.3",
|
|
78
|
+
"@itwin/core-geometry": "5.15.0-dev.3",
|
|
79
|
+
"@itwin/core-common": "5.15.0-dev.3",
|
|
80
|
+
"@itwin/core-quantity": "5.15.0-dev.3",
|
|
81
|
+
"@itwin/ecschema-metadata": "5.15.0-dev.3",
|
|
82
82
|
"internal-tools": "3.0.0-dev.69",
|
|
83
|
-
"@itwin/ecsql-common": "5.15.0-dev.
|
|
83
|
+
"@itwin/ecsql-common": "5.15.0-dev.3"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@bentley/imodeljs-native": "5.15.
|
|
86
|
+
"@bentley/imodeljs-native": "5.15.7",
|
|
87
87
|
"@itwin/object-storage-azure": "^3.0.4",
|
|
88
88
|
"@azure/storage-blob": "^12.28.0",
|
|
89
89
|
"form-data": "^4.0.6",
|