@itwin/core-backend 5.9.0-dev.15 → 5.9.0-dev.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  2. package/lib/cjs/BriefcaseManager.js +6 -3
  3. package/lib/cjs/BriefcaseManager.js.map +1 -1
  4. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  5. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  6. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  7. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  8. package/lib/cjs/ChangesetReader.d.ts +186 -0
  9. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  10. package/lib/cjs/ChangesetReader.js +372 -0
  11. package/lib/cjs/ChangesetReader.js.map +1 -0
  12. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  13. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  16. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  17. package/lib/cjs/DevTools.js.map +1 -1
  18. package/lib/cjs/DisplayStyle.js.map +1 -1
  19. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  20. package/lib/cjs/ECSqlStatement.js.map +1 -1
  21. package/lib/cjs/Element.js.map +1 -1
  22. package/lib/cjs/ElementGraphics.js.map +1 -1
  23. package/lib/cjs/ExternalSource.js.map +1 -1
  24. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  25. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  26. package/lib/cjs/GeographicCRSServices.js +13 -4
  27. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  28. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  29. package/lib/cjs/IpcHost.js.map +1 -1
  30. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  31. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  32. package/lib/cjs/PartialChangeUnifier.js +234 -0
  33. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  34. package/lib/cjs/SheetIndex.js.map +1 -1
  35. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  36. package/lib/cjs/SqliteChangesetReader.js +1 -1
  37. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  38. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  39. package/lib/cjs/core-backend.d.ts +3 -0
  40. package/lib/cjs/core-backend.d.ts.map +1 -1
  41. package/lib/cjs/core-backend.js +3 -0
  42. package/lib/cjs/core-backend.js.map +1 -1
  43. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  44. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  45. package/lib/esm/BriefcaseManager.js +6 -3
  46. package/lib/esm/BriefcaseManager.js.map +1 -1
  47. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  48. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  49. package/lib/esm/ChangesetECAdaptor.js +7 -1
  50. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  51. package/lib/esm/ChangesetReader.d.ts +186 -0
  52. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  53. package/lib/esm/ChangesetReader.js +368 -0
  54. package/lib/esm/ChangesetReader.js.map +1 -0
  55. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  56. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  57. package/lib/esm/ChangesetReaderTypes.js +20 -0
  58. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  59. package/lib/esm/ConcurrentQuery.js.map +1 -1
  60. package/lib/esm/DevTools.js.map +1 -1
  61. package/lib/esm/DisplayStyle.js.map +1 -1
  62. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  63. package/lib/esm/ECSqlStatement.js.map +1 -1
  64. package/lib/esm/Element.js.map +1 -1
  65. package/lib/esm/ElementGraphics.js.map +1 -1
  66. package/lib/esm/ExternalSource.js.map +1 -1
  67. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  68. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  69. package/lib/esm/GeographicCRSServices.js +12 -4
  70. package/lib/esm/GeographicCRSServices.js.map +1 -1
  71. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  72. package/lib/esm/IpcHost.js.map +1 -1
  73. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  74. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  75. package/lib/esm/PartialChangeUnifier.js +230 -0
  76. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  77. package/lib/esm/SheetIndex.js.map +1 -1
  78. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  79. package/lib/esm/SqliteChangesetReader.js +1 -1
  80. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  81. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  82. package/lib/esm/core-backend.d.ts +3 -0
  83. package/lib/esm/core-backend.d.ts.map +1 -1
  84. package/lib/esm/core-backend.js +3 -0
  85. package/lib/esm/core-backend.js.map +1 -1
  86. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  87. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  88. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  89. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  90. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  91. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  92. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  93. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  94. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  95. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  96. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  97. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  98. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  99. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  100. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  101. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  102. package/lib/esm/test/standalone/IntegrityCheck.test.js +1 -1
  103. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  104. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  105. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  106. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  107. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  108. package/lib/esm/test/standalone/ViewDefinition.test.js +1 -1
  109. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  110. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  111. package/package.json +13 -13
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PartialChangeUnifier = exports.ChangeUnifierCache = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ /** @packageDocumentation
9
+ * @module ECDb
10
+ */
11
+ const core_bentley_1 = require("@itwin/core-bentley");
12
+ const core_common_1 = require("@itwin/core-common");
13
+ const SQLiteDb_1 = require("./SQLiteDb");
14
+ /** @beta */
15
+ var ChangeUnifierCache;
16
+ (function (ChangeUnifierCache) {
17
+ /**
18
+ * Creates an in-memory cache backed by a `Map`.
19
+ * Fast, but may exhaust memory for very large changesets.
20
+ * @returns An [[ChangeCache]] backed by an in-memory `Map`.
21
+ * @beta
22
+ */
23
+ function createInMemoryCache() {
24
+ return new InMemoryCache();
25
+ }
26
+ ChangeUnifierCache.createInMemoryCache = createInMemoryCache;
27
+ /**
28
+ * Creates a SQLite-backed cache stored in a temporary SQlite database.
29
+ * Slower than in-memory but useful in handling large changesets.
30
+ * Temporary SQlite database is first created in memory and
31
+ * parts of a temporary database might be flushed to disk if the database becomes large or
32
+ * if SQLite comes under memory pressure.
33
+ * @param bufferedReadInstanceSizeInBytes Read-batch size in bytes (default 10 MB).
34
+ * @returns An [[ChangeCache]] backed by a SQLite temp table.
35
+ * @beta
36
+ */
37
+ function createSqliteBackedCache(bufferedReadInstanceSizeInBytes = 1024 * 1024 * 10) {
38
+ return new SqliteBackedCache(bufferedReadInstanceSizeInBytes);
39
+ }
40
+ ChangeUnifierCache.createSqliteBackedCache = createSqliteBackedCache;
41
+ })(ChangeUnifierCache || (exports.ChangeUnifierCache = ChangeUnifierCache = {}));
42
+ // ---------------------------------------------------------------------------
43
+ // Private: InMemoryCache
44
+ // ---------------------------------------------------------------------------
45
+ class InMemoryCache {
46
+ _cache = new Map();
47
+ get(key) {
48
+ return this._cache.get(key);
49
+ }
50
+ set(key, value) {
51
+ // Remove undefined meta keys to keep serialised form compact.
52
+ const meta = value.$meta;
53
+ if (meta) {
54
+ Object.keys(meta).forEach((k) => meta[k] === undefined && delete meta[k]);
55
+ }
56
+ this._cache.set(key, value);
57
+ }
58
+ *all() {
59
+ for (const key of Array.from(this._cache.keys()).sort()) {
60
+ const instance = this._cache.get(key);
61
+ if (instance)
62
+ yield instance;
63
+ }
64
+ }
65
+ count() {
66
+ return this._cache.size;
67
+ }
68
+ [Symbol.dispose]() {
69
+ this._cache.clear();
70
+ }
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Private: NativeSqliteBackedInstanceCache
74
+ // ---------------------------------------------------------------------------
75
+ class SqliteBackedCache {
76
+ bufferedReadInstanceSizeInBytes;
77
+ _cacheTable = `[${core_bentley_1.Guid.createValue()}]`;
78
+ static defaultBufferSize = 1024 * 1024 * 10; // 10 MB
79
+ _db;
80
+ constructor(bufferedReadInstanceSizeInBytes = SqliteBackedCache.defaultBufferSize) {
81
+ this.bufferedReadInstanceSizeInBytes = bufferedReadInstanceSizeInBytes;
82
+ this._db = new SQLiteDb_1.SQLiteDb();
83
+ this._db.openDb("", { skipFileCheck: true, rawSQLite: true, openMode: core_bentley_1.OpenMode.ReadWrite }); // creating temp sqlite db https://sqlite.org/inmemorydb.html#:~:text=Temporary%20Databases,under%20the%20default%20SQLite%20configuration.
84
+ if (bufferedReadInstanceSizeInBytes <= 0)
85
+ throw new Error("bufferedReadInstanceSizeInBytes must be greater than 0");
86
+ this.createTempTable();
87
+ }
88
+ createTempTable() {
89
+ this._db.withSqliteStatement(`CREATE TABLE ${this._cacheTable} ([key] text primary key, [value] text)`, (stmt) => {
90
+ if (core_bentley_1.DbResult.BE_SQLITE_DONE !== stmt.step())
91
+ throw new Error("unable to create temp cache table");
92
+ });
93
+ }
94
+ get(key) {
95
+ return this._db.withPreparedSqliteStatement(`SELECT [value] FROM ${this._cacheTable} WHERE [key]=?`, (stmt) => {
96
+ stmt.reset();
97
+ stmt.clearBindings();
98
+ stmt.bindString(1, key);
99
+ if (stmt.step() === core_bentley_1.DbResult.BE_SQLITE_ROW)
100
+ return JSON.parse(stmt.getValueString(0), core_common_1.Base64EncodedString.reviver);
101
+ return undefined;
102
+ });
103
+ }
104
+ set(key, value) {
105
+ const shallowCopy = Object.assign({}, value);
106
+ this._db.withPreparedSqliteStatement(`INSERT INTO ${this._cacheTable} ([key], [value]) VALUES (?, ?) ON CONFLICT ([key]) DO UPDATE SET [value] = [excluded].[value]`, (stmt) => {
107
+ stmt.reset();
108
+ stmt.clearBindings();
109
+ stmt.bindString(1, key);
110
+ stmt.bindString(2, JSON.stringify(shallowCopy, core_common_1.Base64EncodedString.replacer));
111
+ stmt.step();
112
+ });
113
+ }
114
+ *all() {
115
+ const sql = `
116
+ SELECT JSON_GROUP_ARRAY(JSON([value]))
117
+ FROM (
118
+ SELECT [value],
119
+ SUM(LENGTH([value])) OVER (ORDER BY [key] ROWS UNBOUNDED PRECEDING) / ${this.bufferedReadInstanceSizeInBytes} AS [bucket]
120
+ FROM ${this._cacheTable}
121
+ )
122
+ GROUP BY [bucket]`;
123
+ const stmt = this._db.prepareSqliteStatement(sql);
124
+ try {
125
+ while (stmt.step() === core_bentley_1.DbResult.BE_SQLITE_ROW) {
126
+ const bucket = JSON.parse(stmt.getValueString(0), core_common_1.Base64EncodedString.reviver);
127
+ for (const instance of bucket)
128
+ yield instance;
129
+ }
130
+ }
131
+ finally {
132
+ stmt[Symbol.dispose]();
133
+ }
134
+ }
135
+ count() {
136
+ return this._db.withPreparedSqliteStatement(`SELECT COUNT(*) FROM ${this._cacheTable}`, (stmt) => {
137
+ stmt.reset();
138
+ if (stmt.step() === core_bentley_1.DbResult.BE_SQLITE_ROW)
139
+ return stmt.getValue(0).getInteger();
140
+ return 0;
141
+ });
142
+ }
143
+ [Symbol.dispose]() {
144
+ this._db.closeDb();
145
+ }
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // PartialChangeUnifier
149
+ // ---------------------------------------------------------------------------
150
+ /**
151
+ * Combines partial EC change instances (one per SQLite table row) into complete
152
+ * instances that span all tables mapping to a single EC entity.
153
+ *
154
+ * The merge key is derived from the `instanceKey` and `stage` stored in `$meta.instanceKey` and `$meta.stage`.
155
+ *
156
+ * **Usage:**
157
+ * ```ts
158
+ * using reader = ChangesetReader.openFile({ fileName, db });
159
+ * using unifier = new PartialChangeUnifier();
160
+ * while (reader.step()) {
161
+ * unifier.appendFrom(reader);
162
+ * }
163
+ * for (const instance of unifier.instances) { ... }
164
+ * ```
165
+ * @beta
166
+ */
167
+ class PartialChangeUnifier {
168
+ _cache;
169
+ constructor(_cache = new InMemoryCache()) {
170
+ this._cache = _cache;
171
+ }
172
+ /** Releases the underlying cache. */
173
+ [Symbol.dispose]() {
174
+ this._cache[Symbol.dispose]();
175
+ }
176
+ /** Number of complete (merged) instances currently accumulated. */
177
+ get instanceCount() {
178
+ return this._cache.count();
179
+ }
180
+ /**
181
+ * Append partial changes from the current reader row and merge them into the cache.
182
+ *
183
+ * @param source Any [ChangeSource]($backend) positioned on a valid row.
184
+ * @beta
185
+ */
186
+ appendFrom(source) {
187
+ if (source.op === "Updated") {
188
+ if (source.inserted)
189
+ this.combine(source.inserted);
190
+ if (source.deleted)
191
+ this.combine(source.deleted);
192
+ }
193
+ else if (source.op === "Inserted" && source.inserted) {
194
+ this.combine(source.inserted);
195
+ }
196
+ else if (source.op === "Deleted" && source.deleted) {
197
+ this.combine(source.deleted);
198
+ }
199
+ }
200
+ /**
201
+ * Iterator over all fully-merged EC change instances.
202
+ * @beta
203
+ */
204
+ get instances() {
205
+ return this._cache.all();
206
+ }
207
+ // ---------------------------------------------------------------------------
208
+ // Private helpers
209
+ // ---------------------------------------------------------------------------
210
+ buildKey(instance) {
211
+ const { instanceKey, stage } = instance.$meta;
212
+ return `${instanceKey}-${stage}`.toLowerCase();
213
+ }
214
+ combine(rhs) {
215
+ const key = this.buildKey(rhs);
216
+ const lhs = this._cache.get(key);
217
+ if (lhs) {
218
+ // Merge data fields — rhs wins for any overlapping columns.
219
+ const { $meta: _rhsMeta, ...rhsData } = rhs;
220
+ Object.assign(lhs, rhsData);
221
+ // Accumulate per-table metadata lists.
222
+ lhs.$meta.tables = [...lhs.$meta.tables, ...rhs.$meta.tables];
223
+ lhs.$meta.changeIndexes = [...lhs.$meta.changeIndexes, ...rhs.$meta.changeIndexes];
224
+ // ECInstanceId will be part of changeset fetchedProps for every table, so we should not include multiple of those in the final list
225
+ lhs.$meta.changeFetchedPropNames = [...new Set([...lhs.$meta.changeFetchedPropNames, ...rhs.$meta.changeFetchedPropNames])];
226
+ this._cache.set(key, lhs);
227
+ }
228
+ else {
229
+ this._cache.set(key, rhs);
230
+ }
231
+ }
232
+ }
233
+ exports.PartialChangeUnifier = PartialChangeUnifier;
234
+ //# sourceMappingURL=PartialChangeUnifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartialChangeUnifier.js","sourceRoot":"","sources":["../../src/PartialChangeUnifier.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ECDb\n */\nimport { DbResult, Guid, OpenMode } from \"@itwin/core-bentley\";\nimport { Base64EncodedString } from \"@itwin/core-common\";\nimport { SqliteStatement } from \"./SqliteStatement\";\nimport { ChangeInstance, ChangeSource } from \"./ChangesetReaderTypes\";\nimport { _nativeDb } from \"./internal/Symbols\";\nimport { SQLiteDb } from \"./SQLiteDb\";\n\n// ---------------------------------------------------------------------------\n// ChangeCache — interface + factory\n// ---------------------------------------------------------------------------\n\n/**\n * Cache used by [[PartialChangeUnifier]] to accumulate and merge\n * partial EC change instances.\n * @beta\n */\nexport interface ChangeCache extends Disposable {\n /** Retrieve a cached instance by key, or `undefined` if absent. */\n get(key: string): ChangeInstance | undefined;\n /** Insert or replace a cached instance. */\n set(key: string, value: ChangeInstance): void;\n /** Iterate over all cached instances. */\n all(): IterableIterator<ChangeInstance>;\n /** Number of instances currently in the cache. */\n count(): number;\n}\n\n/** @beta */\nexport namespace ChangeUnifierCache {\n /**\n * Creates an in-memory cache backed by a `Map`.\n * Fast, but may exhaust memory for very large changesets.\n * @returns An [[ChangeCache]] backed by an in-memory `Map`.\n * @beta\n */\n export function createInMemoryCache(): ChangeCache {\n return new InMemoryCache();\n }\n\n /**\n * Creates a SQLite-backed cache stored in a temporary SQlite database.\n * Slower than in-memory but useful in handling large changesets.\n * Temporary SQlite database is first created in memory and\n * parts of a temporary database might be flushed to disk if the database becomes large or\n * if SQLite comes under memory pressure.\n * @param bufferedReadInstanceSizeInBytes Read-batch size in bytes (default 10 MB).\n * @returns An [[ChangeCache]] backed by a SQLite temp table.\n * @beta\n */\n export function createSqliteBackedCache(\n bufferedReadInstanceSizeInBytes = 1024 * 1024 * 10,\n ): ChangeCache {\n return new SqliteBackedCache(bufferedReadInstanceSizeInBytes);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Private: InMemoryCache\n// ---------------------------------------------------------------------------\n\nclass InMemoryCache implements ChangeCache {\n private readonly _cache = new Map<string, ChangeInstance>();\n\n public get(key: string): ChangeInstance | undefined {\n return this._cache.get(key);\n }\n\n public set(key: string, value: ChangeInstance): void {\n // Remove undefined meta keys to keep serialised form compact.\n const meta = value.$meta as any;\n if (meta) {\n Object.keys(meta).forEach((k) => meta[k] === undefined && delete meta[k]);\n }\n this._cache.set(key, value);\n }\n\n public *all(): IterableIterator<ChangeInstance> {\n for (const key of Array.from(this._cache.keys()).sort()) {\n const instance = this._cache.get(key);\n if (instance)\n yield instance;\n }\n }\n\n public count(): number {\n return this._cache.size;\n }\n\n public [Symbol.dispose](): void {\n this._cache.clear();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Private: NativeSqliteBackedInstanceCache\n// ---------------------------------------------------------------------------\n\nclass SqliteBackedCache implements ChangeCache {\n private readonly _cacheTable = `[${Guid.createValue()}]`;\n public static readonly defaultBufferSize = 1024 * 1024 * 10; // 10 MB\n private _db: SQLiteDb;\n public constructor(\n public readonly bufferedReadInstanceSizeInBytes: number = SqliteBackedCache.defaultBufferSize,\n ) {\n this._db = new SQLiteDb();\n this._db.openDb(\"\", { skipFileCheck: true, rawSQLite: true, openMode: OpenMode.ReadWrite }); // creating temp sqlite db https://sqlite.org/inmemorydb.html#:~:text=Temporary%20Databases,under%20the%20default%20SQLite%20configuration.\n if (bufferedReadInstanceSizeInBytes <= 0)\n throw new Error(\"bufferedReadInstanceSizeInBytes must be greater than 0\");\n this.createTempTable();\n }\n\n private createTempTable(): void {\n this._db.withSqliteStatement(`CREATE TABLE ${this._cacheTable} ([key] text primary key, [value] text)`, (stmt: SqliteStatement) => {\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\n throw new Error(\"unable to create temp cache table\");\n });\n }\n\n public get(key: string): ChangeInstance | undefined {\n return this._db.withPreparedSqliteStatement(\n `SELECT [value] FROM ${this._cacheTable} WHERE [key]=?`,\n (stmt: SqliteStatement) => {\n stmt.reset();\n stmt.clearBindings();\n stmt.bindString(1, key);\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n return JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangeInstance;\n return undefined;\n },\n );\n }\n\n public set(key: string, value: ChangeInstance): void {\n const shallowCopy = Object.assign({}, value);\n this._db.withPreparedSqliteStatement(\n `INSERT INTO ${this._cacheTable} ([key], [value]) VALUES (?, ?) ON CONFLICT ([key]) DO UPDATE SET [value] = [excluded].[value]`,\n (stmt: SqliteStatement) => {\n stmt.reset();\n stmt.clearBindings();\n stmt.bindString(1, key);\n stmt.bindString(2, JSON.stringify(shallowCopy, Base64EncodedString.replacer));\n stmt.step();\n },\n );\n }\n\n public *all(): IterableIterator<ChangeInstance> {\n const sql = `\n SELECT JSON_GROUP_ARRAY(JSON([value]))\n FROM (\n SELECT [value],\n SUM(LENGTH([value])) OVER (ORDER BY [key] ROWS UNBOUNDED PRECEDING) / ${this.bufferedReadInstanceSizeInBytes} AS [bucket]\n FROM ${this._cacheTable}\n )\n GROUP BY [bucket]`;\n\n const stmt = this._db.prepareSqliteStatement(sql);\n try {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const bucket = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangeInstance[];\n for (const instance of bucket)\n yield instance;\n }\n } finally {\n stmt[Symbol.dispose]();\n }\n }\n\n public count(): number {\n return this._db.withPreparedSqliteStatement(\n `SELECT COUNT(*) FROM ${this._cacheTable}`,\n (stmt: SqliteStatement) => {\n stmt.reset();\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n return stmt.getValue(0).getInteger();\n return 0;\n },\n );\n }\n\n public [Symbol.dispose](): void {\n this._db.closeDb();\n }\n}\n\n// ---------------------------------------------------------------------------\n// PartialChangeUnifier\n// ---------------------------------------------------------------------------\n\n/**\n * Combines partial EC change instances (one per SQLite table row) into complete\n * instances that span all tables mapping to a single EC entity.\n *\n * The merge key is derived from the `instanceKey` and `stage` stored in `$meta.instanceKey` and `$meta.stage`.\n *\n * **Usage:**\n * ```ts\n * using reader = ChangesetReader.openFile({ fileName, db });\n * using unifier = new PartialChangeUnifier();\n * while (reader.step()) {\n * unifier.appendFrom(reader);\n * }\n * for (const instance of unifier.instances) { ... }\n * ```\n * @beta\n */\nexport class PartialChangeUnifier implements Disposable {\n public constructor(\n private readonly _cache: ChangeCache = new InMemoryCache(),\n ) { }\n\n /** Releases the underlying cache. */\n public [Symbol.dispose](): void {\n this._cache[Symbol.dispose]();\n }\n\n /** Number of complete (merged) instances currently accumulated. */\n public get instanceCount(): number {\n return this._cache.count();\n }\n\n /**\n * Append partial changes from the current reader row and merge them into the cache.\n *\n * @param source Any [ChangeSource]($backend) positioned on a valid row.\n * @beta\n */\n public appendFrom(source: ChangeSource): void {\n if (source.op === \"Updated\") {\n if (source.inserted)\n this.combine(source.inserted);\n if (source.deleted)\n this.combine(source.deleted);\n } else if (source.op === \"Inserted\" && source.inserted) {\n this.combine(source.inserted);\n } else if (source.op === \"Deleted\" && source.deleted) {\n this.combine(source.deleted);\n }\n }\n\n /**\n * Iterator over all fully-merged EC change instances.\n * @beta\n */\n public get instances(): IterableIterator<ChangeInstance> {\n return this._cache.all();\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private buildKey(instance: ChangeInstance): string {\n const { instanceKey, stage } = instance.$meta;\n return `${instanceKey}-${stage}`.toLowerCase();\n }\n\n private combine(rhs: ChangeInstance): void {\n const key = this.buildKey(rhs);\n const lhs = this._cache.get(key);\n if (lhs) {\n // Merge data fields — rhs wins for any overlapping columns.\n const { $meta: _rhsMeta, ...rhsData } = rhs;\n Object.assign(lhs, rhsData);\n // Accumulate per-table metadata lists.\n lhs.$meta.tables = [...lhs.$meta.tables, ...rhs.$meta.tables];\n lhs.$meta.changeIndexes = [...lhs.$meta.changeIndexes, ...rhs.$meta.changeIndexes];\n // ECInstanceId will be part of changeset fetchedProps for every table, so we should not include multiple of those in the final list\n lhs.$meta.changeFetchedPropNames = [...new Set([...lhs.$meta.changeFetchedPropNames, ...rhs.$meta.changeFetchedPropNames])];\n this._cache.set(key, lhs);\n } else {\n this._cache.set(key, rhs);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SheetIndex.js","sourceRoot":"","sources":["../../src/SheetIndex.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\n\nimport { BisCodeSpec, Code, CodeScopeProps, CodeSpec, ElementProps, EntityReferenceSet, IModelError, RelatedElementProps, SheetIndexEntryProps, SheetIndexFolderProps, SheetIndexReferenceProps, SheetReferenceProps } from \"@itwin/core-common\";\nimport { InformationReferenceElement, Sheet } from \"./Element\";\nimport { EditTxn } from \"./EditTxn\";\nimport { IModelDb } from \"./IModelDb\";\nimport { Id64String, IModelStatus } from \"@itwin/core-bentley\";\nimport { SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"./NavigationRelationship\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\n/** Arguments used to create a [[SheetIndexEntry]].\n * @beta\n */\nexport interface SheetIndexEntryCreateArgs {\n /** The iModel that will contain the sheet index entry. */\n iModelDb: IModelDb;\n /** The Id of the [[SheetIndexModel]] that will contain the sheet index entry. */\n sheetIndexModelId: Id64String;\n /** The [[SheetIndex]] or [[SheetIndexFolder]] that is parent to this SheetIndexEntry */\n parentId: Id64String;\n /** The name of the SheetIndexEntry */\n name: string;\n /** The priority of the SheetIndexEntry */\n priority: number;\n}\n\n/** Arguments supplied when creating a [[SheetIndexReference]].\n * @beta\n */\nexport interface SheetIndexReferenceCreateArgs extends SheetIndexEntryCreateArgs {\n /** The [[SheetIndex]] to which the reference refers. */\n sheetIndexId?: Id64String;\n}\n\n/** Arguments supplied when creating a [[SheetReference]].\n * @beta\n */\nexport interface SheetReferenceCreateArgs extends SheetIndexEntryCreateArgs {\n /** The [[Sheet]] to which the reference refers. */\n sheetId?: Id64String;\n}\n\n/** A [structured collection]($docs/bis/domains/drawings-sheets#sheet-index) of [[SheetIndexEntry]]s.\n * The sheet index is a tree whose leaf nodes refer to [[Sheet]]s, optionally grouped by [[SheetIndexFolder]]s and/or incorporating\n * sub-trees via [[SheetIndexReference]]s.\n * @beta\n */\nexport class SheetIndex extends InformationReferenceElement {\n public static override get className(): string { return \"SheetIndex\"; }\n\n /** Create a Code for a SheetIndex given a name that is meant to be unique within the scope of the specified SheetIndexModel.\n * @param iModel The IModelDb\n * @param scopeSheetIndexModelId The Id of the Model that contains the LinkElement and provides the scope for its name.\n * @param codeValue The SheetIndex name\n */\n public static createCode(iModel: IModelDb, scopeSheetIndexModelId: CodeScopeProps, codeValue: string): Code {\n const codeSpec: CodeSpec = iModel.codeSpecs.getByName(BisCodeSpec.sheetIndex);\n return new Code({ spec: codeSpec.id, scope: scopeSheetIndexModelId, value: codeValue });\n }\n\n /** Create a SheetIndex\n * @param iModelDb The IModelDb\n * @param modelId The Id of the Model that contains the SheetIndex and provides the scope for its name.\n * @param name The name (codeValue) of the SheetIndex\n * @returns The newly constructed SheetIndex\n * @throws [[IModelError]] if there is a problem creating the SheetIndex\n */\n public static create(iModelDb: IModelDb, modelId: Id64String, name: string): SheetIndex {\n const props: ElementProps = {\n classFullName: this.classFullName,\n code: this.createCode(iModelDb, modelId, name).toJSON(),\n model: modelId,\n };\n return new this(props, iModelDb);\n }\n\n /** Insert a SheetIndex\n * @param iModelDb The IModelDb\n * @param modelId The Id of the Model that contains the SheetIndex and provides the scope for its name.\n * @param name The name (codeValue) of the SheetIndex\n * @returns The Id of the newly inserted SheetIndex\n * @throws [[IModelError]] if there is a problem inserting the SheetIndex\n */\n public static insert(txn: EditTxn, modelId: Id64String, name: string): Id64String;\n /** @deprecated Use SheetIndex.insert(txn, ...) instead. */\n public static insert(iModelDb: IModelDb, modelId: Id64String, name: string): Id64String;\n public static insert(txnOrDb: EditTxn | IModelDb, modelId: Id64String, name: string): Id64String {\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\n const instance = this.create(txn.iModel, modelId, name);\n instance.id = instance.insert(txn);\n return instance.id;\n }\n}\n\n/** The base class for all elements that can participate in a [[SheetIndex]] hierarchy.\n * @beta\n*/\nexport abstract class SheetIndexEntry extends InformationReferenceElement {\n public static override get className(): string { return \"SheetIndexEntry\"; }\n /** Can be used to prioritize or order members within a SheetIndex or SheetIndexFolder. */\n public entryPriority: number;\n\n protected constructor(props: SheetIndexEntryProps, iModel: IModelDb) {\n super(props, iModel);\n this.entryPriority = props.entryPriority;\n }\n\n public override toJSON(): SheetIndexEntryProps {\n return { ...super.toJSON(), entryPriority: this.entryPriority };\n }\n\n /** Create a Code for a Sheet Index Entry given a name that is meant to be unique within the scope of the specified SheetIndexModel.\n * @param iModel The IModel\n * @param scopeModelId The Id of the [[SheetIndexModel]] that contains the [[SheetIndexEntry]] and provides the scope for its name.\n * @param codeValue The name of the entry\n */\n public static createCode(iModelDb: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code {\n const codeSpec: CodeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.sheetIndexEntry);\n return new Code({ spec: codeSpec.id, scope: scopeModelId, value: codeValue });\n }\n\n protected static createParentRelationshipProps(iModelDb: IModelDb, id: Id64String): RelatedElementProps {\n const parentElementProps = iModelDb.elements.getElementProps(id);\n const isFolder = parentElementProps.classFullName === SheetIndexFolder.classFullName;\n const relClass = isFolder ? SheetIndexFolderOwnsEntries : SheetIndexOwnsEntries;\n return { id, relClassName: relClass.classFullName };\n }\n\n protected static createProps(arg: SheetIndexEntryCreateArgs) {\n const parent = this.createParentRelationshipProps(arg.iModelDb, arg.parentId);\n const props: SheetIndexEntryProps = {\n classFullName: this.classFullName,\n model: arg.sheetIndexModelId,\n code: this.createCode(arg.iModelDb, arg.sheetIndexModelId, arg.name),\n entryPriority: arg.priority,\n parent,\n };\n return props;\n }\n}\n\n/** A container used to group [[SheetIndexEntry]]s within a [[SheetIndex]].\n * @beta\n */\nexport class SheetIndexFolder extends SheetIndexEntry {\n public static override get className(): string { return \"SheetIndexFolder\"; }\n\n /** Create a new SheetIndexFolder\n * @returns The newly constructed SheetIndexFolder element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetIndexEntryCreateArgs) {\n const props: SheetIndexFolderProps = this.createProps(arg);\n return new this(props, arg.iModelDb);\n }\n\n /** Create a new SheetIndexFolder\n * @returns The Id of the newly inserted SheetIndexFolder element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetIndexEntryCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetIndexFolder.insert(txn, ...) instead. */\n public static insert(arg: SheetIndexEntryCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetIndexEntryCreateArgs, arg?: Omit<SheetIndexEntryCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n}\n\n/** A node within one [[SheetIndex]] that incorporates another [[SheetIndex]] as a sub-tree.\n * @beta\n*/\nexport class SheetIndexReference extends SheetIndexEntry {\n public static override get className(): string { return \"SheetIndexReference\"; }\n\n /** The bis:SheetIndex that this bis:SheetIndexReference is pointing to. */\n public sheetIndex?: SheetIndexReferenceRefersToSheetIndex;\n\n protected constructor(props: SheetIndexReferenceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.sheetIndex) {\n const sheetIndex = iModel.elements.tryGetElement<SheetIndex>(props.sheetIndex.id);\n if (!sheetIndex)\n throw new IModelError(IModelStatus.NotFound, \"SheetIndex not found\");\n\n this.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(props.sheetIndex.id);\n }\n }\n\n protected static createReferenceRelationshipProps(id: Id64String): RelatedElementProps {\n return { id, relClassName: SheetIndexReferenceRefersToSheetIndex.classFullName };\n }\n\n public override toJSON(): SheetIndexReferenceProps { // This override only specializes the return type\n return {\n ...super.toJSON(),\n sheetIndex: this.sheetIndex ? this.sheetIndex.toJSON() : undefined,\n } as SheetIndexReferenceProps;\n }\n\n /** Create a new SheetIndexReference\n * @returns The newly constructed SheetIndexReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetIndexReferenceCreateArgs) {\n const props: SheetIndexReferenceProps = {\n ...this.createProps(arg),\n sheetIndex: arg.sheetIndexId ? this.createReferenceRelationshipProps(arg.sheetIndexId) : undefined,\n };\n return new this(props, arg.iModelDb);\n }\n\n /** Create a new SheetIndexReference\n * @returns The Id of the newly inserted SheetIndexReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetIndexReferenceCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetIndexReference.insert(txn, ...) instead. */\n public static insert(arg: SheetIndexReferenceCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetIndexReferenceCreateArgs, arg?: Omit<SheetIndexReferenceCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n sheetIndexId: txnOrArg.sheetIndexId,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n\n /** @alpha */\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.sheetIndex)\n referenceIds.addElement(this.sheetIndex.id);\n }\n}\n\n/** A leaf node in a [[SheetIndex]] that refers to a specific [[Sheet]].\n * @beta\n*/\nexport class SheetReference extends SheetIndexEntry {\n public static override get className(): string { return \"SheetReference\"; }\n\n /** The bis:Sheet that this bis:SheetReference is pointing to. */\n public sheet: SheetReferenceRefersToSheet | undefined;\n\n protected constructor(props: SheetReferenceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.sheet) {\n const sheet = iModel.elements.tryGetElement<Sheet>(props.sheet.id);\n if (!sheet)\n throw new IModelError(IModelStatus.NotFound, \"Sheet not found\");\n\n this.sheet = new SheetReferenceRefersToSheet(sheet.id);\n }\n }\n\n protected static createReferenceRelationshipProps(id: Id64String): RelatedElementProps {\n return { id, relClassName: SheetIndexReferenceRefersToSheetIndex.classFullName };\n }\n\n public override toJSON(): SheetReferenceProps { // This override only specializes the return type\n return {\n ...super.toJSON(),\n sheet: this.sheet ? this.sheet.toJSON() : undefined,\n } as SheetReferenceProps;\n }\n\n /** Create a new SheetReference\n * @returns The newly constructed SheetReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetReferenceCreateArgs) {\n const props: SheetReferenceProps = {\n ...this.createProps(arg),\n sheet: arg.sheetId ? this.createReferenceRelationshipProps(arg.sheetId) : undefined,\n };\n return new this(props, arg.iModelDb);\n }\n\n /** Insert a new SheetReference\n * @returns The Id of the newly inserted SheetReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetReferenceCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetReference.insert(txn, ...) instead. */\n public static insert(arg: SheetReferenceCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetReferenceCreateArgs, arg?: Omit<SheetReferenceCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n sheetId: txnOrArg.sheetId,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n\n /** @alpha */\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.sheet)\n referenceIds.addModel(this.sheet.id);\n }\n}\n"]}
1
+ {"version":3,"file":"SheetIndex.js","sourceRoot":"","sources":["../../src/SheetIndex.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\n\nimport { BisCodeSpec, Code, CodeScopeProps, CodeSpec, ElementProps, EntityReferenceSet, IModelError, RelatedElementProps, SheetIndexEntryProps, SheetIndexFolderProps, SheetIndexReferenceProps, SheetReferenceProps } from \"@itwin/core-common\";\nimport { InformationReferenceElement, Sheet } from \"./Element\";\nimport { EditTxn } from \"./EditTxn\";\nimport { IModelDb } from \"./IModelDb\";\nimport { Id64String, IModelStatus } from \"@itwin/core-bentley\";\nimport { SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"./NavigationRelationship\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\n/** Arguments used to create a [[SheetIndexEntry]].\n * @beta\n */\nexport interface SheetIndexEntryCreateArgs {\n /** The iModel that will contain the sheet index entry. */\n iModelDb: IModelDb;\n /** The Id of the [[SheetIndexModel]] that will contain the sheet index entry. */\n sheetIndexModelId: Id64String;\n /** The [[SheetIndex]] or [[SheetIndexFolder]] that is parent to this SheetIndexEntry */\n parentId: Id64String;\n /** The name of the SheetIndexEntry */\n name: string;\n /** The priority of the SheetIndexEntry */\n priority: number;\n}\n\n/** Arguments supplied when creating a [[SheetIndexReference]].\n * @beta\n */\nexport interface SheetIndexReferenceCreateArgs extends SheetIndexEntryCreateArgs {\n /** The [[SheetIndex]] to which the reference refers. */\n sheetIndexId?: Id64String;\n}\n\n/** Arguments supplied when creating a [[SheetReference]].\n * @beta\n */\nexport interface SheetReferenceCreateArgs extends SheetIndexEntryCreateArgs {\n /** The [[Sheet]] to which the reference refers. */\n sheetId?: Id64String;\n}\n\n/** A [structured collection]($docs/bis/domains/drawings-sheets#sheet-index) of [[SheetIndexEntry]]s.\n * The sheet index is a tree whose leaf nodes refer to [[Sheet]]s, optionally grouped by [[SheetIndexFolder]]s and/or incorporating\n * sub-trees via [[SheetIndexReference]]s.\n * @beta\n */\nexport class SheetIndex extends InformationReferenceElement {\n public static override get className(): string { return \"SheetIndex\"; }\n\n /** Create a Code for a SheetIndex given a name that is meant to be unique within the scope of the specified SheetIndexModel.\n * @param iModel The IModelDb\n * @param scopeSheetIndexModelId The Id of the Model that contains the LinkElement and provides the scope for its name.\n * @param codeValue The SheetIndex name\n */\n public static createCode(iModel: IModelDb, scopeSheetIndexModelId: CodeScopeProps, codeValue: string): Code {\n const codeSpec: CodeSpec = iModel.codeSpecs.getByName(BisCodeSpec.sheetIndex);\n return new Code({ spec: codeSpec.id, scope: scopeSheetIndexModelId, value: codeValue });\n }\n\n /** Create a SheetIndex\n * @param iModelDb The IModelDb\n * @param modelId The Id of the Model that contains the SheetIndex and provides the scope for its name.\n * @param name The name (codeValue) of the SheetIndex\n * @returns The newly constructed SheetIndex\n * @throws [[IModelError]] if there is a problem creating the SheetIndex\n */\n public static create(iModelDb: IModelDb, modelId: Id64String, name: string): SheetIndex {\n const props: ElementProps = {\n classFullName: this.classFullName,\n code: this.createCode(iModelDb, modelId, name).toJSON(),\n model: modelId,\n };\n return new this(props, iModelDb);\n }\n\n /** Insert a SheetIndex\n * @param iModelDb The IModelDb\n * @param modelId The Id of the Model that contains the SheetIndex and provides the scope for its name.\n * @param name The name (codeValue) of the SheetIndex\n * @returns The Id of the newly inserted SheetIndex\n * @throws [[IModelError]] if there is a problem inserting the SheetIndex\n */\n public static insert(txn: EditTxn, modelId: Id64String, name: string): Id64String;\n /** @deprecated Use SheetIndex.insert(txn, ...) instead. */\n public static insert(iModelDb: IModelDb, modelId: Id64String, name: string): Id64String;\n public static insert(txnOrDb: EditTxn | IModelDb, modelId: Id64String, name: string): Id64String {\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\n const instance = this.create(txn.iModel, modelId, name);\n instance.id = instance.insert(txn);\n return instance.id;\n }\n}\n\n/** The base class for all elements that can participate in a [[SheetIndex]] hierarchy.\n * @beta\n*/\nexport abstract class SheetIndexEntry extends InformationReferenceElement {\n public static override get className(): string { return \"SheetIndexEntry\"; }\n /** Can be used to prioritize or order members within a SheetIndex or SheetIndexFolder. */\n public entryPriority: number;\n\n protected constructor(props: SheetIndexEntryProps, iModel: IModelDb) {\n super(props, iModel);\n this.entryPriority = props.entryPriority;\n }\n\n public override toJSON(): SheetIndexEntryProps {\n return { ...super.toJSON(), entryPriority: this.entryPriority };\n }\n\n /** Create a Code for a Sheet Index Entry given a name that is meant to be unique within the scope of the specified SheetIndexModel.\n * @param iModel The IModel\n * @param scopeModelId The Id of the [[SheetIndexModel]] that contains the [[SheetIndexEntry]] and provides the scope for its name.\n * @param codeValue The name of the entry\n */\n public static createCode(iModelDb: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code {\n const codeSpec: CodeSpec = iModelDb.codeSpecs.getByName(BisCodeSpec.sheetIndexEntry);\n return new Code({ spec: codeSpec.id, scope: scopeModelId, value: codeValue });\n }\n\n protected static createParentRelationshipProps(iModelDb: IModelDb, id: Id64String): RelatedElementProps {\n const parentElementProps = iModelDb.elements.getElementProps(id);\n const isFolder = parentElementProps.classFullName === SheetIndexFolder.classFullName;\n const relClass = isFolder ? SheetIndexFolderOwnsEntries : SheetIndexOwnsEntries;\n return { id, relClassName: relClass.classFullName };\n }\n\n protected static createProps(arg: SheetIndexEntryCreateArgs) {\n const parent = this.createParentRelationshipProps(arg.iModelDb, arg.parentId);\n const props: SheetIndexEntryProps = {\n classFullName: this.classFullName,\n model: arg.sheetIndexModelId,\n code: this.createCode(arg.iModelDb, arg.sheetIndexModelId, arg.name),\n entryPriority: arg.priority,\n parent,\n };\n return props;\n }\n}\n\n/** A container used to group [[SheetIndexEntry]]s within a [[SheetIndex]].\n * @beta\n */\nexport class SheetIndexFolder extends SheetIndexEntry {\n public static override get className(): string { return \"SheetIndexFolder\"; }\n\n /** Create a new SheetIndexFolder\n * @returns The newly constructed SheetIndexFolder element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetIndexEntryCreateArgs) {\n const props: SheetIndexFolderProps = this.createProps(arg);\n return new this(props, arg.iModelDb);\n }\n\n /** Create a new SheetIndexFolder\n * @returns The Id of the newly inserted SheetIndexFolder element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetIndexEntryCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetIndexFolder.insert(txn, ...) instead. */\n public static insert(arg: SheetIndexEntryCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetIndexEntryCreateArgs, arg?: Omit<SheetIndexEntryCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n}\n\n/** A node within one [[SheetIndex]] that incorporates another [[SheetIndex]] as a sub-tree.\n * @beta\n*/\nexport class SheetIndexReference extends SheetIndexEntry {\n public static override get className(): string { return \"SheetIndexReference\"; }\n\n /** The bis:SheetIndex that this bis:SheetIndexReference is pointing to. */\n public sheetIndex?: SheetIndexReferenceRefersToSheetIndex;\n\n protected constructor(props: SheetIndexReferenceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.sheetIndex) {\n const sheetIndex = iModel.elements.tryGetElement<SheetIndex>(props.sheetIndex.id);\n if (!sheetIndex)\n throw new IModelError(IModelStatus.NotFound, \"SheetIndex not found\");\n\n this.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(props.sheetIndex.id);\n }\n }\n\n protected static createReferenceRelationshipProps(id: Id64String): RelatedElementProps {\n return { id, relClassName: SheetIndexReferenceRefersToSheetIndex.classFullName };\n }\n\n public override toJSON(): SheetIndexReferenceProps { // This override only specializes the return type\n return {\n ...super.toJSON(),\n sheetIndex: this.sheetIndex ? this.sheetIndex.toJSON() : undefined,\n };\n }\n\n /** Create a new SheetIndexReference\n * @returns The newly constructed SheetIndexReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetIndexReferenceCreateArgs) {\n const props: SheetIndexReferenceProps = {\n ...this.createProps(arg),\n sheetIndex: arg.sheetIndexId ? this.createReferenceRelationshipProps(arg.sheetIndexId) : undefined,\n };\n return new this(props, arg.iModelDb);\n }\n\n /** Create a new SheetIndexReference\n * @returns The Id of the newly inserted SheetIndexReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetIndexReferenceCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetIndexReference.insert(txn, ...) instead. */\n public static insert(arg: SheetIndexReferenceCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetIndexReferenceCreateArgs, arg?: Omit<SheetIndexReferenceCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n sheetIndexId: txnOrArg.sheetIndexId,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n\n /** @alpha */\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.sheetIndex)\n referenceIds.addElement(this.sheetIndex.id);\n }\n}\n\n/** A leaf node in a [[SheetIndex]] that refers to a specific [[Sheet]].\n * @beta\n*/\nexport class SheetReference extends SheetIndexEntry {\n public static override get className(): string { return \"SheetReference\"; }\n\n /** The bis:Sheet that this bis:SheetReference is pointing to. */\n public sheet: SheetReferenceRefersToSheet | undefined;\n\n protected constructor(props: SheetReferenceProps, iModel: IModelDb) {\n super(props, iModel);\n if (props.sheet) {\n const sheet = iModel.elements.tryGetElement<Sheet>(props.sheet.id);\n if (!sheet)\n throw new IModelError(IModelStatus.NotFound, \"Sheet not found\");\n\n this.sheet = new SheetReferenceRefersToSheet(sheet.id);\n }\n }\n\n protected static createReferenceRelationshipProps(id: Id64String): RelatedElementProps {\n return { id, relClassName: SheetIndexReferenceRefersToSheetIndex.classFullName };\n }\n\n public override toJSON(): SheetReferenceProps { // This override only specializes the return type\n return {\n ...super.toJSON(),\n sheet: this.sheet ? this.sheet.toJSON() : undefined,\n };\n }\n\n /** Create a new SheetReference\n * @returns The newly constructed SheetReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static create(arg: SheetReferenceCreateArgs) {\n const props: SheetReferenceProps = {\n ...this.createProps(arg),\n sheet: arg.sheetId ? this.createReferenceRelationshipProps(arg.sheetId) : undefined,\n };\n return new this(props, arg.iModelDb);\n }\n\n /** Insert a new SheetReference\n * @returns The Id of the newly inserted SheetReference element.\n * @throws [[IModelError]] if unable to create the element.\n */\n public static insert(txn: EditTxn, arg: Omit<SheetReferenceCreateArgs, \"iModelDb\">): Id64String;\n /** @deprecated Use SheetReference.insert(txn, ...) instead. */\n public static insert(arg: SheetReferenceCreateArgs): Id64String;\n public static insert(txnOrArg: EditTxn | SheetReferenceCreateArgs, arg?: Omit<SheetReferenceCreateArgs, \"iModelDb\">): Id64String {\n const txn = txnOrArg instanceof EditTxn ? txnOrArg : txnOrArg.iModelDb[_implicitTxn];\n const createArg = txnOrArg instanceof EditTxn ? arg! : {\n sheetIndexModelId: txnOrArg.sheetIndexModelId,\n parentId: txnOrArg.parentId,\n name: txnOrArg.name,\n priority: txnOrArg.priority,\n sheetId: txnOrArg.sheetId,\n };\n const instance = this.create({ ...createArg, iModelDb: txn.iModel });\n instance.id = instance.insert(txn);\n return instance.id;\n }\n\n /** @alpha */\n protected override collectReferenceIds(referenceIds: EntityReferenceSet): void {\n super.collectReferenceIds(referenceIds);\n if (this.sheet)\n referenceIds.addModel(this.sheet.id);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteChangesetReader.d.ts","sourceRoot":"","sources":["../../src/SqliteChangesetReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteChangesetReader.d.ts","sourceRoot":"","sources":["../../src/SqliteChangesetReader.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ const Symbols_1 = require("./internal/Symbols");
20
20
  */
21
21
  class SqliteChangesetReader {
22
22
  db;
23
- _nativeReader = new NativePlatform_1.IModelNative.platform.ChangesetReader();
23
+ _nativeReader = new NativePlatform_1.IModelNative.platform.SqliteChangesetReader();
24
24
  _schemaCache = new Map();
25
25
  _disableSchemaCheck = false;
26
26
  _changeIndex = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteChangesetReader.js","sourceRoot":"","sources":["../../src/SqliteChangesetReader.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module SQLiteDb\n */\nimport { DbChangeStage, DbOpcode, DbResult, DbValueType, Id64String } from \"@itwin/core-bentley\";\nimport { ECDb } from \"./ECDb\";\nimport { IModelDb } from \"./IModelDb\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/** Changed value type\n * @beta\n*/\ntype SqliteValue = Uint8Array | number | string | null | undefined;\n\n/** Array of changed values\n * @beta\n*/\ntype SqliteValueArray = SqliteValue[];\n/**\n * Format option when converting change from array to column/value object.\n * @beta\n */\nexport interface ChangeFormatArgs {\n /** include table name */\n includeTableName?: true;\n /** include op code */\n includeOpCode?: true;\n /** include null columns */\n includeNullColumns?: true;\n /** include value version */\n includeStage?: true;\n /** include primary key in update change */\n includePrimaryKeyInUpdateNew?: true;\n}\n\n/** Operation that cause the change\n * @beta\n*/\nexport type SqliteChangeOp = \"Inserted\" | \"Updated\" | \"Deleted\";\n\n/** Stage is version of value that needed to be read\n * @beta\n*/\nexport type SqliteValueStage = \"Old\" | \"New\";\n\n/** Db from which schema will be read. It should be from timeline to which changeset belong.\n * @beta\n*/\nexport type AnyDb = IModelDb | ECDb;\n\n/** Arg to open a changeset file from disk\n * @beta\n*/\nexport interface SqliteChangesetReaderArgs {\n /** db from which schema will be read. It should be at or ahead of the latest changeset being opened.*/\n readonly db: AnyDb;\n /** invert the changeset operations */\n readonly invert?: true;\n /** do not check if column of change match db schema instead ignore addition columns */\n readonly disableSchemaCheck?: true;\n}\n/**\n * Represent sqlite change.\n * @beta\n */\nexport interface SqliteChange {\n /** name of table */\n $table?: string;\n /** SQLite operation that created this change */\n $op?: SqliteChangeOp;\n /** version of data in change. */\n $stage?: SqliteValueStage;\n /** columns in change */\n [key: string]: any;\n}\n/**\n * Read raw sqlite changeset from disk and enumerate changes.\n * It also optionally let you format change with schema from\n * a db provided.\n * @beta\n */\nexport class SqliteChangesetReader implements Disposable {\n private readonly _nativeReader = new IModelNative.platform.ChangesetReader();\n private _schemaCache = new Map<string, string[]>();\n private _disableSchemaCheck = false;\n private _changeIndex = 0;\n protected constructor(\n /** db from where sql schema will be read */\n public readonly db: AnyDb,\n ) { }\n\n /**\n * Open changeset file from disk\n * @param args fileName of changeset reader and other options.\n * @returns SqliteChangesetReader instance\n */\n public static openFile(args: { readonly fileName: string } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openFile(args.fileName, args.invert ?? false);\n return reader;\n }\n /**\n * Group changeset file into single changeset and open that changeset.\n * @param args - The arguments for opening the changeset group. Requires an open db.\n * @returns The SqliteChangesetReader instance.\n */\n public static openGroup(args: { readonly changesetFiles: string[] } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n if (args.changesetFiles.length === 0) {\n throw new Error(\"changesetFiles must contain at least one file.\");\n }\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openGroup(args.changesetFiles, args.db[_nativeDb], args.invert ?? false);\n return reader;\n }\n /**\n * Open txn change in iModel.\n * @param args iModel and other options.\n * @returns SqliteChangesetReader instance\n */\n public static openTxn(args: { txnId: Id64String } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n if (args.db instanceof ECDb) {\n throw new Error(\"ECDb does not support openTxn\");\n }\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openTxn(args.db[_nativeDb], args.txnId, args.invert ?? false);\n return reader;\n }\n /**\n * Open in-memory changes for the given iModel.\n * @param args - The arguments for opening in-memory changes.\n * @returns SqliteChangesetReader instance\n */\n public static openInMemory(args: SqliteChangesetReaderArgs & { db: IModelDb }): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openInMemoryChanges(args.db[_nativeDb], args.invert ?? false);\n return reader;\n }\n /**\n * Writes the changeset to a file.\n * @note can be use with openGroup() or openLocalChanges() to persist changeset.\n * @param args - The arguments for writing to the file.\n * @param args.fileName - The name of the file to write to.\n * @param args.containsSchemaChanges - Indicates whether the changeset contains schema changes.\n * @param args.overwriteFile - Indicates whether to override the file if it already exists. Default is false.\n */\n public writeToFile(args: { fileName: string, containsSchemaChanges: boolean, overwriteFile?: boolean }): void {\n this._nativeReader.writeToFile(args.fileName, args.containsSchemaChanges, args.overwriteFile ?? false);\n }\n /**\n * Open local changes in iModel.\n * @param args iModel and other options.\n * @param args.db must be of type IModelDb\n * @returns SqliteChangesetReader instance\n */\n public static openLocalChanges(args: Omit<SqliteChangesetReaderArgs, \"db\"> & { db: IModelDb, includeInMemoryChanges?: true }): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openLocalChanges(args.db[_nativeDb], args.includeInMemoryChanges ?? false, args.invert ?? false);\n return reader;\n }\n /** check if schema check is disabled or not */\n public get disableSchemaCheck(): boolean { return this._disableSchemaCheck; }\n /** Move to next change in changeset\n * @returns true if there is current change false if reader is end of changeset.\n * @beta\n */\n public step(): boolean {\n if (this._nativeReader.step()) {\n this._changeIndex++;\n return true;\n }\n return false;\n }\n /** Check if reader current on a row\n * @beta\n */\n public get hasRow(): boolean {\n return this._nativeReader.hasRow();\n }\n /** Check if its current change is indirect\n * @beta\n */\n public get isIndirect(): boolean {\n return this._nativeReader.isIndirectChange();\n }\n /** Get count of columns in current change\n * @beta\n */\n public get columnCount(): number {\n return this._nativeReader.getColumnCount();\n }\n /** Get operation that caused the change\n * @beta\n */\n public get op(): SqliteChangeOp {\n if (this._nativeReader.getOpCode() === DbOpcode.Insert)\n return \"Inserted\";\n\n if (this._nativeReader.getOpCode() === DbOpcode.Delete)\n return \"Deleted\";\n\n return \"Updated\";\n }\n /** Get primary key value array\n * @beta\n */\n public get primaryKeyValues(): SqliteValueArray {\n return this._nativeReader.getPrimaryKeys();\n }\n /** Get primary key columns.\n * @note To this to work db arg must be set when opening changeset file.\n * @beta\n */\n public getPrimaryKeyColumnNames(): string[] {\n const cols = this.getColumnNames(this.tableName);\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\n\n return this._nativeReader.getPrimaryKeyColumnIndexes().map((i) => cols[i]);\n }\n /** Get current change table.\n * @beta\n */\n public get tableName(): string {\n return this._nativeReader.getTableName();\n }\n /**\n * Get changed binary value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old) as DbValueType;\n }\n\n /**\n * Get changed binary value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueBinary(columnIndex: number, stage: SqliteValueStage): Uint8Array | null | undefined {\n return this._nativeReader.getColumnValueBinary(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed double value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueDouble(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\n return this._nativeReader.getColumnValueDouble(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed Id value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueId(columnIndex: number, stage: SqliteValueStage): Id64String | null | undefined {\n return this._nativeReader.getColumnValueId(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed integer value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueInteger(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\n return this._nativeReader.getColumnValueInteger(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed text value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueText(columnIndex: number, stage: SqliteValueStage): string | null | undefined {\n return this._nativeReader.getColumnValueText(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Check if change value is null\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns true if value is null\n * @beta\n */\n public isColumnValueNull(columnIndex: number, stage: SqliteValueStage): boolean | undefined {\n return this._nativeReader.isColumnValueNull(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get change value type\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns change value type\n * @beta\n */\n public getColumnValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old) as DbValueType | undefined;\n }\n\n /**\n * Get changed value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValue(columnIndex: number, stage: SqliteValueStage): SqliteValue {\n return this._nativeReader.getColumnValue(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n /**\n * Get all changed value in current change as array\n * @param stage old or new values for current change.\n * @returns array of values.\n * @beta\n */\n public getChangeValuesArray(stage: SqliteValueStage): SqliteValueArray | undefined {\n return this._nativeReader.getRow(stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n /**\n * Get change as object and format its content.\n * @param stage old or new value for current change.\n * @param args change format options\n * @returns return object or undefined\n * @beta\n */\n public getChangeValuesObject(stage: SqliteValueStage, args: ChangeFormatArgs = {}): SqliteChange | undefined {\n const cols = this.getColumnNames(this.tableName);\n const row = this.getChangeValuesArray(stage);\n if (!row)\n return undefined;\n process.env;\n const minLen = Math.min(cols.length, row.length);\n\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\n\n const out: SqliteChange = {};\n if (args.includeTableName) {\n out.$table = this.tableName;\n }\n if (args.includeOpCode) {\n out.$op = this.op;\n }\n if (args.includeStage) {\n out.$stage = stage;\n }\n\n if (args.includePrimaryKeyInUpdateNew && this.op === \"Updated\" && stage === \"New\") {\n const pkNames = this.getPrimaryKeyColumnNames();\n const pkValues = this.primaryKeyValues;\n pkNames.forEach((v, i) => {\n out[v] = pkValues[i];\n });\n }\n const isNullOrUndefined = (val: SqliteValue) => typeof val === \"undefined\";\n\n for (let i = 0; i < minLen; ++i) {\n const columnValue = row[i];\n const columnName = cols[i];\n if (!args.includeNullColumns && isNullOrUndefined(columnValue))\n continue;\n\n out[columnName] = columnValue;\n }\n return out;\n }\n /**\n * Get list of column for a table. This function also caches the result.\n * @note To this to work db arg must be set when opening changeset file.\n * @param tableName name of the table for which columns are requested.\n * @returns columns of table.\n * @beta\n */\n public getColumnNames(tableName: string): string[] {\n const columns = this._schemaCache.get(tableName);\n if (columns)\n return columns;\n\n return this.db.withPreparedSqliteStatement(\"SELECT [name] FROM PRAGMA_TABLE_INFO(?) ORDER BY [cid]\", (stmt) => {\n stmt.bindString(1, tableName);\n const tblCols: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n tblCols.push(stmt.getValueString(0));\n }\n this._schemaCache.set(tableName, tblCols);\n return tblCols;\n });\n }\n /** index of current change\n * @beta\n */\n public get changeIndex() { return this._changeIndex; }\n /**\n * Close changeset\n * @beta\n */\n public close() {\n this._changeIndex = 0;\n this._nativeReader.close();\n }\n /**\n * Dispose this object\n * @beta\n */\n public [Symbol.dispose](): void {\n this.close();\n }\n /**\n * Get Data Definition Language changes\n * @beta\n */\n public getDdlChanges(): string | undefined {\n return this._nativeReader.getDdlChanges();\n }\n}\n"]}
1
+ {"version":3,"file":"SqliteChangesetReader.js","sourceRoot":"","sources":["../../src/SqliteChangesetReader.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module SQLiteDb\n */\nimport { DbChangeStage, DbOpcode, DbResult, DbValueType, Id64String } from \"@itwin/core-bentley\";\nimport { ECDb } from \"./ECDb\";\nimport { IModelDb } from \"./IModelDb\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/** Changed value type\n * @beta\n*/\ntype SqliteValue = Uint8Array | number | string | null | undefined;\n\n/** Array of changed values\n * @beta\n*/\ntype SqliteValueArray = SqliteValue[];\n/**\n * Format option when converting change from array to column/value object.\n * @beta\n */\nexport interface ChangeFormatArgs {\n /** include table name */\n includeTableName?: true;\n /** include op code */\n includeOpCode?: true;\n /** include null columns */\n includeNullColumns?: true;\n /** include value version */\n includeStage?: true;\n /** include primary key in update change */\n includePrimaryKeyInUpdateNew?: true;\n}\n\n/** Operation that cause the change\n * @beta\n*/\nexport type SqliteChangeOp = \"Inserted\" | \"Updated\" | \"Deleted\";\n\n/** Stage is version of value that needed to be read\n * @beta\n*/\nexport type SqliteValueStage = \"Old\" | \"New\";\n\n/** Db from which schema will be read. It should be from timeline to which changeset belong.\n * @beta\n*/\nexport type AnyDb = IModelDb | ECDb;\n\n/** Arg to open a changeset file from disk\n * @beta\n*/\nexport interface SqliteChangesetReaderArgs {\n /** db from which schema will be read. It should be at or ahead of the latest changeset being opened.*/\n readonly db: AnyDb;\n /** invert the changeset operations */\n readonly invert?: true;\n /** do not check if column of change match db schema instead ignore addition columns */\n readonly disableSchemaCheck?: true;\n}\n/**\n * Represent sqlite change.\n * @beta\n */\nexport interface SqliteChange {\n /** name of table */\n $table?: string;\n /** SQLite operation that created this change */\n $op?: SqliteChangeOp;\n /** version of data in change. */\n $stage?: SqliteValueStage;\n /** columns in change */\n [key: string]: any;\n}\n/**\n * Read raw sqlite changeset from disk and enumerate changes.\n * It also optionally let you format change with schema from\n * a db provided.\n * @beta\n */\nexport class SqliteChangesetReader implements Disposable {\n private readonly _nativeReader = new IModelNative.platform.SqliteChangesetReader();\n private _schemaCache = new Map<string, string[]>();\n private _disableSchemaCheck = false;\n private _changeIndex = 0;\n protected constructor(\n /** db from where sql schema will be read */\n public readonly db: AnyDb,\n ) { }\n\n /**\n * Open changeset file from disk\n * @param args fileName of changeset reader and other options.\n * @returns SqliteChangesetReader instance\n */\n public static openFile(args: { readonly fileName: string } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openFile(args.fileName, args.invert ?? false);\n return reader;\n }\n /**\n * Group changeset file into single changeset and open that changeset.\n * @param args - The arguments for opening the changeset group. Requires an open db.\n * @returns The SqliteChangesetReader instance.\n */\n public static openGroup(args: { readonly changesetFiles: string[] } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n if (args.changesetFiles.length === 0) {\n throw new Error(\"changesetFiles must contain at least one file.\");\n }\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openGroup(args.changesetFiles, args.db[_nativeDb], args.invert ?? false);\n return reader;\n }\n /**\n * Open txn change in iModel.\n * @param args iModel and other options.\n * @returns SqliteChangesetReader instance\n */\n public static openTxn(args: { txnId: Id64String } & SqliteChangesetReaderArgs): SqliteChangesetReader {\n if (args.db instanceof ECDb) {\n throw new Error(\"ECDb does not support openTxn\");\n }\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openTxn(args.db[_nativeDb], args.txnId, args.invert ?? false);\n return reader;\n }\n /**\n * Open in-memory changes for the given iModel.\n * @param args - The arguments for opening in-memory changes.\n * @returns SqliteChangesetReader instance\n */\n public static openInMemory(args: SqliteChangesetReaderArgs & { db: IModelDb }): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openInMemoryChanges(args.db[_nativeDb], args.invert ?? false);\n return reader;\n }\n /**\n * Writes the changeset to a file.\n * @note can be use with openGroup() or openLocalChanges() to persist changeset.\n * @param args - The arguments for writing to the file.\n * @param args.fileName - The name of the file to write to.\n * @param args.containsSchemaChanges - Indicates whether the changeset contains schema changes.\n * @param args.overwriteFile - Indicates whether to override the file if it already exists. Default is false.\n */\n public writeToFile(args: { fileName: string, containsSchemaChanges: boolean, overwriteFile?: boolean }): void {\n this._nativeReader.writeToFile(args.fileName, args.containsSchemaChanges, args.overwriteFile ?? false);\n }\n /**\n * Open local changes in iModel.\n * @param args iModel and other options.\n * @param args.db must be of type IModelDb\n * @returns SqliteChangesetReader instance\n */\n public static openLocalChanges(args: Omit<SqliteChangesetReaderArgs, \"db\"> & { db: IModelDb, includeInMemoryChanges?: true }): SqliteChangesetReader {\n const reader = new SqliteChangesetReader(args.db);\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\n reader._nativeReader.openLocalChanges(args.db[_nativeDb], args.includeInMemoryChanges ?? false, args.invert ?? false);\n return reader;\n }\n /** check if schema check is disabled or not */\n public get disableSchemaCheck(): boolean { return this._disableSchemaCheck; }\n /** Move to next change in changeset\n * @returns true if there is current change false if reader is end of changeset.\n * @beta\n */\n public step(): boolean {\n if (this._nativeReader.step()) {\n this._changeIndex++;\n return true;\n }\n return false;\n }\n /** Check if reader current on a row\n * @beta\n */\n public get hasRow(): boolean {\n return this._nativeReader.hasRow();\n }\n /** Check if its current change is indirect\n * @beta\n */\n public get isIndirect(): boolean {\n return this._nativeReader.isIndirectChange();\n }\n /** Get count of columns in current change\n * @beta\n */\n public get columnCount(): number {\n return this._nativeReader.getColumnCount();\n }\n /** Get operation that caused the change\n * @beta\n */\n public get op(): SqliteChangeOp {\n if (this._nativeReader.getOpCode() === DbOpcode.Insert)\n return \"Inserted\";\n\n if (this._nativeReader.getOpCode() === DbOpcode.Delete)\n return \"Deleted\";\n\n return \"Updated\";\n }\n /** Get primary key value array\n * @beta\n */\n public get primaryKeyValues(): SqliteValueArray {\n return this._nativeReader.getPrimaryKeys();\n }\n /** Get primary key columns.\n * @note To this to work db arg must be set when opening changeset file.\n * @beta\n */\n public getPrimaryKeyColumnNames(): string[] {\n const cols = this.getColumnNames(this.tableName);\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\n\n return this._nativeReader.getPrimaryKeyColumnIndexes().map((i) => cols[i]);\n }\n /** Get current change table.\n * @beta\n */\n public get tableName(): string {\n return this._nativeReader.getTableName();\n }\n /**\n * Get changed binary value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed binary value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueBinary(columnIndex: number, stage: SqliteValueStage): Uint8Array | null | undefined {\n return this._nativeReader.getColumnValueBinary(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed double value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueDouble(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\n return this._nativeReader.getColumnValueDouble(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed Id value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueId(columnIndex: number, stage: SqliteValueStage): Id64String | null | undefined {\n return this._nativeReader.getColumnValueId(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed integer value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueInteger(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\n return this._nativeReader.getColumnValueInteger(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed text value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValueText(columnIndex: number, stage: SqliteValueStage): string | null | undefined {\n return this._nativeReader.getColumnValueText(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Check if change value is null\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns true if value is null\n * @beta\n */\n public isColumnValueNull(columnIndex: number, stage: SqliteValueStage): boolean | undefined {\n return this._nativeReader.isColumnValueNull(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get change value type\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns change value type\n * @beta\n */\n public getColumnValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n\n /**\n * Get changed value for a column\n * @param columnIndex index of column in current change\n * @param stage old or new value for change.\n * @returns value for changed column\n * @beta\n */\n public getChangeValue(columnIndex: number, stage: SqliteValueStage): SqliteValue {\n return this._nativeReader.getColumnValue(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n /**\n * Get all changed value in current change as array\n * @param stage old or new values for current change.\n * @returns array of values.\n * @beta\n */\n public getChangeValuesArray(stage: SqliteValueStage): SqliteValueArray | undefined {\n return this._nativeReader.getRow(stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\n }\n /**\n * Get change as object and format its content.\n * @param stage old or new value for current change.\n * @param args change format options\n * @returns return object or undefined\n * @beta\n */\n public getChangeValuesObject(stage: SqliteValueStage, args: ChangeFormatArgs = {}): SqliteChange | undefined {\n const cols = this.getColumnNames(this.tableName);\n const row = this.getChangeValuesArray(stage);\n if (!row)\n return undefined;\n process.env;\n const minLen = Math.min(cols.length, row.length);\n\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\n\n const out: SqliteChange = {};\n if (args.includeTableName) {\n out.$table = this.tableName;\n }\n if (args.includeOpCode) {\n out.$op = this.op;\n }\n if (args.includeStage) {\n out.$stage = stage;\n }\n\n if (args.includePrimaryKeyInUpdateNew && this.op === \"Updated\" && stage === \"New\") {\n const pkNames = this.getPrimaryKeyColumnNames();\n const pkValues = this.primaryKeyValues;\n pkNames.forEach((v, i) => {\n out[v] = pkValues[i];\n });\n }\n const isNullOrUndefined = (val: SqliteValue) => typeof val === \"undefined\";\n\n for (let i = 0; i < minLen; ++i) {\n const columnValue = row[i];\n const columnName = cols[i];\n if (!args.includeNullColumns && isNullOrUndefined(columnValue))\n continue;\n\n out[columnName] = columnValue;\n }\n return out;\n }\n /**\n * Get list of column for a table. This function also caches the result.\n * @note To this to work db arg must be set when opening changeset file.\n * @param tableName name of the table for which columns are requested.\n * @returns columns of table.\n * @beta\n */\n public getColumnNames(tableName: string): string[] {\n const columns = this._schemaCache.get(tableName);\n if (columns)\n return columns;\n\n return this.db.withPreparedSqliteStatement(\"SELECT [name] FROM PRAGMA_TABLE_INFO(?) ORDER BY [cid]\", (stmt) => {\n stmt.bindString(1, tableName);\n const tblCols: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n tblCols.push(stmt.getValueString(0));\n }\n this._schemaCache.set(tableName, tblCols);\n return tblCols;\n });\n }\n /** index of current change\n * @beta\n */\n public get changeIndex() { return this._changeIndex; }\n /**\n * Close changeset\n * @beta\n */\n public close() {\n this._changeIndex = 0;\n this._nativeReader.close();\n }\n /**\n * Dispose this object\n * @beta\n */\n public [Symbol.dispose](): void {\n this.close();\n }\n /**\n * Get Data Definition Language changes\n * @beta\n */\n public getDdlChanges(): string | undefined {\n return this._nativeReader.getDdlChanges();\n }\n}\n"]}