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 2022/06/20 05:28:24 UTC
[shardingsphere] branch master updated: Refactor AlterSQLParserRuleHandler (#18439)
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 1cb1625ec4c Refactor AlterSQLParserRuleHandler (#18439)
1cb1625ec4c is described below
commit 1cb1625ec4cd1628fd830913b5ef93beae2044c6
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Jun 20 13:28:18 2022 +0800
Refactor AlterSQLParserRuleHandler (#18439)
* Refactor AlterSQLParserRuleHandler
* Refactor AlterSQLParserRuleHandler
---
.../core/common/CommonDistSQLStatementVisitor.java | 9 ++---
.../updatable/AlterSQLParserRuleStatement.java | 10 ++---
.../updatable/AlterSQLParserRuleHandler.java | 45 +++++++++++-----------
.../updatable/AlterSQLParserRuleHandlerTest.java | 38 +++++++++---------
4 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
index eb845df3f83..cb24b232495 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
@@ -364,11 +364,10 @@ public final class CommonDistSQLStatementVisitor extends CommonDistSQLStatementB
@Override
public ASTNode visitSqlParserRuleDefinition(final SqlParserRuleDefinitionContext ctx) {
- AlterSQLParserRuleStatement result = new AlterSQLParserRuleStatement();
- result.setSqlCommentParseEnable(null == ctx.sqlCommentParseEnable() ? null : Boolean.parseBoolean(getIdentifierValue(ctx.sqlCommentParseEnable())));
- result.setParseTreeCache(null == ctx.parseTreeCache() ? null : visitCacheOption(ctx.parseTreeCache().cacheOption()));
- result.setSqlStatementCache(null == ctx.sqlStatementCache() ? null : visitCacheOption(ctx.sqlStatementCache().cacheOption()));
- return result;
+ Boolean sqlCommentParseEnable = null == ctx.sqlCommentParseEnable() ? null : Boolean.parseBoolean(getIdentifierValue(ctx.sqlCommentParseEnable()));
+ CacheOptionSegment parseTreeCache = null == ctx.parseTreeCache() ? null : visitCacheOption(ctx.parseTreeCache().cacheOption());
+ CacheOptionSegment sqlStatementCache = null == ctx.sqlStatementCache() ? null : visitCacheOption(ctx.sqlStatementCache().cacheOption());
+ return new AlterSQLParserRuleStatement(sqlCommentParseEnable, parseTreeCache, sqlStatementCache);
}
@Override
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/AlterSQLParserRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/AlterSQLParserRuleStatement.java
index 194423ab42a..2485ca39fc5 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/AlterSQLParserRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/AlterSQLParserRuleStatement.java
@@ -18,20 +18,20 @@
package org.apache.shardingsphere.distsql.parser.statement.ral.common.updatable;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.distsql.parser.segment.CacheOptionSegment;
import org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatement;
/**
* Alter SQL parser rule statement.
*/
-@Setter
+@RequiredArgsConstructor
@Getter
public final class AlterSQLParserRuleStatement extends UpdatableRALStatement {
- private Boolean sqlCommentParseEnable;
+ private final Boolean sqlCommentParseEnable;
- private CacheOptionSegment parseTreeCache;
+ private final CacheOptionSegment parseTreeCache;
- private CacheOptionSegment sqlStatementCache;
+ private final CacheOptionSegment sqlStatementCache;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
index e8f25765763..c5eee413480 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
@@ -19,10 +19,9 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.updatabl
import org.apache.shardingsphere.distsql.parser.segment.CacheOptionSegment;
import org.apache.shardingsphere.distsql.parser.statement.ral.common.updatable.AlterSQLParserRuleStatement;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -30,7 +29,6 @@ import org.apache.shardingsphere.proxy.backend.text.distsql.ral.UpdatableRALBack
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import java.util.Collection;
-import java.util.Optional;
/**
* Alter SQL parser rule statement handler.
@@ -39,23 +37,20 @@ public final class AlterSQLParserRuleHandler extends UpdatableRALBackendHandler<
@Override
protected void update(final ContextManager contextManager) {
- SQLParserRuleConfiguration currentConfig = ProxyContext
- .getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class).getConfiguration();
- SQLParserRuleConfiguration toBeAlteredRuleConfig = createSQLParserRuleConfiguration(currentConfig);
- Collection<ShardingSphereRule> globalRules = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules();
- globalRules.removeIf(each -> each instanceof SQLParserRule);
- globalRules.add(new SQLParserRule(toBeAlteredRuleConfig));
- persistNewRuleConfigurations(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations());
+ replaceSQLParserRule(createToBeAlteredRuleConfiguration());
+ persistNewRuleConfigurations();
}
- private SQLParserRuleConfiguration createSQLParserRuleConfiguration(final SQLParserRuleConfiguration currentConfig) {
- SQLParserRuleConfiguration result = new SQLParserRuleConfiguration();
- result.setSqlCommentParseEnabled(null == getSqlStatement().getSqlCommentParseEnable() ? currentConfig.isSqlCommentParseEnabled() : getSqlStatement().getSqlCommentParseEnable());
- result.setParseTreeCache(
- null == getSqlStatement().getParseTreeCache() ? currentConfig.getParseTreeCache() : createCacheOption(currentConfig.getParseTreeCache(), getSqlStatement().getParseTreeCache()));
- result.setSqlStatementCache(null == getSqlStatement().getSqlStatementCache() ? currentConfig.getSqlStatementCache()
- : createCacheOption(currentConfig.getSqlStatementCache(), getSqlStatement().getSqlStatementCache()));
- return result;
+ private SQLParserRuleConfiguration createToBeAlteredRuleConfiguration() {
+ AlterSQLParserRuleStatement sqlStatement = getSqlStatement();
+ SQLParserRuleConfiguration currentConfig = ProxyContext
+ .getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class).getConfiguration();
+ boolean sqlCommentParseEnabled = null == sqlStatement.getSqlCommentParseEnable() ? currentConfig.isSqlCommentParseEnabled() : sqlStatement.getSqlCommentParseEnable();
+ CacheOption parseTreeCache =
+ null == sqlStatement.getParseTreeCache() ? currentConfig.getParseTreeCache() : createCacheOption(currentConfig.getParseTreeCache(), sqlStatement.getParseTreeCache());
+ CacheOption sqlStatementCache =
+ null == sqlStatement.getSqlStatementCache() ? currentConfig.getSqlStatementCache() : createCacheOption(currentConfig.getSqlStatementCache(), sqlStatement.getSqlStatementCache());
+ return new SQLParserRuleConfiguration(sqlCommentParseEnabled, parseTreeCache, sqlStatementCache);
}
private CacheOption createCacheOption(final CacheOption cacheOption, final CacheOptionSegment segment) {
@@ -64,10 +59,14 @@ public final class AlterSQLParserRuleHandler extends UpdatableRALBackendHandler<
return new CacheOption(initialCapacity, maximumSize);
}
- private void persistNewRuleConfigurations(final Collection<RuleConfiguration> globalRuleConfigs) {
- Optional<MetaDataPersistService> metaDataPersistService = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
- if (metaDataPersistService.isPresent() && null != metaDataPersistService.get().getGlobalRuleService()) {
- metaDataPersistService.get().getGlobalRuleService().persist(globalRuleConfigs, true);
- }
+ private void replaceSQLParserRule(final SQLParserRuleConfiguration toBeAlteredRuleConfig) {
+ Collection<ShardingSphereRule> globalRules = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules();
+ globalRules.removeIf(each -> each instanceof SQLParserRule);
+ globalRules.add(new SQLParserRule(toBeAlteredRuleConfig));
+ }
+
+ private void persistNewRuleConfigurations() {
+ MetaDataContexts metaDataContexts = ProxyContext.getInstance().getContextManager().getMetaDataContexts();
+ metaDataContexts.getPersistService().ifPresent(optional -> optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(), true));
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandlerTest.java
index f9e49c5fed0..8dfa1891be6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandlerTest.java
@@ -21,10 +21,11 @@ import org.apache.shardingsphere.distsql.parser.segment.CacheOptionSegment;
import org.apache.shardingsphere.distsql.parser.statement.ral.common.updatable.AlterSQLParserRuleStatement;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.junit.Test;
@@ -42,28 +43,29 @@ import static org.mockito.Mockito.when;
public final class AlterSQLParserRuleHandlerTest extends ProxyContextRestorer {
@Test
- public void assertExecuteWithDefaultRuleConfiguration() throws SQLException {
- ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- SQLParserRule sqlParserRule = new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build());
- ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(new LinkedList<>(Collections.singleton(sqlParserRule)));
- when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
- ProxyContext.init(contextManager);
+ public void assertExecute() throws SQLException {
+ ContextManager contextManager = mockContextManager();
AlterSQLParserRuleHandler handler = new AlterSQLParserRuleHandler();
- handler.init(createSQLStatement(), null);
- handler.execute();
- SQLParserRuleConfiguration actual = (SQLParserRuleConfiguration) contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules().iterator().next().getConfiguration();
+ AlterSQLParserRuleStatement sqlStatement = new AlterSQLParserRuleStatement(true, new CacheOptionSegment(64, 512L), new CacheOptionSegment(1000, 1000L));
+ handler.init(sqlStatement, mock(ConnectionSession.class));
+ UpdateResponseHeader responseHeader = (UpdateResponseHeader) handler.execute();
+ assertThat(responseHeader.getSqlStatement(), is(sqlStatement));
+ assertAlteredRule(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class));
+ }
+
+ private ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ SQLParserRule sqlParserRule = new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build());
+ when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(new LinkedList<>(Collections.singleton(sqlParserRule))));
+ ProxyContext.init(result);
+ return result;
+ }
+
+ private void assertAlteredRule(final SQLParserRule actual) {
assertTrue(actual.isSqlCommentParseEnabled());
assertThat(actual.getSqlStatementCache().getInitialCapacity(), is(1000));
assertThat(actual.getSqlStatementCache().getMaximumSize(), is(1000L));
assertThat(actual.getParseTreeCache().getInitialCapacity(), is(64));
assertThat(actual.getParseTreeCache().getMaximumSize(), is(512L));
}
-
- private AlterSQLParserRuleStatement createSQLStatement() {
- AlterSQLParserRuleStatement result = new AlterSQLParserRuleStatement();
- result.setSqlCommentParseEnable(true);
- result.setSqlStatementCache(new CacheOptionSegment(1000, 1000L));
- result.setParseTreeCache(new CacheOptionSegment(64, 512L));
- return result;
- }
}