You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2020/10/22 13:22:20 UTC

[shardingsphere] branch master updated: Create SQLParsedResultCache (#7893)

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

duanzhengqiang 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 a5600f6  Create SQLParsedResultCache (#7893)
a5600f6 is described below

commit a5600f60a333312b2f24579632f0a76dc7470528
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Thu Oct 22 21:21:45 2020 +0800

    Create SQLParsedResultCache (#7893)
---
 .../sql/parser/engine/SQLParsedResultCache.java    | 23 ++++++++---
 .../parser/engine/ast/ASTSQLParsedResultCache.java | 48 ----------------------
 .../sql/parser/engine/ast/ASTSQLParserEngine.java  |  3 +-
 .../standard/StandardSQLParsedResultCache.java     | 48 ----------------------
 .../standard/StandardSQLParserEngine.java          |  5 ++-
 ...acheTest.java => SQLParsedResultCacheTest.java} | 10 ++---
 6 files changed, 27 insertions(+), 110 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java
index 8bcd20e..2b59d50 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java
@@ -17,20 +17,27 @@
 
 package org.apache.shardingsphere.sql.parser.engine;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
 import java.util.Optional;
 
 /**
- * SQL parsed result cache.
+ * Standard SQL parsed result cache.
  */
-public interface SQLParsedResultCache<T> {
+public final class SQLParsedResultCache<T> {
+    
+    private final Cache<String, T> cache = CacheBuilder.newBuilder().softValues().initialCapacity(2000).maximumSize(65535).build();
     
     /**
      * Put SQL and parsed result into cache.
-     * 
+     *
      * @param sql SQL
      * @param parsedResult parsed result
      */
-    void put(String sql, T parsedResult);
+    public void put(final String sql, final T parsedResult) {
+        cache.put(sql, parsedResult);
+    }
     
     /**
      * Get parsed result.
@@ -38,10 +45,14 @@ public interface SQLParsedResultCache<T> {
      * @param sql SQL
      * @return parsed result
      */
-    Optional<T> get(String sql);
+    public Optional<T> get(final String sql) {
+        return Optional.ofNullable(cache.getIfPresent(sql));
+    }
     
     /**
      * Clear cache.
      */
-    void clear();
+    public synchronized void clear() {
+        cache.invalidateAll();
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParsedResultCache.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParsedResultCache.java
deleted file mode 100644
index 6df879c..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParsedResultCache.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sql.parser.engine.ast;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
-
-import java.util.Optional;
-
-/**
- * AST SQL parsed result cache.
- */
-public final class ASTSQLParsedResultCache implements SQLParsedResultCache<ParseTree> {
-    
-    private final Cache<String, ParseTree> cache = CacheBuilder.newBuilder().softValues().initialCapacity(2000).maximumSize(65535).build();
-    
-    @Override
-    public void put(final String sql, final ParseTree parseTree) {
-        cache.put(sql, parseTree);
-    }
-    
-    @Override
-    public Optional<ParseTree> get(final String sql) {
-        return Optional.ofNullable(cache.getIfPresent(sql));
-    }
-    
-    @Override
-    public synchronized void clear() {
-        cache.invalidateAll();
-    }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java
index 185bbec..9952e1b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java
@@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
 import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
 
 import java.util.Optional;
 
@@ -32,7 +33,7 @@ public final class ASTSQLParserEngine implements SQLParserEngine<ParseTree> {
     
     private final String databaseTypeName;
     
-    private final ASTSQLParsedResultCache cache = new ASTSQLParsedResultCache();
+    private final SQLParsedResultCache<ParseTree> cache = new SQLParsedResultCache<>();
     
     @Override
     public ParseTree parse(final String sql, final boolean useCache) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParsedResultCache.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParsedResultCache.java
deleted file mode 100644
index 6b68019..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParsedResultCache.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sql.parser.engine.statement.standard;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-import java.util.Optional;
-
-/**
- * Standard SQL parsed result cache.
- */
-public final class StandardSQLParsedResultCache implements SQLParsedResultCache<SQLStatement> {
-    
-    private final Cache<String, SQLStatement> cache = CacheBuilder.newBuilder().softValues().initialCapacity(2000).maximumSize(65535).build();
-    
-    @Override
-    public void put(final String sql, final SQLStatement sqlStatement) {
-        cache.put(sql, sqlStatement);
-    }
-    
-    @Override
-    public Optional<SQLStatement> get(final String sql) {
-        return Optional.ofNullable(cache.getIfPresent(sql));
-    }
-    
-    @Override
-    public synchronized void clear() {
-        cache.invalidateAll();
-    }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java
index 465ccd3..28ea534 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java
@@ -20,10 +20,11 @@ package org.apache.shardingsphere.sql.parser.engine.statement.standard;
 import lombok.RequiredArgsConstructor;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitorType;
+import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
 import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorFactory;
 import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorRule;
+import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
 import org.apache.shardingsphere.sql.parser.engine.statement.StatementSQLParserEngine;
-import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
 import org.apache.shardingsphere.sql.parser.hook.ParsingHookRegistry;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -37,7 +38,7 @@ public final class StandardSQLParserEngine implements StatementSQLParserEngine {
     
     private final String databaseTypeName;
     
-    private final StandardSQLParsedResultCache cache = new StandardSQLParsedResultCache();
+    private final SQLParsedResultCache<SQLStatement> cache = new SQLParsedResultCache<>();
     
     private final ParsingHookRegistry parsingHookRegistry = ParsingHookRegistry.getInstance();
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/StandardSQLParsedResultCacheTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
similarity index 83%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/StandardSQLParsedResultCacheTest.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
index 16bdcdd..cb576ec 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/StandardSQLParsedResultCacheTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.cache;
 
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParsedResultCache;
+import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
 import org.junit.Test;
@@ -27,11 +27,11 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-public final class StandardSQLParsedResultCacheTest {
+public final class SQLParsedResultCacheTest {
     
     @Test
     public void assertGetSQLStatementWithinCache() {
-        StandardSQLParsedResultCache actual = new StandardSQLParsedResultCache();
+        SQLParsedResultCache actual = new SQLParsedResultCache();
         SQLStatement selectStatement = new MySQLSelectStatement();
         actual.put("SELECT 1", selectStatement);
         assertTrue(actual.get("SELECT 1").isPresent());
@@ -40,7 +40,7 @@ public final class StandardSQLParsedResultCacheTest {
     
     @Test
     public void assertGetSQLStatementWithoutCache() {
-        StandardSQLParsedResultCache actual = new StandardSQLParsedResultCache();
+        SQLParsedResultCache actual = new SQLParsedResultCache();
         SQLStatement selectStatement = new MySQLSelectStatement();
         actual.put("SELECT 1", selectStatement);
         assertFalse(actual.get("SELECT 2").isPresent());
@@ -48,7 +48,7 @@ public final class StandardSQLParsedResultCacheTest {
     
     @Test
     public void assertClear() {
-        StandardSQLParsedResultCache actual = new StandardSQLParsedResultCache();
+        SQLParsedResultCache actual = new SQLParsedResultCache();
         SQLStatement selectStatement = new MySQLSelectStatement();
         actual.put("SELECT 1", selectStatement);
         actual.clear();