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

chengzhang 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 b06bfdc0631 Update cache option when getSQLStatementParserEngine. 
(#35371)
b06bfdc0631 is described below

commit b06bfdc06312152e6d7e7c47d863bd8c21bda738
Author: Cong Hu <iamhuc...@gmail.com>
AuthorDate: Mon May 12 14:41:38 2025 +0800

    Update cache option when getSQLStatementParserEngine. (#35371)
---
 .../infra/parser/cache/CacheManager.java}          | 26 ++++++++++++----------
 .../parser/cache/SQLStatementCacheBuilder.java     |  8 ++++---
 .../parser/cache/SQLStatementCacheLoader.java      |  9 ++++++++
 .../infra/parser/sql/SQLStatementParserEngine.java | 21 +++++++++++++----
 .../sql/SQLStatementParserEngineFactory.java       |  3 +--
 .../parser/sql/SQLStatementParserExecutor.java     |  9 ++++++++
 .../parser/cache/SQLStatementCacheBuilderTest.java |  3 +--
 .../sql/SQLStatementParserEngineFactoryTest.java   |  3 +--
 .../sql/parser/api/SQLParserEngine.java            |  9 ++++++++
 9 files changed, 66 insertions(+), 25 deletions(-)

diff --git 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/CacheManager.java
similarity index 60%
copy from 
infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
copy to 
infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/CacheManager.java
index 63d78242d37..379cd075f53 100644
--- 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/CacheManager.java
@@ -17,19 +17,21 @@
 
 package org.apache.shardingsphere.infra.parser.cache;
 
+import com.github.benmanes.caffeine.cache.CacheLoader;
 import com.github.benmanes.caffeine.cache.LoadingCache;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.sql.parser.api.CacheOption;
-import org.junit.jupiter.api.Test;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 
-import static org.hamcrest.CoreMatchers.isA;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-class SQLStatementCacheBuilderTest {
+/**
+ * Cache manager.
+ * @param <K> the type of keys maintained by this cache
+ * @param <V> the type of mapped values
+ */
+@RequiredArgsConstructor
+@Getter
+public class CacheManager<K, V> {
+    
+    private final LoadingCache<K, V> cache;
     
-    @Test
-    void assertBuild() {
-        
assertThat(SQLStatementCacheBuilder.build(TypedSPILoader.getService(DatabaseType.class,
 "SQL92"), new CacheOption(2000, 65535L), new CacheOption(128, 1024L)), 
isA(LoadingCache.class));
-    }
+    private final CacheLoader<K, V> cacheLoader;
 }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
index 648a453764b..c28195f092b 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
@@ -39,9 +39,11 @@ public final class SQLStatementCacheBuilder {
      * @param databaseType database type
      * @return built SQL statement cache
      */
-    public static LoadingCache<String, SQLStatement> build(final DatabaseType 
databaseType, final CacheOption sqlStatementCacheOption,
+    public static CacheManager<String, SQLStatement> build(final DatabaseType 
databaseType, final CacheOption sqlStatementCacheOption,
                                                            final CacheOption 
parseTreeCacheOption) {
-        return 
Caffeine.newBuilder().softValues().initialCapacity(sqlStatementCacheOption.getInitialCapacity()).maximumSize(sqlStatementCacheOption.getMaximumSize())
-                .build(new SQLStatementCacheLoader(databaseType, 
parseTreeCacheOption));
+        SQLStatementCacheLoader sqlStatementCacheLoader = new 
SQLStatementCacheLoader(databaseType, parseTreeCacheOption);
+        LoadingCache<String, SQLStatement> loadingCache =
+                
Caffeine.newBuilder().softValues().initialCapacity(sqlStatementCacheOption.getInitialCapacity()).maximumSize(sqlStatementCacheOption.getMaximumSize()).build(sqlStatementCacheLoader);
+        return new CacheManager<>(loadingCache, sqlStatementCacheLoader);
     }
 }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
index 3df17d6031e..f4df2c4a584 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
@@ -36,6 +36,15 @@ public final class SQLStatementCacheLoader implements 
CacheLoader<String, SQLSta
         sqlStatementParserExecutor = new 
SQLStatementParserExecutor(databaseType, parseTreeCacheOption);
     }
     
+    /**
+     * Update cache option.
+     *
+     * @param parseTreeCacheOption parse tree cache option
+     */
+    public void updateCacheOption(final CacheOption parseTreeCacheOption) {
+        sqlStatementParserExecutor.updateCacheOption(parseTreeCacheOption);
+    }
+    
     @ParametersAreNonnullByDefault
     @Override
     public SQLStatement load(final String sql) {
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
index 48bcefc3fc9..72313e24e16 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
@@ -17,10 +17,11 @@
 
 package org.apache.shardingsphere.infra.parser.sql;
 
-import com.github.benmanes.caffeine.cache.LoadingCache;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.parser.cache.CacheManager;
 import org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheBuilder;
+import org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheLoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 
@@ -31,7 +32,7 @@ public final class SQLStatementParserEngine {
     
     private final SQLStatementParserExecutor sqlStatementParserExecutor;
     
-    private final LoadingCache<String, SQLStatement> sqlStatementCache;
+    private final CacheManager<String, SQLStatement> sqlStatementCacheManager;
     
     @Getter
     private final CacheOption sqlStatementCacheOption;
@@ -41,11 +42,23 @@ public final class SQLStatementParserEngine {
     
     public SQLStatementParserEngine(final DatabaseType databaseType, final 
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption) {
         sqlStatementParserExecutor = new 
SQLStatementParserExecutor(databaseType, parseTreeCacheOption);
-        sqlStatementCache = SQLStatementCacheBuilder.build(databaseType, 
sqlStatementCacheOption, parseTreeCacheOption);
+        sqlStatementCacheManager = 
SQLStatementCacheBuilder.build(databaseType, sqlStatementCacheOption, 
parseTreeCacheOption);
         this.sqlStatementCacheOption = sqlStatementCacheOption;
         this.parseTreeCacheOption = parseTreeCacheOption;
     }
     
+    /**
+     * Update cache option.
+     *
+     * @param sqlStatementCacheOption SQL statement cache option
+     * @param parseTreeCacheOption parse tree cache option
+     */
+    public void updateCacheOption(final CacheOption sqlStatementCacheOption, 
final CacheOption parseTreeCacheOption) {
+        
sqlStatementCacheManager.getCache().policy().eviction().ifPresent(eviction -> 
eviction.setMaximum(sqlStatementCacheOption.getMaximumSize()));
+        ((SQLStatementCacheLoader) 
sqlStatementCacheManager.getCacheLoader()).updateCacheOption(parseTreeCacheOption);
+        sqlStatementParserExecutor.updateCacheOption(parseTreeCacheOption);
+    }
+    
     /**
      * Parse to SQL statement.
      *
@@ -54,6 +67,6 @@ public final class SQLStatementParserEngine {
      * @return SQL statement
      */
     public SQLStatement parse(final String sql, final boolean useCache) {
-        return useCache ? sqlStatementCache.get(sql) : 
sqlStatementParserExecutor.parse(sql);
+        return useCache ? sqlStatementCacheManager.getCache().get(sql) : 
sqlStatementParserExecutor.parse(sql);
     }
 }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
index 923fb8facc4..b58c83e849b 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
@@ -46,8 +46,7 @@ public final class SQLStatementParserEngineFactory {
         if (null == result) {
             result = ENGINES.computeIfAbsent(databaseType, key -> new 
SQLStatementParserEngine(key, sqlStatementCacheOption, parseTreeCacheOption));
         } else if 
(!result.getSqlStatementCacheOption().equals(sqlStatementCacheOption) || 
!result.getParseTreeCacheOption().equals(parseTreeCacheOption)) {
-            result = new SQLStatementParserEngine(databaseType, 
sqlStatementCacheOption, parseTreeCacheOption);
-            ENGINES.put(databaseType, result);
+            result.updateCacheOption(sqlStatementCacheOption, 
parseTreeCacheOption);
         }
         return result;
     }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
index def8e58a088..2ce64f66c62 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
@@ -37,6 +37,15 @@ public final class SQLStatementParserExecutor {
         visitorEngine = new SQLStatementVisitorEngine(databaseType);
     }
     
+    /**
+     * Update cache option.
+     *
+     * @param parseTreeCacheOption parse tree cache option
+     */
+    public void updateCacheOption(final CacheOption parseTreeCacheOption) {
+        parserEngine.updateCacheOption(parseTreeCacheOption);
+    }
+    
     /**
      * Parse to SQL statement.
      *
diff --git 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
index 63d78242d37..6739dd1eb0b 100644
--- 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
+++ 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.infra.parser.cache;
 
-import com.github.benmanes.caffeine.cache.LoadingCache;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -30,6 +29,6 @@ class SQLStatementCacheBuilderTest {
     
     @Test
     void assertBuild() {
-        
assertThat(SQLStatementCacheBuilder.build(TypedSPILoader.getService(DatabaseType.class,
 "SQL92"), new CacheOption(2000, 65535L), new CacheOption(128, 1024L)), 
isA(LoadingCache.class));
+        
assertThat(SQLStatementCacheBuilder.build(TypedSPILoader.getService(DatabaseType.class,
 "SQL92"), new CacheOption(2000, 65535L), new CacheOption(128, 1024L)), 
isA(CacheManager.class));
     }
 }
diff --git 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
index 0f56b81c6fe..58c4dc7dbe3 100644
--- 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
+++ 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
@@ -22,7 +22,6 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertNotSame;
 import static org.junit.jupiter.api.Assertions.assertSame;
 
 class SQLStatementParserEngineFactoryTest {
@@ -33,7 +32,7 @@ class SQLStatementParserEngineFactoryTest {
     void assertGetSQLStatementParserEngineNotSame() {
         SQLStatementParserEngine before = 
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new 
CacheOption(2000, 65535L), new CacheOption(64, 1024L));
         SQLStatementParserEngine after = 
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new 
CacheOption(2000, 65535L), new CacheOption(128, 1024L));
-        assertNotSame(before, after);
+        assertSame(before, after);
     }
     
     @Test
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
index 9b3929ee8dd..3f6917c4d1c 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
@@ -42,6 +42,15 @@ public final class SQLParserEngine {
         this(TypedSPILoader.getService(DatabaseType.class, databaseType), 
cacheOption);
     }
     
+    /**
+     * Update cache option.
+     *
+     * @param cacheOption cache option
+     */
+    public void updateCacheOption(final CacheOption cacheOption) {
+        parseTreeCache.policy().eviction().ifPresent(eviction -> 
eviction.setMaximum(cacheOption.getMaximumSize()));
+    }
+    
     /**
      * Parse SQL.
      *

Reply via email to