GetQueryColumns (IBuilderQueryData query, IList <string> tablenames, IList <string> aliasnames, int maxdepth = 1, int depth = 0) { var columns = new List <(IColumnQuery, IList <string>, IList <string>)>(); if (tablenames == null) { tablenames = new List <string>(); } tablenames.Add(query.Description.Name); if (aliasnames == null) { aliasnames = new List <string>(); } aliasnames.Add(query.Description.Reference); foreach (var c in query.Columns) { columns.Add((c, new List <string>(tablenames), new List <string>(aliasnames))); } depth++; foreach (var j in query.GetJoins(maxdepth, depth)) { columns.AddRange(GetQueryColumns(j.externalkey.Query, tablenames, aliasnames, maxdepth, depth)); } return(columns); }
GetQueryJoins (IBuilderQueryData query, IList <string> prefix, int maxdepth = 1, int depth = 0) { var joins = new List <(IBuilderQueryData, IList <string>, IBuilderQueryData, IList <string>, IList <(IColumnQuery, IColumnQuery)>)>(); depth++; foreach (var j in query.GetJoins(maxdepth, depth)) { var tablename = new List <string>(prefix); tablename.Add(j.externalkey.Query.Description.Name); joins.Add((query, prefix, j.externalkey.Query, tablename, new List <(IColumnQuery, IColumnQuery)>() { (j.internalkey, j.externalkey) })); joins.AddRange(GetQueryJoins(j.externalkey.Query, tablename, maxdepth, depth)); } return(joins); }