Пример #1
0
 public override void ExplicitVisit(BooleanTernaryExpression node)
 {
     base.ExplicitVisit(node);
     ReplaceExpression(node, n => n.FirstExpression);
     ReplaceExpression(node, n => n.SecondExpression);
     ReplaceExpression(node, n => n.ThirdExpression);
 }
 public void TestSimpleAnd()
 {
     var expr = new BooleanTernaryExpression(new Property(nameof(Condition))).FillInSecond(new Property("Then")).FillInThird(new Property("Else"));
     Condition = true;
     Assert.That(expr.Evaluate(new Reflection(this)), Is.EqualTo("then"));
     Condition = false;
     Assert.That(expr.Evaluate(new Reflection(this)), Is.EqualTo("else"));
 }
Пример #3
0
        public void TestSimpleAnd()
        {
            var expr = new BooleanTernaryExpression(new Property(nameof(Condition))).FillInSecond(new Property("Then")).FillInThird(new Property("Else"));

            Condition = true;
            Assert.That(expr.Evaluate(new Reflection(this)), Is.EqualTo("then"));
            Condition = false;
            Assert.That(expr.Evaluate(new Reflection(this)), Is.EqualTo("else"));
        }
Пример #4
0
        public override void ExplicitVisit(BooleanTernaryExpression node)
        {
            node.FirstExpression.Accept(this);
            if (node.TernaryExpressionType == BooleanTernaryExpressionType.Between)
            {
                _buffer.Append(" between ");
            }
            else if (node.TernaryExpressionType == BooleanTernaryExpressionType.NotBetween)
            {
                _buffer.Append(" not between ");
            }

            node.SecondExpression.Accept(this);
            _buffer.Append(" and ");
            node.ThirdExpression.Accept(this);
        }
Пример #5
0
        public QsiExpressionNode VisitBooleanTernaryExpression(BooleanTernaryExpression booleanTernaryExpression)
        {
            var invoke = TreeHelper.Create <QsiInvokeExpressionNode>(n =>
            {
                n.Member.SetValue(TreeHelper.CreateFunction(SqlServerKnownFunction.Ternary));

                n.Parameters.Add(VisitScalarExpression(booleanTernaryExpression.FirstExpression));
                n.Parameters.Add(VisitScalarExpression(booleanTernaryExpression.SecondExpression));
                n.Parameters.Add(VisitScalarExpression(booleanTernaryExpression.ThirdExpression));
            });

            var operand = booleanTernaryExpression.TernaryExpressionType switch
            {
                BooleanTernaryExpressionType.Between => SqlServerKnownOperator.Between,
                BooleanTernaryExpressionType.NotBetween => SqlServerKnownOperator.NotBetween,
                _ => throw new InvalidOperationException()
            };

            return(TreeHelper.CreateUnary(operand, invoke));
        }
Пример #6
0
 public override void Visit(BooleanTernaryExpression node) { this.action(node); }
 public override void ExplicitVisit(BooleanTernaryExpression fragment)
 {
     _fragments.Add(fragment);
 }