public IEnumerable <TableQuerySummary> RolledBackExecute(ConversionScriptResult scriptResult) { var identifiers = scriptResult.Data.SelectMany(x => x.Value).Select(x => x.DocumentId).Distinct().ToList(); // first, delete all the rows that might already exist there foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { var commands = new List <DbCommand>(); DeleteItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, identifiers, commands.Add); yield return(TableQuerySummary.GenerateSummaryFromCommands(sqlReplicationTable.TableName, commands)); } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List <ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) { continue; } var commands = new List <DbCommand>(); InsertItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable, commands.Add); yield return(TableQuerySummary.GenerateSummaryFromCommands(sqlReplicationTable.TableName, commands)); } Rollback(); }
public SqlEtlTestScriptResult RunTest(DocumentsOperationContext context, IEnumerable <SqlTableWithRecords> toWrite, bool performRolledBackTransaction) { var summaries = new List <TableQuerySummary>(); if (performRolledBackTransaction) { try { using (var writer = new RelationalDatabaseWriter(this, Database)) { foreach (var records in toWrite) { var commands = new List <DbCommand>(); writer.Write(records, commands, CancellationToken); summaries.Add(TableQuerySummary.GenerateSummaryFromCommands(records.TableName, commands)); } writer.Rollback(); } } catch (Exception e) { Statistics.RecordLoadError(e.ToString(), documentId: null, count: 1); } } else { var simulatedWriter = new RelationalDatabaseWriterSimulator(Configuration); foreach (var records in toWrite) { var commands = simulatedWriter.SimulateExecuteCommandText(records, CancellationToken).Select(x => new TableQuerySummary.CommandData { CommandText = x }).ToArray(); summaries.Add(new TableQuerySummary { TableName = records.TableName, Commands = commands }); } } return(new SqlEtlTestScriptResult { TransformationErrors = Statistics.TransformationErrorsInCurrentBatch.Errors.ToList(), LoadErrors = Statistics.LastLoadErrorsInCurrentBatch.Errors.ToList(), SlowSqlWarnings = Statistics.LastSlowSqlWarningsInCurrentBatch.Statements.ToList(), Summary = summaries }); }
public SqlEtlSimulationResult Simulate(SimulateSqlEtl simulateSqlEtl, DocumentsOperationContext context, IEnumerable <SqlTableWithRecords> toWrite) { var summaries = new List <TableQuerySummary>(); if (simulateSqlEtl.PerformRolledBackTransaction) { using (var writer = new RelationalDatabaseWriter(this, Database)) { foreach (var records in toWrite) { var commands = new List <DbCommand>(); writer.Write(records, commands, CancellationToken); summaries.Add(TableQuerySummary.GenerateSummaryFromCommands(records.TableName, commands)); } writer.Rollback(); } } else { var simulatedwriter = new RelationalDatabaseWriterSimulator(Configuration); foreach (var records in toWrite) { var commands = simulatedwriter.SimulateExecuteCommandText(records, CancellationToken).Select(x => new TableQuerySummary.CommandData { CommandText = x }).ToArray(); summaries.Add(new TableQuerySummary { TableName = records.TableName, Commands = commands }); } } return(new SqlEtlSimulationResult { LastAlert = Statistics.LastAlert, Summary = summaries }); }