public SelectTable(string data, string id, string name) { Dictionary <string, string> dic = new Dictionary <string, string>(); // Color matching table = new Table(); table.SetId(id); table.SetName(name); table.columns = new List <Column>(); // Loops through all the columns for this table. int columnCounter = 0; while (true) { columnCounter++; Column col = new Column(); col.SetName(data.Substring(0, data.IndexOf(":"))); col.SetId("T:" + name + "-C:" + columnCounter); // If column exists elsewhere, use same color. if (dic.ContainsKey(col.GetName())) { col.SetColor(dic[col.GetName()]); } else { string c = DatabaseBuilder.GetRandomColor(); dic.Add(col.GetName(), c); col.SetColor(c); } col.fields = new List <string>(); data = data.Substring(data.IndexOf("[") + 1); // Loops through all the fields for this column. do { if (data.IndexOf(",") != -1 && data.IndexOf(",") < data.IndexOf("]")) { col.AddField(data.Substring(0, data.IndexOf(","))); data = data.Substring(data.IndexOf(",") + 1); // There's a 'next' field } else { col.AddField(data.Substring(0, data.IndexOf("]"))); data = data.Substring(data.IndexOf("]") + 1); break; } } while (true); table.AddColumn(col); if (data.Substring(0, 1).Equals(",")) { data = data.Substring(1); // There's a 'next' column } else { data = data.Substring(1); break; } } }
// Returns a duplicate of the main DB, but with colors specific to foreign key references. public static Database ChangeColorsForKeys(string tabId, string colId) { Database db = new Database(); db = DatabaseBuilder.Clone(VedicDatabase.db); db.SetName("Analytic_3"); Table[] tabs = VedicDatabase.db.tables.ToArray(); int tabIndex = -1; int colIndex = -1; for (int j = 0; j < VedicDatabase.db.tables.Count; j++) { if (VedicDatabase.db.tables[j].GetId() == tabId) { tabIndex = j; break; } } if (tabIndex < 0) { return(VedicDatabase.db); } for (int k = 0; k < VedicDatabase.db.tables[tabIndex].columns.Count; k++) { if (VedicDatabase.db.tables[tabIndex].columns[k].GetId() == colId) { colIndex = k; break; } } if (colIndex < 0) { return(VedicDatabase.db); } for (int m = 0; m < db.tables.Count; m++) { for (int n = 0; n < db.tables[m].columns.Count; n++) { db.tables[m].columns[n].SetColor("#000000"); } } db.tables[tabIndex].columns[colIndex].SetColor("#FF0000"); if (VedicDatabase.db.tables[tabIndex].columns[colIndex].keys.Count > 0) { for (int x = 0; x < VedicDatabase.db.tables[tabIndex].columns[colIndex].keys.Count; x++) { bool foundIt = false; for (int y = 0; y < VedicDatabase.db.tables.Count; y++) { if (VedicDatabase.db.tables[y].GetName() == VedicDatabase.db.tables[tabIndex].columns[colIndex].keys[x].Item1) { for (int z = 0; z < VedicDatabase.db.tables[y].columns.Count; z++) { if (VedicDatabase.db.tables[y].columns[z].GetName() == VedicDatabase.db.tables[tabIndex].columns[colIndex].keys[x].Item2) { db.tables[y].columns[z].SetColor("#0000FF"); foundIt = true; break; } } } if (foundIt) { break; } } } } return(db); }