public ISqlFragment Build(WhereClause clause)
        {
            _holder = this;
            Where   = null;

            Visit(clause.Predicate);

            if (Where == null)
            {
                throw new BadLinqExpressionException($"Unsupported Where clause: '{clause.Predicate}'");
            }

            return(Where);
        }
        protected override Expression VisitUnary(UnaryExpression node)
        {
            if (node.NodeType == ExpressionType.Not)
            {
                var original = _holder;
                _holder = new NotWhereFragment(original);
                var returnValue = Visit(node.Operand);

                _holder = original;

                return(returnValue);
            }

            return(base.VisitUnary(node));
        }
        private void buildCompoundWhereFragment(BinaryExpression node, string separator)
        {
            var original = _holder;

            var compound = CompoundWhereFragment.For(separator);

            _holder.Register(compound);

            _holder = compound;

            Visit(node.Left);

            _holder = compound;

            Visit(node.Right);

            _holder = original;
        }
        protected override Expression VisitUnary(UnaryExpression node)
        {
            if (node.NodeType == ExpressionType.Not)
            {
                var original = _holder;

                if (original is IReversibleWhereFragment r)
                {
                    _holder.Register(r.Reverse());
                    return(Visit(node.Operand));
                }
                else
                {
                    _holder = new NotWhereFragment(original);
                    var returnValue = Visit(node.Operand);

                    _holder = original;

                    return(returnValue);
                }
            }

            return(base.VisitUnary(node));
        }
 public WhereClauseParser(IMartenSession session, Statement statement)
 {
     _session   = session;
     _statement = statement;
     _holder    = this;
 }
Beispiel #6
0
 public NotWhereFragment(IWhereFragmentHolder parent)
 {
     _parent = parent;
 }