/// <summary> /// Check then add primary keys to schema table /// </summary> private async Task SetPrimaryKeysAsync(SyncTable schemaTable, DbTableBuilder tableBuilder, DbConnection connection, DbTransaction transaction) { // Get PrimaryKey var schemaPrimaryKeys = await tableBuilder.GetPrimaryKeysAsync(connection, transaction).ConfigureAwait(false); if (schemaPrimaryKeys == null || schemaPrimaryKeys.Any() == false) { throw new MissingPrimaryKeyException(schemaTable.TableName); } // Set the primary Key foreach (var rowColumn in schemaPrimaryKeys.OrderBy(r => r.Ordinal)) { // Find the column in the schema columns var columnKey = schemaTable.Columns.FirstOrDefault(sc => sc.EqualsByName(rowColumn)); if (columnKey == null) { throw new MissingPrimaryKeyColumnException(rowColumn.ColumnName, schemaTable.TableName); } schemaTable.PrimaryKeys.Add(columnKey.ColumnName); } }
/// <summary> /// Check then add primary keys to schema table /// </summary> private async Task SetPrimaryKeysAsync(SyncTable schemaTable, DbTableBuilder tableBuilder, DbConnection connection, DbTransaction transaction) { // Get PrimaryKey var schemaPrimaryKeys = await tableBuilder.GetPrimaryKeysAsync(connection, transaction).ConfigureAwait(false); if (schemaPrimaryKeys == null || schemaPrimaryKeys.Any() == false) { throw new MissingPrimaryKeyException(schemaTable.TableName); } // Set the primary Key foreach (var rowColumn in schemaPrimaryKeys.OrderBy(r => r.Ordinal)) { // Find the column in the schema columns var columnKey = schemaTable.Columns.FirstOrDefault(sc => sc.EqualsByName(rowColumn)); if (columnKey == null) { throw new MissingPrimaryKeyColumnException(rowColumn.ColumnName, schemaTable.TableName); } var columnNameLower = columnKey.ColumnName.ToLowerInvariant(); if (columnNameLower == "update_scope_id" || columnNameLower == "timestamp" || columnNameLower == "timestamp_bigint" || columnNameLower == "sync_row_is_tombstone" || columnNameLower == "last_change_datetime" ) { throw new UnsupportedPrimaryKeyColumnNameException(schemaTable.GetFullName(), columnKey.ColumnName, columnKey.OriginalTypeName, this.Provider.GetProviderTypeName()); } schemaTable.PrimaryKeys.Add(columnKey.ColumnName); } }