You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/08/01 09:54:16 UTC
[shardingsphere] branch master updated: Split SelectInformationSchemataExecutorTest and DefaultDatabaseMetadataExecutorTest (#19747)
This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 ac036f54346 Split SelectInformationSchemataExecutorTest and DefaultDatabaseMetadataExecutorTest (#19747)
ac036f54346 is described below
commit ac036f54346c5e0b750792a235db024817bcbe27
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Aug 1 17:54:10 2022 +0800
Split SelectInformationSchemataExecutorTest and DefaultDatabaseMetadataExecutorTest (#19747)
---
.../impl/ExistsSubqueryExpressionConverter.java | 2 +-
.../impl/AggregationProjectionConverter.java | 2 +-
.../executor/AbstractDatabaseMetadataExecutor.java | 15 ++---
.../DefaultDatabaseMetadataExecutorTest.java} | 78 +++-------------------
.../SelectInformationSchemataExecutorTest.java | 73 +++++++-------------
5 files changed, 42 insertions(+), 128 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
index d4d5272b0f2..43165667b72 100644
--- a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
+++ b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
@@ -48,7 +48,7 @@ public final class ExistsSubqueryExpressionConverter implements SQLSegmentConver
if (null == expression) {
return Optional.empty();
}
- SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.EXISTS,
+ SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.EXISTS,
Collections.singletonList(new SelectStatementConverter().convertToSQLNode(expression.getSubquery().getSelect())), SqlParserPos.ZERO);
return expression.isNot() ? Optional.of(new SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode), SqlParserPos.ZERO)) : Optional.of(sqlNode);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
index 5430c92f643..fb25bf52f87 100644
--- a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
+++ b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
@@ -78,7 +78,7 @@ public final class AggregationProjectionConverter implements SQLSegmentConverter
}
if (segment.getAlias().isPresent()) {
return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS, Arrays.asList(new SqlBasicCall(convertOperator(segment.getType().name()),
- Collections.singletonList(createParametersSqlNode(parameters)), SqlParserPos.ZERO, functionQuantifier).withExpanded(false),
+ Collections.singletonList(createParametersSqlNode(parameters)), SqlParserPos.ZERO, functionQuantifier).withExpanded(false),
SqlIdentifier.star(Collections.singletonList(segment.getAlias().get()), SqlParserPos.ZERO, Collections.singletonList(SqlParserPos.ZERO))), SqlParserPos.ZERO));
}
return Optional.of((SqlBasicCall) new SqlBasicCall(convertOperator(segment.getType().name()),
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetadataExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetadataExecutor.java
index bff598f358d..a475da55db7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetadataExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetadataExecutor.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.handler.admin.executor;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
@@ -176,16 +177,12 @@ public abstract class AbstractDatabaseMetadataExecutor implements DatabaseAdminQ
/**
* Default database metadata executor, execute sql directly in the database to obtain the result source data.
*/
+ @RequiredArgsConstructor
@Slf4j
public static class DefaultDatabaseMetadataExecutor extends AbstractDatabaseMetadataExecutor {
- @Getter
private final String sql;
- public DefaultDatabaseMetadataExecutor(final String sql) {
- this.sql = sql;
- }
-
@Override
protected void initDatabaseData(final String databaseName) {
}
@@ -199,7 +196,7 @@ public abstract class AbstractDatabaseMetadataExecutor implements DatabaseAdminQ
protected List<String> getDatabaseNames(final ConnectionSession connectionSession) {
Optional<String> database = ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each -> hasAuthority(each, connectionSession.getGrantee()))
.filter(AbstractDatabaseMetadataExecutor::hasDataSource).findFirst();
- return database.isPresent() ? Collections.singletonList(database.get()) : Collections.emptyList();
+ return database.map(Collections::singletonList).orElse(Collections.emptyList());
}
/**
@@ -214,9 +211,9 @@ public abstract class AbstractDatabaseMetadataExecutor implements DatabaseAdminQ
Optional<Entry<String, DataSource>> dataSourceEntry = resource.getDataSources().entrySet().stream().findFirst();
log.info("Actual SQL: {} ::: {}", dataSourceEntry.orElseThrow(ResourceNotExistedException::new).getKey(), sql);
try (
- Connection conn = dataSourceEntry.get().getValue().getConnection();
- PreparedStatement ps = conn.prepareStatement(sql);
- ResultSet resultSet = ps.executeQuery()) {
+ Connection connection = dataSourceEntry.get().getValue().getConnection();
+ PreparedStatement preparedStatement = connection.prepareStatement(sql);
+ ResultSet resultSet = preparedStatement.executeQuery()) {
callback.apply(resultSet);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetadataExecutorTest.java
similarity index 57%
copy from shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java
copy to shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetadataExecutorTest.java
index d7834283d48..bfed8cca385 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetadataExecutorTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.handler.admin.mysql.executor.information;
+package org.apache.shardingsphere.proxy.backend.handler.admin.executor;
import org.apache.shardingsphere.authority.provider.database.model.privilege.DatabasePermittedPrivileges;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
@@ -30,13 +30,10 @@ import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetadataExecutor.DefaultDatabaseMetadataExecutor;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import org.apache.shardingsphere.test.mock.MockedDataSource;
import org.junit.Before;
import org.junit.Test;
@@ -48,28 +45,22 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
-public final class SelectInformationSchemataExecutorTest extends ProxyContextRestorer {
-
- private final SQLParserRule sqlParserRule = new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build());
+public final class DefaultDatabaseMetadataExecutorTest extends ProxyContextRestorer {
private final Grantee grantee = new Grantee("root", "127.0.0.1");
@@ -84,7 +75,7 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
private ContextManager mockContextManager() {
AuthorityRule authorityRule = mock(AuthorityRule.class);
- when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(new HashSet<>(Arrays.asList("auth_db", "empty_db")))));
+ when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
new ShardingSphereMetaData(new HashMap<>(), new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())),
@@ -94,53 +85,11 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
@Test
- public void assertExecuteWithResource() throws SQLException {
+ public void assertExecuteWithAlias() throws SQLException {
Map<String, String> expectedResultSetMap = new HashMap<>(2, 1);
- expectedResultSetMap.put("SCHEMA_NAME", "foo_ds");
- expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(expectedResultSetMap));
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("no_auth_db", createDatabase("no_auth_db"));
- String sql = "SELECT SCHEMA_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
- assertTrue(executor.getMergedResult().next());
- assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
- assertThat(executor.getMergedResult().getValue(2, String.class), is("utf8mb4"));
- assertFalse(executor.getMergedResult().next());
- }
-
- @Test
- public void assertExecuteWithoutResource() throws SQLException {
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("empty_db", createDatabase("empty_db"));
- String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(4));
- assertTrue(executor.getMergedResult().next());
- assertThat(executor.getMergedResult().getValue(1, String.class), is("empty_db"));
- assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
- assertThat(executor.getMergedResult().getValue(3, String.class), is(""));
- assertThat(executor.getMergedResult().getValue(4, String.class), is(""));
- assertFalse(executor.getMergedResult().next());
- }
-
- @Test
- public void assertExecuteWithoutDatabases() throws SQLException {
- String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
- }
-
- @Test
- public void assertSelectSchemaAliasExecute() throws SQLException {
- Map<String, String> expectedResultSetMap = new HashMap<>();
expectedResultSetMap.put("sn", "foo_ds");
expectedResultSetMap.put("DEFAULT_CHARACTER_SET_NAME", "utf8mb4");
- Map<String, ShardingSphereDatabase> databases = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases();
- databases.put("auth_db", createDatabase(expectedResultSetMap));
- databases.put("empty_db", createDatabase("empty_db"));
+ ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(expectedResultSetMap));
String sql = "SELECT SCHEMA_NAME AS sn, DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA";
DefaultDatabaseMetadataExecutor executor = new DefaultDatabaseMetadataExecutor(sql);
executor.execute(connectionSession);
@@ -149,9 +98,8 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
@Test
- public void assertDefaultExecute() throws SQLException {
- Map<String, ShardingSphereDatabase> databases = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases();
- databases.put("auth_db", createDatabase(Collections.singletonMap("support_ndb", "0")));
+ public void assertExecuteWithDefaultValue() throws SQLException {
+ ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(Collections.singletonMap("support_ndb", "0")));
String sql = "SELECT COUNT(*) AS support_ndb FROM information_schema.ENGINES WHERE Engine = 'ndbcluster'";
DefaultDatabaseMetadataExecutor executor = new DefaultDatabaseMetadataExecutor(sql);
executor.execute(connectionSession);
@@ -161,16 +109,10 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
}
- private ShardingSphereDatabase createDatabase(final String databaseName, final ShardingSphereResource resource) {
- return new ShardingSphereDatabase(databaseName, new MySQLDatabaseType(), resource, mock(ShardingSphereRuleMetaData.class), Collections.emptyMap());
- }
-
- private ShardingSphereDatabase createDatabase(final String databaseName) {
- return createDatabase(databaseName, new ShardingSphereResource(Collections.emptyMap()));
- }
-
private ShardingSphereDatabase createDatabase(final Map<String, String> expectedResultSetMap) throws SQLException {
- return createDatabase("auth_db", new ShardingSphereResource(Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))));
+ return new ShardingSphereDatabase("auth_db", new MySQLDatabaseType(),
+ new ShardingSphereResource(Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))),
+ mock(ShardingSphereRuleMetaData.class), Collections.emptyMap());
}
private Connection mockConnection(final Map<String, String> expectedResultSetMap) throws SQLException {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java
index d7834283d48..93e8f9e04d5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/information/SelectInformationSchemataExecutorTest.java
@@ -33,7 +33,6 @@ import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetadataExecutor.DefaultDatabaseMetadataExecutor;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
@@ -48,10 +47,8 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -69,10 +66,12 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class SelectInformationSchemataExecutorTest extends ProxyContextRestorer {
- private final SQLParserRule sqlParserRule = new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build());
-
private final Grantee grantee = new Grantee("root", "127.0.0.1");
+ private final String sql = "SELECT SCHEMA_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA";
+
+ private SelectStatement statement;
+
@Mock
private ConnectionSession connectionSession;
@@ -80,11 +79,12 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
public void setUp() {
ProxyContext.init(mockContextManager());
when(connectionSession.getGrantee()).thenReturn(grantee);
+ statement = (SelectStatement) new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()).getSQLParserEngine("MySQL").parse(sql, false);
}
private ContextManager mockContextManager() {
AuthorityRule authorityRule = mock(AuthorityRule.class);
- when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(new HashSet<>(Arrays.asList("auth_db", "empty_db")))));
+ when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
new ShardingSphereMetaData(new HashMap<>(), new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())),
@@ -94,14 +94,21 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
@Test
- public void assertExecuteWithResource() throws SQLException {
+ public void assertExecuteWithUnauthorizedDatabase() throws SQLException {
+ ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("no_auth_db", createDatabase("no_auth_db"));
+ SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
+ executor.execute(connectionSession);
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+ assertFalse(executor.getMergedResult().next());
+ }
+
+ @Test
+ public void assertExecuteWithAuthorizedDatabase() throws SQLException {
Map<String, String> expectedResultSetMap = new HashMap<>(2, 1);
expectedResultSetMap.put("SCHEMA_NAME", "foo_ds");
expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(expectedResultSetMap));
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("no_auth_db", createDatabase("no_auth_db"));
- String sql = "SELECT SCHEMA_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
+ SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
executor.execute(connectionSession);
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
assertTrue(executor.getMergedResult().next());
@@ -111,56 +118,24 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
}
@Test
- public void assertExecuteWithoutResource() throws SQLException {
- ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("empty_db", createDatabase("empty_db"));
- String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
+ public void assertExecuteWithAuthorizedDatabaseAndEmptyResource() throws SQLException {
+ ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase("auth_db"));
+ SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(4));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
assertTrue(executor.getMergedResult().next());
- assertThat(executor.getMergedResult().getValue(1, String.class), is("empty_db"));
+ assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
- assertThat(executor.getMergedResult().getValue(3, String.class), is(""));
- assertThat(executor.getMergedResult().getValue(4, String.class), is(""));
assertFalse(executor.getMergedResult().next());
}
@Test
- public void assertExecuteWithoutDatabases() throws SQLException {
- String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor((SelectStatement) sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
+ public void assertExecuteWithoutDatabase() throws SQLException {
+ SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
executor.execute(connectionSession);
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
}
- @Test
- public void assertSelectSchemaAliasExecute() throws SQLException {
- Map<String, String> expectedResultSetMap = new HashMap<>();
- expectedResultSetMap.put("sn", "foo_ds");
- expectedResultSetMap.put("DEFAULT_CHARACTER_SET_NAME", "utf8mb4");
- Map<String, ShardingSphereDatabase> databases = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases();
- databases.put("auth_db", createDatabase(expectedResultSetMap));
- databases.put("empty_db", createDatabase("empty_db"));
- String sql = "SELECT SCHEMA_NAME AS sn, DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA";
- DefaultDatabaseMetadataExecutor executor = new DefaultDatabaseMetadataExecutor(sql);
- executor.execute(connectionSession);
- assertThat(executor.getRows().get(0).get("sn"), is("foo_ds"));
- assertThat(executor.getRows().get(0).get("DEFAULT_CHARACTER_SET_NAME"), is("utf8mb4"));
- }
-
- @Test
- public void assertDefaultExecute() throws SQLException {
- Map<String, ShardingSphereDatabase> databases = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases();
- databases.put("auth_db", createDatabase(Collections.singletonMap("support_ndb", "0")));
- String sql = "SELECT COUNT(*) AS support_ndb FROM information_schema.ENGINES WHERE Engine = 'ndbcluster'";
- DefaultDatabaseMetadataExecutor executor = new DefaultDatabaseMetadataExecutor(sql);
- executor.execute(connectionSession);
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
- while (executor.getMergedResult().next()) {
- assertThat(executor.getMergedResult().getValue(1, String.class), is("0"));
- }
- }
-
private ShardingSphereDatabase createDatabase(final String databaseName, final ShardingSphereResource resource) {
return new ShardingSphereDatabase(databaseName, new MySQLDatabaseType(), resource, mock(ShardingSphereRuleMetaData.class), Collections.emptyMap());
}