public override AstNode VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause) { var prev = VisitNested(queryContinuationClause.PrecedingQuery, null); AddFirstMemberToCurrentTransparentType(queryContinuationClause.IdentifierToken); return(prev); }
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); }
S IAstVisitor <T, S> .VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data) { var handler = QueryContinuationClauseVisited; if (handler != null) { handler(queryContinuationClause, data); } return(VisitChildren(queryContinuationClause, data)); }
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(); } } } }
void IAstVisitor.VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause) { Visit(EnterQueryContinuationClause, LeaveQueryContinuationClause, queryContinuationClause); }
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(); }