/// <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))); }