Example #1
0
        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);
                        }
                    }
                }
            }
        }