public void DumpIncrementalSchemaDefinition() { if (!TestHelper.GetDlcPath(out string dlcPath)) { return; } // create 2 .df var prevDfPath = Path.Combine(TestFolder, "df_previous.df"); File.WriteAllText(prevDfPath, "ADD SEQUENCE \"sequence1\"\n INITIAL 0\n INCREMENT 1\n CYCLE-ON-LIMIT no\n\nADD TABLE \"table1\"\n AREA \"Schema Area\"\n DESCRIPTION \"table one\"\n DUMP-NAME \"table1\"\n\nADD FIELD \"field1\" OF \"table1\" AS character \n DESCRIPTION \"field one\"\n FORMAT \"x(8)\"\n INITIAL \"\"\n POSITION 2\n MAX-WIDTH 16\n ORDER 10\n\nADD FIELD \"field2\" OF \"table1\" AS character \n DESCRIPTION \"field two\"\n FORMAT \"x(8)\"\n INITIAL \"\"\n POSITION 3\n MAX-WIDTH 16\n ORDER 20\n\nADD INDEX \"idx_1\" ON \"table1\" \n AREA \"Schema Area\"\n PRIMARY\n INDEX-FIELD \"field1\" ASCENDING\n"); var newDfPath = Path.Combine(TestFolder, "df_new.df"); File.WriteAllText(newDfPath, "ADD SEQUENCE \"sequence2\"\n INITIAL 0\n INCREMENT 1\n CYCLE-ON-LIMIT no\n\nADD TABLE \"table1\"\n AREA \"Schema Area\"\n DESCRIPTION \"table one\"\n DUMP-NAME \"table1\"\n\nADD FIELD \"field1\" OF \"table1\" AS character \n DESCRIPTION \"field one\"\n FORMAT \"x(8)\"\n INITIAL \"\"\n POSITION 2\n MAX-WIDTH 16\n ORDER 10\n\nADD FIELD \"field3\" OF \"table1\" AS character \n DESCRIPTION \"field three\"\n FORMAT \"x(8)\"\n INITIAL \"\"\n POSITION 3\n MAX-WIDTH 16\n ORDER 20\n\nADD TABLE \"table2\"\n AREA \"Schema Area\"\n DESCRIPTION \"table two\"\n DUMP-NAME \"table2\"\n\nADD FIELD \"field1\" OF \"table2\" AS character \n DESCRIPTION \"field one\"\n FORMAT \"x(8)\"\n INITIAL \"\"\n POSITION 2\n MAX-WIDTH 16\n ORDER 10\n\nADD INDEX \"idx_1\" ON \"table1\" \n AREA \"Schema Area\"\n PRIMARY\n INDEX-FIELD \"field1\" ASCENDING\n"); using (var dataAdmin = new UoeDatabaseAdministrator(dlcPath)) { var dfPathOut = Path.Combine(TestFolder, "inc_out.df"); dataAdmin.DumpIncrementalSchemaDefinition(prevDfPath, newDfPath, dfPathOut); Assert.IsTrue(File.Exists(dfPathOut)); var incrementalContent = File.ReadAllText(dfPathOut); Assert.IsTrue(incrementalContent.Contains("ADD TABLE \"table2\"")); Assert.IsTrue(incrementalContent.Contains("ADD FIELD \"field1\" OF \"table2\"")); Assert.IsTrue(incrementalContent.Contains("ADD FIELD \"field3\" OF \"table1\"")); Assert.IsTrue(incrementalContent.Contains("DROP FIELD \"field2\" OF \"table1\"")); Assert.IsTrue(incrementalContent.Contains("DROP SEQUENCE \"sequence1\"")); Assert.IsTrue(incrementalContent.Contains("ADD SEQUENCE \"sequence2\"")); var renameFilePath = Path.Combine(TestFolder, "rename.d"); File.WriteAllText(renameFilePath, "F,table1,field2,field3\nS,sequence1,sequence2"); dataAdmin.DumpIncrementalSchemaDefinition(prevDfPath, newDfPath, dfPathOut, renameFilePath); Assert.IsTrue(File.Exists(dfPathOut)); incrementalContent = File.ReadAllText(dfPathOut); Assert.IsTrue(incrementalContent.Contains("RENAME FIELD \"field2\" OF \"table1\" TO \"field3\"")); Assert.IsTrue(incrementalContent.Contains("UPDATE FIELD \"field3\" OF \"table1\"")); // for sequences, they are still dropped/added Assert.IsTrue(incrementalContent.Contains("DROP SEQUENCE \"sequence1\"")); Assert.IsTrue(incrementalContent.Contains("ADD SEQUENCE \"sequence2\"")); } }