private void imprimeListaTabelas() { tableDepth r = new tableDepth(); foreach (object i in orderedTables) { r = (tableDepth)i; //Console.WriteLine(String.Format("{0} ---- DELETE FROM {1} WHERE isDeleted = 1", r.dep, r.tab)); //Console.WriteLine(String.Format("DELETE FROM {0}", r.tab)); //Console.WriteLine(string.Format("INSERT INTO #OrderedTables VALUES({0}, {1})", r.tab, r.dep)); //Console.WriteLine(string.Format("\"{0}\",", r.tab)); /* StringBuilder pk_cols = new StringBuilder(); StringBuilder inner_joins = new StringBuilder(); foreach (DataColumn pk in r.tab.PrimaryKey) { //pkList.Add(pk.ToString()); if (pk.Ordinal > 0) { pk_cols.Append(", "); inner_joins.Append("AND "); } pk_cols.Append(pk.ToString()); inner_joins.AppendFormat("i.{0} = d.pk{1} ", pk.ToString(), pk.Ordinal); } var a = string.Format(@" CREATE TRIGGER {0}_on_delete ON {0} AFTER UPDATE AS IF UPDATE (isDeleted) INSERT INTO deleted_history_{1} SELECT '{0}', {2} FROM inserted where isDeleted = 0 DELETE FROM deleted_history_{1} FROM deleted_history_{1} d INNER JOIN inserted i ON {3} AND i.isDeleted = 0 AND d.table_name = '{0}'; GO", r.tab.TableName, r.tab.PrimaryKey.Length, pk_cols.ToString(), inner_joins.ToString()); Console.WriteLine(a); */ StringBuilder pk_cols = new StringBuilder(); foreach (DataColumn pk in r.tab.PrimaryKey) { //pkList.Add(pk.ToString()); if (pk.Ordinal > 0) { pk_cols.Append(", "); } pk_cols.Append(pk.ToString()); } var a = string.Format("CREATE INDEX IX_isDeleted ON {0} (Versao) INCLUDE ({1}) WHERE isDeleted = 1", r.tab.TableName, pk_cols.ToString()); Console.WriteLine(a); } }
public ArrayList getTabelasOrdenadas(bool ordemInversa) { if (orderedTables.Count == 0 || reverseOrderedTables.Count == 0) { orderedTables.Clear(); reverseOrderedTables.Clear(); tableDepth depth = new tableDepth(); calculaNuvens(); //determinar as tabelas que n tem parent relations logo aquelas que tem profundidade 1 foreach (DataTable dt in GisaDataSetHelper.GetInstance().Tables) { if (dt.ParentRelations.Count < 1) orderedTables.Add(new tableDepth(dt, 1, tabPertenceNuvem(dt.TableName))); } //adiconar as childtables a lista int tamInicial = orderedTables.Count; int tempFor1 = tamInicial; for (int i = 0; i < tempFor1; i++) { depth = (tableDepth)(orderedTables[i]); if (depth.tab.ChildRelations.Count > 0) { chamaMetodo(depth.tab, 2); } } orderedTables.Sort(new TableDepthSorter()); reverseOrderedTables.AddRange(orderedTables); reverseOrderedTables.Reverse(); //imprimeListaTabelas(); } if (! ordemInversa) { return orderedTables; } else { return reverseOrderedTables; } }
//adiciona uma tabela a lista com a respectiva profundidade private void listaTabela(DataTable dt, int pr) { tableDepth r = new tableDepth(); foreach (object i in orderedTables) { r = (tableDepth)i; if (r.tab == dt) { if (r.dep < pr) { orderedTables.Remove(i); orderedTables.Add(new tableDepth(dt, pr, tabPertenceNuvem(dt.TableName))); return; } return; } } orderedTables.Add(new tableDepth(dt, pr, tabPertenceNuvem(dt.TableName))); }