public override AstNode VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause)
            {
                var prev = VisitNested(queryContinuationClause.PrecedingQuery, null);

                AddFirstMemberToCurrentTransparentType(queryContinuationClause.IdentifierToken);
                return(prev);
            }
Example #2
0
        public string CombineQuery(AstNode node, AstNode rootQuery = null)
        {
            if (rootQuery == null)
            {
                rootQuery = node;
            }

            if (node is QueryExpression query)
            {
                string continuationIdentifier = null;

                foreach (var clause in query.Clauses)
                {
                    if (clause is QueryContinuationClause continuation)
                    {
                        CombineQuery(continuation.PrecedingQuery);
                    }

                    if (clause is QueryFromClause from)
                    {
                        continuationIdentifier = CombineQuery(from.Expression, rootQuery);
                    }
                }

                QueryFromClause fromClause = (QueryFromClause)query.Clauses.First();
                if (fromClause.Expression is QueryExpression innerQuery)
                {
                    continuationIdentifier = continuationIdentifier ?? ((QueryFromClause)innerQuery.Clauses.First()).Identifier;

                    string transparentIdentifier;
                    if (TryRemoveTransparentIdentifier(query, fromClause, innerQuery, continuationIdentifier, out transparentIdentifier))
                    {
                        RemoveTransparentIdentifierReferences(rootQuery, transparentIdentifier);
                    }
                    else if (fromClause.Type.IsNull)
                    {
                        QueryContinuationClause continuation = new QueryContinuationClause();
                        continuation.PrecedingQuery = innerQuery.Detach();
                        continuation.Identifier     = fromClause.Identifier;
                        fromClause.ReplaceWith(continuation);
                    }

                    return(transparentIdentifier);
                }
                else
                {
                    Match m = castPattern.Match(fromClause.Expression);
                    if (m.Success)
                    {
                        fromClause.Type       = m.Get <AstType>("targetType").Single().Detach();
                        fromClause.Expression = m.Get <Expression>("inExpr").Single().Detach();
                    }
                }
            }

            return(null);
        }
Example #3
0
        S IAstVisitor <T, S> .VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data)
        {
            var handler = QueryContinuationClauseVisited;

            if (handler != null)
            {
                handler(queryContinuationClause, data);
            }
            return(VisitChildren(queryContinuationClause, data));
        }
Example #4
0
        public void CombineQuery(AstNode node, AstNode rootQuery = null)
        {
            if (rootQuery == null)
            {
                rootQuery = node;
            }

            QueryExpression query = node as QueryExpression;

            if (query != null)
            {
                foreach (var clause in query.Clauses)
                {
                    var continuation = clause as QueryContinuationClause;
                    if (continuation != null)
                    {
                        CombineQuery(continuation.PrecedingQuery);
                    }

                    var from = clause as QueryFromClause;
                    if (from != null)
                    {
                        CombineQuery(from.Expression, rootQuery);
                    }
                }

                QueryFromClause fromClause = (QueryFromClause)query.Clauses.First();
                QueryExpression innerQuery = fromClause.Expression as QueryExpression;
                if (innerQuery != null)
                {
                    string transparentIdentifier;
                    if (TryRemoveTransparentIdentifier(query, fromClause, innerQuery, out transparentIdentifier))
                    {
                        RemoveTransparentIdentifierReferences(rootQuery, transparentIdentifier);
                    }
                    else if (fromClause.Type.IsNull)
                    {
                        QueryContinuationClause continuation = new QueryContinuationClause();
                        continuation.PrecedingQuery = innerQuery.Detach();
                        continuation.Identifier     = fromClause.Identifier;
                        fromClause.ReplaceWith(continuation);
                    }
                }
                else
                {
                    Match m = castPattern.Match(fromClause.Expression);
                    if (m.Success)
                    {
                        fromClause.Type       = m.Get <AstType>("targetType").Single().Detach();
                        fromClause.Expression = m.Get <Expression>("inExpr").Single().Detach();
                    }
                }
            }
        }
Example #5
0
 void IAstVisitor.VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause)
 {
     Visit(EnterQueryContinuationClause, LeaveQueryContinuationClause, queryContinuationClause);
 }
Example #6
0
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            QueryContinuationClause o = other as QueryContinuationClause;

            return(o != null && MatchString(this.Identifier, o.Identifier) && this.PrecedingQuery.DoMatch(o.PrecedingQuery, match));
        }
 public virtual S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data)
 {
     return(VisitChildren(queryContinuationClause, data));
 }
 public override void VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause)
 {
     VisitChildren(queryContinuationClause);
 }
 public virtual S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data)
 {
     throw new NotImplementedException();
 }