You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/08/03 11:52:57 UTC

[shardingsphere] branch master updated: Reduce cost of logical operator match (#11620)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 14bf4a0  Reduce cost of logical operator match (#11620)
14bf4a0 is described below

commit 14bf4a0b691d8364768374ed32816a14f88dbfb5
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Tue Aug 3 19:52:29 2021 +0800

    Reduce cost of logical operator match (#11620)
---
 .../sql/common/constant/LogicalOperator.java       | 29 +++++++++++++++-------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/LogicalOperator.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/LogicalOperator.java
index 75a12a9..be8b6f2 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/LogicalOperator.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/constant/LogicalOperator.java
@@ -17,23 +17,34 @@
 
 package org.apache.shardingsphere.sql.parser.sql.common.constant;
 
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Optional;
-import java.util.TreeSet;
 
 /**
  * Logical operator.
  */
 public enum LogicalOperator {
     
-    AND("AND", "&&"), 
-    OR("OR", "||");
+    AND, OR;
     
-    private final Collection<String> texts = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+    private static final Map<String, LogicalOperator> MAPS = new HashMap<>(16, 1);
     
-    LogicalOperator(final String... texts) {
-        this.texts.addAll(Arrays.asList(texts));
+    static {
+        MAPS.put("and", AND);
+        MAPS.put("And", AND);
+        MAPS.put("aNd", AND);
+        MAPS.put("anD", AND);
+        MAPS.put("ANd", AND);
+        MAPS.put("AnD", AND);
+        MAPS.put("aND", AND);
+        MAPS.put("AND", AND);
+        MAPS.put("&&", AND);
+        MAPS.put("or", OR);
+        MAPS.put("Or", OR);
+        MAPS.put("oR", OR);
+        MAPS.put("OR", OR);
+        MAPS.put("||", OR);
     }
     
     /**
@@ -43,6 +54,6 @@ public enum LogicalOperator {
      * @return logical operator value
      */
     public static Optional<LogicalOperator> valueFrom(final String text) {
-        return Arrays.stream(values()).filter(each -> each.texts.contains(text)).findFirst();
+        return Optional.ofNullable(MAPS.get(text));
     }
 }