コード例 #1
0
        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\""));
            }
        }