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); }
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); }
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); }
public QsiExpressionNode VisitBooleanParenthesisExpression(BooleanParenthesisExpression booleanParenthesisExpression) { return(VisitBooleanExpression(booleanParenthesisExpression.Expression)); }
public override void ExplicitVisit(BooleanParenthesisExpression node) { _buffer.Append("("); base.ExplicitVisit(node); _buffer.Append(")"); }