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 VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel) { var querySourceName = VisitorParameters.QuerySourceNamer.GetName(fromClause); var hqlExpressionTree = HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters); _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range(hqlExpressionTree, _hqlTree.TreeBuilder.Alias(querySourceName))); // apply any result operators that were rewritten if (RewrittenOperatorResult != null) { CurrentEvaluationType = RewrittenOperatorResult.EvaluationType; foreach (ResultOperatorBase rewrittenOperator in RewrittenOperatorResult.RewrittenOperators) { VisitResultOperator(rewrittenOperator, queryModel, -1); } } base.VisitMainFromClause(fromClause, queryModel); }
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 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); }
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) { if (fromClause is LeftJoinClause) { // It's a left join _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); }
protected HqlTreeNode VisitNhDistinct(NhDistinctExpression expression) { var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters); return(_hqlTreeBuilder.ExpressionSubTreeHolder(_hqlTreeBuilder.Distinct(), visitor.VisitExpression(expression.Expression))); }
protected HqlTreeNode VisitNewArrayExpression(NewArrayExpression expression) { var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters); var expressionSubTree = expression.Expressions.Select(exp => visitor.Visit(exp)); return _hqlTreeBuilder.ExpressionSubTreeHolder(expressionSubTree); }
protected HqlTreeNode VisitNhDistinct(NhDistinctExpression expression) { var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters); return _hqlTreeBuilder.ExpressionSubTreeHolder(_hqlTreeBuilder.Distinct(), visitor.VisitExpression(expression.Expression)); }
public SelectClauseVisitor(System.Type inputType, VisitorParameters parameters) { _inputParameter = Expression.Parameter(inputType, "input"); _parameters = parameters; _hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameters); }
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()); }
public SelectClauseVisitor(System.Type inputType, VisitorParameters parameters) { _inputParameter = Expression.Parameter(inputType, "input"); _parameters = parameters; _hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameters); }
public static HqlTreeNode Visit(Expression expression, VisitorParameters parameters) { var visitor = new HqlGeneratorExpressionTreeVisitor(parameters); return visitor.VisitExpression(expression); }
public static HqlTreeNode Visit(Expression expression, VisitorParameters parameters) { var visitor = new HqlGeneratorExpressionTreeVisitor(parameters); return(visitor.VisitExpression(expression)); }
public static HqlTreeNode Visit(Expression expression, IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters) { var visitor = new HqlGeneratorExpressionTreeVisitor(parameters, requiredHqlParameters); return visitor.VisitExpression(expression); }