public override void VisitQueryFromClause(QueryFromClause queryFromClause) { base.VisitQueryFromClause(queryFromClause); indexData.FromExpression = queryFromClause.Expression.Clone(); indexData.FromIdentifier = queryFromClause.Identifier; indexData.NumberOfFromClauses++; }
public virtual void VisitQueryFromClause(QueryFromClause queryFromClause) { if (this.ThrowException) { throw (System.Exception) this.CreateException(queryFromClause); } }
public override object VisitQueryFromClause(QueryFromClause fromClause, object data) { Expression node; var expression = fromClause.Expression; var invocationExpression = expression as InvocationExpression; if (invocationExpression == null) { node = expression; } else { var target = invocationExpression.Target as MemberReferenceExpression; if (target == null || target.Target is IdentifierExpression || target.Target is ThisReferenceExpression) { return(base.VisitQueryFromClause(fromClause, data)); } node = target.Target; } node.ReplaceWith(new ParenthesizedExpression(new CastExpression(new SimpleType("IEnumerable<dynamic>"), node.Clone()))); return(base.VisitQueryFromClause(fromClause, data)); }
public virtual string CompileCte(Query query) { var clauses = query.GetComponents <AbstractFrom>("cte", EngineCode); if (!clauses.Any()) { return(""); } var sql = new List <string>(); foreach (var cte in clauses) { if (cte is RawFromClause) { RawFromClause clause = (cte as RawFromClause); sql.Add($"{WrapValue(clause.Alias)} AS ({WrapIdentifiers(clause.Expression)})"); } else if (cte is QueryFromClause) { QueryFromClause clause = (cte as QueryFromClause); sql.Add($"{WrapValue(clause.Alias)} AS ({CompileSelect(clause.Query)})"); } } return("WITH " + string.Join(", ", sql) + " "); }
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) { QueryFromClause o = other as QueryFromClause; return(o != null && this.Type.DoMatch(o.Type, match) && MatchString(this.Identifier, o.Identifier) && this.Expression.DoMatch(o.Expression, match)); }
public virtual void VisitQueryFromClause(QueryFromClause queryFromClause) { if (ThrowException) { throw (Exception)CreateException(queryFromClause); } }
public void RenderQueryFromClauseWithAlias() { SelectQuery query = new SelectQuery(); query.Select(new SelectClause(new Column("Column1"))); query.From(new TableFromClause(new Table("Table1"))); QueryFromClause queryFromClause = new QueryFromClause(query, "Query1Alias"); Assert.AreEqual("(SELECT [Column1] FROM [Table1]) Query1Alias", sqlClientRenderer.Render(queryFromClause)); }
QueryFromClause MakeFromClause(ParameterDeclaration parameter, Expression body) { QueryFromClause fromClause = new QueryFromClause { Identifier = parameter.Name, Expression = body }; fromClause.CopyAnnotationsFrom(parameter); return(fromClause); }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery) { if (!IsTransparentIdentifier(fromClause.Identifier)) { return(false); } Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) { return(false); } QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); NamedArgumentExpression nae1 = match.Get <NamedArgumentExpression>("nae1").Single(); NamedArgumentExpression nae2 = match.Get <NamedArgumentExpression>("nae2").Single(); if (nae1.Identifier != ((IdentifierExpression)nae1.Expression).Identifier) { return(false); } IdentifierExpression nae2IdentExpr = nae2.Expression as IdentifierExpression; if (nae2IdentExpr != null && nae2.Identifier == nae2IdentExpr.Identifier) { // from * in (from x in ... select new { x = x, y = y }) ... // => // from x in ... ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } } else { // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = nae2.Identifier, Expression = nae2.Expression.Detach() }); } return(true); }
public void AddQueryFromClauseWithAlias() { SelectQuery query = new SelectQuery(); query.Select(new SelectClause(new Column("Column1"))); query.From(new TableFromClause(new Table("Table1"))); QueryFromClause queryFromClause = new QueryFromClause(query, "Query1Alias"); Assert.AreEqual(query, queryFromClause.Query); Assert.AreEqual("Query1Alias", queryFromClause.Alias); }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery, Dictionary <string, object> letClauses) { if (!IsTransparentIdentifier(fromClause.Identifier)) { return(false); } QuerySelectClause selectClause = innerQuery.Clauses.Last() as QuerySelectClause; Match match = selectTransparentIdentifierPattern.Match(selectClause); if (!match.Success) { return(false); } // from * in (from x in ... select new { members of anonymous type }) ... // => // from x in ... { let x = ... } ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } foreach (var expr in match.Get <Expression>("expr")) { switch (expr) { case IdentifierExpression identifier: // nothing to add continue; case NamedExpression namedExpression: if (namedExpression.Expression is IdentifierExpression identifierExpression && namedExpression.Name == identifierExpression.Identifier) { letClauses[namedExpression.Name] = identifierExpression.Annotation <ILVariableResolveResult>(); continue; } QueryLetClause letClause = new QueryLetClause { Identifier = namedExpression.Name, Expression = namedExpression.Expression.Detach() }; var annotation = new LetIdentifierAnnotation(); letClause.AddAnnotation(annotation); letClauses[namedExpression.Name] = annotation; query.Clauses.InsertAfter(insertionPos, letClause); break; } } return(true); }
public override string Render(QueryFromClause queryFromClause) { StringBuilder text = new StringBuilder(); text.AppendFormat("({0}) ", queryFromClause.Query.Render(this)); if (queryFromClause.Alias != null) { text.AppendFormat("{0} ", queryFromClause.Alias); } return(text.ToString().Trim()); }
public UnifiedElement VisitQueryFromClause( QueryFromClause from, object data) { var ident = UnifiedIdentifier.CreateVariable(from.Identifier); var expr = from.Expression.TryAcceptForExpression(this); if (from.Type == null) { return(UnifiedFromQuery.Create(ident, expr)); } var type = LookupType(from.Type); return(UnifiedFromQuery.Create(ident, expr, type)); }
public override object VisitQueryFromClause(QueryFromClause queryFromClause, object data) { var memberReferenceExpression = queryFromClause.Expression as MemberReferenceExpression; if (memberReferenceExpression != null) { var identifierExpression = memberReferenceExpression.Target as IdentifierExpression; if (identifierExpression != null && identifierExpression.Identifier != "docs") { var generateExpression = GenerateExpression(queryFromClause.Expression); if (generateExpression != null) { aliasToName[queryFromClause.Identifier] = generateExpression + ","; } } } return(base.VisitQueryFromClause(queryFromClause, data)); }
public void Run(AstNode compilationUnit) { root = compilationUnit; DecompileQueries(compilationUnit); // After all queries were decompiled, detect degenerate queries (queries not property terminated with 'select' or 'group') // and fix them, either by adding a degenerate select, or by combining them with another query. foreach (QueryExpression query in compilationUnit.Descendants.OfType <QueryExpression>()) { var fromClause = query.Clauses.First() as QueryFromClause; if (fromClause == null) { continue; } if (IsDegenerateQuery(query)) { // introduce select for degenerate query query.Clauses.Add(new QuerySelectClause { Expression = new IdentifierExpression(fromClause.Identifier) }); } // See if the data source of this query is a degenerate query, // and combine the queries if possible. QueryExpression innerQuery = fromClause.Expression as QueryExpression; while (IsDegenerateQuery(innerQuery)) { QueryFromClause innerFromClause = (QueryFromClause)innerQuery.Clauses.First(); if (fromClause.Identifier != innerFromClause.Identifier) { break; } // Replace the fromClause with all clauses from the inner query fromClause.Remove(); QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = Detach(clause)); } fromClause = innerFromClause; innerQuery = fromClause.Expression as QueryExpression; } } }
void CombineQueries(AstNode node) { for (AstNode child = node.FirstChild; child != null; child = child.NextSibling) { CombineQueries(child); } QueryExpression query = node as QueryExpression; if (query != null) { if (query.Clauses.First().GetType() != typeof(QueryFromClause)) { return; } QueryFromClause fromClause = (QueryFromClause)query.Clauses.First(); QueryExpression innerQuery = fromClause.Expression as QueryExpression; if (innerQuery != null) { if (TryRemoveTransparentIdentifier(query, fromClause, innerQuery)) { RemoveTransparentIdentifierReferences(query); } else { QueryContinuationClause continuation = new QueryContinuationClause(); continuation.PrecedingQuery = Detach(innerQuery); continuation.Identifier = fromClause.Identifier; fromClause.ReplaceWith(continuation); } } else { Match m = castPattern.Match(fromClause.Expression); if (m.Success) { fromClause.Type = Detach(m.Get <AstType>("targetType").Single()); fromClause.Expression = Detach(m.Get <Expression>("inExpr").Single()); } } } }
void CombineQueries(AstNode node, Dictionary <string, object> fromOrLetIdentifiers) { AstNode next; for (AstNode child = node.FirstChild; child != null; child = next) { // store reference to next child before transformation next = child.NextSibling; CombineQueries(child, fromOrLetIdentifiers); } QueryExpression query = node as QueryExpression; if (query != null) { QueryFromClause fromClause = (QueryFromClause)query.Clauses.First(); QueryExpression innerQuery = fromClause.Expression as QueryExpression; if (innerQuery != null) { if (TryRemoveTransparentIdentifier(query, fromClause, innerQuery, fromOrLetIdentifiers)) { RemoveTransparentIdentifierReferences(query, fromOrLetIdentifiers); } else { QueryContinuationClause continuation = new QueryContinuationClause(); continuation.PrecedingQuery = innerQuery.Detach(); continuation.Identifier = fromClause.Identifier; continuation.CopyAnnotationsFrom(fromClause); 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(); } } } }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery) { if (!IsTransparentIdentifier(fromClause.Identifier)) return false; Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) return false; QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); NamedArgumentExpression nae1 = match.Get<NamedArgumentExpression>("nae1").Single(); NamedArgumentExpression nae2 = match.Get<NamedArgumentExpression>("nae2").Single(); if (nae1.Identifier != ((IdentifierExpression)nae1.Expression).Identifier) return false; IdentifierExpression nae2IdentExpr = nae2.Expression as IdentifierExpression; if (nae2IdentExpr != null && nae2.Identifier == nae2IdentExpr.Identifier) { // from * in (from x in ... select new { x = x, y = y }) ... // => // from x in ... ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } } else { // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = nae2.Identifier, Expression = nae2.Expression.Detach() }); } return true; }
public override void VisitQueryFromClause(QueryFromClause syntax) { _underlyingVisitor.VisitQueryFromClause(syntax); }
public override void VisitQueryFromClause(QueryFromClause queryFromClause) { queryFromClause.Expression.AcceptVisitor(this); }
public virtual S VisitQueryFromClause(QueryFromClause queryFromClause, T data) { return(VisitChildren(queryFromClause, data)); }
public void VisitQueryFromClause(QueryFromClause queryFromClause) { throw new NotImplementedException(); }
public abstract string Render(QueryFromClause queryFromClause);
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery, string continuationIdentifier, out string transparentIdentifier) { transparentIdentifier = fromClause.Identifier; Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) return false; QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); Expression nae1 = match.Get<Expression>("nae1").SingleOrDefault(); string nae1Name = ExtractExpressionName(ref nae1); if (nae1Name == null) return false; Expression nae2 = match.Get<Expression>("nae2").SingleOrDefault(); string nae2Name = ExtractExpressionName(ref nae2); if (nae2Name == null) return false; bool introduceLetClause = true; var nae1Identifier = nae1 as IdentifierExpression; var nae2Identifier = nae2 as IdentifierExpression; if (nae1Identifier != null && nae2Identifier != null && nae1Identifier.Identifier == nae1Name && nae2Identifier.Identifier == nae2Name) { introduceLetClause = false; } if (nae1Name != continuationIdentifier) { if (nae2Name == continuationIdentifier) { //Members are in reversed order string tempName = nae1Name; Expression tempNae = nae1; nae1Name = nae2Name; nae1 = nae2; nae2Name = tempName; nae2 = tempNae; } else { return false; } } if (introduceLetClause && innerQuery.Clauses.OfType<QueryFromClause>().Any(from => from.Identifier == nae2Name)) { return false; } if (introduceLetClause && innerQuery.Clauses.OfType<QueryJoinClause>().Any(join => join.JoinIdentifier == nae2Name)) { return false; } // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } if (introduceLetClause) { query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = nae2Name, Expression = nae2.Detach() }); } return true; }
public Node VisitQueryFromClause(QueryFromClause queryFromClause) { return(CreateDummy(queryFromClause)); }
public virtual void VisitQueryFromClause(QueryFromClause queryFromClause) { VisitChildren (queryFromClause); }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery, out string transparentIdentifier) { transparentIdentifier = fromClause.Identifier; Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) return false; QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); Expression nae1 = match.Get<Expression>("nae1").SingleOrDefault(); string nae1Name = ExtractExpressionName(ref nae1); if (nae1Name == null) return false; Expression nae2 = match.Get<Expression>("nae2").SingleOrDefault(); string nae2Name = ExtractExpressionName(ref nae2); if (nae1Name == null) return false; // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = nae2Name, Expression = nae2.Detach() }); return true; }
public override void VisitQueryFromClause(QueryFromClause queryFromClause) { FixClauseIndentation(queryFromClause, queryFromClause.FromKeyword); }
public override object Visit(Mono.CSharp.Linq.QueryStartClause queryExpression) { if (queryExpression.Expr == null) { var intoClause = new QueryContinuationClause(); intoClause.AddChild(new CSharpTokenNode(Convert(queryExpression.Location), QueryContinuationClause.IntoKeywordRole), QueryContinuationClause.IntoKeywordRole); intoClause.AddChild(Identifier.Create(queryExpression.IntoVariable.Name, Convert(queryExpression.IntoVariable.Location)), Roles.Identifier); return intoClause; } var fromClause = new QueryFromClause(); fromClause.AddChild(new CSharpTokenNode(Convert(queryExpression.Location), QueryFromClause.FromKeywordRole), QueryFromClause.FromKeywordRole); if (queryExpression.IdentifierType != null) fromClause.AddChild(ConvertToType(queryExpression.IdentifierType), Roles.Type); fromClause.AddChild(Identifier.Create(queryExpression.IntoVariable.Name, Convert(queryExpression.IntoVariable.Location)), Roles.Identifier); var location = LocationsBag.GetLocations(queryExpression); if (location != null) fromClause.AddChild(new CSharpTokenNode(Convert(location [0]), QueryFromClause.InKeywordRole), QueryFromClause.InKeywordRole); if (queryExpression.Expr != null) fromClause.AddChild((Expression)queryExpression.Expr.Accept(this), Roles.Expression); return fromClause; }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery) { if (!IsTransparentIdentifier(fromClause.Identifier)) return false; Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) return false; QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); NamedExpression nae1 = match.Get<NamedExpression>("nae1").SingleOrDefault(); NamedExpression nae2 = match.Get<NamedExpression>("nae2").SingleOrDefault(); if (nae1 != null && nae1.Name != ((IdentifierExpression)nae1.Expression).Identifier) return false; Expression nae2Expr = match.Get<Expression>("nae2Expr").Single(); IdentifierExpression nae2IdentExpr = nae2Expr as IdentifierExpression; if (nae2IdentExpr != null && (nae2 == null || nae2.Name == nae2IdentExpr.Identifier)) { // from * in (from x in ... select new { x = x, y = y }) ... // => // from x in ... ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } } else { // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = clause.Detach()); } string ident; if (nae2 != null) ident = nae2.Name; else if (nae2Expr is IdentifierExpression) ident = ((IdentifierExpression)nae2Expr).Identifier; else if (nae2Expr is MemberReferenceExpression) ident = ((MemberReferenceExpression)nae2Expr).MemberName; else throw new InvalidOperationException("Could not infer name from initializer in AnonymousTypeCreateExpression"); query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = ident, Expression = nae2Expr.Detach() }); } return true; }
public JNode VisitQueryFromClause(QueryFromClause node) { throw new NotImplementedException(); }
public void VisitQueryFromClause(QueryFromClause node) { NotSupported(node); }
private static void HandleCollectionName(Expression expression, QueryFromClause fromClause, QueryExpression queryExpression, ref string entityName) { // from d in docs.Users.SelectMany(x=>x.Roles) ... // from d in docs.Users.Where(x=>x.IsActive) ... var mie = expression as InvocationExpression; string methodToCall = null; if (mie != null) { expression = mie.Target; var target = expression as MemberReferenceExpression; if (target != null) { methodToCall = target.MemberName; expression = target.Target; } } var mre = expression as MemberReferenceExpression; if (mre == null) { return; } string oldIdentifier = fromClause.Identifier; if (mie != null) { fromClause.Identifier += "Item"; } entityName = mre.MemberName; fromClause.Expression = mre.Target; //doc["@metadata"]["Raven-Entity-Name"] var metadata = new IndexerExpression( new IndexerExpression(new IdentifierExpression(fromClause.Identifier), new List <Expression> { new StringLiteralExpression("@metadata") }), new List <Expression> { new StringLiteralExpression(Constants.RavenEntityName) } ); // string.Equals(doc["@metadata"]["Raven-Entity-Name"], "Blogs", StringComparison.OrdinalIgnoreCase) var binaryOperatorExpression = new InvocationExpression( new MemberReferenceExpression(new TypeReferenceExpression(new PrimitiveType("string")), "Equals"), new List <Expression> { metadata, new StringLiteralExpression(mre.MemberName), new MemberReferenceExpression(new TypeReferenceExpression(new SimpleType(typeof(StringComparison).FullName)), "InvariantCultureIgnoreCase") }); var queryWhereClause = new QueryWhereClause { Condition = binaryOperatorExpression }; ((QueryExpression)fromClause.Parent).Clauses.InsertAfter(fromClause, queryWhereClause); if (mie != null) { var newSource = new ArrayCreateExpression { Initializer = new ArrayInitializerExpression(new IdentifierExpression(fromClause.Identifier)), AdditionalArraySpecifiers = { new ArraySpecifier(1) } }; queryExpression.Clauses.InsertAfter(queryWhereClause, new QueryFromClause { Identifier = oldIdentifier, Expression = new InvocationExpression(new MemberReferenceExpression(newSource, methodToCall), mie.Arguments.Select(x => x.Clone())) }); } }
public virtual void VisitQueryFromClause(QueryFromClause queryFromClause) { if (this.ThrowException) { throw (Exception)this.CreateException(queryFromClause); } }
/// <inheritdoc/> public virtual void VisitQueryFromClause(QueryFromClause syntax) { VisitNode(syntax); }
public StringBuilder VisitQueryFromClause(QueryFromClause queryFromClause) { return(InvalidNode(queryFromClause, "LINQ is not supported")); }
public StringBuilder VisitQueryFromClause(QueryFromClause queryFromClause, int data) { throw new SLSharpException("SL# does not understand LINQ."); }
bool TryRemoveTransparentIdentifier(QueryExpression query, QueryFromClause fromClause, QueryExpression innerQuery) { if (!IsTransparentIdentifier(fromClause.Identifier)) { return(false); } Match match = selectTransparentIdentifierPattern.Match(innerQuery.Clauses.Last()); if (!match.Success) { return(false); } QuerySelectClause selectClause = (QuerySelectClause)innerQuery.Clauses.Last(); NamedExpression nae1 = match.Get <NamedExpression>("nae1").SingleOrDefault(); NamedExpression nae2 = match.Get <NamedExpression>("nae2").SingleOrDefault(); if (nae1 != null && nae1.Name != ((IdentifierExpression)nae1.Expression).Identifier) { return(false); } Expression nae2Expr = match.Get <Expression>("nae2Expr").Single(); IdentifierExpression nae2IdentExpr = nae2Expr as IdentifierExpression; if (nae2IdentExpr != null && (nae2 == null || nae2.Name == nae2IdentExpr.Identifier)) { // from * in (from x in ... select new { x = x, y = y }) ... // => // from x in ... ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = Detach(clause)); } } else { // from * in (from x in ... select new { x = x, y = expr }) ... // => // from x in ... let y = expr ... fromClause.Remove(); selectClause.Remove(); // Move clauses from innerQuery to query QueryClause insertionPos = null; foreach (var clause in innerQuery.Clauses) { query.Clauses.InsertAfter(insertionPos, insertionPos = Detach(clause)); } string ident; if (nae2 != null) { ident = nae2.Name; } else if (nae2Expr is MemberReferenceExpression) { ident = ((MemberReferenceExpression)nae2Expr).MemberName; } else { throw new InvalidOperationException("Could not infer name from initializer in AnonymousTypeCreateExpression"); } query.Clauses.InsertAfter(insertionPos, new QueryLetClause { Identifier = ident, Expression = Detach(nae2Expr) }); } return(true); }
public override void VisitQueryFromClause(QueryFromClause queryFromClause) { ProcessName(queryFromClause.Identifier); base.VisitQueryFromClause(queryFromClause); }
/* public override object Visit (Mono.CSharp.Linq.Query queryExpression) { var result = new QueryFromClause (); var location = LocationsBag.GetLocations (queryExpression); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), "from".Length), QueryFromClause.FromKeywordRole); // TODO: select identifier if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[1]), "in".Length), QueryFromClause.InKeywordRole); var query = queryExpression.Expr as Mono.CSharp.Linq.AQueryClause; // if (query != null && query.Expr != null) // result.AddChild ((AstNode)query.Expr.Accept (this), QueryFromClause.Roles.Expression); return result; } */ public override object Visit (Mono.CSharp.Linq.SelectMany selectMany) { var result = new QueryFromClause (); // TODO: // Mono.CSharp.Linq.Cast cast = selectMany.Expr as Mono.CSharp.Linq.Cast; var location = LocationsBag.GetLocations (selectMany); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), "from".Length), QueryFromClause.FromKeywordRole); // result.AddChild ((AstNode)cast.TypeExpr.Accept (this), QueryFromClause.Roles.ReturnType); // if (cast != null) // result.AddChild (new Identifier (selectMany.SelectIdentifier.Value, Convert (selectMany.SelectIdentifier.Location)), QueryFromClause.Roles.Identifier); // result.AddChild (new CSharpTokenNode (Convert (location[1]), "in".Length), QueryFromClause.InKeywordRole); // result.AddChild ((AstNode)(cast != null ? cast.Expr : selectMany.Expr).Accept (this), QueryFromClause.Roles.Expression); return result; }
public override object Visit(Mono.CSharp.Linq.SelectMany selectMany) { var fromClause = new QueryFromClause(); fromClause.AddChild(new CSharpTokenNode(Convert(selectMany.Location), QueryFromClause.FromKeywordRole), QueryFromClause.FromKeywordRole); if (selectMany.IdentifierType != null) fromClause.AddChild(ConvertToType(selectMany.IdentifierType), Roles.Type); fromClause.AddChild(Identifier.Create(selectMany.IntoVariable.Name, Convert(selectMany.IntoVariable.Location)), Roles.Identifier); var location = LocationsBag.GetLocations(selectMany); if (location != null) fromClause.AddChild(new CSharpTokenNode(Convert(location [0]), QueryFromClause.InKeywordRole), QueryFromClause.InKeywordRole); if (selectMany.Expr != null) fromClause.AddChild((Expression)selectMany.Expr.Accept(this), Roles.Expression); return fromClause; }
public override object Visit (Mono.CSharp.Linq.SelectMany queryStart) { var fromClause = new QueryFromClause (); var location = LocationsBag.GetLocations (queryStart); fromClause.AddChild (new CSharpTokenNode (Convert (queryStart.Location), "from".Length), QueryFromClause.FromKeywordRole); if (queryStart.IdentifierType != null) fromClause.AddChild (ConvertToType (queryStart.IdentifierType), QueryFromClause.Roles.Type); fromClause.AddChild (new Identifier (queryStart.IntoVariable.Name, Convert (queryStart.IntoVariable.Location)), QueryFromClause.Roles.Identifier); if (location != null) fromClause.AddChild (new CSharpTokenNode (Convert (location [0]), "in".Length), QueryFromClause.InKeywordRole); fromClause.AddChild ((Expression)queryStart.Expr.Accept (this), QueryFromClause.Roles.Expression); return fromClause; }
public void VisitQueryFromClause(QueryFromClause queryFromClause) { StartNode(queryFromClause); WriteKeyword(QueryFromClause.FromKeywordRole); queryFromClause.Type.AcceptVisitor(this); Space(); queryFromClause.IdentifierToken.AcceptVisitor(this); Space(); WriteKeyword(QueryFromClause.InKeywordRole); Space(); queryFromClause.Expression.AcceptVisitor(this); EndNode(queryFromClause); }
public override void VisitQueryFromClause(QueryFromClause queryFromClause) { throw NotSupportedToConsistency(); }