示例#1
0
        private void TestGenerators(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, bool second, FastColoredTextBox fct)
        {
            string str = (second) ? "<<--<<--<<--<<--<<" : ">>-->>-->>-->>-->>";

            fct.AppendText($"{str} Testing DB {db1} generator {itm1.Text} -> {db2}{Environment.NewLine}{Environment.NewLine}");
            if (itm2 != null)
            {
                var tcf1 = (GeneratorClass)itm1.Object;
                var tcf2 = (GeneratorClass)itm2.Object;

                if (tcf1.Name == tcf2.Name)
                {
                    if (!cbOnlyFailures.Checked)
                    {
                        fct.AppendText($"{"OK",-8}generator {tcf1.Name} exists{Environment.NewLine}");
                    }
                }
                else
                {
                    fct.AppendText($"{"FAILURE",-8}generator {tcf1.Name} field not exists{Environment.NewLine}");
                }
            }
            else
            {
                var tcf1 = (GeneratorClass)itm1.Object;
                fct.AppendText($"{"FAILURE",-8}DB {db1}->has no generator {tcf1} in DB {db2}{Environment.NewLine}");
            }

            fct.AppendText(Environment.NewLine);
        }
示例#2
0
        private void TestTable(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, bool second, FastColoredTextBox fct)
        {
            string str = (second) ? "<<--<<--<<--<<--<<" : ">>-->>-->>-->>-->>";

            if (itm1.Object.GetType() == typeof(TableClass))
            {
                fct.AppendText($"{str} Testing DB {db1} table {itm1.Text} -> {db2}{Environment.NewLine}{Environment.NewLine}");
                if (itm2 != null)
                {
                    if (!cbOnlyFailures.Checked)
                    {
                        fct.AppendText($"{"OK",-8} DB {db1}->Table {itm1.Text} exists in DB {itm2.Text}{db2}");
                    }
                    TestTableFields(itm1, itm2, db1, db2, fct);
                    if (ckDepent.Checked)
                    {
                        TestTableDepent(itm1, itm2, db1, db2, fct);
                    }
                    if (ckFK.Checked)
                    {
                        TestTableFK(itm1, itm2, db1, db2, fct);
                    }
                    if (ckPK.Checked)
                    {
                        TestTablePK(itm1, itm2, db1, db2, fct);
                    }
                }
                else
                {
                    fct.AppendText($"{"FAILURE",-8}DB {db1}->table {itm1.Text} has no table in DB {db2}{Environment.NewLine}");
                }
                fct.AppendText(Environment.NewLine);
            }
            fct.AppendText(Environment.NewLine);
        }
示例#3
0
        private void TestViewFields(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, FastColoredTextBox fct)
        {
            var tc1 = (ViewClass)itm1.Object;
            var tc2 = (ViewClass)itm2.Object;

            foreach (ViewFieldClass tcf1 in tc1.Fields.Values)
            {
                if (tc2.Fields.ContainsKey(tcf1.Name))
                {
                    ViewFieldClass tcf2;
                    tc2.Fields.TryGetValue(tcf1.Name, out tcf2);
                    if (!cbOnlyFailures.Checked)
                    {
                        fct.AppendText($"{"OK",-12}view {itm1.Text} ->field {tcf1.Name} exists{Environment.NewLine}");
                    }

                    if (ViewFieldsEqual(tcf1, tcf2))
                    {
                        if (!cbOnlyFailures.Checked)
                        {
                            fct.AppendText($"{"OK",-12}view {itm1.Text} ->field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} charset {tcf1.Domain.CharSet} equals{Environment.NewLine}");
                        }
                    }
                    else
                    {
                        fct.AppendText($"{"FAILURE",-12}view {itm1.Text} field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} is not equal field->type {tcf2.Domain.FieldType} length {tcf2.Domain.Length}{Environment.NewLine}");
                    }
                }
                else
                {
                    fct.AppendText($"{"FAILURE",-12}view {itm1.Text} ->field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} field not exists{Environment.NewLine}");
                }
            }
        }
