This is an automated email from the ASF dual-hosted git repository.
wuweijie 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 021ce3f Use SPI to introduce rule based RQL (#10924)
021ce3f is described below
commit 021ce3f1345dc48288406afb3eae09856a7ad919
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jun 22 19:53:56 2021 +0800
Use SPI to introduce rule based RQL (#10924)
* Refactor DataSourcesQueryResultSet
* Use SPI for RQLResultSet
* Remove guava dependencies
* Decouple dependency of RQLResultSet and ProxyContext
* Remove BaseRuleQueryResultSet
* Use SPI to introduce rule based RQL
* Use SPI to introduce rule based RQL
* Fix test case
---
.../DatabaseDiscoveryRuleQueryResultSet.java | 19 +++++---
.../DatabaseDiscoveryRuleQueryResultSetTest.java | 30 +++++++------
...pache.shardingsphere.infra.distsql.RQLResultSet | 18 ++++++++
.../distsql}/EncryptRuleQueryResultSet.java | 24 +++++-----
...pache.shardingsphere.infra.distsql.RQLResultSet | 18 ++++++++
.../distsql}/EncryptRuleQueryResultSetTest.java | 32 ++++++++------
.../ReadwriteSplittingRuleQueryResultSet.java | 19 +++++---
...pache.shardingsphere.infra.distsql.RQLResultSet | 18 ++++++++
.../ReadwriteSplittingRuleQueryResultSetTest.java | 34 ++++++++-------
.../ShardingBindingTableRuleQueryResultSet.java | 16 ++++---
.../ShardingBroadcastTableRuleQueryResultSet.java | 16 ++++---
.../distsql}/ShardingTableRuleQueryResultSet.java | 15 ++++---
...pache.shardingsphere.infra.distsql.RQLResultSet | 20 +++++++++
...ShardingBindingTableRuleQueryResultSetTest.java | 32 ++++++++------
...ardingBroadcastTableRuleQueryResultSetTest.java | 24 +++++-----
.../ShardingTableRuleQueryResultSetTest.java | 36 ++++++++-------
.../yaml/distsql/sharding-rule-config.yaml | 0
.../infra/distsql}/RQLResultSet.java | 13 +++---
...esultSet.java => DataSourceQueryResultSet.java} | 51 +++++++++++++---------
.../text/distsql/rql/RQLBackendHandler.java | 4 +-
.../text/distsql/rql/RQLBackendHandlerFactory.java | 51 +++++-----------------
...pache.shardingsphere.infra.distsql.RQLResultSet | 18 ++++++++
.../text/distsql/rql/RQLBackendHandlerTest.java | 19 ++++++++
.../distsql/rql/impl/BaseRuleQueryResultSet.java | 49 ---------------------
24 files changed, 338 insertions(+), 238 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSet.java
similarity index 80%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSet.java
index 592610b..3a05f89 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSet.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.dbdiscovery.distsql;
-import com.google.common.base.Joiner;
import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.properties.PropertiesConverter;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Arrays;
@@ -43,8 +43,8 @@ public final class DatabaseDiscoveryRuleQueryResultSet
implements RQLResultSet {
private Map<String, ShardingSphereAlgorithmConfiguration> discoveryTypes;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- Optional<DatabaseDiscoveryRuleConfiguration> ruleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ Optional<DatabaseDiscoveryRuleConfiguration> ruleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
DatabaseDiscoveryRuleConfiguration).map(each ->
(DatabaseDiscoveryRuleConfiguration) each).findAny();
data = ruleConfig.map(optional ->
optional.getDataSources().iterator()).orElse(Collections.emptyIterator());
discoveryTypes =
ruleConfig.map(DatabaseDiscoveryRuleConfiguration::getDiscoveryTypes).orElse(Collections.emptyMap());
@@ -63,7 +63,12 @@ public final class DatabaseDiscoveryRuleQueryResultSet
implements RQLResultSet {
@Override
public Collection<Object> getRowData() {
DatabaseDiscoveryDataSourceRuleConfiguration dataSourceRuleConfig =
data.next();
- return Arrays.asList(dataSourceRuleConfig.getName(),
Joiner.on(",").join(dataSourceRuleConfig.getDataSourceNames()),
+ return Arrays.asList(dataSourceRuleConfig.getName(), String.join(",",
dataSourceRuleConfig.getDataSourceNames()),
discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName()).getType(),
PropertiesConverter.convert(discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName()).getProps()));
}
+
+ @Override
+ public String getType() {
+ return ShowDatabaseDiscoveryRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSetTest.java
similarity index 75%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSetTest.java
index ad9c240..08e0015 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DatabaseDiscoveryRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/DatabaseDiscoveryRuleQueryResultSetTest.java
@@ -15,14 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.dbdiscovery.distsql;
import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.junit.Test;
import java.util.Arrays;
@@ -35,27 +36,30 @@ import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class DatabaseDiscoveryRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- DatabaseDiscoveryDataSourceRuleConfiguration
databaseDiscoveryDataSourceRuleConfig = new
DatabaseDiscoveryDataSourceRuleConfiguration("ms_group", Arrays.asList("ds_0",
"ds_1"), "test");
- ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfig =
new ShardingSphereAlgorithmConfiguration("MGR", new Properties());
- Map<String, ShardingSphereAlgorithmConfiguration> discoverTypes = new
HashMap<>(1, 1);
- discoverTypes.put("test", shardingSphereAlgorithmConfig);
- return Collections.singleton(new
DatabaseDiscoveryRuleConfiguration(Collections.singleton(databaseDiscoveryDataSourceRuleConfig),
discoverTypes));
- }
+public final class DatabaseDiscoveryRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createRuleConfiguration()));
RQLResultSet resultSet = new DatabaseDiscoveryRuleQueryResultSet();
- resultSet.init("test",
mock(ShowDatabaseDiscoveryRulesStatement.class));
+ resultSet.init(metaData,
mock(ShowDatabaseDiscoveryRulesStatement.class));
Collection<Object> actual = resultSet.getRowData();
assertThat(actual.size(), is(4));
assertTrue(actual.contains("ms_group"));
assertTrue(actual.contains("ds_0,ds_1"));
assertTrue(actual.contains("MGR"));
}
+
+ private RuleConfiguration createRuleConfiguration() {
+ DatabaseDiscoveryDataSourceRuleConfiguration
databaseDiscoveryDataSourceRuleConfig = new
DatabaseDiscoveryDataSourceRuleConfiguration("ms_group", Arrays.asList("ds_0",
"ds_1"), "test");
+ ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfig =
new ShardingSphereAlgorithmConfiguration("MGR", new Properties());
+ Map<String, ShardingSphereAlgorithmConfiguration> discoverTypes = new
HashMap<>(1, 1);
+ discoverTypes.put("test", shardingSphereAlgorithmConfig);
+ return new
DatabaseDiscoveryRuleConfiguration(Collections.singleton(databaseDiscoveryDataSourceRuleConfig),
discoverTypes);
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
new file mode 100644
index 0000000..dac494f
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.dbdiscovery.distsql.DatabaseDiscoveryRuleQueryResultSet
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSet.java
similarity index 80%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSet.java
index 13be160..77e4dcb 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSet.java
@@ -15,19 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.encrypt.distsql;
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Maps;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import
org.apache.shardingsphere.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.properties.PropertiesConverter;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Arrays;
@@ -51,11 +48,11 @@ public final class EncryptRuleQueryResultSet implements
RQLResultSet {
private Map<String, ShardingSphereAlgorithmConfiguration> encryptors;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- Optional<EncryptRuleConfiguration> ruleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ Optional<EncryptRuleConfiguration> ruleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
EncryptRuleConfiguration).map(each -> (EncryptRuleConfiguration)
each).findAny();
data = ruleConfig.map(optional -> getAllEncryptColumns(optional,
((ShowEncryptRulesStatement)
sqlStatement).getTableName()).entrySet().iterator()).orElse(Collections.emptyIterator());
- encryptors =
ruleConfig.map(EncryptRuleConfiguration::getEncryptors).orElse(Maps.newHashMap());
+ encryptors =
ruleConfig.map(EncryptRuleConfiguration::getEncryptors).orElse(Collections.emptyMap());
}
private Map<String, EncryptColumnRuleConfiguration>
getAllEncryptColumns(final EncryptRuleConfiguration encryptRuleConfig, final
String tableName) {
@@ -70,7 +67,7 @@ public final class EncryptRuleQueryResultSet implements
RQLResultSet {
}
private Map<String, EncryptColumnRuleConfiguration>
buildEncryptColumnRuleConfigurationMap(final EncryptTableRuleConfiguration
encryptTableRuleConfig) {
- return
encryptTableRuleConfig.getColumns().stream().collect(Collectors.toMap(each ->
Joiner.on(".").join(encryptTableRuleConfig.getName(), each.getLogicColumn()),
each -> each));
+ return
encryptTableRuleConfig.getColumns().stream().collect(Collectors.toMap(each ->
String.join(".", encryptTableRuleConfig.getName(), each.getLogicColumn()), each
-> each));
}
@Override
@@ -86,7 +83,12 @@ public final class EncryptRuleQueryResultSet implements
RQLResultSet {
@Override
public Collection<Object> getRowData() {
Entry<String, EncryptColumnRuleConfiguration> entry = data.next();
- return
Arrays.asList(Splitter.on(".").splitToList(entry.getKey()).get(0),
entry.getValue().getLogicColumn(), entry.getValue().getCipherColumn(),
entry.getValue().getPlainColumn(),
+ return Arrays.asList(entry.getKey().split("\\.")[0],
entry.getValue().getLogicColumn(), entry.getValue().getCipherColumn(),
entry.getValue().getPlainColumn(),
encryptors.get(entry.getValue().getEncryptorName()).getType(),
PropertiesConverter.convert(encryptors.get(entry.getValue().getEncryptorName()).getProps()));
}
+
+ @Override
+ public String getType() {
+ return ShowEncryptRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
new file mode 100644
index 0000000..1140f66
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.encrypt.distsql.EncryptRuleQueryResultSet
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSetTest.java
similarity index 77%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSetTest.java
index 7ddac02..e22f846 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/distsql/EncryptRuleQueryResultSetTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.encrypt.distsql;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
@@ -23,7 +23,8 @@ import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfigu
import
org.apache.shardingsphere.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.junit.Test;
import java.util.Collection;
@@ -35,24 +36,18 @@ import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class EncryptRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", null, "user_plain",
"test");
- EncryptTableRuleConfiguration encryptTableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(encryptColumnRuleConfig));
- ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfig =
new ShardingSphereAlgorithmConfiguration("md5", new Properties());
- Map<String, ShardingSphereAlgorithmConfiguration> encryptors = new
HashMap<>();
- encryptors.put("test", shardingSphereAlgorithmConfig);
- return Collections.singleton(new
EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfig),
encryptors));
- }
+public final class EncryptRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(getRuleConfiguration()));
RQLResultSet resultSet = new EncryptRuleQueryResultSet();
- resultSet.init("test", mock(ShowEncryptRulesStatement.class));
+ resultSet.init(metaData, mock(ShowEncryptRulesStatement.class));
Collection<Object> actual = resultSet.getRowData();
assertThat(actual.size(), is(6));
assertTrue(actual.contains("t_encrypt"));
@@ -61,4 +56,13 @@ public final class EncryptRuleQueryResultSetTest extends
BaseRuleQueryResultSet
assertTrue(actual.contains("user_plain"));
assertTrue(actual.contains("md5"));
}
+
+ private RuleConfiguration getRuleConfiguration() {
+ EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", null, "user_plain",
"test");
+ EncryptTableRuleConfiguration encryptTableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(encryptColumnRuleConfig));
+ ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfig =
new ShardingSphereAlgorithmConfiguration("md5", new Properties());
+ Map<String, ShardingSphereAlgorithmConfiguration> encryptors = new
HashMap<>();
+ encryptors.put("test", shardingSphereAlgorithmConfig);
+ return new
EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfig),
encryptors);
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSet.java
similarity index 82%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSet.java
index f2ca26c..e384df5 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSet.java
@@ -15,16 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.readwritesplitting.distsql;
import com.google.common.base.Joiner;
-import com.google.common.collect.Maps;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.properties.PropertiesConverter;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingRulesStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Arrays;
@@ -44,11 +44,11 @@ public final class ReadwriteSplittingRuleQueryResultSet
implements RQLResultSet
private Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- Optional<ReadwriteSplittingRuleConfiguration> ruleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ Optional<ReadwriteSplittingRuleConfiguration> ruleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
ReadwriteSplittingRuleConfiguration).map(each ->
(ReadwriteSplittingRuleConfiguration) each).findAny();
data = ruleConfig.map(optional ->
optional.getDataSources().iterator()).orElse(Collections.emptyIterator());
- loadBalancers =
ruleConfig.map(ReadwriteSplittingRuleConfiguration::getLoadBalancers).orElse(Maps.newHashMap());
+ loadBalancers =
ruleConfig.map(ReadwriteSplittingRuleConfiguration::getLoadBalancers).orElse(Collections.emptyMap());
}
@Override
@@ -68,4 +68,9 @@ public final class ReadwriteSplittingRuleQueryResultSet
implements RQLResultSet
null == loadBalancers.get(ruleConfig.getLoadBalancerName()) ?
null : loadBalancers.get(ruleConfig.getLoadBalancerName()).getType(),
PropertiesConverter.convert(loadBalancers.get(ruleConfig.getLoadBalancerName()).getProps()));
}
+
+ @Override
+ public String getType() {
+ return ShowReadwriteSplittingRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
new file mode 100644
index 0000000..a27c671
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.readwritesplitting.distsql.ReadwriteSplittingRuleQueryResultSet
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSetTest.java
similarity index 78%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSetTest.java
index 737ab27..4ad3ade 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ReadwriteSplittingRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/ReadwriteSplittingRuleQueryResultSetTest.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.readwritesplitting.distsql;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingRulesStatement;
@@ -34,26 +35,18 @@ import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class ReadwriteSplittingRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
- new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds",
"ms_group", "ds_primary", Arrays.asList("ds_slave_0", "ds_slave_1"), "test");
- Properties props = new Properties();
- props.setProperty("read_weight", "2:1");
- ShardingSphereAlgorithmConfiguration
shardingSphereAlgorithmConfiguration = new
ShardingSphereAlgorithmConfiguration("random", props);
- Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new
HashMap<>();
- loadBalancers.put("test", shardingSphereAlgorithmConfiguration);
- return Collections.singleton(new
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig),
loadBalancers));
- }
+public final class ReadwriteSplittingRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createRuleConfiguration()));
ReadwriteSplittingRuleQueryResultSet resultSet = new
ReadwriteSplittingRuleQueryResultSet();
- resultSet.init("test",
mock(ShowReadwriteSplittingRulesStatement.class));
+ resultSet.init(metaData,
mock(ShowReadwriteSplittingRulesStatement.class));
Collection<Object> actual = resultSet.getRowData();
assertThat(actual.size(), is(6));
assertTrue(actual.contains("pr_ds"));
@@ -63,4 +56,15 @@ public final class ReadwriteSplittingRuleQueryResultSetTest
extends BaseRuleQuer
assertTrue(actual.contains("random"));
assertTrue(actual.contains("read_weight=2:1"));
}
+
+ private RuleConfiguration createRuleConfiguration() {
+ ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
+ new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds",
"ms_group", "ds_primary", Arrays.asList("ds_slave_0", "ds_slave_1"), "test");
+ Properties props = new Properties();
+ props.setProperty("read_weight", "2:1");
+ ShardingSphereAlgorithmConfiguration
shardingSphereAlgorithmConfiguration = new
ShardingSphereAlgorithmConfiguration("random", props);
+ Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new
HashMap<>();
+ loadBalancers.put("test", shardingSphereAlgorithmConfiguration);
+ return new
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig),
loadBalancers);
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSet.java
similarity index 77%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSet.java
index 4ae52bb..9265894 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSet.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBindingTableRulesStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Collection;
@@ -35,8 +36,8 @@ public final class ShardingBindingTableRuleQueryResultSet
implements RQLResultSe
private Iterator<String> data;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- Optional<ShardingRuleConfiguration> shardingRuleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ Optional<ShardingRuleConfiguration> shardingRuleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration)
each).findFirst();
data = shardingRuleConfig.map(shardingRuleConfiguration ->
shardingRuleConfiguration.getBindingTableGroups().iterator()).orElse(Collections.emptyIterator());
}
@@ -55,4 +56,9 @@ public final class ShardingBindingTableRuleQueryResultSet
implements RQLResultSe
public Collection<Object> getRowData() {
return Collections.singleton(data.next());
}
+
+ @Override
+ public String getType() {
+ return ShowShardingBindingTableRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSet.java
similarity index 77%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSet.java
index e3f87a0..cf78bdb 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSet.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBroadcastTableRulesStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Collection;
@@ -35,8 +36,8 @@ public final class ShardingBroadcastTableRuleQueryResultSet
implements RQLResult
private Iterator<String> data;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- Optional<ShardingRuleConfiguration> shardingRuleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ Optional<ShardingRuleConfiguration> shardingRuleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration)
each).findFirst();
data = shardingRuleConfig.map(optional ->
optional.getBroadcastTables().iterator()).orElse(Collections.emptyIterator());
}
@@ -55,4 +56,9 @@ public final class ShardingBroadcastTableRuleQueryResultSet
implements RQLResult
public Collection<Object> getRowData() {
return Collections.singleton(data.next());
}
+
+ @Override
+ public String getType() {
+ return
ShowShardingBroadcastTableRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSet.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSet.java
similarity index 96%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSet.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSet.java
index fabbb56..fd66056 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSet.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSet.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.properties.PropertiesConverter;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
@@ -53,9 +53,9 @@ public final class ShardingTableRuleQueryResultSet implements
RQLResultSet {
private ShardingRuleConfiguration shardingRuleConfig;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
String tableName = ((ShowShardingTableRulesStatement)
sqlStatement).getTableName();
- Optional<ShardingRuleConfiguration> ruleConfig =
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
+ Optional<ShardingRuleConfiguration> ruleConfig =
metaData.getRuleMetaData().getConfigurations()
.stream().filter(each -> each instanceof
ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration)
each).findAny();
if (Objects.isNull(tableName)) {
tables = ruleConfig.map(optional ->
optional.getTables().iterator()).orElse(Collections.emptyIterator());
@@ -198,4 +198,9 @@ public final class ShardingTableRuleQueryResultSet
implements RQLResultSet {
private Optional<KeyGenerateStrategyConfiguration>
getKeyGenerateStrategyConfiguration(final KeyGenerateStrategyConfiguration
keyGenerateStrategyConfig) {
return null == keyGenerateStrategyConfig ?
Optional.ofNullable(shardingRuleConfig.getDefaultKeyGenerateStrategy()) :
Optional.of(keyGenerateStrategyConfig);
}
+
+ @Override
+ public String getType() {
+ return ShowShardingTableRulesStatement.class.getCanonicalName();
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
new file mode 100644
index 0000000..cb2f956
--- /dev/null
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.sharding.distsql.ShardingTableRuleQueryResultSet
+org.apache.shardingsphere.sharding.distsql.ShardingBindingTableRuleQueryResultSet
+org.apache.shardingsphere.sharding.distsql.ShardingBroadcastTableRuleQueryResultSet
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSetTest.java
similarity index 76%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSetTest.java
index 99421f3..204f078e 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBindingTableRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBindingTableRuleQueryResultSetTest.java
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBindingTableRulesStatement;
@@ -29,27 +30,30 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class ShardingBindingTableRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- ShardingRuleConfiguration result = new ShardingRuleConfiguration();
- result.getTables().add(new ShardingTableRuleConfiguration("t_order"));
- result.getTables().add(new
ShardingTableRuleConfiguration("t_order_item"));
- result.getTables().add(new ShardingTableRuleConfiguration("t_1"));
- result.getTables().add(new ShardingTableRuleConfiguration("t_2"));
-
result.getBindingTableGroups().addAll(Collections.singleton("t_order,t_order_item"));
- return Collections.singleton(result);
- }
+public final class ShardingBindingTableRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createRuleConfiguration()));
ShardingBindingTableRuleQueryResultSet resultSet = new
ShardingBindingTableRuleQueryResultSet();
- resultSet.init("test",
mock(ShowShardingBindingTableRulesStatement.class));
+ resultSet.init(metaData,
mock(ShowShardingBindingTableRulesStatement.class));
Collection<Object> actual = resultSet.getRowData();
assertThat(actual.size(), is(1));
assertTrue(actual.contains("t_order,t_order_item"));
}
+
+ private RuleConfiguration createRuleConfiguration() {
+ ShardingRuleConfiguration result = new ShardingRuleConfiguration();
+ result.getTables().add(new ShardingTableRuleConfiguration("t_order"));
+ result.getTables().add(new
ShardingTableRuleConfiguration("t_order_item"));
+ result.getTables().add(new ShardingTableRuleConfiguration("t_1"));
+ result.getTables().add(new ShardingTableRuleConfiguration("t_2"));
+
result.getBindingTableGroups().addAll(Collections.singleton("t_order,t_order_item"));
+ return result;
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSetTest.java
similarity index 75%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSetTest.java
index 709742c..7201b5b 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingBroadcastTableRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingBroadcastTableRuleQueryResultSetTest.java
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBroadcastTableRulesStatement;
import org.junit.Test;
@@ -28,23 +29,26 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class ShardingBroadcastTableRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- ShardingRuleConfiguration result = new ShardingRuleConfiguration();
- result.getBroadcastTables().addAll(Arrays.asList("t_order",
"t_order_item"));
- return Collections.singleton(result);
- }
+public final class ShardingBroadcastTableRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createRuleConfiguration()));
ShardingBroadcastTableRuleQueryResultSet resultSet = new
ShardingBroadcastTableRuleQueryResultSet();
- resultSet.init("test",
mock(ShowShardingBroadcastTableRulesStatement.class));
+ resultSet.init(metaData,
mock(ShowShardingBroadcastTableRulesStatement.class));
Collection<Object> actual = resultSet.getRowData();
assertThat(actual.size(), is(1));
assertThat(actual, is(Collections.singleton("t_order")));
}
+
+ private RuleConfiguration createRuleConfiguration() {
+ ShardingRuleConfiguration result = new ShardingRuleConfiguration();
+ result.getBroadcastTables().addAll(Arrays.asList("t_order",
"t_order_item"));
+ return result;
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSetTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSetTest.java
similarity index 79%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSetTest.java
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSetTest.java
index 1f40cc1..88d3f35 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/ShardingTableRuleQueryResultSetTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/distsql/ShardingTableRuleQueryResultSetTest.java
@@ -15,13 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.sharding.distsql;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableRulesStatement;
import org.junit.Test;
@@ -34,26 +35,18 @@ import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public final class ShardingTableRuleQueryResultSetTest extends
BaseRuleQueryResultSet {
-
- @SuppressWarnings("unchecked")
- @Override
- protected Collection<RuleConfiguration> buildRuleConfigurations() {
- return new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(readYAML(),
Collection.class));
- }
-
- @SneakyThrows
- private String readYAML() {
- return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource("yaml/config-sharding.yaml").toURI()))
- .stream().map(each -> each +
System.lineSeparator()).collect(Collectors.joining());
- }
+public final class ShardingTableRuleQueryResultSetTest {
@Test
public void assertGetRowData() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(createRuleConfiguration());
RQLResultSet resultSet = new ShardingTableRuleQueryResultSet();
- resultSet.init("test", mock(ShowShardingTableRulesStatement.class));
+ resultSet.init(metaData, mock(ShowShardingTableRulesStatement.class));
List<Object> actual = new ArrayList<>(resultSet.getRowData());
assertThat(actual.size(), is(14));
assertThat(actual.get(0), is("t_order"));
@@ -71,4 +64,15 @@ public final class ShardingTableRuleQueryResultSetTest
extends BaseRuleQueryResu
assertThat(actual.get(12), is("SNOWFLAKE"));
assertThat(actual.get(13), is("worker-id=123"));
}
+
+ @SuppressWarnings("unchecked")
+ private Collection<RuleConfiguration> createRuleConfiguration() {
+ return new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(readYAML(),
Collection.class));
+ }
+
+ @SneakyThrows
+ private String readYAML() {
+ return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource("yaml/distsql/sharding-rule-config.yaml").toURI()))
+ .stream().map(each -> each +
System.lineSeparator()).collect(Collectors.joining());
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/yaml/config-sharding.yaml
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/resources/yaml/distsql/sharding-rule-config.yaml
similarity index 100%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/yaml/config-sharding.yaml
rename to
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/resources/yaml/distsql/sharding-rule-config.yaml
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLResultSet.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/RQLResultSet.java
similarity index 77%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLResultSet.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/RQLResultSet.java
index f6759bf..ce0c5ac 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLResultSet.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/RQLResultSet.java
@@ -15,8 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
+package org.apache.shardingsphere.infra.distsql;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.spi.typed.TypedSPI;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.Collection;
@@ -24,14 +26,15 @@ import java.util.Collection;
/**
* RQL result set.
*/
-public interface RQLResultSet {
+public interface RQLResultSet extends TypedSPI {
/**
- * Initialize rule data.
- * @param schemaName schema name
+ * Initialize data.
+ *
+ * @param metaData meta data for ShardingSphere
* @param sqlStatement SQL statement
*/
- void init(String schemaName, SQLStatement sqlStatement);
+ void init(ShardingSphereMetaData metaData, SQLStatement sqlStatement);
/**
* Get result set column names.
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourceQueryResultSet.java
similarity index 55%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
rename to
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourceQueryResultSet.java
index fc39afe..88f4ce1 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DataSourceQueryResultSet.java
@@ -15,14 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import com.google.gson.Gson;
+import
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -33,21 +34,20 @@ import java.util.Iterator;
import java.util.Map;
/**
- * Result set for show resources.
+ * Result set for show data source.
*/
-public final class DataSourcesQueryResultSet implements RQLResultSet {
+public final class DataSourceQueryResultSet implements RQLResultSet {
private Map<String, DataSourceParameter> dataSourceParameterMap;
private Iterator<String> dataSourceNames;
- private String schemaName;
+ private ShardingSphereMetaData metaData;
@Override
- public void init(final String schemaName, final SQLStatement sqlStatement)
{
- this.schemaName = schemaName;
- dataSourceParameterMap =
DataSourceParameterConverter.getDataSourceParameterMap(
-
DataSourceConverter.getDataSourceConfigurationMap(ProxyContext.getInstance().getMetaData(schemaName).getResource().getDataSources()));
+ public void init(final ShardingSphereMetaData metaData, final SQLStatement
sqlStatement) {
+ this.metaData = metaData;
+ dataSourceParameterMap =
DataSourceParameterConverter.getDataSourceParameterMap(DataSourceConverter.getDataSourceConfigurationMap(metaData.getResource().getDataSources()));
dataSourceNames = dataSourceParameterMap.keySet().iterator();
}
@@ -64,19 +64,28 @@ public final class DataSourcesQueryResultSet implements
RQLResultSet {
@Override
public Collection<Object> getRowData() {
String dataSourceName = dataSourceNames.next();
- DataSourceMetaData dataSourceMetaData =
ProxyContext.getInstance().getMetaData(schemaName).getResource().getDataSourcesMetaData().getDataSourceMetaData(dataSourceName);
- Map<Object, Object> attributeMap = new HashMap<>();
- attributeMap.put("connectionTimeoutMilliseconds",
dataSourceParameterMap.get(dataSourceName).getConnectionTimeoutMilliseconds());
- attributeMap.put("idleTimeoutMilliseconds",
dataSourceParameterMap.get(dataSourceName).getIdleTimeoutMilliseconds());
- attributeMap.put("maxLifetimeMilliseconds",
dataSourceParameterMap.get(dataSourceName).getMaxLifetimeMilliseconds());
- attributeMap.put("maxPoolSize",
dataSourceParameterMap.get(dataSourceName).getMaxPoolSize());
- attributeMap.put("minPoolSize",
dataSourceParameterMap.get(dataSourceName).getMinPoolSize());
- attributeMap.put("maintenanceIntervalMilliseconds",
dataSourceParameterMap.get(dataSourceName).getMaintenanceIntervalMilliseconds());
- attributeMap.put("readOnly",
dataSourceParameterMap.get(dataSourceName).isReadOnly());
- String type =
ProxyContext.getInstance().getMetaData(schemaName).getResource().getDatabaseType().getName();
+ DataSourceMetaData dataSourceMetaData =
metaData.getResource().getDataSourcesMetaData().getDataSourceMetaData(dataSourceName);
+ String type = metaData.getResource().getDatabaseType().getName();
String host = dataSourceMetaData.getHostName();
int port = dataSourceMetaData.getPort();
String db = dataSourceMetaData.getCatalog();
- return Arrays.asList(dataSourceName, type, host, port, db, (new
Gson()).toJson(attributeMap));
+ return Arrays.asList(dataSourceName, type, host, port, db, (new
Gson()).toJson(getAttributeMap(dataSourceParameterMap.get(dataSourceName))));
+ }
+
+ private Map<Object, Object> getAttributeMap(final DataSourceParameter
dataSourceParameter) {
+ Map<Object, Object> result = new HashMap<>(7, 1);
+ result.put("connectionTimeoutMilliseconds",
dataSourceParameter.getConnectionTimeoutMilliseconds());
+ result.put("idleTimeoutMilliseconds",
dataSourceParameter.getIdleTimeoutMilliseconds());
+ result.put("maxLifetimeMilliseconds",
dataSourceParameter.getMaxLifetimeMilliseconds());
+ result.put("maxPoolSize", dataSourceParameter.getMaxPoolSize());
+ result.put("minPoolSize", dataSourceParameter.getMinPoolSize());
+ result.put("maintenanceIntervalMilliseconds",
dataSourceParameter.getMaintenanceIntervalMilliseconds());
+ result.put("readOnly", dataSourceParameter.isReadOnly());
+ return result;
+ }
+
+ @Override
+ public String getType() {
+ return ShowResourcesStatement.class.getCanonicalName();
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
index 8eec41c..0e985d0 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandler.java
@@ -18,7 +18,9 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
@@ -43,7 +45,7 @@ public final class RQLBackendHandler extends
SchemaRequiredBackendHandler<RQLSta
@Override
protected ResponseHeader execute(final String schemaName, final
RQLStatement sqlStatement) {
- resultSet.init(schemaName, sqlStatement);
+ resultSet.init(ProxyContext.getInstance().getMetaData(schemaName),
sqlStatement);
List<QueryHeader> queryHeaders =
resultSet.getColumnNames().stream().map(
each -> new QueryHeader(schemaName, "", each, each, Types.CHAR,
"CHAR", 255, 0, false, false, false, false)).collect(Collectors.toList());
return new QueryResponseHeader(queryHeaders);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
index 8a5b9b7..af07978 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
@@ -19,23 +19,14 @@ package
org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
-import
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
-import
org.apache.shardingsphere.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.infra.spi.typed.TypedSPIRegistry;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DataSourcesQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DatabaseDiscoveryRuleQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.EncryptRuleQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ReadwriteSplittingRuleQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ShardingBindingTableRuleQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ShardingBroadcastTableRuleQueryResultSet;
-import
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ShardingTableRuleQueryResultSet;
-import
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingRulesStatement;
-import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBindingTableRulesStatement;
-import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBroadcastTableRulesStatement;
-import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableRulesStatement;
+
+import java.util.Properties;
/**
* RQL backend handler factory.
@@ -43,6 +34,10 @@ import
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingT
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class RQLBackendHandlerFactory {
+ static {
+ ShardingSphereServiceLoader.register(RQLResultSet.class);
+ }
+
/**
* Create new instance of RDL backend handler.
*
@@ -51,31 +46,7 @@ public final class RQLBackendHandlerFactory {
* @return RDL backend handler
*/
public static TextProtocolBackendHandler newInstance(final RQLStatement
sqlStatement, final BackendConnection backendConnection) {
- return new RQLBackendHandler(sqlStatement, backendConnection,
getRuleQueryResultSet(sqlStatement));
- }
-
- private static RQLResultSet getRuleQueryResultSet(final RQLStatement
sqlStatement) {
- if (sqlStatement instanceof ShowResourcesStatement) {
- return new DataSourcesQueryResultSet();
- }
- if (sqlStatement instanceof ShowShardingBindingTableRulesStatement) {
- return new ShardingBindingTableRuleQueryResultSet();
- }
- if (sqlStatement instanceof ShowShardingBroadcastTableRulesStatement) {
- return new ShardingBroadcastTableRuleQueryResultSet();
- }
- if (sqlStatement instanceof ShowReadwriteSplittingRulesStatement) {
- return new ReadwriteSplittingRuleQueryResultSet();
- }
- if (sqlStatement instanceof ShowDatabaseDiscoveryRulesStatement) {
- return new DatabaseDiscoveryRuleQueryResultSet();
- }
- if (sqlStatement instanceof ShowEncryptRulesStatement) {
- return new EncryptRuleQueryResultSet();
- }
- if (sqlStatement instanceof ShowShardingTableRulesStatement) {
- return new ShardingTableRuleQueryResultSet();
- }
- throw new UnsupportedOperationException(String.format("Cannot support
SQL statement %s", sqlStatement.getClass().getCanonicalName()));
+ RQLResultSet rqlResultSet =
TypedSPIRegistry.getRegisteredService(RQLResultSet.class,
sqlStatement.getClass().getCanonicalName(), new Properties());
+ return new RQLBackendHandler(sqlStatement, backendConnection,
rqlResultSet);
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
new file mode 100644
index 0000000..7759fe9
--- /dev/null
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.RQLResultSet
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.proxy.backend.text.distsql.rql.DataSourceQueryResultSet
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
index a78b3e7..6f31cd4 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerTest.java
@@ -18,15 +18,23 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.rql;
import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
+import org.apache.shardingsphere.infra.distsql.RQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
+import org.apache.shardingsphere.transaction.context.TransactionContexts;
+import org.junit.Before;
import org.junit.Test;
import java.sql.Types;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
@@ -37,6 +45,17 @@ import static org.mockito.Mockito.when;
public final class RQLBackendHandlerTest {
+ @Before
+ public void setUp() {
+ MetaDataContexts metaDataContexts = mock(MetaDataContexts.class);
+
when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singleton("test"));
+ ShardingSphereRuleMetaData ruleMetaData =
mock(ShardingSphereRuleMetaData.class);
+ ShardingSphereMetaData shardingSphereMetaData =
mock(ShardingSphereMetaData.class);
+
when(shardingSphereMetaData.getRuleMetaData()).thenReturn(ruleMetaData);
+
when(metaDataContexts.getMetaData("test")).thenReturn(shardingSphereMetaData);
+ ProxyContext.getInstance().init(metaDataContexts,
mock(TransactionContexts.class));
+ }
+
@Test
public void assertExecute() {
RQLResultSet resultSet = mock(RQLResultSet.class);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/BaseRuleQueryResultSet.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/BaseRuleQueryResultSet.java
deleted file mode 100644
index aa40146..0000000
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/BaseRuleQueryResultSet.java
+++ /dev/null
@@ -1,49 +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.proxy.backend.text.distsql.rql.impl;
-
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.transaction.context.TransactionContexts;
-import org.junit.Before;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public abstract class BaseRuleQueryResultSet {
-
- @Before
- public final void setUp() {
- MetaDataContexts metaDataContexts = mock(MetaDataContexts.class);
-
when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singleton("test"));
- ShardingSphereRuleMetaData ruleMetaData =
mock(ShardingSphereRuleMetaData.class);
-
when(ruleMetaData.getConfigurations()).thenReturn(buildRuleConfigurations());
- ShardingSphereMetaData shardingSphereMetaData =
mock(ShardingSphereMetaData.class);
-
when(shardingSphereMetaData.getRuleMetaData()).thenReturn(ruleMetaData);
-
when(metaDataContexts.getMetaData("test")).thenReturn(shardingSphereMetaData);
- ProxyContext.getInstance().init(metaDataContexts,
mock(TransactionContexts.class));
- }
-
- protected abstract Collection<RuleConfiguration> buildRuleConfigurations();
-}