Exemple #1
0
        public override void ExplicitVisit(BooleanParenthesisExpression node)
        {
            var comparisonExpression = node.Expression as BooleanComparisonExpression;

            checkForNullLiterals(comparisonExpression);
            base.ExplicitVisit(node);
        }
        private void BuildEqualsSameLiteral(BooleanExpression search, ScalarExpression firstParam, Literal literal)
        {
            var newExpression = new BooleanParenthesisExpression();
            var expression    = new BooleanBinaryExpression();

            newExpression.Expression = expression;

            expression.BinaryExpressionType = BooleanBinaryExpressionType.Or;
            var isnull = new BooleanIsNullExpression();

            isnull.Expression          = firstParam;
            expression.FirstExpression = isnull;

            var second = new BooleanComparisonExpression();

            second.FirstExpression      = firstParam;
            second.SecondExpression     = literal;
            expression.SecondExpression = second;

            var sql = ScriptDom.GenerateTSql(newExpression);

            _replacementsToMake.Add(new Replacements
            {
                Original         = _script.Substring(search.StartOffset, search.FragmentLength),
                OriginalLength   = search.FragmentLength,
                OriginalOffset   = search.StartOffset,
                Replacement      = sql,
                OriginalFragment = _currentFragment
            });
        }
        private bool TestClause(BooleanParenthesisExpression be)
        {
            if (be.Expression is BooleanBinaryExpression booleanExpression)
            {
                var expr1 = booleanExpression.FirstExpression;
                var expr2 = booleanExpression.SecondExpression;

                return(booleanExpression.BinaryExpressionType == BooleanBinaryExpressionType.Or &&
                       (expr1 is BooleanIsNullExpression || expr1 is BooleanComparisonExpression) &&
                       (expr2 is BooleanIsNullExpression || expr2 is BooleanComparisonExpression) &&
                       _comparer.Equals(GetVariableName(expr1), GetVariableName(expr2)));
            }
            return(false);
        }
Exemple #4
0
        protected override BooleanExpression ReplaceExpression(BooleanExpression expression)
        {
            if (expression is BooleanTernaryExpression between)
            {
                // field BETWEEN x AND y is equivalent to (field >= x AND field <= y)
                // field NOT BETWEEN x AND y is equivalent to (field < x OR field > y)
                var converted = new BooleanParenthesisExpression
                {
                    Expression = new BooleanBinaryExpression
                    {
                        FirstExpression = new BooleanComparisonExpression
                        {
                            FirstExpression  = between.FirstExpression,
                            ComparisonType   = between.TernaryExpressionType == BooleanTernaryExpressionType.Between ? BooleanComparisonType.GreaterThanOrEqualTo : BooleanComparisonType.LessThan,
                            SecondExpression = between.SecondExpression,

                            FirstTokenIndex   = between.FirstTokenIndex,
                            LastTokenIndex    = between.LastTokenIndex,
                            ScriptTokenStream = between.ScriptTokenStream
                        },
                        BinaryExpressionType = between.TernaryExpressionType == BooleanTernaryExpressionType.Between ? BooleanBinaryExpressionType.And : BooleanBinaryExpressionType.Or,
                        SecondExpression     = new BooleanComparisonExpression
                        {
                            FirstExpression  = between.FirstExpression,
                            ComparisonType   = between.TernaryExpressionType == BooleanTernaryExpressionType.Between ? BooleanComparisonType.LessThanOrEqualTo : BooleanComparisonType.GreaterThan,
                            SecondExpression = between.ThirdExpression,

                            FirstTokenIndex   = between.FirstTokenIndex,
                            LastTokenIndex    = between.LastTokenIndex,
                            ScriptTokenStream = between.ScriptTokenStream
                        },

                        FirstTokenIndex   = between.FirstTokenIndex,
                        LastTokenIndex    = between.LastTokenIndex,
                        ScriptTokenStream = between.ScriptTokenStream
                    },

                    FirstTokenIndex   = between.FirstTokenIndex,
                    LastTokenIndex    = between.LastTokenIndex,
                    ScriptTokenStream = between.ScriptTokenStream
                };

                return(converted);
            }

            return(expression);
        }
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     node.Expression.Accept(this);
 }
 public override void Visit(BooleanParenthesisExpression node) { this.action(node); }
Exemple #7
0
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     base.ExplicitVisit(node);
     ReplaceExpression(node, n => n.Expression);
 }
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     Rewrite(node, n => n.Expression);
     base.ExplicitVisit(node);
 }
 public override void ExplicitVisit(BooleanParenthesisExpression fragment)
 {
     _fragments.Add(fragment);
 }
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     base.ExplicitVisit(node);
 }
Exemple #11
0
 public QsiExpressionNode VisitBooleanParenthesisExpression(BooleanParenthesisExpression booleanParenthesisExpression)
 {
     return(VisitBooleanExpression(booleanParenthesisExpression.Expression));
 }
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     var comparisonExpression = node.Expression as BooleanComparisonExpression;
     checkForNullLiterals(comparisonExpression);
     base.ExplicitVisit(node);
 }
        private void BuildEqualsSameLiteral(BooleanExpression search, ScalarExpression firstParam, Literal literal)
        {
            var newExpression = new BooleanParenthesisExpression();
            var expression = new BooleanBinaryExpression();
            newExpression.Expression = expression;

            expression.BinaryExpressionType = BooleanBinaryExpressionType.Or;
            var isnull = new BooleanIsNullExpression();
            isnull.Expression = firstParam;
            expression.FirstExpression = isnull;

            var second = new BooleanComparisonExpression();
            second.FirstExpression = firstParam;
            second.SecondExpression = literal;
            expression.SecondExpression = second;

            var sql = ScriptDom.GenerateTSql(newExpression);

            _replacementsToMake.Add(new Replacements
            {
                Original = _script.Substring(search.StartOffset, search.FragmentLength),
                OriginalLength = search.FragmentLength,
                OriginalOffset = search.StartOffset,
                Replacement = sql,
                OriginalFragment = _currentFragment
            });
        }
Exemple #14
0
 public override void ExplicitVisit(BooleanParenthesisExpression node)
 {
     _buffer.Append("(");
     base.ExplicitVisit(node);
     _buffer.Append(")");
 }