示例#4
0
        private void TestTableFields(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2)
        {
            var tc1 = (TableClass)itm1.Object;
            var tc2 = (TableClass)itm2.Object;

            foreach (TableFieldClass tcf1 in tc1.Fields.Values)
            {
                if (tc2.Fields.TryGetValue(tcf1.Name, out TableFieldClass tcf2))
                {
                    if (!cbOnlyFailures.Checked)
                    {
                        fctSource.AppendText($"{"OK",-12}object {itm1.Text} ->field {tcf1.Name} exists{Environment.NewLine}");
                    }
                    if (TableFieldsEqual(tcf1, tcf2))
                    {
                        if (!cbOnlyFailures.Checked)
                        {
                            fctSource.AppendText($"{"OK",-12}object {itm1.Text} ->field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} charset {tcf1.Domain.CharSet} equals{Environment.NewLine}");
                        }
                    }
                    else
                    {
                        fctSource.AppendText($"{"FAILURE",-12}object {itm1.Text} field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} is not equal field->type {tcf2.Domain.FieldType} length {tcf2.Domain.Length}{Environment.NewLine}");
                    }
                }
                else
                {
                    fctSource.AppendText($"{"FAILURE",-12}object {itm1.Text} ->field {tcf1.Name} ->type {tcf1.Domain.FieldType} length {tcf1.Domain.Length} field not exists{Environment.NewLine}");
                }
            }
        }
示例#5
0
        private void TestProcedures(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, bool second, FastColoredTextBox fct)
        {
            string str = (second) ? "<<--<<--<<--<<--<<" : ">>-->>-->>-->>-->>";

            fct.AppendText($"{str} Testing DB {db1} procedure {itm1.Text} -> {db2}{Environment.NewLine}{Environment.NewLine}");
            if (itm2 != null)
            {
                var tcf1 = (ProcedureClass)itm1.Object;
                var tcf2 = (ProcedureClass)itm2.Object;

                if (tcf1.Name == tcf2.Name)
                {
                    string txt1 = tcf1.GetSourceText();
                    string txt2 = tcf2.GetSourceText();

                    if (txt1 == txt2)
                    {
                        if (!cbOnlyFailures.Checked)
                        {
                            fct.AppendText($"{"OK",-8}procedure {tcf1.Name} exists and source is equal{Environment.NewLine}");
                        }
                    }
                    else
                    {
                        fct.AppendText($"{"FAILURE",-8}procedure {tcf1.Name} exists but source is not equal{Environment.NewLine}");

                        fct.AppendText($"----------------- Source {db1}->{tcf1.Name} Length:{txt1.Length} ---------------------{Environment.NewLine}{Environment.NewLine}");
                        fct.AppendText(txt1);
                        fct.AppendText($"{Environment.NewLine}{Environment.NewLine}");
                        fct.AppendText($"----------------- Source {db2}->{tcf2.Name} Length:{txt2.Length} ---------------------{Environment.NewLine}{Environment.NewLine}");
                        fct.AppendText(txt2);
                    }
                }
                else
                {
                    fct.AppendText($"{"FAILURE",-8}procedure {tcf1.Name} not exists in {db2}{Environment.NewLine}");
                }
            }
            else
            {
                var tcf1 = (ProcedureClass)itm1.Object;
                fct.AppendText($"{"FAILURE",-8}DB {db1}->has no procedure {tcf1} in DB {db2}{Environment.NewLine}");
            }

            fct.AppendText(Environment.NewLine);
        }
示例#6
0
        private void TestTableFK(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, FastColoredTextBox fct)
        {
            var tc1 = (TableClass)itm1.Object;
            var tc2 = (TableClass)itm2.Object;

            if ((tc1.ForeignKeys != null) && (tc2.ForeignKeys != null))
            {
                if (tc1.ForeignKeys.Count != tc2.ForeignKeys.Count)
                {
                    fct.AppendText($"{"FAILURE",-12}object {itm1.Text} foreign keys length {tc1.ForeignKeys.Count} is not equal {itm2.Text} {tc2.ForeignKeys.Count}{Environment.NewLine}");
                }
            }
            else if (tc1.ForeignKeys != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} foreign keys length {tc1.ForeignKeys.Count} is not equal {itm2.Text} 0{Environment.NewLine}");
            }
            else if (tc2.ForeignKeys != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} foreign keys length 0 is not equal {itm2.Text} {tc2.ForeignKeys.Count}{Environment.NewLine}");
            }
        }
