Commit e9245451 authored by terrymanu's avatar terrymanu
Browse files

for #2084, add PredicateExtractor.getAndPredicateSegment

parent b1260ab3
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.core.parse.antlr.constant;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.core.parse.old.lexer.token.Symbol;

/**
 * Logical operator.
@@ -29,10 +28,6 @@ import org.apache.shardingsphere.core.parse.old.lexer.token.Symbol;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class LogicalOperator {
    
    private static final String AND = "AND";
    
    private static final String OR = "OR";
    
    /**
     * Judge is logical operator or not.
     *
@@ -44,7 +39,7 @@ public final class LogicalOperator {
    }
    
    private static boolean isAndOperator(final String token) {
        return AND.equalsIgnoreCase(token) || Symbol.DOUBLE_AMP.getLiterals().equalsIgnoreCase(token);
        return "AND".equalsIgnoreCase(token) || "&&".equals(token);
    }
    
    /**
@@ -54,6 +49,6 @@ public final class LogicalOperator {
     * @return OR operator or not
     */
    public static boolean isOrOperator(final String token) {
        return OR.equalsIgnoreCase(token) || Symbol.DOUBLE_BAR.getLiterals().equalsIgnoreCase(token);
        return "OR".equalsIgnoreCase(token) || "||".equals(token);
    }
}
+13 −9
Original line number Diff line number Diff line
@@ -93,9 +93,9 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor {
            return Optional.absent();
        }
        OrPredicateSegment result = new OrPredicateSegment();
        AndPredicateSegment newAndPredicate = new AndPredicateSegment();
        newAndPredicate.getPredicates().add(predicate.get());
        result.getAndPredicates().add(newAndPredicate);
        AndPredicateSegment andPredicate = new AndPredicateSegment();
        andPredicate.getPredicates().add(predicate.get());
        result.getAndPredicates().add(andPredicate);
        return Optional.of(result);
    }
    
@@ -199,14 +199,18 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor {
            return leftPredicate;
        }
        OrPredicateSegment result = new OrPredicateSegment();
        for (AndPredicateSegment each : leftPredicate.getAndPredicates()) {
            for (AndPredicateSegment eachRightOr : rightPredicate.getAndPredicates()) {
                AndPredicateSegment tempList = new AndPredicateSegment();
                tempList.getPredicates().addAll(each.getPredicates());
                tempList.getPredicates().addAll(eachRightOr.getPredicates());
                result.getAndPredicates().add(tempList);
        for (AndPredicateSegment eachLeftPredicate : leftPredicate.getAndPredicates()) {
            for (AndPredicateSegment eachRightPredicate : rightPredicate.getAndPredicates()) {
                result.getAndPredicates().add(getAndPredicateSegment(eachLeftPredicate, eachRightPredicate));
            }
        }
        return result;
    }
    
    private AndPredicateSegment getAndPredicateSegment(final AndPredicateSegment leftPredicate, final AndPredicateSegment rightPredicate) {
        AndPredicateSegment result = new AndPredicateSegment();
        result.getPredicates().addAll(leftPredicate.getPredicates());
        result.getPredicates().addAll(rightPredicate.getPredicates());
        return result;
    }
}