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( HqlGeneratorExpressionVisitor.Visit(joinClause.InnerSequence, VisitorParameters), _hqlTree.TreeBuilder.Alias(joinClause.ItemName))); }
public override void VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, int index) { foreach (var clause in orderByClause.Orderings) { var orderBy = HqlGeneratorExpressionVisitor.Visit(clause.Expression, VisitorParameters).ToArithmeticExpression(); var direction = clause.OrderingDirection == OrderingDirection.Asc ? _hqlTree.TreeBuilder.Ascending() : (HqlDirectionStatement)_hqlTree.TreeBuilder.Descending(); _hqlTree.AddOrderByClause(orderBy, direction); } }
private void VisitUpdateClause(Expression expression) { var listInit = expression as ListInitExpression ?? throw new QueryException("Malformed update expression"); foreach (var initializer in listInit.Initializers) { var member = (ConstantExpression)initializer.Arguments[0]; var setter = initializer.Arguments[1]; var setterHql = HqlGeneratorExpressionVisitor.Visit(setter, VisitorParameters).AsExpression(); _hqlTree.AddSet(_hqlTree.TreeBuilder.Equality(_hqlTree.TreeBuilder.Ident((string)member.Value), setterHql)); } }
public override Expression Visit(Expression expression) { if (expression == null) { return(null); } if (_hqlNodes.Contains(expression)) { // Pure HQL evaluation _hqlTreeNodes.Add(_hqlVisitor.Visit(expression).AsExpression()); return(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.Visit(expression)); }
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel) { var querySourceName = VisitorParameters.QuerySourceNamer.GetName(fromClause); var hqlExpressionTree = HqlGeneratorExpressionVisitor.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 void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index) { var querySourceName = VisitorParameters.QuerySourceNamer.GetName(fromClause); if (fromClause.FromExpression is MemberExpression) { // It's a join _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Join( HqlGeneratorExpressionVisitor.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( HqlGeneratorExpressionVisitor.Visit(fromClause.FromExpression, VisitorParameters), _hqlTree.TreeBuilder.Alias(querySourceName))); } base.VisitAdditionalFromClause(fromClause, queryModel, index); }