示例#7
0
        private void TestTableDepent(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, FastColoredTextBox fct)
        {
            var tc1 = (TableClass)itm1.Object;
            var tc2 = (TableClass)itm2.Object;

            if ((tc1.DependenciesTO_Views != null) && (tc2.DependenciesTO_Views != null))
            {
                if (tc1.DependenciesTO_Views.Values.Count != tc2.DependenciesTO_Views.Values.Count)
                {
                    fct.AppendText($"{"FAILURE",-12}object {itm1.Text} dependencies length {tc1.DependenciesTO_Views.Values.Count} is not equal {itm2.Text} {tc2.DependenciesTO_Views.Values.Count}{Environment.NewLine}");
                }
            }
            else if (tc1.DependenciesTO_Views != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} dependencies length {tc1.DependenciesTO_Views.Values.Count} is not equal {itm2.Text} 0{Environment.NewLine}");
            }
            else if (tc2.DependenciesTO_Views != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} dependencies length 0 is not equal {itm2.Text} {tc2.DependenciesTO_Views.Values.Count}{Environment.NewLine}");
            }
        }
示例#8
0
        private void hsCreateClasses_Click(object sender, EventArgs e)
        {
            fctSourceForward.Clear();
            fctSourceReverse.Clear();
            cbFoundLinesForward.Text = string.Empty;
            cbFoundLinesForward.Items.Clear();
            cbFoundLinesReverse.Text = string.Empty;
            cbFoundLinesReverse.Items.Clear();

            Application.DoEvents();

            if (!GetDatabaseObjects())
            {
                return;
            }
            this.Cursor = Cursors.WaitCursor;
            for (int i = 0; i < slbDbObjects1.CheckedItemDatasNotNulls.Count; i++)
            {
                var itm1 = slbDbObjects1.CheckedItemDatasNotNulls[i];
                int inx2 = slbDbObjects2.ItemDatas.FindIndex(x => x.Text == itm1.Text);

                ItemDataClass itm2 = null;
                if (inx2 >= 0)
                {
                    itm2 = slbDbObjects2.ItemDatas[inx2];
                    string it = itm2.GetType().ToString();
                }
                if (ckTables.Checked)
                {
                    if (cbForwardRun.Checked && (itm1.Object.GetType() == typeof(TableClass)))
                    {
                        TestTable(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceForward);
                    }
                }
                if (ckViews.Checked)
                {
                    if (cbForwardRun.Checked && (itm1.Object.GetType() == typeof(ViewClass)))
                    {
                        TestView(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceForward);
                    }
                }
                if (ckGenerators.Checked)
                {
                    if (cbForwardRun.Checked && (itm1.Object.GetType() == typeof(GeneratorClass)))
                    {
                        TestGenerators(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceForward);
                    }
                }
                if (ckProcedures.Checked)
                {
                    if (cbForwardRun.Checked && (itm1.Object.GetType() == typeof(ProcedureClass)))
                    {
                        TestProcedures(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceForward);
                    }
                }
                if (ckFuntions.Checked)
                {
                    if (cbForwardRun.Checked && (itm1.Object.GetType() == typeof(FunctionClass)))
                    {
                        TestFunctions(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceForward);
                    }
                }
            }

            //Reverserun

            for (int i = 0; i < slbDbObjects2.CheckedItemDatasNotNulls.Count; i++)
            {
                var itm1 = slbDbObjects2.CheckedItemDatasNotNulls[i];
                int inx2 = slbDbObjects1.ItemDatas.FindIndex(x => x.Text == itm1.Text);

                ItemDataClass itm2 = null;
                if (inx2 >= 0)
                {
                    itm2 = slbDbObjects1.ItemDatas[inx2];
                    string it = itm2.GetType().ToString();
                }
                if (ckTables.Checked)
                {
                    if (ckReverseRun.Checked && (itm1.Object.GetType() == typeof(TableClass)))
                    {
                        TestTable(itm1, itm2, slbDatabase2.LastSelectedText, slbDatabase1.LastSelectedText, true, fctSourceReverse);
                    }
                }
                if (ckViews.Checked)
                {
                    if (ckReverseRun.Checked && (itm1.Object.GetType() == typeof(ViewClass)))
                    {
                        TestView(itm1, itm2, slbDatabase2.LastSelectedText, slbDatabase1.LastSelectedText, true, fctSourceReverse);
                    }
                }

                if (ckGenerators.Checked)
                {
                    if (ckReverseRun.Checked && (itm1.Object.GetType() == typeof(GeneratorClass)))
                    {
                        TestGenerators(itm1, itm2, slbDatabase2.LastSelectedText, slbDatabase1.LastSelectedText, true, fctSourceReverse);
                    }
                }
                if (ckProcedures.Checked)
                {
                    if (ckReverseRun.Checked && (itm1.Object.GetType() == typeof(ProcedureClass)))
                    {
                        TestProcedures(itm1, itm2, slbDatabase2.LastSelectedText, slbDatabase1.LastSelectedText, true, fctSourceReverse);
                    }
                }

                if (ckFuntions.Checked)
                {
                    if (ckReverseRun.Checked && (itm1.Object.GetType() == typeof(FunctionClass)))
                    {
                        TestFunctions(itm1, itm2, slbDatabase1.LastSelectedText, slbDatabase2.LastSelectedText, false, fctSourceReverse);
                    }
                }
            }
            SearchForwardResults();
            SearchReverseResults();
            this.Cursor = Cursors.Default;
        }
