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); }
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); }
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}"); } } }
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}"); } } }
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); }
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}"); } }
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}"); } }
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; }
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); }
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}"); } }