/// <summary> /// Load the Batch part info in memory, in a SyncTable /// </summary> internal virtual Task <(SyncContext context, SyncTable syncTable)> InternalLoadTableFromBatchInfoAsync( SyncContext context, BatchInfo batchInfo, string tableName, string schemaName = default, DataRowState?dataRowState = default) { if (batchInfo == null || batchInfo.SanitizedSchema == null) { return(Task.FromResult <(SyncContext, SyncTable)>((context, null))); } // get the sanitazed table (without any readonly / non updatable columns) from batchinfo var schemaTable = batchInfo.SanitizedSchema.Tables[tableName, schemaName]; var table = schemaTable.Clone(); var localSerializer = new LocalJsonSerializer(); var interceptorsReading = this.interceptors.GetInterceptors <DeserializingRowArgs>(); if (interceptorsReading.Count > 0) { localSerializer.OnReadingRow(async(schemaTable, rowString) => { var args = new DeserializingRowArgs(context, schemaTable, rowString); await this.InterceptAsync(args).ConfigureAwait(false); return(args.Result); }); } // Gets all BPI containing this table foreach (var bpi in batchInfo.GetBatchPartsInfo(tableName, schemaName)) { // Get full path of my batchpartinfo var fullPath = batchInfo.GetBatchPartInfoPath(bpi).FullPath; if (!File.Exists(fullPath)) { continue; } if (bpi.Tables == null || bpi.Tables.Count() < 1) { return(Task.FromResult <(SyncContext, SyncTable)>((context, null))); } foreach (var syncRow in localSerializer.ReadRowsFromFile(fullPath, schemaTable)) { if (!dataRowState.HasValue || dataRowState == default || syncRow.RowState == dataRowState) { table.Rows.Add(syncRow); } } } return(Task.FromResult((context, table))); }
/// <summary> /// Load the Batch part info in memory, in a SyncTable /// </summary> internal Task <SyncTable> InternalLoadTableFromBatchPartInfoAsync(SyncContext context, BatchInfo batchInfo, BatchPartInfo batchPartInfo, DataRowState?dataRowState = default) { if (batchInfo == null || batchInfo.SanitizedSchema == null) { return(Task.FromResult <SyncTable>(null)); } var localSerializer = new LocalJsonSerializer(); // Get full path of my batchpartinfo var fullPath = batchInfo.GetBatchPartInfoPath(batchPartInfo).FullPath; if (!File.Exists(fullPath)) { return(Task.FromResult <SyncTable>(null)); } if (batchPartInfo.Tables == null || batchPartInfo.Tables.Count() < 1) { return(Task.FromResult <SyncTable>(null)); } var schemaTable = batchInfo.SanitizedSchema.Tables[batchPartInfo.Tables[0].TableName, batchPartInfo.Tables[0].SchemaName]; var table = schemaTable.Clone(); var interceptorsReading = this.interceptors.GetInterceptors <DeserializingRowArgs>(); if (interceptorsReading.Count > 0) { localSerializer.OnReadingRow(async(schemaTable, rowString) => { var args = new DeserializingRowArgs(context, schemaTable, rowString); await this.InterceptAsync(args).ConfigureAwait(false); return(args.Result); }); } foreach (var syncRow in localSerializer.ReadRowsFromFile(fullPath, schemaTable)) { if (!dataRowState.HasValue || dataRowState == default || syncRow.RowState == dataRowState) { table.Rows.Add(syncRow); } } return(Task.FromResult(table)); }
internal async Task <SyncContext> InternalSaveTableToBatchPartInfoAsync(SyncContext context, BatchInfo batchInfo, BatchPartInfo batchPartInfo, SyncTable syncTable) { var localSerializer = new LocalJsonSerializer(); // Get full path of my batchpartinfo var fullPath = batchInfo.GetBatchPartInfoPath(batchPartInfo).FullPath; if (File.Exists(fullPath)) { File.Delete(fullPath); } var interceptorsWriting = this.interceptors.GetInterceptors <SerializingRowArgs>(); if (interceptorsWriting.Count > 0) { localSerializer.OnWritingRow(async(schemaTable, rowArray) => { var args = new SerializingRowArgs(context, schemaTable, rowArray); await this.InterceptAsync(args).ConfigureAwait(false); return(args.Result); }); } // open the file and write table header await localSerializer.OpenFileAsync(fullPath, syncTable).ConfigureAwait(false); foreach (var row in syncTable.Rows) { await localSerializer.WriteRowToFileAsync(row, syncTable).ConfigureAwait(false); } // Close file await localSerializer.CloseFileAsync(fullPath, syncTable).ConfigureAwait(false); return(context); }