public void AddIndex() { var previousTable1 = GetTable1(); var previousTable2 = GetTable2(); var previous = new List <Statement>() { previousTable1, previousTable2, }; var nextTable1 = GetTable1(); var nextTable2 = GetTable2(); var next = new List <Statement>() { nextTable1, nextTable2, }; previousTable1.Columns.RemoveAll(c => c is TableKey cc && cc.Name == "test_key_1"); var upSql = DatabaseDiff.Diff(next, previous); Assert.AreEqual("CREATE UNIQUE INDEX `test_key_1` ON `test` (`inventory`);\r\n", upSql); var downSql = DatabaseDiff.Diff(previous, next); Console.WriteLine(downSql); Assert.AreEqual("DROP INDEX `test_key_1` ON `test`;\r\n", downSql); }
public void AddConstraint() { var previousTable1 = GetTable1(); var previousTable2 = GetTable2(); var previous = new List <Statement>() { previousTable1, previousTable2, }; var nextTable1 = GetTable1(); var nextTable2 = GetTable2(); var next = new List <Statement>() { nextTable1, nextTable2, }; previousTable1.Columns.RemoveAll(c => c is TableConstraint cc && cc.Name == "test_constraint_1"); var upSql = DatabaseDiff.Diff(next, previous); Assert.AreEqual("ALTER TABLE `test` ADD CONSTRAINT `test_constraint_1` FOREIGN KEY (`other_id`) REFERENCES `other` (`other_id`) ON UPDATE RESTRICT ON DELETE RESTRICT;\r\n", upSql); var downSql = DatabaseDiff.Diff(previous, next); Assert.AreEqual("ALTER TABLE `test` DROP FOREIGN KEY `test_constraint_1`;\r\n", downSql); }
public void AddColumn() { var previousTable1 = GetTable1(); var previousTable2 = GetTable2(); var previous = new List <Statement>() { previousTable1, previousTable2, }; var nextTable1 = GetTable1(); var nextTable2 = GetTable2(); var next = new List <Statement>() { nextTable1, nextTable2, }; previousTable1.Columns.RemoveAll(c => c is TableColumn cc && cc.Name == "name"); var upSql = DatabaseDiff.Diff(next, previous); Assert.AreEqual("ALTER TABLE `test` ADD COLUMN `name` varchar(127);\r\n", upSql); var downSql = DatabaseDiff.Diff(previous, next); Assert.AreEqual("ALTER TABLE `test` DROP COLUMN `name`;\r\n", downSql); }
public void InsertRowAndChangePk() { var previousTable1 = GetTable1(); var previousTable2 = GetTable2(); var previous = new List <Statement>() { GetTable1(), GetTable2(), // GetInsert1(), }; var nextTable1 = GetTable1(); var nextTable2 = GetTable2(); var next = new List <Statement>() { nextTable1, nextTable2, GetInsert1(), }; var pk = (TableKey)nextTable1.Columns.Where(c => c is TableKey ck && ck.Primary).First(); pk.Columns.Add("shelf_id"); var upSql = DatabaseDiff.Diff(next, previous); Assert.AreEqual(ReadEmbeddedRessourceToString("InsertRowAndChangePk.up.sql"), upSql); var downSql = DatabaseDiff.Diff(previous, next); Assert.AreEqual("DELETE FROM `test` WHERE `test_id` = 1;\r\n\r\nDELETE FROM `test` WHERE `test_id` = 2;\r\n\r\n", downSql); }
public void InsertRow() { var previous = new List <Statement>() { GetTable1(), GetTable2(), // GetInsert1(), }; var nextTable1 = GetTable1(); var nextTable2 = GetTable2(); var next = new List <Statement>() { nextTable1, nextTable2, GetInsert1(), }; var upSql = DatabaseDiff.Diff(next, previous); Assert.AreEqual("INSERT INTO `test`(\r\n`test_id`, `shelf_id`, `name`, `inventory`) VALUES\r\n(1, DEFAULT, \"Name1\", DEFAULT),\r\n(2, DEFAULT, \"Name2\", DEFAULT);\r\n\r\n", upSql); var downSql = DatabaseDiff.Diff(previous, next); Assert.AreEqual("DELETE FROM `test` WHERE `test_id` = 1;\r\n\r\nDELETE FROM `test` WHERE `test_id` = 2;\r\n\r\n", downSql); }
public static void RegisterWithApp(CommandLineApplication app) { app.Command("diff", cmdApp => { cmdApp.Description = "Generates SQL with the difference between the source and target projects." + Environment.NewLine + "Used to generate up/down migration SQL, or SQL to rebuild a database from scratch (using --source null)." + Environment.NewLine + "The generated SQL can be executed by the MySQL command line client."; var sourceOptions = RegisterProjectOptions(cmdApp, "source"); var targetOptions = RegisterProjectOptions(cmdApp, "target"); cmdApp.OnExecute(() => { var sourceProject = GetProjectFromArguments(cmdApp, "source", sourceOptions); if (sourceProject == null) { return(1); } var targetProject = GetProjectFromArguments(cmdApp, "target", targetOptions); if (targetProject == null) { return(2); } var sql = DatabaseDiff.Diff(targetProject.Statements, sourceProject.Statements); Console.WriteLine(sql); return(0); }); }); }