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);
        }
Example #7
0
        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));
		}
Example #11
0
 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);
        }
Example #15
0
        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);
        }