@itwin/core-backend 5.14.0-dev.1 → 5.14.0-dev.11

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 (120) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +6 -0
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +12 -6
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  7. package/lib/cjs/ChangesetReader.js +1 -0
  8. package/lib/cjs/ChangesetReader.js.map +1 -1
  9. package/lib/cjs/ChangesetReaderTypes.d.ts +2 -1
  10. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -1
  11. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  12. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  13. package/lib/cjs/CloudSqlite.js +9 -2
  14. package/lib/cjs/CloudSqlite.js.map +1 -1
  15. package/lib/cjs/ECDb.d.ts.map +1 -1
  16. package/lib/cjs/ECDb.js +1 -0
  17. package/lib/cjs/ECDb.js.map +1 -1
  18. package/lib/cjs/Element.d.ts +1 -1
  19. package/lib/cjs/Element.js +1 -1
  20. package/lib/cjs/Element.js.map +1 -1
  21. package/lib/cjs/Entity.d.ts +3 -3
  22. package/lib/cjs/Entity.js +3 -3
  23. package/lib/cjs/Entity.js.map +1 -1
  24. package/lib/cjs/IModelDb.d.ts +83 -35
  25. package/lib/cjs/IModelDb.d.ts.map +1 -1
  26. package/lib/cjs/IModelDb.js +196 -89
  27. package/lib/cjs/IModelDb.js.map +1 -1
  28. package/lib/cjs/IpcHost.d.ts.map +1 -1
  29. package/lib/cjs/IpcHost.js +51 -17
  30. package/lib/cjs/IpcHost.js.map +1 -1
  31. package/lib/cjs/SchemaSync.d.ts +126 -18
  32. package/lib/cjs/SchemaSync.d.ts.map +1 -1
  33. package/lib/cjs/SchemaSync.js +303 -81
  34. package/lib/cjs/SchemaSync.js.map +1 -1
  35. package/lib/cjs/SqliteChangesetReader.d.ts +16 -8
  36. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  37. package/lib/cjs/SqliteChangesetReader.js +11 -1
  38. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  39. package/lib/cjs/SynchronousChannel.d.ts +11 -1
  40. package/lib/cjs/SynchronousChannel.d.ts.map +1 -1
  41. package/lib/cjs/SynchronousChannel.js.map +1 -1
  42. package/lib/cjs/TxnManager.d.ts.map +1 -1
  43. package/lib/cjs/TxnManager.js +16 -13
  44. package/lib/cjs/TxnManager.js.map +1 -1
  45. package/lib/cjs/internal/IntegrityCheck.d.ts +57 -0
  46. package/lib/cjs/internal/IntegrityCheck.d.ts.map +1 -1
  47. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  48. package/lib/cjs/internal/SchemaSyncReservations.d.ts.map +1 -1
  49. package/lib/cjs/internal/SchemaSyncReservations.js +13 -3
  50. package/lib/cjs/internal/SchemaSyncReservations.js.map +1 -1
  51. package/lib/esm/BriefcaseManager.d.ts +6 -0
  52. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  53. package/lib/esm/BriefcaseManager.js +12 -6
  54. package/lib/esm/BriefcaseManager.js.map +1 -1
  55. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  56. package/lib/esm/ChangesetReader.js +1 -0
  57. package/lib/esm/ChangesetReader.js.map +1 -1
  58. package/lib/esm/ChangesetReaderTypes.d.ts +2 -1
  59. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -1
  60. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  61. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  62. package/lib/esm/CloudSqlite.js +10 -3
  63. package/lib/esm/CloudSqlite.js.map +1 -1
  64. package/lib/esm/ECDb.d.ts.map +1 -1
  65. package/lib/esm/ECDb.js +1 -0
  66. package/lib/esm/ECDb.js.map +1 -1
  67. package/lib/esm/Element.d.ts +1 -1
  68. package/lib/esm/Element.js +1 -1
  69. package/lib/esm/Element.js.map +1 -1
  70. package/lib/esm/Entity.d.ts +3 -3
  71. package/lib/esm/Entity.js +3 -3
  72. package/lib/esm/Entity.js.map +1 -1
  73. package/lib/esm/IModelDb.d.ts +83 -35
  74. package/lib/esm/IModelDb.d.ts.map +1 -1
  75. package/lib/esm/IModelDb.js +196 -89
  76. package/lib/esm/IModelDb.js.map +1 -1
  77. package/lib/esm/IpcHost.d.ts.map +1 -1
  78. package/lib/esm/IpcHost.js +52 -18
  79. package/lib/esm/IpcHost.js.map +1 -1
  80. package/lib/esm/SchemaSync.d.ts +126 -18
  81. package/lib/esm/SchemaSync.d.ts.map +1 -1
  82. package/lib/esm/SchemaSync.js +304 -82
  83. package/lib/esm/SchemaSync.js.map +1 -1
  84. package/lib/esm/SqliteChangesetReader.d.ts +16 -8
  85. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  86. package/lib/esm/SqliteChangesetReader.js +11 -1
  87. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  88. package/lib/esm/SynchronousChannel.d.ts +11 -1
  89. package/lib/esm/SynchronousChannel.d.ts.map +1 -1
  90. package/lib/esm/SynchronousChannel.js.map +1 -1
  91. package/lib/esm/TxnManager.d.ts.map +1 -1
  92. package/lib/esm/TxnManager.js +17 -14
  93. package/lib/esm/TxnManager.js.map +1 -1
  94. package/lib/esm/internal/IntegrityCheck.d.ts +57 -0
  95. package/lib/esm/internal/IntegrityCheck.d.ts.map +1 -1
  96. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  97. package/lib/esm/internal/SchemaSyncReservations.d.ts.map +1 -1
  98. package/lib/esm/internal/SchemaSyncReservations.js +13 -3
  99. package/lib/esm/internal/SchemaSyncReservations.js.map +1 -1
  100. package/lib/esm/test/annotations/FrameGeometry.test.js +1 -1
  101. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  102. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +65 -1
  103. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  104. package/lib/esm/test/hubaccess/Rebase.test.js +3 -1
  105. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  106. package/lib/esm/test/hubaccess/SemanticRebase.test.js +218 -28
  107. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  108. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.d.ts +3 -0
  109. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.d.ts.map +1 -0
  110. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.js +15 -0
  111. package/lib/esm/test/hubaccess/SemanticRebaseTestUtils.js.map +1 -0
  112. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  113. package/lib/esm/test/standalone/SQLiteDb.test.d.ts.map +1 -1
  114. package/lib/esm/test/standalone/SQLiteDb.test.js +116 -0
  115. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  116. package/lib/esm/test/standalone/SchemaSyncDb.test.js +5 -25
  117. package/lib/esm/test/standalone/SchemaSyncDb.test.js.map +1 -1
  118. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js +1 -0
  119. package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js.map +1 -1
  120. package/package.json +14 -14
@@ -4,6 +4,7 @@
4
4
  import { DbValueType, Id64String } from "@itwin/core-bentley";
5
5
  import { ECDb } from "./ECDb";
6
6
  import { IModelDb } from "./IModelDb";
7
+ import { SQLiteDb } from "./SQLiteDb";
7
8
  /** Changed value type
8
9
  * @beta
9
10
  */
@@ -40,12 +41,18 @@ export type SqliteValueStage = "Old" | "New";
40
41
  * @beta
