Esempio n. 1
0
        protected override Expression VisitExpression(Expression expression)
        {
            if (expression == null)
            {
                return null;
            }

            if (_hqlNodes.Contains(expression))
            {
                // Pure HQL evaluation
                var hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
                hqlVisitor.Visit(expression);
                hqlVisitor.GetHqlTreeNodes().ForEach(n =>_stack.PushLeaf(n) );

                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);
        }
Esempio n. 2
0
		public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index)
		{
			if (fromClause.FromExpression is MemberExpression)
			{
				var member = (MemberExpression) fromClause.FromExpression;

				if (member.Expression is QuerySourceReferenceExpression)
				{
					// It's a join
					var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
					visitor.Visit(fromClause.FromExpression);

					HqlJoin joinNode = _hqlTreeBuilder.Join(
						visitor.GetHqlTreeNodes().Single(),
						_hqlTreeBuilder.Alias(fromClause.ItemName));

					_fromClause.AddChild(joinNode);
				}
			}

			base.VisitAdditionalFromClause(fromClause, queryModel, index);
		}
Esempio n. 3
0
		public override void VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, int index)
		{
			_orderByClause = _hqlTreeBuilder.OrderBy();

			foreach (Ordering clause in orderByClause.Orderings)
			{
				var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
				visitor.Visit(clause.Expression);

				_orderByClause.AddChild(visitor.GetHqlTreeNodes().Single());
				_orderByClause.AddChild(clause.OrderingDirection == OrderingDirection.Asc
				                        	? _hqlTreeBuilder.Ascending()
				                        	: (HqlTreeNode) _hqlTreeBuilder.Descending());
			}

			base.VisitOrderByClause(orderByClause, queryModel, index);
		}
Esempio n. 4
0
		public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index)
		{
			// Visit the predicate to build the query
			var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
			visitor.Visit(whereClause.Predicate);

			// There maybe a where clause in existence already, in which case we AND with it.
			if (_whereClause == null)
			{
				_whereClause = _hqlTreeBuilder.Where(visitor.GetHqlTreeNodes().Single());
			}
			else
			{
				HqlAnd mergedPredicates = _hqlTreeBuilder.And(_whereClause.Children.Single(),
				                                              visitor.GetHqlTreeNodes().Single());
				_whereClause = _hqlTreeBuilder.Where(mergedPredicates);
			}
		}
Esempio n. 5
0
		private void ProcessGroupByOperator(GroupResultOperator resultOperator)
		{
			var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
			visitor.Visit(resultOperator.KeySelector);
			_groupByClause = _hqlTreeBuilder.GroupBy();
			_groupByClause.AddChild(visitor.GetHqlTreeNodes().Single());
		}
Esempio n. 6
0
		public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
		{
			var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
			visitor.Visit(fromClause.FromExpression);

			_fromClause = _hqlTreeBuilder.From(
				_hqlTreeBuilder.Range(
					visitor.GetHqlTreeNodes().Single(),
					_hqlTreeBuilder.Alias(fromClause.ItemName)));

			base.VisitMainFromClause(fromClause, queryModel);
		}