示例#9
0
        private void TestView(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, bool second, FastColoredTextBox fct)
        {
            string str = (second) ? "<<--<<--<<--<<--<<" : ">>-->>-->>-->>-->>";

            if (itm1.Object.GetType() == typeof(ViewClass))
            {
                fct.AppendText($"{str} Testing DB {db1} view {itm1.Text} -> {db2}{Environment.NewLine}{Environment.NewLine}");
                if (itm2 != null)
                {
                    var tc1 = (ViewClass)itm1.Object;
                    var tc2 = (ViewClass)itm2.Object;
                    if (!cbOnlyFailures.Checked)
                    {
                        fct.AppendText($"{"OK",-8}DB {db1}->view {itm1.Text} exists in DB {itm1.Text}{db2}");
                    }
                    TestViewFields(itm1, itm2, db1, db2, fct);

                    int inx1 = tc1.CREATEINSERT_SQL.IndexOf("CREATE ");
                    int inx2 = tc2.CREATEINSERT_SQL.IndexOf("CREATE ");

                    //Entfernen Kommentare
                    if (inx1 > 0)
                    {
                        tc1.CREATEINSERT_SQL = tc1.CREATEINSERT_SQL.Substring(inx1);
                    }
                    if (inx2 > 0)
                    {
                        tc2.CREATEINSERT_SQL = tc2.CREATEINSERT_SQL.Substring(inx1);
                    }


                    tc1.CREATEINSERT_SQL = $@"<START>{RemoveUnneccessaryCharacters(tc1.CREATEINSERT_SQL)}<END>";
                    tc2.CREATEINSERT_SQL = $@"<START>{RemoveUnneccessaryCharacters(tc2.CREATEINSERT_SQL)}<END>";
                    if (tc1.CREATEINSERT_SQL != tc2.CREATEINSERT_SQL)
                    {
                        fct.AppendText(Environment.NewLine);
                        string str1      = tc1.CREATEINSERT_SQL.Trim().ToUpper();
                        string str2      = tc2.CREATEINSERT_SQL.Trim().ToUpper();
                        string resultstr = string.Empty;
                        if (str1 == str2)
                        {
                            resultstr = "case sensitivity";
                        }
                        else
                        {
                            str1 = str1.Replace("\r", " ");
                            str2 = str2.Replace("\r", " ");
                            str1 = str1.Replace("\n", " ");
                            str2 = str2.Replace("\n", " ");
                            if (str1 == str2)
                            {
                                resultstr += (resultstr.Length > 0) ? ", differences in newlines" : "differences in newlines";
                            }
                            else
                            {
                                str1 = StringsFunctionsClass.Reduce(str1, "  ", " ");
                                str2 = StringsFunctionsClass.Reduce(str2, "  ", " ");

                                if (str1 == str2)
                                {
                                    resultstr += (resultstr.Length > 0) ? ", differences in spaces" : "differences in spaces";
                                }
                            }
                        }
                        int nw1 = str1.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
                        int nw2 = str2.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;

                        if (resultstr.Length <= 0)
                        {
                            fct.AppendText($"{"FAILURE SQL differs ",-8} for {tc1.Name} words:{nw1}<->{nw2}, length:{tc1.CREATEINSERT_SQL.Length}<->{tc2.CREATEINSERT_SQL.Length}{Environment.NewLine}{Environment.NewLine}");
                        }
                        else if (nw1 != nw2)
                        {
                            fct.AppendText($"{"FAILURE SQL differs ",-8} for {tc1.Name} in words:{nw1}<->{nw2}, length:{tc1.CREATEINSERT_SQL.Length}<->{tc2.CREATEINSERT_SQL.Length}{Environment.NewLine}{Environment.NewLine}");
                        }
                        else
                        {
                            fct.AppendText($"{"WARNING SQL differs by",-8}  ({resultstr}), may not a problem, for {tc1.Name} words:{nw1}<->{nw2},  length:{tc1.CREATEINSERT_SQL.Trim().ToUpper().Length}<->{tc2.CREATEINSERT_SQL.Trim().ToUpper().Length}{Environment.NewLine}{Environment.NewLine}");
                        }

                        fct.AppendText($"{Environment.NewLine}SQL1 -------------------------------------------{Environment.NewLine}{tc1.CREATEINSERT_SQL}{Environment.NewLine}");
                        fct.AppendText($"{Environment.NewLine}SQL2 -------------------------------------------{Environment.NewLine}{tc2.CREATEINSERT_SQL}{Environment.NewLine}");
                    }
                }
                else
                {
                    fct.AppendText($"{"FAILURE",-8} DB {db1}->view {itm1.Text} has no view in DB {db2}{Environment.NewLine}");
                }
            }
            fct.AppendText(Environment.NewLine);
        }
