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 bool Execute(ConversionScriptResult scriptResult) { var identifiers = scriptResult.Data.SelectMany(x => x.Value).Select(x => x.DocumentId).Distinct().ToList(); foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { // first, delete all the rows that might already exist there DeleteItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, identifiers); } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List <ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) { continue; } InsertItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable); } Commit(); return(hadErrors == false); }
public bool Execute(ConversionScriptResult scriptResult) { foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { if (sqlReplicationTable.InsertOnlyMode) { continue; } // first, delete all the rows that might already exist there DeleteItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, scriptResult.Ids); } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List <ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) { continue; } InsertItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable); } Commit(); return(hadErrors == false); }
public IEnumerable<string> SimulateExecuteCommandText(ConversionScriptResult scriptResult) { var identifiers = scriptResult.Data.SelectMany(x => x.Value).Select(x => x.DocumentId).Distinct().ToList(); foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { // first, delete all the rows that might already exist there foreach (string deleteQuery in GenerateDeleteItemsCommandText(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, identifiers)) { yield return deleteQuery; } } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List<ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) continue; foreach (string insertQuery in GenerteInsertItemCommandText(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable)) { yield return insertQuery; } } }
public IEnumerable <string> SimulateExecuteCommandText(ConversionScriptResult scriptResult) { foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { if (sqlReplicationTable.InsertOnlyMode) { continue; } // first, delete all the rows that might already exist there foreach (string deleteQuery in GenerateDeleteItemsCommandText(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, scriptResult.Ids)) { yield return(deleteQuery); } } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List <ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) { continue; } foreach (string insertQuery in GenerteInsertItemCommandText(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable)) { yield return(insertQuery); } } }
public SqlReplicationScriptedJsonPatcher(DocumentDatabase database, ConversionScriptResult scriptResult, SqlReplicationConfig config, string docId) : base(database) { this.scriptResult = scriptResult; this.config = config; this.docId = docId; }
private ConversionScriptResult ApplyConversionScript(SqlReplicationConfig cfg, IEnumerable <JsonDocument> docs) { var replicationStats = statistics.GetOrAdd(cfg.Name, name => new SqlReplicationStatistics(name)); var result = new ConversionScriptResult(); foreach (var jsonDocument in docs) { Database.WorkContext.CancellationToken.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(cfg.RavenEntityName) == false) { var entityName = jsonDocument.Metadata.Value <string>(Constants.RavenEntityName); if (string.Equals(cfg.RavenEntityName, entityName, StringComparison.InvariantCultureIgnoreCase) == false) { continue; } } var patcher = new SqlReplicationScriptedJsonPatcher(Database, result, cfg, jsonDocument.Key); using (var scope = new SqlReplicationScriptedJsonPatcherOperationScope(Database)) { try { DocumentRetriever.EnsureIdInMetadata(jsonDocument); var document = jsonDocument.ToJson(); document[Constants.DocumentIdFieldName] = jsonDocument.Key; patcher.Apply(scope, document, new ScriptedPatchRequest { Script = cfg.Script }, jsonDocument.SerializedSizeOnDisk); if (log.IsDebugEnabled && patcher.Debug.Count > 0) { log.Debug("Debug output for doc: {0} for script {1}:\r\n.{2}", jsonDocument.Key, cfg.Name, string.Join("\r\n", patcher.Debug)); patcher.Debug.Clear(); } replicationStats.ScriptSuccess(); } catch (ParseException e) { replicationStats.MarkScriptAsInvalid(Database, cfg.Script); log.WarnException("Could not parse SQL Replication script for " + cfg.Name, e); return(result); } catch (Exception e) { replicationStats.RecordScriptError(Database); log.WarnException("Could not process SQL Replication script for " + cfg.Name + ", skipping document: " + jsonDocument.Key, e); } } } return(result); }
private ConversionScriptResult ApplyConversionScript(SqlReplicationConfig cfg, IEnumerable <JsonDocument> docs) { var replicationStats = statistics.GetOrAdd(cfg.Name, name => new SqlReplicationStatistics(name)); var result = new ConversionScriptResult(); foreach (var jsonDocument in docs) { if (string.IsNullOrEmpty(cfg.RavenEntityName) == false) { var entityName = jsonDocument.Metadata.Value <string>(Constants.RavenEntityName); if (string.Equals(cfg.RavenEntityName, entityName, StringComparison.InvariantCultureIgnoreCase) == false) { continue; } } var patcher = new SqlReplicationScriptedJsonPatcher(Database, result, cfg, jsonDocument.Key); try { DocumentRetriever.EnsureIdInMetadata(jsonDocument); jsonDocument.Metadata[Constants.DocumentIdFieldName] = jsonDocument.Key; var document = jsonDocument.ToJson(); patcher.Apply(document, new ScriptedPatchRequest { Script = cfg.Script }); replicationStats.ScriptSuccess(); } catch (ParseException e) { replicationStats.MarkScriptAsInvalid(Database, cfg.Script); log.WarnException("Could parse SQL Replication script for " + cfg.Name, e); return(result); } catch (Exception e) { replicationStats.RecordScriptError(Database); log.WarnException("Could not process SQL Replication script for " + cfg.Name + ", skipping this document", e); } } return(result); }
public bool Execute(ConversionScriptResult scriptResult) { var identifiers = scriptResult.Data.SelectMany(x => x.Value).Select(x => x.DocumentId).Distinct().ToList(); foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { // first, delete all the rows that might already exist there DeleteItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, identifiers); } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List<ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) continue; InsertItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable); } Commit(); return hadErrors == false; }
private ConversionScriptResult ApplyConversionScript(SqlReplicationConfig cfg, IEnumerable<JsonDocument> docs) { var replicationStats = statistics.GetOrAdd(cfg.Name, name => new SqlReplicationStatistics(name)); var result = new ConversionScriptResult(); foreach (var jsonDocument in docs) { if (string.IsNullOrEmpty(cfg.RavenEntityName) == false) { var entityName = jsonDocument.Metadata.Value<string>(Constants.RavenEntityName); if (string.Equals(cfg.RavenEntityName, entityName, StringComparison.InvariantCultureIgnoreCase) == false) continue; } var patcher = new SqlReplicationScriptedJsonPatcher(Database, result, cfg, jsonDocument.Key); try { DocumentRetriever.EnsureIdInMetadata(jsonDocument); jsonDocument.Metadata[Constants.DocumentIdFieldName] = jsonDocument.Key; var document = jsonDocument.ToJson(); patcher.Apply(document, new ScriptedPatchRequest { Script = cfg.Script }); replicationStats.ScriptSuccess(); } catch (ParseException e) { replicationStats.MarkScriptAsInvalid(Database, cfg.Script); log.WarnException("Could parse SQL Replication script for " + cfg.Name, e); return result; } catch (Exception e) { replicationStats.RecordScriptError(Database); log.WarnException("Could not process SQL Replication script for " + cfg.Name + ", skipping this document", e); } } return result; }
private ConversionScriptResult ApplyConversionScript(SqlReplicationConfig cfg, IEnumerable<JsonDocument> docs) { var replicationStats = statistics.GetOrAdd(cfg.Name, name => new SqlReplicationStatistics(name)); var result = new ConversionScriptResult(); foreach (var jsonDocument in docs) { Database.WorkContext.CancellationToken.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(cfg.RavenEntityName) == false) { var entityName = jsonDocument.Metadata.Value<string>(Constants.RavenEntityName); if (string.Equals(cfg.RavenEntityName, entityName, StringComparison.InvariantCultureIgnoreCase) == false) continue; } var patcher = new SqlReplicationScriptedJsonPatcher(Database, result, cfg, jsonDocument.Key); try { DocumentRetriever.EnsureIdInMetadata(jsonDocument); var document = jsonDocument.ToJson(); document[Constants.DocumentIdFieldName] = jsonDocument.Key; patcher.Apply(document, new ScriptedPatchRequest { Script = cfg.Script }, jsonDocument.SerializedSizeOnDisk); if (log.IsDebugEnabled && patcher.Debug.Count > 0) { log.Debug("Debug output for doc: {0} for script {1}:\r\n.{2}", jsonDocument.Key, cfg.Name, string.Join("\r\n", patcher.Debug)); patcher.Debug.Clear(); } replicationStats.ScriptSuccess(); } catch (ParseException e) { replicationStats.MarkScriptAsInvalid(Database, cfg.Script); log.WarnException("Could not parse SQL Replication script for " + cfg.Name, e); return result; } catch (Exception e) { replicationStats.RecordScriptError(Database); log.WarnException("Could not process SQL Replication script for " + cfg.Name + ", skipping document: " + jsonDocument.Key, e); } } return result; }
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 bool Execute(ConversionScriptResult scriptResult) { foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { if(sqlReplicationTable.InsertOnlyMode) continue; // first, delete all the rows that might already exist there DeleteItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, cfg.ParameterizeDeletesDisabled, scriptResult.Ids); } foreach (var sqlReplicationTable in cfg.SqlReplicationTables) { List<ItemToReplicate> dataForTable; if (scriptResult.Data.TryGetValue(sqlReplicationTable.TableName, out dataForTable) == false) continue; InsertItems(sqlReplicationTable.TableName, sqlReplicationTable.DocumentKeyColumn, dataForTable); } Commit(); return hadErrors == false; }
private ConversionScriptResult ApplyConversionScript(SqlReplicationConfig cfg, IEnumerable<ReplicatedDoc> docs, SqlReplicationStatistics replicationStats) { var result = new ConversionScriptResult(); foreach (var replicatedDoc in docs) { Database.WorkContext.CancellationToken.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(cfg.RavenEntityName) == false) { var entityName = replicatedDoc.Document[Constants.Metadata].Value<string>(Constants.RavenEntityName); if (string.Equals(cfg.RavenEntityName, entityName, StringComparison.InvariantCultureIgnoreCase) == false) continue; } var patcher = new SqlReplicationScriptedJsonPatcher(Database, result, cfg, replicatedDoc.Key); using (var scope = new SqlReplicationScriptedJsonPatcherOperationScope(Database)) { try { patcher.Apply(scope, replicatedDoc.Document, new ScriptedPatchRequest { Script = cfg.Script }, replicatedDoc.SerializedSizeOnDisk); if (Log.IsDebugEnabled && patcher.Debug.Count > 0) { Log.Debug("Debug output for doc: {0} for script {1}:\r\n.{2}", replicatedDoc.Key, cfg.Name, string.Join("\r\n", patcher.Debug)); patcher.Debug.Clear(); } replicationStats.ScriptSuccess(); } catch (ParseException e) { replicationStats.MarkScriptAsInvalid(Database, cfg.Script); Log.WarnException("Could not parse SQL Replication script for " + cfg.Name, e); return result; } catch (Exception diffExceptionName) { replicationStats.RecordScriptError(Database, diffExceptionName); Log.WarnException("Could not process SQL Replication script for " + cfg.Name + ", skipping document: " + replicatedDoc.Key, diffExceptionName); } } } return result; }