41
42
  */
42
43
  export type AnyDb = IModelDb | ECDb;
44
+ /** A database that can supply SQLite table metadata to a changeset reader.
45
+ * The database must contain every table referenced by the changeset. When using a plain
46
+ * [[SQLiteDb]], [[SqliteChangesetReaderArgs.disableSchemaCheck]] may be used to tolerate additional columns in the changeset.
47
+ * @beta
48
+ */
49
+ export type SqliteChangesetReaderDb = AnyDb | SQLiteDb;
43
50
  /** Arg to open a changeset file from disk
44
51
  * @beta
45
52
  */
46
- export interface SqliteChangesetReaderArgs {
47
- /** db from which schema will be read. It should be at or ahead of the latest changeset being opened.*/
48
- readonly db: AnyDb;
53
+ export interface SqliteChangesetReaderArgs<TDb extends SqliteChangesetReaderDb = AnyDb> {
54
+ /** Database from which table and column metadata will be read. It must be open and contain every table in the changeset. */
55
+ readonly db: TDb;
49
56
  /** invert the changeset operations */
50
57
  readonly invert?: true;
51
58
  /** do not check if column of change match db schema instead ignore addition columns */
@@ -71,24 +78,25 @@ export interface SqliteChange {
71
78
  * a db provided.
72
79
  * @beta
73
80
  */
74
- export declare class SqliteChangesetReader implements Disposable {
81
+ export declare class SqliteChangesetReader<TDb extends SqliteChangesetReaderDb = AnyDb> implements Disposable {
75
82
  /** db from where sql schema will be read */
76
- readonly db: AnyDb;
83
+ readonly db: TDb;
77
84
  private readonly _nativeReader;
78
85
  private _schemaCache;
79
86
  private _disableSchemaCheck;
80
87
  private _changeIndex;
81
88
  protected constructor(
82
89
  /** db from where sql schema will be read */
83
- db: AnyDb);
90
+ db: TDb);
91
+ private static requireOpenDb;
84
92
  /**
85
93
  * Open changeset file from disk
86
94
  * @param args fileName of changeset reader and other options.
87
95
  * @returns SqliteChangesetReader instance
88
96
  */
89
- static openFile(args: {
97
+ static openFile<TDb extends SqliteChangesetReaderDb>(args: {
90
98
  readonly fileName: string;
91
- } & SqliteChangesetReaderArgs): SqliteChangesetReader;
99
+ } & SqliteChangesetReaderArgs<TDb>): SqliteChangesetReader<TDb>;
92
100
  /**
93
101
  * Group changeset file into single changeset and open that changeset.
94
102
  * @param args - The arguments for opening the changeset group. Requires an open db.
@@ -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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"}
@@ -26,12 +26,17 @@ export class SqliteChangesetReader {
26
26
  db) {
27
27
  this.db = db;
28
28
  }
29
+ static requireOpenDb(db) {
30
+ if (!db.isOpen)
31
+ throw new Error("db must be open.");
32
+ }
29
33
  /**
30
34
  * Open changeset file from disk
31
35
  * @param args fileName of changeset reader and other options.
32
36
  * @returns SqliteChangesetReader instance
33
37
  */
34
38
  static openFile(args) {
39
+ this.requireOpenDb(args.db);
35
40
  const reader = new SqliteChangesetReader(args.db);
36
41
  reader._disableSchemaCheck = args.disableSchemaCheck ?? false;
37
42
  reader._nativeReader.openFile(args.fileName, args.invert ?? false);
@@ -43,6 +48,7 @@ export class SqliteChangesetReader {
43
48
  * @returns The SqliteChangesetReader instance.
44
49
  */
45
50
  static openGroup(args) {
51
+ this.requireOpenDb(args.db);
46
52
  if (args.changesetFiles.length === 0) {
47
53
  throw new Error("changesetFiles must contain at least one file.");
48
54
  }
@@ -57,6 +63,7 @@ export class SqliteChangesetReader {
57
63
  * @returns SqliteChangesetReader instance
58
64
  */
59
65
  static openTxn(args) {
66
+ this.requireOpenDb(args.db);
60
67
  if (args.db instanceof ECDb) {
61
68
  throw new Error("ECDb does not support openTxn");
62
69
  }
@@ -71,6 +78,7 @@ export class SqliteChangesetReader {
71
78
  * @returns SqliteChangesetReader instance
72
79
  */
73
80
  static openInMemory(args) {
81
+ this.requireOpenDb(args.db);
74
82
  const reader = new SqliteChangesetReader(args.db);
75
83
  reader._disableSchemaCheck = args.disableSchemaCheck ?? false;
76
84
  reader._nativeReader.openInMemoryChanges(args.db[_nativeDb], args.invert ?? false);
@@ -94,6 +102,7 @@ export class SqliteChangesetReader {
94
102
  * @returns SqliteChangesetReader instance
95
103
  */
96
104
  static openLocalChanges(args) {
105
+ this.requireOpenDb(args.db);
97
106
  const reader = new SqliteChangesetReader(args.db);
98
107
  reader._disableSchemaCheck = args.disableSchemaCheck ?? false;
99
108
  reader._nativeReader.openLocalChanges(args.db[_nativeDb], args.includeInMemoryChanges ?? false, args.invert ?? false);
@@ -273,7 +282,6 @@ export class SqliteChangesetReader {
273
282
  const row = this.getChangeValuesArray(stage);
274
283
  if (!row)
275
284
  return undefined;
276
- process.env;
277
285
  const minLen = Math.min(cols.length, row.length);
278
286
  if (!this._disableSchemaCheck && cols.length !== this.columnCount)
279
287
  throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);
@@ -321,6 +329,8 @@ export class SqliteChangesetReader {
321
329
  while (stmt.step() === DbResult.BE_SQLITE_ROW) {
322
330
  tblCols.push(stmt.getValueString(0));
323
331
  }
332
+ if (tblCols.length === 0)
333
+ throw new Error(`changeset table ${tableName} does not exist in the provided db.`);
324
334
  this._schemaCache.set(tableName, tblCols);
325
335
  return tblCols;
326
336
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteChangesetReader.js","sourceRoot":"","sources":["../../src/SqliteChangesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SQLiteDb\r\n */\r\nimport { DbChangeStage, DbOpcode, DbResult, DbValueType, Id64String } from \"@itwin/core-bentley\";\r\nimport { ECDb } from \"./ECDb\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { IModelNative } from \"./internal/NativePlatform\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\n\r\n/** Changed value type\r\n * @beta\r\n*/\r\ntype SqliteValue = Uint8Array | number | string | null | undefined;\r\n\r\n/** Array of changed values\r\n * @beta\r\n*/\r\ntype SqliteValueArray = SqliteValue[];\r\n/**\r\n * Format option when converting change from array to column/value object.\r\n * @beta\r\n */\r\nexport interface ChangeFormatArgs {\r\n /** include table name */\r\n includeTableName?: true;\r\n /** include op code */\r\n includeOpCode?: true;\r\n /** include null columns */\r\n includeNullColumns?: true;\r\n /** include value version */\r\n includeStage?: true;\r\n /** include primary key in update change */\r\n includePrimaryKeyInUpdateNew?: true;\r\n}\r\n\r\n/** Operation that cause the change\r\n * @beta\r\n*/\r\nexport type SqliteChangeOp = \"Inserted\" | \"Updated\" | \"Deleted\";\r\n\r\n/** Stage is version of value that needed to be read\r\n * @beta\r\n*/\r\nexport type SqliteValueStage = \"Old\" | \"New\";\r\n\r\n/** Db from which schema will be read. It should be from timeline to which changeset belong.\r\n * @beta\r\n*/\r\nexport type AnyDb = IModelDb | ECDb;\r\n\r\n/** Arg to open a changeset file from disk\r\n * @beta\r\n*/\r\nexport interface SqliteChangesetReaderArgs {\r\n /** db from which schema will be read. It should be at or ahead of the latest changeset being opened.*/\r\n readonly db: AnyDb;\r\n /** invert the changeset operations */\r\n readonly invert?: true;\r\n /** do not check if column of change match db schema instead ignore addition columns */\r\n readonly disableSchemaCheck?: true;\r\n}\r\n/**\r\n * Represent sqlite change.\r\n * @beta\r\n */\r\nexport interface SqliteChange {\r\n /** name of table */\r\n $table?: string;\r\n /** SQLite operation that created this change */\r\n $op?: SqliteChangeOp;\r\n /** version of data in change. */\r\n $stage?: SqliteValueStage;\r\n /** columns in change */\r\n [key: string]: any;\r\n}\r\n/**\r\n * Read raw sqlite changeset from disk and enumerate changes.\r\n * It also optionally let you format change with schema from\r\n * a db provided.\r\n * @beta\r\n */\r\nexport class SqliteChangesetReader implements Disposable {\r\n private readonly _nativeReader = new IModelNative.platform.SqliteChangesetReader();\r\n private _schemaCache = new Map<string, string[]>();\r\n private _disableSchemaCheck = false;\r\n private _changeIndex = 0;\r\n protected constructor(\r\n /** db from where sql schema will be read */\r\n public readonly db: AnyDb,\r\n ) { }\r\n\r\n /**\r\n * Open changeset file from disk\r\n * @param args fileName of changeset reader and other options.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openFile(args: { readonly fileName: string } & SqliteChangesetReaderArgs): SqliteChangesetReader {\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openFile(args.fileName, args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Group changeset file into single changeset and open that changeset.\r\n * @param args - The arguments for opening the changeset group. Requires an open db.\r\n * @returns The SqliteChangesetReader instance.\r\n */\r\n public static openGroup(args: { readonly changesetFiles: string[] } & SqliteChangesetReaderArgs): SqliteChangesetReader {\r\n if (args.changesetFiles.length === 0) {\r\n throw new Error(\"changesetFiles must contain at least one file.\");\r\n }\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openGroup(args.changesetFiles, args.db[_nativeDb], args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Open txn change in iModel.\r\n * @param args iModel and other options.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openTxn(args: { txnId: Id64String } & SqliteChangesetReaderArgs): SqliteChangesetReader {\r\n if (args.db instanceof ECDb) {\r\n throw new Error(\"ECDb does not support openTxn\");\r\n }\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openTxn(args.db[_nativeDb], args.txnId, args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Open in-memory changes for the given iModel.\r\n * @param args - The arguments for opening in-memory changes.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openInMemory(args: SqliteChangesetReaderArgs & { db: IModelDb }): SqliteChangesetReader {\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openInMemoryChanges(args.db[_nativeDb], args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Writes the changeset to a file.\r\n * @note can be use with openGroup() or openLocalChanges() to persist changeset.\r\n * @param args - The arguments for writing to the file.\r\n * @param args.fileName - The name of the file to write to.\r\n * @param args.containsSchemaChanges - Indicates whether the changeset contains schema changes.\r\n * @param args.overwriteFile - Indicates whether to override the file if it already exists. Default is false.\r\n */\r\n public writeToFile(args: { fileName: string, containsSchemaChanges: boolean, overwriteFile?: boolean }): void {\r\n this._nativeReader.writeToFile(args.fileName, args.containsSchemaChanges, args.overwriteFile ?? false);\r\n }\r\n /**\r\n * Open local changes in iModel.\r\n * @param args iModel and other options.\r\n * @param args.db must be of type IModelDb\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openLocalChanges(args: Omit<SqliteChangesetReaderArgs, \"db\"> & { db: IModelDb, includeInMemoryChanges?: true }): SqliteChangesetReader {\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openLocalChanges(args.db[_nativeDb], args.includeInMemoryChanges ?? false, args.invert ?? false);\r\n return reader;\r\n }\r\n /** check if schema check is disabled or not */\r\n public get disableSchemaCheck(): boolean { return this._disableSchemaCheck; }\r\n /** Move to next change in changeset\r\n * @returns true if there is current change false if reader is end of changeset.\r\n * @beta\r\n */\r\n public step(): boolean {\r\n if (this._nativeReader.step()) {\r\n this._changeIndex++;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Check if reader current on a row\r\n * @beta\r\n */\r\n public get hasRow(): boolean {\r\n return this._nativeReader.hasRow();\r\n }\r\n /** Check if its current change is indirect\r\n * @beta\r\n */\r\n public get isIndirect(): boolean {\r\n return this._nativeReader.isIndirectChange();\r\n }\r\n /** Get count of columns in current change\r\n * @beta\r\n */\r\n public get columnCount(): number {\r\n return this._nativeReader.getColumnCount();\r\n }\r\n /** Get operation that caused the change\r\n * @beta\r\n */\r\n public get op(): SqliteChangeOp {\r\n if (this._nativeReader.getOpCode() === DbOpcode.Insert)\r\n return \"Inserted\";\r\n\r\n if (this._nativeReader.getOpCode() === DbOpcode.Delete)\r\n return \"Deleted\";\r\n\r\n return \"Updated\";\r\n }\r\n /** Get primary key value array\r\n * @beta\r\n */\r\n public get primaryKeyValues(): SqliteValueArray {\r\n return this._nativeReader.getPrimaryKeys();\r\n }\r\n /** Get primary key columns.\r\n * @note To this to work db arg must be set when opening changeset file.\r\n * @beta\r\n */\r\n public getPrimaryKeyColumnNames(): string[] {\r\n const cols = this.getColumnNames(this.tableName);\r\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\r\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\r\n\r\n return this._nativeReader.getPrimaryKeyColumnIndexes().map((i) => cols[i]);\r\n }\r\n /** Get current change table.\r\n * @beta\r\n */\r\n public get tableName(): string {\r\n return this._nativeReader.getTableName();\r\n }\r\n /**\r\n * Get changed binary value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\r\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed binary value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueBinary(columnIndex: number, stage: SqliteValueStage): Uint8Array | null | undefined {\r\n return this._nativeReader.getColumnValueBinary(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed double value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueDouble(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\r\n return this._nativeReader.getColumnValueDouble(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed Id value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueId(columnIndex: number, stage: SqliteValueStage): Id64String | null | undefined {\r\n return this._nativeReader.getColumnValueId(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed integer value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueInteger(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\r\n return this._nativeReader.getColumnValueInteger(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed text value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueText(columnIndex: number, stage: SqliteValueStage): string | null | undefined {\r\n return this._nativeReader.getColumnValueText(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Check if change value is null\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns true if value is null\r\n * @beta\r\n */\r\n public isColumnValueNull(columnIndex: number, stage: SqliteValueStage): boolean | undefined {\r\n return this._nativeReader.isColumnValueNull(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get change value type\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns change value type\r\n * @beta\r\n */\r\n public getColumnValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\r\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValue(columnIndex: number, stage: SqliteValueStage): SqliteValue {\r\n return this._nativeReader.getColumnValue(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n /**\r\n * Get all changed value in current change as array\r\n * @param stage old or new values for current change.\r\n * @returns array of values.\r\n * @beta\r\n */\r\n public getChangeValuesArray(stage: SqliteValueStage): SqliteValueArray | undefined {\r\n return this._nativeReader.getRow(stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n /**\r\n * Get change as object and format its content.\r\n * @param stage old or new value for current change.\r\n * @param args change format options\r\n * @returns return object or undefined\r\n * @beta\r\n */\r\n public getChangeValuesObject(stage: SqliteValueStage, args: ChangeFormatArgs = {}): SqliteChange | undefined {\r\n const cols = this.getColumnNames(this.tableName);\r\n const row = this.getChangeValuesArray(stage);\r\n if (!row)\r\n return undefined;\r\n process.env;\r\n const minLen = Math.min(cols.length, row.length);\r\n\r\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\r\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\r\n\r\n const out: SqliteChange = {};\r\n if (args.includeTableName) {\r\n out.$table = this.tableName;\r\n }\r\n if (args.includeOpCode) {\r\n out.$op = this.op;\r\n }\r\n if (args.includeStage) {\r\n out.$stage = stage;\r\n }\r\n\r\n if (args.includePrimaryKeyInUpdateNew && this.op === \"Updated\" && stage === \"New\") {\r\n const pkNames = this.getPrimaryKeyColumnNames();\r\n const pkValues = this.primaryKeyValues;\r\n pkNames.forEach((v, i) => {\r\n out[v] = pkValues[i];\r\n });\r\n }\r\n const isNullOrUndefined = (val: SqliteValue) => typeof val === \"undefined\";\r\n\r\n for (let i = 0; i < minLen; ++i) {\r\n const columnValue = row[i];\r\n const columnName = cols[i];\r\n if (!args.includeNullColumns && isNullOrUndefined(columnValue))\r\n continue;\r\n\r\n out[columnName] = columnValue;\r\n }\r\n return out;\r\n }\r\n /**\r\n * Get list of column for a table. This function also caches the result.\r\n * @note To this to work db arg must be set when opening changeset file.\r\n * @param tableName name of the table for which columns are requested.\r\n * @returns columns of table.\r\n * @beta\r\n */\r\n public getColumnNames(tableName: string): string[] {\r\n const columns = this._schemaCache.get(tableName);\r\n if (columns)\r\n return columns;\r\n\r\n return this.db.withPreparedSqliteStatement(\"SELECT [name] FROM PRAGMA_TABLE_INFO(?) ORDER BY [cid]\", (stmt) => {\r\n stmt.bindString(1, tableName);\r\n const tblCols: string[] = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n tblCols.push(stmt.getValueString(0));\r\n }\r\n this._schemaCache.set(tableName, tblCols);\r\n return tblCols;\r\n });\r\n }\r\n /** index of current change\r\n * @beta\r\n */\r\n public get changeIndex() { return this._changeIndex; }\r\n /**\r\n * Close changeset\r\n * @beta\r\n */\r\n public close() {\r\n this._changeIndex = 0;\r\n this._nativeReader.close();\r\n }\r\n /**\r\n * Dispose this object\r\n * @beta\r\n */\r\n public [Symbol.dispose](): void {\r\n this.close();\r\n }\r\n /**\r\n * Get Data Definition Language changes\r\n * @beta\r\n */\r\n public getDdlChanges(): string | undefined {\r\n return this._nativeReader.getDdlChanges();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SqliteChangesetReader.js","sourceRoot":"","sources":["../../src/SqliteChangesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SQLiteDb\r\n */\r\nimport { DbChangeStage, DbOpcode, DbResult, DbValueType, Id64String } from \"@itwin/core-bentley\";\r\nimport { ECDb } from \"./ECDb\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { IModelNative } from \"./internal/NativePlatform\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\nimport { SQLiteDb } from \"./SQLiteDb\";\r\n\r\n/** Changed value type\r\n * @beta\r\n*/\r\ntype SqliteValue = Uint8Array | number | string | null | undefined;\r\n\r\n/** Array of changed values\r\n * @beta\r\n*/\r\ntype SqliteValueArray = SqliteValue[];\r\n/**\r\n * Format option when converting change from array to column/value object.\r\n * @beta\r\n */\r\nexport interface ChangeFormatArgs {\r\n /** include table name */\r\n includeTableName?: true;\r\n /** include op code */\r\n includeOpCode?: true;\r\n /** include null columns */\r\n includeNullColumns?: true;\r\n /** include value version */\r\n includeStage?: true;\r\n /** include primary key in update change */\r\n includePrimaryKeyInUpdateNew?: true;\r\n}\r\n\r\n/** Operation that cause the change\r\n * @beta\r\n*/\r\nexport type SqliteChangeOp = \"Inserted\" | \"Updated\" | \"Deleted\";\r\n\r\n/** Stage is version of value that needed to be read\r\n * @beta\r\n*/\r\nexport type SqliteValueStage = \"Old\" | \"New\";\r\n\r\n/** Db from which schema will be read. It should be from timeline to which changeset belong.\r\n * @beta\r\n*/\r\nexport type AnyDb = IModelDb | ECDb;\r\n\r\n/** A database that can supply SQLite table metadata to a changeset reader.\r\n * The database must contain every table referenced by the changeset. When using a plain\r\n * [[SQLiteDb]], [[SqliteChangesetReaderArgs.disableSchemaCheck]] may be used to tolerate additional columns in the changeset.\r\n * @beta\r\n */\r\nexport type SqliteChangesetReaderDb = AnyDb | SQLiteDb;\r\n\r\n/** Arg to open a changeset file from disk\r\n * @beta\r\n*/\r\nexport interface SqliteChangesetReaderArgs<TDb extends SqliteChangesetReaderDb = AnyDb> {\r\n /** Database from which table and column metadata will be read. It must be open and contain every table in the changeset. */\r\n readonly db: TDb;\r\n /** invert the changeset operations */\r\n readonly invert?: true;\r\n /** do not check if column of change match db schema instead ignore addition columns */\r\n readonly disableSchemaCheck?: true;\r\n}\r\n/**\r\n * Represent sqlite change.\r\n * @beta\r\n */\r\nexport interface SqliteChange {\r\n /** name of table */\r\n $table?: string;\r\n /** SQLite operation that created this change */\r\n $op?: SqliteChangeOp;\r\n /** version of data in change. */\r\n $stage?: SqliteValueStage;\r\n /** columns in change */\r\n [key: string]: any;\r\n}\r\n/**\r\n * Read raw sqlite changeset from disk and enumerate changes.\r\n * It also optionally let you format change with schema from\r\n * a db provided.\r\n * @beta\r\n */\r\nexport class SqliteChangesetReader<TDb extends SqliteChangesetReaderDb = AnyDb> implements Disposable {\r\n private readonly _nativeReader = new IModelNative.platform.SqliteChangesetReader();\r\n private _schemaCache = new Map<string, string[]>();\r\n private _disableSchemaCheck = false;\r\n private _changeIndex = 0;\r\n protected constructor(\r\n /** db from where sql schema will be read */\r\n public readonly db: TDb,\r\n ) { }\r\n\r\n private static requireOpenDb(db: SqliteChangesetReaderDb): void {\r\n if (!db.isOpen)\r\n throw new Error(\"db must be open.\");\r\n }\r\n\r\n /**\r\n * Open changeset file from disk\r\n * @param args fileName of changeset reader and other options.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openFile<TDb extends SqliteChangesetReaderDb>(args: { readonly fileName: string } & SqliteChangesetReaderArgs<TDb>): SqliteChangesetReader<TDb> {\r\n this.requireOpenDb(args.db);\r\n\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openFile(args.fileName, args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Group changeset file into single changeset and open that changeset.\r\n * @param args - The arguments for opening the changeset group. Requires an open db.\r\n * @returns The SqliteChangesetReader instance.\r\n */\r\n public static openGroup(args: { readonly changesetFiles: string[] } & SqliteChangesetReaderArgs): SqliteChangesetReader {\r\n this.requireOpenDb(args.db);\r\n if (args.changesetFiles.length === 0) {\r\n throw new Error(\"changesetFiles must contain at least one file.\");\r\n }\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openGroup(args.changesetFiles, args.db[_nativeDb], args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Open txn change in iModel.\r\n * @param args iModel and other options.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openTxn(args: { txnId: Id64String } & SqliteChangesetReaderArgs): SqliteChangesetReader {\r\n this.requireOpenDb(args.db);\r\n if (args.db instanceof ECDb) {\r\n throw new Error(\"ECDb does not support openTxn\");\r\n }\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openTxn(args.db[_nativeDb], args.txnId, args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Open in-memory changes for the given iModel.\r\n * @param args - The arguments for opening in-memory changes.\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openInMemory(args: SqliteChangesetReaderArgs & { db: IModelDb }): SqliteChangesetReader {\r\n this.requireOpenDb(args.db);\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openInMemoryChanges(args.db[_nativeDb], args.invert ?? false);\r\n return reader;\r\n }\r\n /**\r\n * Writes the changeset to a file.\r\n * @note can be use with openGroup() or openLocalChanges() to persist changeset.\r\n * @param args - The arguments for writing to the file.\r\n * @param args.fileName - The name of the file to write to.\r\n * @param args.containsSchemaChanges - Indicates whether the changeset contains schema changes.\r\n * @param args.overwriteFile - Indicates whether to override the file if it already exists. Default is false.\r\n */\r\n public writeToFile(args: { fileName: string, containsSchemaChanges: boolean, overwriteFile?: boolean }): void {\r\n this._nativeReader.writeToFile(args.fileName, args.containsSchemaChanges, args.overwriteFile ?? false);\r\n }\r\n /**\r\n * Open local changes in iModel.\r\n * @param args iModel and other options.\r\n * @param args.db must be of type IModelDb\r\n * @returns SqliteChangesetReader instance\r\n */\r\n public static openLocalChanges(args: Omit<SqliteChangesetReaderArgs, \"db\"> & { db: IModelDb, includeInMemoryChanges?: true }): SqliteChangesetReader {\r\n this.requireOpenDb(args.db);\r\n const reader = new SqliteChangesetReader(args.db);\r\n reader._disableSchemaCheck = args.disableSchemaCheck ?? false;\r\n reader._nativeReader.openLocalChanges(args.db[_nativeDb], args.includeInMemoryChanges ?? false, args.invert ?? false);\r\n return reader;\r\n }\r\n /** check if schema check is disabled or not */\r\n public get disableSchemaCheck(): boolean { return this._disableSchemaCheck; }\r\n /** Move to next change in changeset\r\n * @returns true if there is current change false if reader is end of changeset.\r\n * @beta\r\n */\r\n public step(): boolean {\r\n if (this._nativeReader.step()) {\r\n this._changeIndex++;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Check if reader current on a row\r\n * @beta\r\n */\r\n public get hasRow(): boolean {\r\n return this._nativeReader.hasRow();\r\n }\r\n /** Check if its current change is indirect\r\n * @beta\r\n */\r\n public get isIndirect(): boolean {\r\n return this._nativeReader.isIndirectChange();\r\n }\r\n /** Get count of columns in current change\r\n * @beta\r\n */\r\n public get columnCount(): number {\r\n return this._nativeReader.getColumnCount();\r\n }\r\n /** Get operation that caused the change\r\n * @beta\r\n */\r\n public get op(): SqliteChangeOp {\r\n if (this._nativeReader.getOpCode() === DbOpcode.Insert)\r\n return \"Inserted\";\r\n\r\n if (this._nativeReader.getOpCode() === DbOpcode.Delete)\r\n return \"Deleted\";\r\n\r\n return \"Updated\";\r\n }\r\n /** Get primary key value array\r\n * @beta\r\n */\r\n public get primaryKeyValues(): SqliteValueArray {\r\n return this._nativeReader.getPrimaryKeys();\r\n }\r\n /** Get primary key columns.\r\n * @note To this to work db arg must be set when opening changeset file.\r\n * @beta\r\n */\r\n public getPrimaryKeyColumnNames(): string[] {\r\n const cols = this.getColumnNames(this.tableName);\r\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\r\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\r\n\r\n return this._nativeReader.getPrimaryKeyColumnIndexes().map((i) => cols[i]);\r\n }\r\n /** Get current change table.\r\n * @beta\r\n */\r\n public get tableName(): string {\r\n return this._nativeReader.getTableName();\r\n }\r\n /**\r\n * Get changed binary value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\r\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed binary value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueBinary(columnIndex: number, stage: SqliteValueStage): Uint8Array | null | undefined {\r\n return this._nativeReader.getColumnValueBinary(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed double value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueDouble(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\r\n return this._nativeReader.getColumnValueDouble(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed Id value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueId(columnIndex: number, stage: SqliteValueStage): Id64String | null | undefined {\r\n return this._nativeReader.getColumnValueId(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed integer value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueInteger(columnIndex: number, stage: SqliteValueStage): number | null | undefined {\r\n return this._nativeReader.getColumnValueInteger(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed text value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValueText(columnIndex: number, stage: SqliteValueStage): string | null | undefined {\r\n return this._nativeReader.getColumnValueText(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Check if change value is null\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns true if value is null\r\n * @beta\r\n */\r\n public isColumnValueNull(columnIndex: number, stage: SqliteValueStage): boolean | undefined {\r\n return this._nativeReader.isColumnValueNull(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get change value type\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns change value type\r\n * @beta\r\n */\r\n public getColumnValueType(columnIndex: number, stage: SqliteValueStage): DbValueType | undefined {\r\n return this._nativeReader.getColumnValueType(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n\r\n /**\r\n * Get changed value for a column\r\n * @param columnIndex index of column in current change\r\n * @param stage old or new value for change.\r\n * @returns value for changed column\r\n * @beta\r\n */\r\n public getChangeValue(columnIndex: number, stage: SqliteValueStage): SqliteValue {\r\n return this._nativeReader.getColumnValue(columnIndex, stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n /**\r\n * Get all changed value in current change as array\r\n * @param stage old or new values for current change.\r\n * @returns array of values.\r\n * @beta\r\n */\r\n public getChangeValuesArray(stage: SqliteValueStage): SqliteValueArray | undefined {\r\n return this._nativeReader.getRow(stage === \"New\" ? DbChangeStage.New : DbChangeStage.Old);\r\n }\r\n /**\r\n * Get change as object and format its content.\r\n * @param stage old or new value for current change.\r\n * @param args change format options\r\n * @returns return object or undefined\r\n * @beta\r\n */\r\n public getChangeValuesObject(stage: SqliteValueStage, args: ChangeFormatArgs = {}): SqliteChange | undefined {\r\n const cols = this.getColumnNames(this.tableName);\r\n const row = this.getChangeValuesArray(stage);\r\n if (!row)\r\n return undefined;\r\n const minLen = Math.min(cols.length, row.length);\r\n\r\n if (!this._disableSchemaCheck && cols.length !== this.columnCount)\r\n throw new Error(`changeset table ${this.tableName} columns count does not match db declared table. ${this.columnCount} <> ${cols.length}`);\r\n\r\n const out: SqliteChange = {};\r\n if (args.includeTableName) {\r\n out.$table = this.tableName;\r\n }\r\n if (args.includeOpCode) {\r\n out.$op = this.op;\r\n }\r\n if (args.includeStage) {\r\n out.$stage = stage;\r\n }\r\n\r\n if (args.includePrimaryKeyInUpdateNew && this.op === \"Updated\" && stage === \"New\") {\r\n const pkNames = this.getPrimaryKeyColumnNames();\r\n const pkValues = this.primaryKeyValues;\r\n pkNames.forEach((v, i) => {\r\n out[v] = pkValues[i];\r\n });\r\n }\r\n const isNullOrUndefined = (val: SqliteValue) => typeof val === \"undefined\";\r\n\r\n for (let i = 0; i < minLen; ++i) {\r\n const columnValue = row[i];\r\n const columnName = cols[i];\r\n if (!args.includeNullColumns && isNullOrUndefined(columnValue))\r\n continue;\r\n\r\n out[columnName] = columnValue;\r\n }\r\n return out;\r\n }\r\n /**\r\n * Get list of column for a table. This function also caches the result.\r\n * @note To this to work db arg must be set when opening changeset file.\r\n * @param tableName name of the table for which columns are requested.\r\n * @returns columns of table.\r\n * @beta\r\n */\r\n public getColumnNames(tableName: string): string[] {\r\n const columns = this._schemaCache.get(tableName);\r\n if (columns)\r\n return columns;\r\n\r\n return this.db.withPreparedSqliteStatement(\"SELECT [name] FROM PRAGMA_TABLE_INFO(?) ORDER BY [cid]\", (stmt) => {\r\n stmt.bindString(1, tableName);\r\n const tblCols: string[] = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n tblCols.push(stmt.getValueString(0));\r\n }\r\n if (tblCols.length === 0)\r\n throw new Error(`changeset table ${tableName} does not exist in the provided db.`);\r\n\r\n this._schemaCache.set(tableName, tblCols);\r\n return tblCols;\r\n });\r\n }\r\n /** index of current change\r\n * @beta\r\n */\r\n public get changeIndex() { return this._changeIndex; }\r\n /**\r\n * Close changeset\r\n * @beta\r\n */\r\n public close() {\r\n this._changeIndex = 0;\r\n this._nativeReader.close();\r\n }\r\n /**\r\n * Dispose this object\r\n * @beta\r\n */\r\n public [Symbol.dispose](): void {\r\n this.close();\r\n }\r\n /**\r\n * Get Data Definition Language changes\r\n * @beta\r\n */\r\n public getDdlChanges(): string | undefined {\r\n return this._nativeReader.getDdlChanges();\r\n }\r\n}\r\n"]}
@@ -14,7 +14,9 @@ export declare namespace SynchronousChannel {
14
14
  * @beta
15
15
  */
16
16
  interface ReserveElementsArgs {
17
- /** The elements to reserve. The whole batch succeeds or fails together. */
17
+ /** The elements to reserve. The whole batch succeeds or fails together.
18
+ * @note Every element listed here becomes a *shared* element that must be inserted identically by every briefcase. See the note on [[SynchronousChannel.Reservations]].
19
+ */
18
20
  elements: Iterable<{
19
21
  /** The federationGuid that stably identifies this element across briefcases. Reservations always require an explicit federationGuid. */
20
22
  federationGuid: GuidString;
@@ -27,6 +29,12 @@ export declare namespace SynchronousChannel {
27
29
  * Interface used to ***reserve*** elements with shared identities as part of [coordinating simultaneous edits]($docs/learning/backend/ConcurrencyControl.md) from multiple briefcases.
28
30
  * Unlike **locks** (via [[LockControl]]), which block users from making conflicting changes to existing elements, **reservations** can be used to communicate "in-flight"
29
31
  * changes between briefcases, allowing users to concurrently add and use identical dependencies (e.g., component definitions, schemas, etc.) without introducing conflicts.
32
+ *
33
+ * @note A reserved element is a *shared* element: every briefcase that inserts it must insert the **exact same element**. The reservation assigns a single shared
34
+ * ElementId that all briefcases use, and when multiple briefcases push their inserts they are merged together as one row rather than producing a conflict.
35
+ * Because these duplicate inserts are silently collapsed, the property values written by each briefcase are **not** reconciled — if two briefcases insert the same reserved
36
+ * element with *different* contents, one briefcase's values win arbitrarily and the other's changes will be lost. Callers are therefore responsible for ensuring that every
37
+ * insert of a given reserved element has the same property values across all briefcases. Only use reservations for content that is deterministically identical everywhere.
30
38
  * @see [[IModelDb.reservations]] to access the reservations for an iModel.
31
39
  * @beta
32
40
  */
@@ -54,6 +62,8 @@ export declare namespace SynchronousChannel {
54
62
  needsElementReservation(federationGuid: GuidString): boolean;
55
63
  /**
56
64
  * Acquire reservations for one or more elements from the reservation service, if required and not already reserved by another user.
65
+ * @note Reserving an element establishes a shared identity that every briefcase must insert *identically*. See the note on [[SynchronousChannel.Reservations]] for why divergent
66
+ * inserts of the same reserved element are unsafe.
57
67
  * @throws Error if the requested elements are inconsistent with existing reservations, or if any other error occurs while updating the reservations.
58
68
  */
59
69
  reserveElements(args: ReserveElementsArgs): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"SynchronousChannel.d.ts","sourceRoot":"","sources":["../../src/SynchronousChannel.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,yBAAiB,kBAAkB,CAAC;IAClC;;OAEG;IACH,UAAiB,mBAAmB;QAClC,2EAA2E;QAC3E,QAAQ,EAAE,QAAQ,CAAC;YACjB,wIAAwI;YACxI,cAAc,EAAE,UAAU,CAAC;YAC3B,aAAa,EAAE,MAAM,CAAC;YACtB,oJAAoJ;YACpJ,IAAI,CAAC,EAAE,SAAS,CAAC;SAClB,CAAC,CAAC;KACJ;IAED;;;;;;OAMG;IACH,UAAiB,YAAY;QAC3B,eAAe;QACf,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QAE9C,oFAAoF;QACpF,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;QAEhC;;;WAGG;QACH,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;QAErB;;;WAGG;QACH,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;QAE7D;;;;;WAKG;QACH,uBAAuB,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;QAE7D;;;WAGG;QACH,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3D;CAEF"}
1
+ {"version":3,"file":"SynchronousChannel.d.ts","sourceRoot":"","sources":["../../src/SynchronousChannel.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,yBAAiB,kBAAkB,CAAC;IAClC;;OAEG;IACH,UAAiB,mBAAmB;QAClC;;WAEG;QACH,QAAQ,EAAE,QAAQ,CAAC;YACjB,wIAAwI;YACxI,cAAc,EAAE,UAAU,CAAC;YAC3B,aAAa,EAAE,MAAM,CAAC;YACtB,oJAAoJ;YACpJ,IAAI,CAAC,EAAE,SAAS,CAAC;SAClB,CAAC,CAAC;KACJ;IAED;;;;;;;;;;;;OAYG;IACH,UAAiB,YAAY;QAC3B,eAAe;QACf,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QAE9C,oFAAoF;QACpF,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;QAEhC;;;WAGG;QACH,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;QAErB;;;WAGG;QACH,CAAC,wBAAwB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;QAE7D;;;;;WAKG;QACH,uBAAuB,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;QAE7D;;;;;WAKG;QACH,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3D;CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynchronousChannel.js","sourceRoot":"","sources":["../../src/SynchronousChannel.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,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/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { CodeProps } from \"@itwin/core-common\";\r\nimport { _close, _implementationProhibited, _onReservedElementInsert } from \"./internal/Symbols\";\r\nimport { OnElementPropsArg } from \"./Element\";\r\n\r\n/** Types used by the synchronous coordination channels that help multiple briefcases avoid conflicts\r\n * before they appear in the asynchronous changeset timeline.\r\n * @beta\r\n */\r\nexport namespace SynchronousChannel {\r\n /** Arguments for [[SynchronousChannel.Reservations.reserveElements]].\r\n * @beta\r\n */\r\n export interface ReserveElementsArgs {\r\n /** The elements to reserve. The whole batch succeeds or fails together. */\r\n elements: Iterable<{\r\n /** The federationGuid that stably identifies this element across briefcases. Reservations always require an explicit federationGuid. */\r\n federationGuid: GuidString;\r\n classFullName: string;\r\n /** The Code for this element. When a non-empty [[Code.value]] is supplied, it must be unique across all reservations. Defaults to an empty Code. */\r\n code?: CodeProps;\r\n }>;\r\n }\r\n\r\n /**\r\n * Interface used to ***reserve*** elements with shared identities as part of [coordinating simultaneous edits]($docs/learning/backend/ConcurrencyControl.md) from multiple briefcases.\r\n * Unlike **locks** (via [[LockControl]]), which block users from making conflicting changes to existing elements, **reservations** can be used to communicate \"in-flight\"\r\n * changes between briefcases, allowing users to concurrently add and use identical dependencies (e.g., component definitions, schemas, etc.) without introducing conflicts.\r\n * @see [[IModelDb.reservations]] to access the reservations for an iModel.\r\n * @beta\r\n */\r\n export interface Reservations {\r\n /** @internal*/\r\n readonly [_implementationProhibited]: unknown;\r\n\r\n /** @internal true if this Reservations uses a server-based concurrency approach. */\r\n readonly isServerBased: boolean;\r\n\r\n /**\r\n * Close the local reservation database\r\n * @internal\r\n */\r\n [_close]: () => void;\r\n\r\n /**\r\n * Notification that a new element with an explicitly-set federationGuid is being inserted. Called by [[Element.onInsert]]\r\n * @internal\r\n */\r\n [_onReservedElementInsert]: (arg: OnElementPropsArg) => void;\r\n\r\n /**\r\n * Determine whether an ID has already been reserved for a future element with the given federationGuid.\r\n * @note Due to local caching, a return value of `false` cannot be taken as a guarantee that no other briefcase has already reserved the same\r\n * element, only that a reservation for the element with the given federationGuid was seen as of the last call to [[reserveElements]].\r\n * @throws [ElementReservationError]($common) if the federationGuid is not a valid GUID.\r\n */\r\n needsElementReservation(federationGuid: GuidString): boolean;\r\n\r\n /**\r\n * Acquire reservations for one or more elements from the reservation service, if required and not already reserved by another user.\r\n * @throws Error if the requested elements are inconsistent with existing reservations, or if any other error occurs while updating the reservations.\r\n */\r\n reserveElements(args: ReserveElementsArgs): Promise<void>;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"SynchronousChannel.js","sourceRoot":"","sources":["../../src/SynchronousChannel.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,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/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { CodeProps } from \"@itwin/core-common\";\r\nimport { _close, _implementationProhibited, _onReservedElementInsert } from \"./internal/Symbols\";\r\nimport { OnElementPropsArg } from \"./Element\";\r\n\r\n/** Types used by the synchronous coordination channels that help multiple briefcases avoid conflicts\r\n * before they appear in the asynchronous changeset timeline.\r\n * @beta\r\n */\r\nexport namespace SynchronousChannel {\r\n /** Arguments for [[SynchronousChannel.Reservations.reserveElements]].\r\n * @beta\r\n */\r\n export interface ReserveElementsArgs {\r\n /** The elements to reserve. The whole batch succeeds or fails together.\r\n * @note Every element listed here becomes a *shared* element that must be inserted identically by every briefcase. See the note on [[SynchronousChannel.Reservations]].\r\n */\r\n elements: Iterable<{\r\n /** The federationGuid that stably identifies this element across briefcases. Reservations always require an explicit federationGuid. */\r\n federationGuid: GuidString;\r\n classFullName: string;\r\n /** The Code for this element. When a non-empty [[Code.value]] is supplied, it must be unique across all reservations. Defaults to an empty Code. */\r\n code?: CodeProps;\r\n }>;\r\n }\r\n\r\n /**\r\n * Interface used to ***reserve*** elements with shared identities as part of [coordinating simultaneous edits]($docs/learning/backend/ConcurrencyControl.md) from multiple briefcases.\r\n * Unlike **locks** (via [[LockControl]]), which block users from making conflicting changes to existing elements, **reservations** can be used to communicate \"in-flight\"\r\n * changes between briefcases, allowing users to concurrently add and use identical dependencies (e.g., component definitions, schemas, etc.) without introducing conflicts.\r\n *\r\n * @note A reserved element is a *shared* element: every briefcase that inserts it must insert the **exact same element**. The reservation assigns a single shared\r\n * ElementId that all briefcases use, and when multiple briefcases push their inserts they are merged together as one row rather than producing a conflict.\r\n * Because these duplicate inserts are silently collapsed, the property values written by each briefcase are **not** reconciled — if two briefcases insert the same reserved\r\n * element with *different* contents, one briefcase's values win arbitrarily and the other's changes will be lost. Callers are therefore responsible for ensuring that every\r\n * insert of a given reserved element has the same property values across all briefcases. Only use reservations for content that is deterministically identical everywhere.\r\n * @see [[IModelDb.reservations]] to access the reservations for an iModel.\r\n * @beta\r\n */\r\n export interface Reservations {\r\n /** @internal*/\r\n readonly [_implementationProhibited]: unknown;\r\n\r\n /** @internal true if this Reservations uses a server-based concurrency approach. */\r\n readonly isServerBased: boolean;\r\n\r\n /**\r\n * Close the local reservation database\r\n * @internal\r\n */\r\n [_close]: () => void;\r\n\r\n /**\r\n * Notification that a new element with an explicitly-set federationGuid is being inserted. Called by [[Element.onInsert]]\r\n * @internal\r\n */\r\n [_onReservedElementInsert]: (arg: OnElementPropsArg) => void;\r\n\r\n /**\r\n * Determine whether an ID has already been reserved for a future element with the given federationGuid.\r\n * @note Due to local caching, a return value of `false` cannot be taken as a guarantee that no other briefcase has already reserved the same\r\n * element, only that a reservation for the element with the given federationGuid was seen as of the last call to [[reserveElements]].\r\n * @throws [ElementReservationError]($common) if the federationGuid is not a valid GUID.\r\n */\r\n needsElementReservation(federationGuid: GuidString): boolean;\r\n\r\n /**\r\n * Acquire reservations for one or more elements from the reservation service, if required and not already reserved by another user.\r\n * @note Reserving an element establishes a shared identity that every briefcase must insert *identically*. See the note on [[SynchronousChannel.Reservations]] for why divergent\r\n * inserts of the same reserved element are unsafe.\r\n * @throws Error if the requested elements are inconsistent with existing reservations, or if any other error occurs while updating the reservations.\r\n */\r\n reserveElements(args: ReserveElementsArgs): Promise<void>;\r\n }\r\n\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TxnManager.d.ts","sourceRoot":"","sources":["../../src/TxnManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TxnManager.d.ts","sourceRoot":"","sources":["../../src/TxnManager.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
59
59
  });
60
60
  import * as touch from "touch";
61
61
  import { assert, BeEvent, BentleyError, compareStrings, CompressedId64Set, DbConflictResolution, DbResult, Id64, IModelStatus, IndexMap, Logger, OrderedId64Array } from "@itwin/core-bentley";
62
- import { IModelError } from "@itwin/core-common";
62
+ import { BriefcaseIdValue, IModelError } from "@itwin/core-common";
63
63
  import { BackendLoggerCategory } from "./BackendLoggerCategory";
64
64
  import { IpcHost } from "./IpcHost";
65
65
  import { _nativeDb } from "./internal/Symbols";
@@ -628,25 +628,25 @@ export class RebaseManager {
628
628
  case "Inserted": {
629
629
  if (!props)
630
630
  throw new IModelError(IModelStatus.BadRequest, "InstancePatch with op 'Inserted' must have props");
631
- const options = { forceUseId: true, useJsNames: true };
631
+ const options = { forceUseId: true, convertClassIdsToClassNames: true };
632
632
  const id = nativeDb.insertInstance(props, options);
633
633
  if (!Id64.isValidId64(id))
634
- throw new IModelError(IModelStatus.BadRequest, `Failed to insert instance with id ${props.id}`);
634
+ throw new IModelError(IModelStatus.BadRequest, `Failed to insert instance with id ${props.ECInstanceId}`);
635
635
  break;
636
636
  }
637
637
  case "Updated": {
638
638
  if (!props)
639
639
  throw new IModelError(IModelStatus.BadRequest, "InstancePatch with op 'Updated' must have props");
640
- const isSuccess = nativeDb.updateInstance(props, { useJsNames: true });
640
+ const isSuccess = nativeDb.updateInstance(props, { convertClassIdsToClassNames: true });
641
641
  if (!isSuccess)
642
- throw new IModelError(IModelStatus.BadRequest, `Failed to update instance with id ${props.id}`);
642
+ throw new IModelError(IModelStatus.BadRequest, `Failed to update instance with id ${props.ECInstanceId}`);
643
643
  break;
644
644
  }
645
645
  case "Deleted": {
646
- const key = { id: props.id, classFullName: props.className };
647
- const isSuccess = nativeDb.deleteInstance(key, { useJsNames: true });
646
+ const key = { ECInstanceId: props.ECInstanceId, ECClassId: props.ECClassId }; // eslint-disable-line @typescript-eslint/naming-convention
647
+ const isSuccess = nativeDb.deleteInstance(key, { convertClassIdsToClassNames: true });
648
648
  if (!isSuccess)
649
- throw new IModelError(IModelStatus.BadRequest, `Failed to delete instance with id ${props.id}`);
649
+ throw new IModelError(IModelStatus.BadRequest, `Failed to delete instance with id ${props.ECInstanceId}`);
650
650
  break;
651
651
  }
652
652
  default:
@@ -907,7 +907,7 @@ export class TxnManager {
907
907
  // so using strict mode will cause error in this case when we will try to capture changes for first txn
908
908
  // because the number of columns in table A will be different than what it was when the changes were originally made.
909
909
  // So to avoid this issue we are not using strict mode here.
910
- const reader = __addDisposableResource(env_1, ChangesetReader.openTxn({ db: this._iModel, txnId: id, rowOptions: { useJsName: true, abbreviateBlobs: false } }), false);
910
+ const reader = __addDisposableResource(env_1, ChangesetReader.openTxn({ db: this._iModel, txnId: id, rowOptions: { classIdsToClassNames: true, abbreviateBlobs: false } }), false);
911
911
  const pcu = __addDisposableResource(env_1, new PartialChangeUnifier(ChangeUnifierCache.createSqliteBackedCache()), false);
912
912
  while (reader.step()) {
913
913
  pcu.appendFrom(reader);
@@ -1010,12 +1010,9 @@ export class TxnManager {
1010
1010
  Logger.logInfo(BackendLoggerCategory.IModelDb, "dgn_Domain insert conflict during rebase. Keeping the merged row and skipping the local change.", getChangeMetaData());
1011
1011
  return DbConflictResolution.Skip;
1012
1012
  }
1013
+ // Where schema sync is in use, native has already resolved ec_ rows by comparing sync db
1014
+ // versions before we get here.
1013
1015
  if (args.cause === "Data" && !args.indirect) {
1014
- if (args.tableName === "be_Prop") {
1015
- if (args.getValueText(0, "Old") === "ec_Db" && args.getValueText(1, "Old") === "localDbInfo") {
1016
- return DbConflictResolution.Skip;
1017
- }
1018
- }
1019
1016
  if (args.tableName.startsWith("ec_")) {
1020
1017
  return DbConflictResolution.Skip;
1021
1018
  }
@@ -1024,6 +1021,12 @@ export class TxnManager {
1024
1021
  if (args.tableName.startsWith("ec_")) {
1025
1022
  return DbConflictResolution.Skip;
1026
1023
  }
1024
+ // Skip PRIMARY KEY conflicts for inserted rows that were pre-reserved via SchemaSync - these are the same shared element.
1025
+ const isReserved = (id) => typeof id === "string" && Id64.getBriefcaseId(id) === BriefcaseIdValue.SchemaSyncElementReserved;
1026
+ const pkValues = args.getPrimaryKeyValues();
1027
+ if (args.opcode === "Inserted" && pkValues.length > 0 && pkValues.every(isReserved)) {
1028
+ return DbConflictResolution.Skip;
1029
+ }
1027
1030
  }
1028
1031
  try {
1029
1032
  const resolution = this.rebaser.onConflict(args);