This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 249845c39d5 Add like support for DistSQL show storage units (#32388)
249845c39d5 is described below
commit 249845c39d5b9ee76b362823581b4f498d43d6fe
Author: Raigor <[email protected]>
AuthorDate: Sun Aug 4 20:08:06 2024 +0800
Add like support for DistSQL show storage units (#32388)
---
.../core/advice/SQLParseCountAdviceTest.java | 2 +-
.../rql/resource/ShowStorageUnitExecutor.java | 6 ++++++
.../rql/resource/ShowStorageUnitExecutorTest.java | 23 ++++++++++++++++++++--
.../engine/src/main/antlr4/imports/RQLStatement.g4 | 2 +-
.../core/kernel/KernelDistSQLStatementVisitor.java | 3 ++-
.../rql/resource/ShowStorageUnitsStatement.java | 11 +++++++++++
6 files changed, 42 insertions(+), 5 deletions(-)
diff --git
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
index da5395622a9..475da88adcb 100644
---
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
+++
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
@@ -97,7 +97,7 @@ class SQLParseCountAdviceTest {
@Test
void assertParseRQL() {
- assertParse(new ShowStorageUnitsStatement(new DatabaseSegment(0, 0,
null), null), "RQL=1");
+ assertParse(new ShowStorageUnitsStatement(new DatabaseSegment(0, 0,
null), null, null), "RQL=1");
}
@Test
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
index bb9e7f702d9..914f8024316 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
@@ -30,6 +30,7 @@ import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryRes
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.util.regex.RegexUtils;
import org.apache.shardingsphere.mode.manager.ContextManager;
import javax.sql.DataSource;
@@ -41,6 +42,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Properties;
+import java.util.regex.Pattern;
/**
* Show storage unit executor.
@@ -94,6 +96,10 @@ public final class ShowStorageUnitExecutor implements
DistSQLQueryExecutor<ShowS
} else {
result.putAll(database.getResourceMetaData().getStorageUnits());
}
+ if (sqlStatement.getLikePattern().isPresent()) {
+ Pattern pattern =
Pattern.compile(RegexUtils.convertLikePatternToRegex(sqlStatement.getLikePattern().get()),
Pattern.CASE_INSENSITIVE);
+ result.keySet().removeIf(each -> !pattern.matcher(each).find());
+ }
return result;
}
diff --git
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
index 0bad3ec74e0..2cb57920848 100644
---
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
+++
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
@@ -76,7 +76,7 @@ class ShowStorageUnitExecutorTest {
nameMap.put(0, "ds_2");
nameMap.put(1, "ds_1");
nameMap.put(2, "ds_0");
- Collection<LocalDataQueryResultRow> actual = executor.getRows(new
ShowStorageUnitsStatement(mock(DatabaseSegment.class), null),
mock(ContextManager.class));
+ Collection<LocalDataQueryResultRow> actual = executor.getRows(new
ShowStorageUnitsStatement(mock(DatabaseSegment.class), null, null),
mock(ContextManager.class));
assertThat(actual.size(), is(3));
Iterator<LocalDataQueryResultRow> rowData = actual.iterator();
int index = 0;
@@ -98,11 +98,30 @@ class ShowStorageUnitExecutorTest {
}
}
+ @Test
+ void assertGetRowsWithLikePattern() {
+ Collection<LocalDataQueryResultRow> actual = executor.getRows(new
ShowStorageUnitsStatement(mock(DatabaseSegment.class), "_0", null),
mock(ContextManager.class));
+ assertThat(actual.size(), is(1));
+ LocalDataQueryResultRow data = actual.iterator().next();
+ assertThat(data.getCell(1), is("ds_0"));
+ assertThat(data.getCell(2), is("MySQL"));
+ assertThat(data.getCell(3), is("localhost"));
+ assertThat(data.getCell(4), is("3307"));
+ assertThat(data.getCell(5), is("ds_0"));
+ assertThat(data.getCell(6), is(""));
+ assertThat(data.getCell(7), is(""));
+ assertThat(data.getCell(8), is(""));
+ assertThat(data.getCell(9), is("100"));
+ assertThat(data.getCell(10), is("10"));
+ assertThat(data.getCell(11), is(""));
+ assertThat(data.getCell(12),
is("{\"openedConnections\":[],\"closed\":false}"));
+ }
+
@Test
void assertGetRowsWithUnusedStorageUnits() {
RuleMetaData metaData = mockUnusedStorageUnitsRuleMetaData();
when(database.getRuleMetaData()).thenReturn(metaData);
- Collection<LocalDataQueryResultRow> actual = executor.getRows(new
ShowStorageUnitsStatement(mock(DatabaseSegment.class), 0),
mock(ContextManager.class));
+ Collection<LocalDataQueryResultRow> actual = executor.getRows(new
ShowStorageUnitsStatement(mock(DatabaseSegment.class), null, 0),
mock(ContextManager.class));
assertThat(actual.size(), is(1));
Iterator<LocalDataQueryResultRow> rowData = actual.iterator();
LocalDataQueryResultRow data = rowData.next();
diff --git a/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
b/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
index 981be702b66..faa74e7783d 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
@@ -20,7 +20,7 @@ grammar RQLStatement;
import BaseRule;
showStorageUnits
- : SHOW STORAGE UNITS (FROM databaseName)? (WHERE USAGE_COUNT EQ_
usageCount)?
+ : SHOW STORAGE UNITS (FROM databaseName)? showLike? (WHERE USAGE_COUNT EQ_
usageCount)?
;
showRulesUsedStorageUnit
diff --git
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
index fa7113f6acc..b583ea61b5c 100644
---
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
+++
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
@@ -220,8 +220,9 @@ public final class KernelDistSQLStatementVisitor extends
KernelDistSQLStatementB
@Override
public ASTNode visitShowStorageUnits(final ShowStorageUnitsContext ctx) {
DatabaseSegment database = null == ctx.databaseName() ? null :
(DatabaseSegment) visit(ctx.databaseName());
+ String likePattern = null == ctx.showLike() ? null :
getIdentifierValue(ctx.showLike().likePattern());
Integer usageCount = null == ctx.usageCount() ? null :
Integer.parseInt(ctx.usageCount().getText());
- return new ShowStorageUnitsStatement(database, usageCount);
+ return new ShowStorageUnitsStatement(database, likePattern,
usageCount);
}
@Override
diff --git
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
index 0db7c082a75..b11a2fbfcf5 100644
---
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
+++
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
@@ -33,6 +33,8 @@ public final class ShowStorageUnitsStatement extends
ResourceQueryStatement impl
private final DatabaseSegment database;
+ private final String likePattern;
+
private final Integer usageCount;
@Override
@@ -40,6 +42,15 @@ public final class ShowStorageUnitsStatement extends
ResourceQueryStatement impl
return Optional.ofNullable(database);
}
+ /**
+ * Get like pattern.
+ *
+ * @return like pattern
+ */
+ public Optional<String> getLikePattern() {
+ return Optional.ofNullable(likePattern);
+ }
+
/**
* Get usage count.
*