private NumberedTextScript buildScript(int major, int minor, FileInfo file, int counter) { Tuple <String, String> pair = file.Name.splitAt(" "); string scriptNumberText = pair.Item1.Trim(); string description = pair.Item2.Trim(); // Parses script number long scriptNumber; if (!long.TryParse(scriptNumberText, out scriptNumber)) { throw new ArgumentException(String.Format("Invalid script number format: {0} for file: {1}", scriptNumberText, file.FullName)); } // cleans up description if (description.StartsWith("-")) { description = description.Substring(1).Trim(); } if (description.EndsWith(".sql", StringComparison.CurrentCultureIgnoreCase)) { description = description.Substring(0, description.Length - 4); } NumberedTextScript result = new NumberedTextScript(file, major, minor, scriptNumber, description); // Checks sequential number, if a number is provided. Anything greater than 1000 is assumed to be a timestamp and sequence isn't enforced if (result.Version.IsPatchNumeric && scriptNumber != counter) { throw new ArgumentException(String.Format("Script number: {0} doesn't match expected value: {1} for file: {2}", scriptNumber, counter, file.FullName)); } return(result); }
public static int executeSqlFile(Options options) { try { SqlDatabase scriptTarget = new SqlDatabase(options); options.SkipVersion = true; // turns off setting patch version since file is free form sql FileInfo file = new FileInfo(options.Path); IScript <ITextScriptTarget> script = new NumberedTextScript(file, 0, 0, 0, ""); script.apply(scriptTarget, options); return(0); } catch (Exception ex) { WriteMessage(Assembly.GetExecutingAssembly().FullName, string.Empty, Category.error, "1", ex.ToString()); return(1); } }
public int CompareTo(object obj) { NumberedTextScript other = (NumberedTextScript)obj; return(Version.CompareTo(other.Version)); }