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 <[email protected]>
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());
}