public Visit ( |
||
expression | ||
return |
private HqlEquality GenerateEqualityNode(Expression leftExpr, Expression rightExpr) { // TODO - why two visitors? Can't we just reuse? var left = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters); var right = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters); return _hqlTreeBuilder.Equality(left.Visit(leftExpr).AsExpression(), right.Visit(rightExpr).AsExpression()); }
public override void VisitJoinClause(JoinClause joinClause, QueryModel queryModel, int index) { var equalityVisitor = new EqualityHqlGenerator(VisitorParameters); var whereClause = equalityVisitor.Visit(joinClause.InnerKeySelector, joinClause.OuterKeySelector); _hqlTree.AddWhereClause(whereClause); _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Range( HqlGeneratorExpressionTreeVisitor.Visit(joinClause.InnerSequence, VisitorParameters), _hqlTree.TreeBuilder.Alias(joinClause.ItemName))); }
public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index) { // Visit the predicate to build the query var expression = HqlGeneratorExpressionTreeVisitor.Visit(whereClause.Predicate, VisitorParameters).AsBooleanExpression(); if (whereClause is NhHavingClause) { _hqlTree.AddHavingClause(expression); } else { _hqlTree.AddWhereClause(expression); } }
public override Expression VisitExpression(Expression expression) { if (expression == null) { return(null); } if (_hqlNodes.Contains(expression)) { // Pure HQL evaluation _hqlTreeNodes.Add(_hqlVisitor.Visit(expression).AsExpression()); return(Expression.Convert(Expression.ArrayIndex(_inputParameter, Expression.Constant(_iColumn++)), expression.Type)); } // Can't handle this node with HQL. Just recurse down, and emit the expression return(base.VisitExpression(expression)); }
public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index) { var visitor = new SimplifyConditionalVisitor(); whereClause.Predicate = visitor.VisitExpression(whereClause.Predicate); // Visit the predicate to build the query var expression = HqlGeneratorExpressionTreeVisitor.Visit(whereClause.Predicate, VisitorParameters).ToBooleanExpression(); if (whereClause is NhHavingClause) { _hqlTree.AddHavingClause(expression); } else { _hqlTree.AddWhereClause(expression); } }
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel) { _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters), _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); // apply any result operators that were rewritten if (RewrittenOperatorResult != null) { CurrentEvaluationType = RewrittenOperatorResult.EvaluationType; foreach (ResultOperatorBase rewrittenOperator in RewrittenOperatorResult.RewrittenOperators) { this.VisitResultOperator(rewrittenOperator, queryModel, -1); } } base.VisitMainFromClause(fromClause, queryModel); }
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) { if (fromClause is NhJoinClause) { if (((NhJoinClause)fromClause).IsInner) { _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Join( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); } else { _hqlTree.AddFromClause(_hqlTree.TreeBuilder.LeftJoin( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); } } else if (fromClause.FromExpression is MemberExpression) { var member = (MemberExpression)fromClause.FromExpression; if (member.Expression is QuerySourceReferenceExpression) { // It's a join _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Join( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); } else { // What's this? throw new NotSupportedException(); } } else { // TODO - exact same code as in MainFromClause; refactor this out _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters), _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); } base.VisitAdditionalFromClause(fromClause, queryModel, index); }
public override Expression VisitExpression(Expression expression) { if (expression == null) { return null; } if (_hqlNodes.Contains(expression)) { // Pure HQL evaluation - TODO - cache the Visitor? var hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameters); _hqlTreeNodes.Add(hqlVisitor.Visit(expression).AsExpression()); return Expression.Convert(Expression.ArrayIndex(_inputParameter, Expression.Constant(_iColumn++)), expression.Type); } // Can't handle this node with HQL. Just recurse down, and emit the expression return base.VisitExpression(expression); }
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) { var querySourceName = VisitorParameters.QuerySourceNamer.GetName(fromClause); if (fromClause is NhJoinClause) { if (((NhJoinClause)fromClause).IsInner) { _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Join( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(querySourceName))); } else { _hqlTree.AddFromClause( _hqlTree.TreeBuilder.LeftJoin( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(querySourceName))); } } else if (fromClause.FromExpression is MemberExpression) { // It's a join _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Join( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(), _hqlTree.TreeBuilder.Alias(querySourceName))); } else { // TODO - exact same code as in MainFromClause; refactor this out _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Range( HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters), _hqlTree.TreeBuilder.Alias(querySourceName))); } base.VisitAdditionalFromClause(fromClause, queryModel, index); }
private void VisitNhJoinClause(string querySourceName, NhJoinClause joinClause) { var expression = HqlGeneratorExpressionTreeVisitor.Visit(joinClause.FromExpression, VisitorParameters).AsExpression(); var alias = _hqlTree.TreeBuilder.Alias(querySourceName); HqlTreeNode hqlJoin; if (joinClause.IsInner) { hqlJoin = _hqlTree.TreeBuilder.Join(expression, @alias); } else { hqlJoin = _hqlTree.TreeBuilder.LeftJoin(expression, @alias); } foreach (var withClause in joinClause.Restrictions) { var booleanExpression = HqlGeneratorExpressionTreeVisitor.Visit(withClause.Predicate, VisitorParameters).AsBooleanExpression(); hqlJoin.AddChild(_hqlTree.TreeBuilder.With(booleanExpression)); } _hqlTree.AddFromClause(hqlJoin); }
protected HqlTreeNode VisitNewArrayExpression(NewArrayExpression expression) { var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters); var expressionSubTree = expression.Expressions.Select(exp => visitor.Visit(exp)); return _hqlTreeBuilder.ExpressionSubTreeHolder(expressionSubTree); }
public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index) { // Visit the predicate to build the query _hqlTree.AddWhereClause(HqlGeneratorExpressionTreeVisitor.Visit(whereClause.Predicate, VisitorParameters).AsBooleanExpression()); }