private void ProcessTables(SQLJoinRules buildNewSQL) { TablesAndViewsUI.PrepareSelectedTables(); if (buildNewSQL.BuildJoin()) { editBox.Text = buildNewSQL.SQLString; } else { editBox.Text = "Finding needed tables to build query"; //editBox.Text = "One or more Tables found with no relevent relationships.\r\n\r\n"; bool processAgain = false; List <TableName> stillNone = new List <TableName>(); foreach (TableName aTable in buildNewSQL.NoRelationFound) { //editBox.Text += aTable.Name + "\r\n"; List <Joiner> joins = new List <Joiner>(); if (TableRelationShips.FindNeededTable(aTable, TablesAndViewsUI.AllTables, TablesAndViewsUI.SelectedTables, joins)) { var excludeIteratedTable = TablesAndViewsUI.SelectedTables.Tables.Where(x => !x.Name.Equals(aTable.Name)).ToList(); //joiners can be further resolved to find more distant relationships, will need a class for that kind of processing. var joiner = TableRelationShips.CheckForeignKeyTables(joins, excludeIteratedTable); if (joiner != null && !TablesAndViewsUI.SelectedTables.Tables.Any(x => x.Name.Equals(joiner.Table1.Name))) { TablesAndViewsUI.ExternallyCheckTable(joiner.Table1.Name); //TablesAndViewsUI.SelectedTables.Tables.Add(joiner.Table1); //TablesAndViewsUI.PrepareTable(TablesAndViewsUI.SelectedTables.Tables[TablesAndViewsUI.SelectedTables.Tables.Count - 1]); processAgain = true; } } else { stillNone.Add(aTable); } } if (processAgain) { ProcessTables(buildNewSQL); } else { editBox.Text = "No relationships found to complete query build"; } } }
private void queryToolStripMenuItem_Click(object sender, EventArgs e) { SQLJoinRules buildNewSQL = new SQLJoinRules(TablesAndViewsUI.SelectedTables, _aDataObject.GetDatabaseType); ProcessTables(buildNewSQL); }