示例#10
0
        private void TestTablePK(ItemDataClass itm1, ItemDataClass itm2, string db1, string db2, FastColoredTextBox fct)
        {
            var tc1 = (TableClass)itm1.Object;
            var tc2 = (TableClass)itm2.Object;

            if ((tc1.primary_constraint != null) && (tc2.primary_constraint != null))
            {
            }
            else if (tc1.primary_constraint != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} primary keys length 1 is not equal {itm2.Text} 0{Environment.NewLine}");
            }
            else if (tc2.primary_constraint != null)
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} primary keys length 0 is not equal {itm2.Text} 1{Environment.NewLine}");
            }

            string pk1 = string.Empty;
            string pk2 = string.Empty;

            if (tc1.Indices != null)
            {
                foreach (IndexClass fld in tc1.Indices.Values)
                {
                    if (fld.HasPrimaryConstraint)
                    {
                        foreach (FieldClass fc in fld.RelationFields.Values)
                        {
                            pk1 = (string.IsNullOrEmpty(pk1)) ? pk1 + fc.Name : "|" + pk1 + fc.Name;
                        }
                    }
                }
            }
            if (tc2.Indices != null)
            {
                foreach (IndexClass fld in tc2.Indices.Values)
                {
                    if (fld.HasPrimaryConstraint)
                    {
                        foreach (FieldClass fc in fld.RelationFields.Values)
                        {
                            pk2 = (string.IsNullOrEmpty(pk2)) ? pk2 + fc.Name : "|" + pk2 + fc.Name;
                        }
                    }
                }
            }

            /*
             * foreach (TableFieldClass fld in tc2.Fields.Values)
             * {
             *  if (fld.IsPrimary) pk2 = fld.Name;
             * }
             */
            if (pk1 == pk2)
            {
                if (string.IsNullOrEmpty(pk1))
                {
                    fct.AppendText($"{"WARNING",-12}both objects {itm1.Text} and {itm2.Text} has no primary key.{Environment.NewLine}");
                }
            }
            else if (string.IsNullOrEmpty(pk1))
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} has no primary key, and {itm2.Text} primary key is {pk2}{Environment.NewLine}");
            }
            else if (string.IsNullOrEmpty(pk2))
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} primary key is {pk2}, and {itm2.Text} has no primary key.{Environment.NewLine}");
            }
            else
            {
                fct.AppendText($"{"FAILURE",-12}object {itm1.Text} primary key {pk1}  and {itm2.Text} primary key {pk2} are not equal.{Environment.NewLine}");
            }
        }