예제 #1
0
        public UnifiedElement VisitQuerySelectClause(
            QuerySelectClause select, object data)
        {
            var expr = select.Expression.TryAcceptForExpression(this);

            return(UnifiedSelectQuery.Create(expr));
        }
예제 #2
0
 public virtual void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     if (this.ThrowException)
     {
         throw (System.Exception) this.CreateException(querySelectClause);
     }
 }
예제 #3
0
 public virtual void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     if (ThrowException)
     {
         throw (Exception)CreateException(querySelectClause);
     }
 }
예제 #4
0
        public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
        {
            var visitor = new CaptureSelectNewFieldNamesVisitor();
            querySelectClause.AcceptVisitor(visitor, null);

            indexData.SelectExpressions = visitor.SelectExpressions;
            indexData.NumberOfSelectClauses++;
        }
예제 #5
0
        public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
        {
            var selectExpressions = new Dictionary<string, Expression>();
            var visitor = new CaptureSelectNewFieldNamesVisitor(false, new HashSet<string>(), selectExpressions);
            querySelectClause.AcceptVisitor(visitor, null);

            indexData.SelectExpressions = selectExpressions;
            indexData.NumberOfSelectClauses++;
        }
 public override object VisitQuerySelectClause(QuerySelectClause querySelectClause, object data)
 {
     ProcessQuery(querySelectClause.Expression);
     if (_outerMostRequired)
     {
         return(base.VisitQuerySelectClause(querySelectClause, data));
     }
     return(null);
 }
예제 #7
0
        public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
        {
            var visitor = new CaptureSelectNewFieldNamesVisitor();

            querySelectClause.AcceptVisitor(visitor, null);

            indexData.SelectExpressions = visitor.SelectExpressions;
            indexData.NumberOfSelectClauses++;
        }
예제 #8
0
        public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
        {
            var selectExpressions = new Dictionary <string, Expression>();
            var visitor           = new CaptureSelectNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions);

            querySelectClause.AcceptVisitor(visitor, null);

            indexData.SelectExpressions = selectExpressions;
            indexData.NumberOfSelectClauses++;
        }
        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);
        }
예제 #10
0
        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);
        }
예제 #11
0
 public StringBuilder VisitQuerySelectClause(QuerySelectClause querySelectClause, int data)
 {
     throw new SLSharpException("HLSL does not understand LINQ.");
 }
 /// <inheritdoc/>
 public virtual void VisitQuerySelectClause(QuerySelectClause syntax)
 {
     VisitNode(syntax);
 }
 public virtual S VisitQuerySelectClause(QuerySelectClause querySelectClause, T data)
 {
     return(VisitChildren(querySelectClause, data));
 }
 public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     throw NotSupportedToConsistency();
 }
예제 #15
0
파일: Lower.cs 프로젝트: evanw/minisharp
 public void VisitQuerySelectClause(QuerySelectClause node)
 {
     NotSupported(node);
 }
예제 #16
0
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            QuerySelectClause o = other as QuerySelectClause;

            return(o != null && this.Expression.DoMatch(o.Expression, match));
        }
예제 #17
0
			public override object Visit (Mono.CSharp.Linq.Select sel)
			{
				var result = new QuerySelectClause ();
				var location = LocationsBag.GetLocations (sel);
				result.AddChild (new CSharpTokenNode (Convert (location[0]), "select".Length), QueryWhereClause.Roles.Keyword);
				result.AddChild ((MonoDevelop.CSharp.Ast.Expression)sel.Expr.Accept (this), QueryWhereClause.Roles.Expression);
				return result;
			}
 public virtual void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     if (this.ThrowException)
     {
         throw (Exception)this.CreateException(querySelectClause);
     }
 }
예제 #19
0
 public Node VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     return(CreateDummy(querySelectClause));
 }
