public static DwhTableBuilder[] InputIsSourceTable(this DwhTableBuilder[] builders, RelationalModel sourceSchema, NamedConnectionString sourceConnectionString, AdoNetReaderConnectionScope readerScope, SourceReadSqlStatementCustomizerDelegate sqlStatementCustomizer = null, string customWhereClause = null) { foreach (var builder in builders) { builder.SetInputProcessCreator(maxRecordTimestamp => CreateSourceTableInputProcess(builder, maxRecordTimestamp, sourceSchema, sourceConnectionString, readerScope, sqlStatementCustomizer, customWhereClause)); } return(builders); }
private static IProducer CreateSourceTableInputProcess(DwhTableBuilder builder, DateTimeOffset?maxRecordTimestamp, RelationalModel sourceModel, NamedConnectionString sourceConnectionString, AdoNetReaderConnectionScope readerScope, SourceReadSqlStatementCustomizerDelegate sqlStatementCustomizer, string customWhereClause) { var whereClauseList = new List <string>(); if (customWhereClause != null) { whereClauseList.Add(customWhereClause); } var parameterList = new Dictionary <string, object>(); sqlStatementCustomizer?.Invoke(builder, whereClauseList, parameterList); if (maxRecordTimestamp != null) { whereClauseList.Add(builder.Table.GetRecordTimestampIndicatorColumn().NameEscaped(builder.DwhBuilder.ConnectionString) + " >= @MaxRecordTimestamp"); parameterList.Add("MaxRecordTimestamp", maxRecordTimestamp.Value); } var sourceTableName = builder.Table.GetSourceTableNameOverride() ?? builder.Table.Name; var sourceSqlTable = sourceModel[builder.Table.Schema.Name] != null ? sourceModel[builder.Table.Schema.Name][sourceTableName] : sourceModel.DefaultSchema[sourceTableName]; return(new AdoNetDbReader(builder.ResilientTable.Scope.Context) { Name = "SourceTableReader", ConnectionString = sourceConnectionString, CustomConnectionCreator = readerScope != null ? readerScope.GetConnection : null, TableName = sourceSqlTable.EscapedName(builder.DwhBuilder.ConnectionString), CustomWhereClause = whereClauseList.Count == 0 ? null : string.Join(" and ", whereClauseList), Parameters = parameterList, Columns = sourceSqlTable.Columns.ToDictionary(column => column.Name, column => new ReaderColumnConfiguration(null)), }); }
private static IEvaluable CreateSourceTableInputProcess(DwhTableBuilder builder, DateTimeOffset?maxRecordTimestamp, RelationalModel sourceModel, NamedConnectionString sourceConnectionString, AdoNetReaderConnectionScope readerScope, SourceReadSqlStatementCustomizerDelegate sqlStatementCustomizer, string customWhereClause) { var whereClauseList = new List <string>(); if (customWhereClause != null) { whereClauseList.Add(customWhereClause); } var parameterList = new Dictionary <string, object>(); sqlStatementCustomizer?.Invoke(builder, whereClauseList, parameterList); if (maxRecordTimestamp != null) { whereClauseList.Add(builder.Table.GetRecordTimestampIndicatorColumn().NameEscaped(builder.DwhBuilder.ConnectionString) + " >= @MaxRecordTimestamp"); parameterList.Add("MaxRecordTimestamp", maxRecordTimestamp.Value); } var sourceTableName = builder.Table.GetSourceTableNameOverride() ?? builder.Table.Name; var sourceSqlTable = sourceModel[builder.Table.Schema.Name] != null ? sourceModel[builder.Table.Schema.Name][sourceTableName] : sourceModel.DefaultSchema[sourceTableName]; return(new AdoNetDbReader(builder.ResilientTable.Topic, "SourceTableReader") { ConnectionString = sourceConnectionString, CustomConnectionCreator = readerScope != null ? readerScope.GetConnection : (ConnectionCreatorDelegate)null, TableName = sourceSqlTable.EscapedName(builder.DwhBuilder.ConnectionString), CustomWhereClause = whereClauseList.Count == 0 ? null : string.Join(" and ", whereClauseList), Parameters = parameterList, ColumnConfiguration = sourceSqlTable.Columns.Select(column => new ReaderColumnConfiguration(column.Name, null, /*GetConverter(column.Type.SqlTypeInfo), */ NullSourceHandler.SetSpecialValue, InvalidSourceHandler.WrapError) ).ToList(), }); }