This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 68a9804f563 Add more test cases on ShardingDDLResultMerger (#33726)
68a9804f563 is described below
commit 68a9804f563747d4dbbbf17344cd01a01771c5ff
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Nov 19 20:45:29 2024 +0800
Add more test cases on ShardingDDLResultMerger (#33726)
---
.../merge/ddl/ShardingDDLResultMerger.java | 18 ++---
.../merge/ddl/ShardingDDLResultMergerTest.java | 89 ++++++++++------------
2 files changed, 49 insertions(+), 58 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
index 4ecedf523b1..ec2d532a497 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.sharding.merge.ddl;
import com.cedarsoftware.util.CaseInsensitiveMap;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.FetchStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.merge.engine.merger.ResultMerger;
@@ -52,16 +51,8 @@ public final class ShardingDDLResultMerger implements
ResultMerger {
return new IteratorStreamMergedResult(queryResults);
}
FetchStatementContext fetchStatementContext = (FetchStatementContext)
sqlStatementContext;
- Map<String, Integer> columnLabelIndexMap =
getColumnLabelIndexMap(queryResults.get(0));
-
fetchStatementContext.getCursorStatementContext().getSelectStatementContext().setIndexes(columnLabelIndexMap);
- return new FetchStreamMergedResult(queryResults,
fetchStatementContext, getSchema(sqlStatementContext, database),
connectionContext);
- }
-
- private ShardingSphereSchema getSchema(final SQLStatementContext
sqlStatementContext, final ShardingSphereDatabase database) {
- String defaultSchemaName = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
- return sqlStatementContext instanceof TableAvailable
- ? ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
-> database.getSchema(defaultSchemaName))
- : database.getSchema(defaultSchemaName);
+
fetchStatementContext.getCursorStatementContext().getSelectStatementContext().setIndexes(getColumnLabelIndexMap(queryResults.get(0)));
+ return new FetchStreamMergedResult(queryResults,
fetchStatementContext, getSchema(fetchStatementContext, database),
connectionContext);
}
private Map<String, Integer> getColumnLabelIndexMap(final QueryResult
queryResult) throws SQLException {
@@ -71,4 +62,9 @@ public final class ShardingDDLResultMerger implements
ResultMerger {
}
return result;
}
+
+ private ShardingSphereSchema getSchema(final FetchStatementContext
fetchStatementContext, final ShardingSphereDatabase database) {
+ String defaultSchemaName = new
DatabaseTypeRegistry(fetchStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
+ return
fetchStatementContext.getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
-> database.getSchema(defaultSchemaName));
+ }
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
index 1d931b1796f..aa85dfb6371 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
@@ -21,32 +21,33 @@ import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatem
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.FetchStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
-import
org.apache.shardingsphere.infra.session.connection.cursor.CursorConnectionContext;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import
org.apache.shardingsphere.infra.session.connection.cursor.CursorConnectionContext;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sharding.merge.common.IteratorStreamMergedResult;
import
org.apache.shardingsphere.sharding.merge.ddl.fetch.FetchStreamMergedResult;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.cursor.CursorNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.FetchStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-import
org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLSelectStatement;
-import
org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussFetchStatement;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import java.util.Optional;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -56,36 +57,35 @@ import static org.mockito.Mockito.when;
class ShardingDDLResultMergerTest {
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+
+ private final ShardingDDLResultMerger merger = new
ShardingDDLResultMerger();
+
@Test
- void assertBuildIteratorStreamMergedResult() throws SQLException {
- ShardingDDLResultMerger merger = new ShardingDDLResultMerger();
- assertThat(merger.merge(createSingleQueryResults(),
mock(FetchStatementContext.class), mock(ShardingSphereDatabase.class),
mock(ConnectionContext.class)),
+ void assertMergeWithIteratorStreamMergedResult() throws SQLException {
+
assertThat(merger.merge(Collections.singletonList(createQueryResult()),
mock(FetchStatementContext.class), mock(ShardingSphereDatabase.class),
mock(ConnectionContext.class)),
instanceOf(IteratorStreamMergedResult.class));
}
@Test
- void assertBuildFetchStreamMergedResult() throws SQLException {
- ShardingDDLResultMerger merger = new ShardingDDLResultMerger();
+ void assertMergeWithTransparentMergedResult() throws SQLException {
+ assertThat(merger.merge(createQueryResults(),
mock(SelectStatementContext.class), mock(ShardingSphereDatabase.class),
mock(ConnectionContext.class)),
+ instanceOf(TransparentMergedResult.class));
+ }
+
+ @Test
+ void assertMergeWithFetchStreamMergedResult() throws SQLException {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
-
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereSchema.class));
+
when(database.getSchema("foo_db")).thenReturn(mock(ShardingSphereSchema.class));
ConnectionContext connectionContext = mock(ConnectionContext.class);
when(connectionContext.getCursorContext()).thenReturn(new
CursorConnectionContext());
- assertThat(merger.merge(createMultiQueryResults(),
createFetchStatementContext(database), mock(ShardingSphereDatabase.class),
connectionContext),
+ assertThat(merger.merge(createQueryResults(),
createFetchStatementContext(database), mock(ShardingSphereDatabase.class),
connectionContext),
instanceOf(FetchStreamMergedResult.class));
}
- @Test
- void assertBuildTransparentMergedResult() throws SQLException {
- ShardingDDLResultMerger merger = new ShardingDDLResultMerger();
- assertThat(merger.merge(createMultiQueryResults(),
mock(SelectStatementContext.class), mock(ShardingSphereDatabase.class),
mock(ConnectionContext.class)),
- instanceOf(TransparentMergedResult.class));
- }
-
private FetchStatementContext createFetchStatementContext(final
ShardingSphereDatabase database) {
- OpenGaussFetchStatement fetchStatement = createFetchStatement();
- FetchStatementContext result = new
FetchStatementContext(fetchStatement, DefaultDatabase.LOGIC_NAME);
- CursorStatementContext cursorStatementContext =
createCursorStatementContext(database);
- result.setCursorStatementContext(cursorStatementContext);
+ FetchStatementContext result = new
FetchStatementContext(mockFetchStatement(), "foo_db");
+
result.setCursorStatementContext(createCursorStatementContext(database));
return result;
}
@@ -93,29 +93,29 @@ class ShardingDDLResultMergerTest {
CursorStatementContext result = mock(CursorStatementContext.class,
RETURNS_DEEP_STUBS);
SelectStatement selectStatement = createSelectStatement();
selectStatement.setProjections(new ProjectionsSegment(0, 0));
- SelectStatementContext selectStatementContext = new
SelectStatementContext(createShardingSphereMetaData(database),
Collections.emptyList(),
- selectStatement, DefaultDatabase.LOGIC_NAME,
Collections.emptyList());
+ SelectStatementContext selectStatementContext = new
SelectStatementContext(
+ createShardingSphereMetaData(database),
Collections.emptyList(), selectStatement, "foo_db", Collections.emptyList());
when(result.getSelectStatementContext()).thenReturn(selectStatementContext);
when(result.getSqlStatement().getSelect()).thenReturn(selectStatement);
return result;
}
- private ShardingSphereMetaData createShardingSphereMetaData(final
ShardingSphereDatabase database) {
- return new
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
database), mock(ResourceMetaData.class),
- mock(RuleMetaData.class), mock(ConfigurationProperties.class));
+ private SelectStatement createSelectStatement() {
+ SelectStatement result = mock(SelectStatement.class,
RETURNS_DEEP_STUBS);
+ when(result.getFrom()).thenReturn(Optional.of(new
SimpleTableSegment(new TableNameSegment(10, 13, new IdentifierValue("tbl")))));
+ when(result.getProjections()).thenReturn(new ProjectionsSegment(0, 0));
+ when(result.getDatabaseType()).thenReturn(databaseType);
+ return result;
}
- private List<QueryResult> createSingleQueryResults() throws SQLException {
- List<QueryResult> result = new LinkedList<>();
- QueryResult queryResult = createQueryResult();
- result.add(queryResult);
- return result;
+ private ShardingSphereMetaData createShardingSphereMetaData(final
ShardingSphereDatabase database) {
+ return new ShardingSphereMetaData(Collections.singletonMap("foo_db",
database), mock(ResourceMetaData.class),
+ mock(RuleMetaData.class), mock(ConfigurationProperties.class));
}
- private List<QueryResult> createMultiQueryResults() throws SQLException {
+ private List<QueryResult> createQueryResults() throws SQLException {
List<QueryResult> result = new LinkedList<>();
- QueryResult queryResult = createQueryResult();
- result.add(queryResult);
+ result.add(createQueryResult());
result.add(mock(QueryResult.class, RETURNS_DEEP_STUBS));
result.add(mock(QueryResult.class, RETURNS_DEEP_STUBS));
result.add(mock(QueryResult.class, RETURNS_DEEP_STUBS));
@@ -130,16 +130,11 @@ class ShardingDDLResultMergerTest {
return result;
}
- private OpenGaussFetchStatement createFetchStatement() {
- OpenGaussFetchStatement result = new OpenGaussFetchStatement();
- result.setCursorName(new CursorNameSegment(0, 0, new
IdentifierValue("t_order_cursor")));
- return result;
- }
-
- private SelectStatement createSelectStatement() {
- SelectStatement result = new MySQLSelectStatement();
- result.setFrom(new SimpleTableSegment(new TableNameSegment(10, 13, new
IdentifierValue("tbl"))));
- result.setProjections(new ProjectionsSegment(0, 0));
+ private FetchStatement mockFetchStatement() {
+ FetchStatement result = mock(FetchStatement.class);
+ when(result.getCursorName()).thenReturn(new CursorNameSegment(0, 0,
new IdentifierValue("foo_cursor")));
+ when(result.getDirection()).thenReturn(Optional.empty());
+ when(result.getDatabaseType()).thenReturn(databaseType);
return result;
}
}