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 2023/06/05 01:41:32 UTC
[shardingsphere] branch master updated: Add DistSQL & configuration for load single table (#26046)
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 4ad053c677b Add DistSQL & configuration for load single table (#26046)
4ad053c677b is described below
commit 4ad053c677b2ead63c93d754431ef2685c648d78
Author: Raigor <ra...@gmail.com>
AuthorDate: Mon Jun 5 09:41:23 2023 +0800
Add DistSQL & configuration for load single table (#26046)
---
.../single/api/config/SingleRuleConfiguration.java | 6 +++
.../config/pojo/YamlSingleRuleConfiguration.java | 5 ++
.../YamlSingleRuleConfigurationSwapper.java | 2 +
.../engine/SingleStandardRouteEngineTest.java | 2 +-
.../single/rule/builder/SingleRuleBuilderTest.java | 2 +-
.../YamlSingleRuleConfigurationSwapperTest.java | 4 +-
...wDefaultSingleTableStorageUnitExecutorTest.java | 2 +-
.../single/{RDLStatement.g4 => BaseRule.g4} | 16 ++++--
.../src/main/antlr4/imports/single/Keyword.g4 | 20 ++++++++
.../src/main/antlr4/imports/single/RDLStatement.g4 | 21 ++++++--
.../src/main/antlr4/imports/single/RQLStatement.g4 | 15 +++---
.../parser/autogen/SingleDistSQLStatement.g4 | 3 ++
.../parser/core/SingleDistSQLStatementVisitor.java | 52 +++++++++++++++++++
.../distsql/segment/SingleTableSegment.java} | 26 ++++++----
.../statement/rdl/LoadSingleTableStatement.java} | 23 ++++-----
.../statement/rdl/UnloadSingleTableStatement.java} | 23 ++++-----
.../rql/ShowUnloadedSingleTableStatement.java | 58 ++++++++++++++++++++++
17 files changed, 227 insertions(+), 53 deletions(-)
diff --git a/kernel/single/api/src/main/java/org/apache/shardingsphere/single/api/config/SingleRuleConfiguration.java b/kernel/single/api/src/main/java/org/apache/shardingsphere/single/api/config/SingleRuleConfiguration.java
index 8b98a6db138..92ad53d2c4a 100644
--- a/kernel/single/api/src/main/java/org/apache/shardingsphere/single/api/config/SingleRuleConfiguration.java
+++ b/kernel/single/api/src/main/java/org/apache/shardingsphere/single/api/config/SingleRuleConfiguration.java
@@ -18,11 +18,14 @@
package org.apache.shardingsphere.single.api.config;
import lombok.AllArgsConstructor;
+import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.shardingsphere.infra.config.rule.function.EnhancedRuleConfiguration;
import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.Optional;
/**
@@ -33,6 +36,9 @@ import java.util.Optional;
@Setter
public final class SingleRuleConfiguration implements DatabaseRuleConfiguration, EnhancedRuleConfiguration {
+ @Getter
+ private Collection<String> tables = new LinkedList<>();
+
private String defaultDataSource;
/**
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
index 3e3ff212bad..c3521955393 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
@@ -22,6 +22,9 @@ import lombok.Setter;
import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+import java.util.Collection;
+import java.util.LinkedList;
+
/**
* Single rule configuration for YAML.
*/
@@ -29,6 +32,8 @@ import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
@Setter
public final class YamlSingleRuleConfiguration implements YamlRuleConfiguration {
+ private Collection<String> tables = new LinkedList<>();
+
private String defaultDataSource;
@Override
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/YamlSingleRuleConfigurationSwapper.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/YamlSingleRuleConfigurationSwapper.java
index 42e52b2c291..bb1e254d441 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/YamlSingleRuleConfigurationSwapper.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/YamlSingleRuleConfigurationSwapper.java
@@ -30,6 +30,7 @@ public final class YamlSingleRuleConfigurationSwapper implements YamlRuleConfigu
@Override
public YamlSingleRuleConfiguration swapToYamlConfiguration(final SingleRuleConfiguration data) {
YamlSingleRuleConfiguration result = new YamlSingleRuleConfiguration();
+ result.getTables().addAll(data.getTables());
data.getDefaultDataSource().ifPresent(result::setDefaultDataSource);
return result;
}
@@ -37,6 +38,7 @@ public final class YamlSingleRuleConfigurationSwapper implements YamlRuleConfigu
@Override
public SingleRuleConfiguration swapToObject(final YamlSingleRuleConfiguration yamlConfig) {
SingleRuleConfiguration result = new SingleRuleConfiguration();
+ result.getTables().addAll(yamlConfig.getTables());
result.setDefaultDataSource(yamlConfig.getDefaultDataSource());
return result;
}
diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
index e319f338879..b4856a0056c 100644
--- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
+++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
@@ -106,7 +106,7 @@ class SingleStandardRouteEngineTest {
@Test
void assertRouteWithDefaultSingleRule() throws SQLException {
SingleStandardRouteEngine engine = new SingleStandardRouteEngine(mockQualifiedTables(), new MySQLCreateTableStatement(false));
- SingleRule singleRule = new SingleRule(new SingleRuleConfiguration("ds_0"), DefaultDatabase.LOGIC_NAME, createDataSourceMap(), Collections.emptyList());
+ SingleRule singleRule = new SingleRule(new SingleRuleConfiguration(Collections.emptyList(), "ds_0"), DefaultDatabase.LOGIC_NAME, createDataSourceMap(), Collections.emptyList());
RouteContext routeContext = new RouteContext();
engine.route(routeContext, singleRule);
List<RouteUnit> routeUnits = new ArrayList<>(routeContext.getRouteUnits());
diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
index 4e46805ad98..129c6b01545 100644
--- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
+++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
@@ -47,7 +47,7 @@ class SingleRuleBuilderTest {
void assertBuildWithDefaultDataSource() {
DatabaseRuleBuilder builder = OrderedSPILoader.getServices(DatabaseRuleBuilder.class).iterator().next();
DatabaseRule actual = builder.build(
- new SingleRuleConfiguration("foo_ds"), "", Collections.emptyMap(), Collections.singleton(mock(ShardingSphereRule.class)), mock(InstanceContext.class));
+ new SingleRuleConfiguration(Collections.emptyList(), "foo_ds"), "", Collections.emptyMap(), Collections.singleton(mock(ShardingSphereRule.class)), mock(InstanceContext.class));
assertThat(actual, instanceOf(SingleRule.class));
}
}
diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/swapper/YamlSingleRuleConfigurationSwapperTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/swapper/YamlSingleRuleConfigurationSwapperTest.java
index e7820a812b2..a2fd8855c7c 100644
--- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/swapper/YamlSingleRuleConfigurationSwapperTest.java
+++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/swapper/YamlSingleRuleConfigurationSwapperTest.java
@@ -22,6 +22,8 @@ import org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfigura
import org.apache.shardingsphere.single.yaml.config.swapper.YamlSingleRuleConfigurationSwapper;
import org.junit.jupiter.api.Test;
+import java.util.Collections;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -46,7 +48,7 @@ class YamlSingleRuleConfigurationSwapperTest {
@Test
void assertSwapToYaml() {
- assertThat(new YamlSingleRuleConfigurationSwapper().swapToYamlConfiguration(new SingleRuleConfiguration("ds_0")).getDefaultDataSource(), is("ds_0"));
+ assertThat(new YamlSingleRuleConfigurationSwapper().swapToYamlConfiguration(new SingleRuleConfiguration(Collections.emptyList(), "ds_0")).getDefaultDataSource(), is("ds_0"));
}
@Test
diff --git a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
index 01c057e7a15..25e02025bee 100644
--- a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
+++ b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
@@ -59,7 +59,7 @@ class ShowDefaultSingleTableStorageUnitExecutorTest {
private ShardingSphereDatabase mockDatabase() {
ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
SingleRule singleRule = mock(SingleRule.class);
- when(singleRule.getConfiguration()).thenReturn(new SingleRuleConfiguration("foo_ds"));
+ when(singleRule.getConfiguration()).thenReturn(new SingleRuleConfiguration(Collections.emptyList(), "foo_ds"));
when(result.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(singleRule)));
return result;
}
diff --git a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4 b/kernel/single/distsql/parser/src/main/antlr4/imports/single/BaseRule.g4
similarity index 87%
copy from kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4
copy to kernel/single/distsql/parser/src/main/antlr4/imports/single/BaseRule.g4
index 9d79c7eb2bf..79ab5c501c2 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4
+++ b/kernel/single/distsql/parser/src/main/antlr4/imports/single/BaseRule.g4
@@ -15,14 +15,22 @@
* limitations under the License.
*/
-grammar RDLStatement;
+grammar BaseRule;
import Symbol, Keyword, Literals;
-setDefaultSingleTableStorageUnit
- : SET DEFAULT SINGLE TABLE STORAGE UNIT EQ_ (storageUnitName | RANDOM)
+storageUnitName
+ : IDENTIFIER_
;
-storageUnitName
+databaseName
+ : IDENTIFIER_
+ ;
+
+schemaName
+ : IDENTIFIER_
+ ;
+
+tableName
: IDENTIFIER_
;
diff --git a/kernel/single/distsql/parser/src/main/antlr4/imports/single/Keyword.g4 b/kernel/single/distsql/parser/src/main/antlr4/imports/single/Keyword.g4
index 38b2ff61786..4f8a8f634df 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/imports/single/Keyword.g4
+++ b/kernel/single/distsql/parser/src/main/antlr4/imports/single/Keyword.g4
@@ -70,3 +70,23 @@ COUNT
LIKE
: L I K E
;
+
+SCHEMA
+ : S C H E M A
+ ;
+
+INTO
+ : I N T O
+ ;
+
+LOAD
+ : L O A D
+ ;
+
+UNLOAD
+ : U N L O A D
+ ;
+
+UNLOADED
+ : U N L O A D E D
+ ;
diff --git a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4 b/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4
index 9d79c7eb2bf..2ce38d74069 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4
+++ b/kernel/single/distsql/parser/src/main/antlr4/imports/single/RDLStatement.g4
@@ -17,12 +17,27 @@
grammar RDLStatement;
-import Symbol, Keyword, Literals;
+import BaseRule;
setDefaultSingleTableStorageUnit
: SET DEFAULT SINGLE TABLE STORAGE UNIT EQ_ (storageUnitName | RANDOM)
;
-storageUnitName
- : IDENTIFIER_
+loadSingleTable
+ : LOAD SINGLE TABLE tableDefinition
+ ;
+
+unloadSingleTable
+ : UNLOAD SINGLE TABLE tableDefinition
+ ;
+
+tableDefinition
+ : tableIdentifier (COMMA_ tableIdentifier)*
+ ;
+
+tableIdentifier
+ : ASTERISK_ DOTASTERISK_ # allTables
+ | storageUnitName DOTASTERISK_ # allTablesFromStorageUnit
+ | storageUnitName DOT_ tableName # tableFromStorageUnit
+ | storageUnitName DOT_ schemaName DOT_ tableName # tableFromSchema
;
diff --git a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RQLStatement.g4 b/kernel/single/distsql/parser/src/main/antlr4/imports/single/RQLStatement.g4
index fb2ca92cca4..ebc14ff51a4 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/imports/single/RQLStatement.g4
+++ b/kernel/single/distsql/parser/src/main/antlr4/imports/single/RQLStatement.g4
@@ -17,7 +17,7 @@
grammar RQLStatement;
-import Symbol, Keyword, Literals;
+import BaseRule;
showDefaultSingleTableStorageUnit
: SHOW DEFAULT SINGLE TABLE STORAGE UNIT (FROM databaseName)?
@@ -27,16 +27,17 @@ showSingleTable
: SHOW SINGLE (TABLES showLike? | TABLE tableName) (FROM databaseName)?
;
-countSingleTable
- : COUNT SINGLE TABLE (FROM databaseName)?
+showUnloadedSingleTables
+ : SHOW UNLOADED SINGLE TABLES (FROM fromClause)?
;
-databaseName
- : IDENTIFIER_
+fromClause
+ : databaseName (STORAGE UNIT storageUnitName (SCHEMA schemaName)?)?
+ | STORAGE UNIT storageUnitName (SCHEMA schemaName)?
;
-tableName
- : IDENTIFIER_
+countSingleTable
+ : COUNT SINGLE TABLE (FROM databaseName)?
;
showLike
diff --git a/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4 b/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4
index 4e6f7df90dd..345618d4c3e 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4
+++ b/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4
@@ -24,5 +24,8 @@ execute
| showDefaultSingleTableStorageUnit
| showSingleTable
| countSingleTable
+ | loadSingleTable
+ | unloadSingleTable
+ | showUnloadedSingleTables
) SEMI_? EOF
;
diff --git a/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java b/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
index 397c60d7b39..12f1b1c9ec0 100644
--- a/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
+++ b/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
@@ -19,20 +19,35 @@ package org.apache.shardingsphere.single.distsql.parser.core;
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementBaseVisitor;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.AllTablesFromStorageUnitContext;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.CountSingleTableContext;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.DatabaseNameContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.FromClauseContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.LoadSingleTableContext;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.SetDefaultSingleTableStorageUnitContext;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.ShowDefaultSingleTableStorageUnitContext;
import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.ShowSingleTableContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.ShowUnloadedSingleTablesContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.TableFromSchemaContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.TableFromStorageUnitContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.TableIdentifierContext;
+import org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.UnloadSingleTableContext;
+import org.apache.shardingsphere.single.distsql.segment.SingleTableSegment;
+import org.apache.shardingsphere.single.distsql.statement.rdl.LoadSingleTableStatement;
import org.apache.shardingsphere.single.distsql.statement.rdl.SetDefaultSingleTableStorageUnitStatement;
+import org.apache.shardingsphere.single.distsql.statement.rdl.UnloadSingleTableStatement;
import org.apache.shardingsphere.single.distsql.statement.rql.CountSingleTableStatement;
import org.apache.shardingsphere.single.distsql.statement.rql.ShowDefaultSingleTableStorageUnitStatement;
import org.apache.shardingsphere.single.distsql.statement.rql.ShowSingleTableStatement;
+import org.apache.shardingsphere.single.distsql.statement.rql.ShowUnloadedSingleTableStatement;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
/**
* SQL statement visitor for single DistSQL.
*/
@@ -59,6 +74,43 @@ public final class SingleDistSQLStatementVisitor extends SingleDistSQLStatementB
null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
}
+ @Override
+ public ASTNode visitLoadSingleTable(final LoadSingleTableContext ctx) {
+ Collection<SingleTableSegment> tables = ctx.tableDefinition().tableIdentifier().stream().map(this::getSingleTableSegment).collect(Collectors.toList());
+ return new LoadSingleTableStatement(tables);
+ }
+
+ @Override
+ public ASTNode visitUnloadSingleTable(final UnloadSingleTableContext ctx) {
+ Collection<SingleTableSegment> tables = ctx.tableDefinition().tableIdentifier().stream().map(this::getSingleTableSegment).collect(Collectors.toList());
+ return new UnloadSingleTableStatement(tables);
+ }
+
+ private SingleTableSegment getSingleTableSegment(final TableIdentifierContext ctx) {
+ if (ctx instanceof AllTablesFromStorageUnitContext) {
+ return new SingleTableSegment(getIdentifierValue(((AllTablesFromStorageUnitContext) ctx).storageUnitName()), "*", "*");
+ }
+ if (ctx instanceof TableFromStorageUnitContext) {
+ TableFromStorageUnitContext tableContext = (TableFromStorageUnitContext) ctx;
+ return new SingleTableSegment(getIdentifierValue(tableContext.storageUnitName()), "*", getIdentifierValue(tableContext.tableName()));
+ }
+ if (ctx instanceof TableFromSchemaContext) {
+ TableFromSchemaContext tableContext = (TableFromSchemaContext) ctx;
+ return new SingleTableSegment(getIdentifierValue(tableContext.storageUnitName()), getIdentifierValue(tableContext.schemaName()), getIdentifierValue(tableContext.tableName()));
+ }
+ return new SingleTableSegment("*", "*", "*");
+ }
+
+ @Override
+ public ASTNode visitShowUnloadedSingleTables(final ShowUnloadedSingleTablesContext ctx) {
+ return null == ctx.fromClause() ? new ShowUnloadedSingleTableStatement(null, null, null) : visitShowUnloadedSingleTablesWithFromClause(ctx.fromClause());
+ }
+
+ private ASTNode visitShowUnloadedSingleTablesWithFromClause(final FromClauseContext ctx) {
+ return new ShowUnloadedSingleTableStatement(null == ctx.storageUnitName() ? null : getIdentifierValue(ctx.storageUnitName()),
+ null == ctx.schemaName() ? null : getIdentifierValue(ctx.schemaName()), null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+ }
+
@Override
public ASTNode visitDatabaseName(final DatabaseNameContext ctx) {
return new DatabaseSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), new IdentifierValue(ctx.getText()));
diff --git a/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4 b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/segment/SingleTableSegment.java
similarity index 65%
copy from kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4
copy to kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/segment/SingleTableSegment.java
index 4e6f7df90dd..286fca0aef2 100644
--- a/kernel/single/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SingleDistSQLStatement.g4
+++ b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/segment/SingleTableSegment.java
@@ -15,14 +15,22 @@
* limitations under the License.
*/
-grammar SingleDistSQLStatement;
+package org.apache.shardingsphere.single.distsql.segment;
-import Symbol, RDLStatement, RQLStatement;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.api.ASTNode;
-execute
- : (setDefaultSingleTableStorageUnit
- | showDefaultSingleTableStorageUnit
- | showSingleTable
- | countSingleTable
- ) SEMI_? EOF
- ;
+/**
+ * Single table segment.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class SingleTableSegment implements ASTNode {
+
+ private final String storageUnitName;
+
+ private final String schemaName;
+
+ private final String tableName;
+}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/LoadSingleTableStatement.java
similarity index 60%
copy from kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
copy to kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/LoadSingleTableStatement.java
index 3e3ff212bad..2b7c75f7915 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
+++ b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/LoadSingleTableStatement.java
@@ -15,24 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.yaml.config.pojo;
+package org.apache.shardingsphere.single.distsql.statement.rdl;
import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.single.distsql.segment.SingleTableSegment;
+
+import java.util.Collection;
/**
- * Single rule configuration for YAML.
+ * Load single table statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public final class YamlSingleRuleConfiguration implements YamlRuleConfiguration {
-
- private String defaultDataSource;
+public final class LoadSingleTableStatement extends CreateRuleStatement {
- @Override
- public Class<SingleRuleConfiguration> getRuleConfigurationType() {
- return SingleRuleConfiguration.class;
- }
+ private final Collection<SingleTableSegment> tables;
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/UnloadSingleTableStatement.java
similarity index 60%
copy from kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
copy to kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/UnloadSingleTableStatement.java
index 3e3ff212bad..c50303a928e 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
+++ b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rdl/UnloadSingleTableStatement.java
@@ -15,24 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.yaml.config.pojo;
+package org.apache.shardingsphere.single.distsql.statement.rdl;
import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.single.distsql.segment.SingleTableSegment;
+
+import java.util.Collection;
/**
- * Single rule configuration for YAML.
+ * Unload single table statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public final class YamlSingleRuleConfiguration implements YamlRuleConfiguration {
-
- private String defaultDataSource;
+public final class UnloadSingleTableStatement extends DropRuleStatement {
- @Override
- public Class<SingleRuleConfiguration> getRuleConfigurationType() {
- return SingleRuleConfiguration.class;
- }
+ private final Collection<SingleTableSegment> tables;
}
diff --git a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTableStatement.java b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTableStatement.java
new file mode 100644
index 00000000000..4703f8e69fc
--- /dev/null
+++ b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTableStatement.java
@@ -0,0 +1,58 @@
+/*
+ * 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.single.distsql.statement.rql;
+
+import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowTablesStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
+
+import java.util.Optional;
+
+/**
+ * Show unloaded single table statement.
+ */
+public final class ShowUnloadedSingleTableStatement extends ShowTablesStatement {
+
+ private final String storageUnitName;
+
+ private final String schemaName;
+
+ public ShowUnloadedSingleTableStatement(final String storageUnitName, final String schemaName, final DatabaseSegment database) {
+ // TODO support like later
+ super(null, database);
+ this.storageUnitName = storageUnitName;
+ this.schemaName = schemaName;
+ }
+
+ /**
+ * Get storage unit name.
+ *
+ * @return storage unit name
+ */
+ public Optional<String> getStorageUnitName() {
+ return Optional.ofNullable(storageUnitName);
+ }
+
+ /**
+ * Get schema name.
+ *
+ * @return schema name
+ */
+ public Optional<String> getSchemaName() {
+ return Optional.ofNullable(schemaName);
+ }
+}