Пример #1
0
		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);
			}
		}
Пример #2
0
        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;
			}
		}
Пример #3
0
		//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)));
		}