Пример #1
0
        /// <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)));
        }