public ScriptTokenProcessor(CommonScript script, ScriptDbObject dbObject, DbInterpreter sourceInterpreter, DbInterpreter targetInterpreter) { this.Script = script; this.DbObject = dbObject; this.SourceInterpreter = sourceInterpreter; this.TargetInterpreter = targetInterpreter; }
public List <Script> GenereateScriptDbObjectChangedScripts(DbDifference difference, string targetDbOwner) { List <Script> scripts = new List <Script>(); DbDifferenceType diffType = difference.DifferenceType; ScriptDbObject sourceScriptDbObject = difference.Source as ScriptDbObject; ScriptDbObject targetScriptDbObject = difference.Target as ScriptDbObject; if (diffType == DbDifferenceType.Added) { var cloneObj = this.CloneDbObject(sourceScriptDbObject, targetDbOwner); scripts.Add(new CreateDbObjectScript <ScriptDbObject>(cloneObj.Definition)); } else if (diffType == DbDifferenceType.Deleted) { scripts.Add(this.targetScriptGenerator.Drop(sourceScriptDbObject)); } else if (diffType == DbDifferenceType.Modified) { var cloneObj = this.CloneDbObject(sourceScriptDbObject, targetScriptDbObject.Owner); scripts.Add(this.targetScriptGenerator.Drop(targetScriptDbObject)); scripts.Add(this.targetScriptGenerator.Add(cloneObj)); } return(scripts); }
public void Validate(ScriptDbObject script) { if (sourceDbType == DatabaseType.SqlServer && targetDbType != DatabaseType.SqlServer) { //ANTRL can't handle "top 100 percent" correctly. Regex regex = new Regex(@"(TOP[\s]+100[\s]+PERCENT)", RegexOptions.IgnoreCase); if (regex.IsMatch(script.Definition)) { script.Definition = regex.Replace(script.Definition, ""); } } if (script.Owner != this.TargetDbOwner) { Regex ownerRegex = new Regex($@"[{this.sourceDbInterpreter.QuotationLeftChar}]({script.Owner})[{this.sourceDbInterpreter.QuotationRightChar}][\.]", RegexOptions.IgnoreCase); if (ownerRegex.IsMatch(script.Definition)) { script.Definition = ownerRegex.Replace(script.Definition, ""); } } }