예제 #20
0
 public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
 }
        /// <summary>
        /// Gets a query select clause.
        /// </summary>
        /// <param name="parentReference">The parent code unit.</param>
        /// <param name="unsafeCode">Indicates whether the code being parsed resides 
        /// in an unsafe code block.</param>
        /// <returns>Returns the query select clause.</returns>
        private QuerySelectClause GetQuerySelectClause(Reference<ICodePart> parentReference, bool unsafeCode)
        {
            Param.AssertNotNull(parentReference, "parentReference");
            Param.Ignore(unsafeCode);

            // Get and add the 'select' symbol.
            Symbol symbol = this.GetNextSymbol(SymbolType.Other, parentReference);
            Debug.Assert(symbol.Text == "select", "Expected a select keyword");

            var clauseReference = new Reference<ICodePart>();
            Node<CsToken> firstTokenNode = this.tokens.InsertLast(this.GetToken(CsTokenType.Select, SymbolType.Other, clauseReference));

            // Get the select expression.
            Expression selectClauseExpression = this.GetNextExpression(ExpressionPrecedence.Query, clauseReference, unsafeCode);
            if (selectClauseExpression == null)
            {
                throw this.CreateSyntaxException();
            }

            // Create and return the clause.
            var clause = new QuerySelectClause(new CsTokenList(this.tokens, firstTokenNode, this.tokens.Last), selectClauseExpression);
            clauseReference.Target = clause;
            return clause;
        }
예제 #22
0
 public StringBuilder VisitQuerySelectClause(QuerySelectClause querySelectClause, int data)
 {
     throw new ASLException("HLSL does not understand LINQ.");
 }
예제 #23
0
파일: TempEmitter.cs 프로젝트: yctri/Bridge
 public void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     throw new NotImplementedException();
 }
예제 #24
0
		public override void VisitQuerySelectClause(QuerySelectClause querySelectClause)
		{
			FixClauseIndentation(querySelectClause, querySelectClause.SelectKeyword);
		}
예제 #25
0
 public override object VisitQuerySelectClause(QuerySelectClause querySelectClause, object data)
 {
     ProcessQuery(querySelectClause.Expression);
     return(base.VisitQuerySelectClause(querySelectClause, data));
 }
예제 #26
0
 public StringBuilder VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     return(InvalidNode(querySelectClause, "LINQ is not supported"));
 }
예제 #27
0
            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 virtual void VisitQuerySelectClause(QuerySelectClause querySelectClause)
		{
			VisitChildren (querySelectClause);
		}
 public override void VisitQuerySelectClause(QuerySelectClause syntax)
 {
     _underlyingVisitor.VisitQuerySelectClause(syntax);
 }
예제 #30
0
 public RedILNode VisitQuerySelectClause(QuerySelectClause querySelectClause, State data)
 {
     throw new System.NotImplementedException();
 }
예제 #31
0
파일: CSharpParser.cs 프로젝트: N3X15/ILSpy
			public override object Visit (Mono.CSharp.Linq.Select sel)
			{
				var result = new QuerySelectClause ();
				result.AddChild (new CSharpTokenNode (Convert (sel.Location), "select".Length), QueryWhereClause.Roles.Keyword);
				result.AddChild ((Expression)sel.Expr.Accept (this), QueryWhereClause.Roles.Expression);
				return result;
			}
예제 #32
0
 public void VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     throw new NotImplementedException();
 }
예제 #33
0
			public override object Visit(Mono.CSharp.Linq.Select select)
			{
				var result = new QuerySelectClause();
				result.AddChild(new CSharpTokenNode(Convert(select.Location), QuerySelectClause.SelectKeywordRole), QuerySelectClause.SelectKeywordRole);
				if (select.Expr != null)
					result.AddChild((Expression)select.Expr.Accept(this), Roles.Expression);
				return result;
			}
예제 #34
0
 public JNode VisitQuerySelectClause(QuerySelectClause node)
 {
     throw new NotImplementedException();
 }
예제 #35
0
		public void VisitQuerySelectClause(QuerySelectClause querySelectClause)
		{
			StartNode(querySelectClause);
			WriteKeyword(QuerySelectClause.SelectKeywordRole);
			Space();
			querySelectClause.Expression.AcceptVisitor(this);
			EndNode(querySelectClause);
		}
예제 #36
0
 public virtual Node VisitQuerySelectClause(QuerySelectClause querySelectClause)
 {
     throw new System.NotImplementedException();
 }