public void NormalizeQuerySpecification(QuerySpecification qs) { foreach (var sq in qs.EnumerateSubqueries()) { NormalizeSelectStatement(sq.SelectStatement); } // Process join conditions conditions = new List <LogicalExpressions.Expression>(); var from = qs.FindDescendant <FromClause>(); if (from != null) { var tablesource = from.FindDescendant <TableSourceExpression>(); foreach (JoinedTable jt in tablesource.EnumerateDescendantsRecursive <JoinedTable>(typeof(Subquery))) { // CROSS JOIN queries have no search condition SearchCondition sc = jt.FindDescendant <SearchCondition>(); if (sc != null) { conditions.Add(GetConjunctiveNormalForm(sc)); } } } // Process where clause WhereClause where = qs.FindDescendant <WhereClause>(); if (where != null) { var sc = where.FindDescendant <SearchCondition>(); conditions.Add(GetConjunctiveNormalForm(sc)); } }
public IEnumerable <SearchConditionReference> EnumerateConditions() { //*** This goes to the SkyQueryJob and the Condition normalizer // TODO: this has to be updated to handle non conjunctive normal form predicates too WhereClause wh = FindDescendant <WhereClause>(); if (wh == null) { yield break; } else { SearchCondition sc = wh.FindDescendant <SearchCondition>(); if (sc == null) { yield break; } else { foreach (object n in sc.Nodes) { SearchConditionReference wc; if (n is Predicate) { wc = new SearchConditionReference((Predicate)n); yield return(wc); } else if (n is SearchConditionBrackets) { wc = new SearchConditionReference((SearchConditionBrackets)n); yield return(wc); } } } } }