This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 8a61c0607b0 Refactor MergeEngine (#37712)
8a61c0607b0 is described below
commit 8a61c0607b0cbc4e8f1204f8c56e655966a530a9
Author: Cong Hu <[email protected]>
AuthorDate: Mon Jan 12 16:43:32 2026 +0800
Refactor MergeEngine (#37712)
---
.../merge/EncryptResultDecoratorEngine.java | 6 ++--
.../merge/dal/EncryptDALResultDecorator.java | 27 ++++++++++++++----
.../merge/dql/EncryptDQLResultDecorator.java | 5 ++--
.../merge/EncryptResultDecoratorEngineTest.java | 4 +--
.../merge/dal/EncryptDALResultDecoratorTest.java | 27 ++++++++++++------
.../merge/dql/EncryptDQLResultDecoratorTest.java | 13 +++++++--
.../mask/merge/MaskResultDecoratorEngine.java | 4 +--
.../mask/merge/dql/MaskDQLResultDecorator.java | 5 ++--
.../mask/merge/MaskResultDecoratorEngineTest.java | 2 +-
.../mask/merge/dql/MaskDQLResultDecoratorTest.java | 3 +-
.../shardingsphere/infra/merge/MergeEngine.java | 33 +++++++++++++---------
.../merge/engine/decorator/ResultDecorator.java | 8 ++----
.../engine/decorator/ResultDecoratorEngine.java | 2 +-
.../decorator/impl/TransparentResultDecorator.java | 5 ++--
.../infra/merge/MergeEngineTest.java | 3 ++
.../impl/TransparentResultDecoratorTest.java | 3 +-
.../decorator/ResultDecoratorEngineFixture.java | 4 +--
.../fixture/decorator/ResultDecoratorFixture.java | 5 ++--
.../infra/session/query/QueryContext.java | 20 +++++++++++++
.../implementor/EnumerableScanImplementor.java | 3 +-
.../implementor/EnumerableScanImplementorTest.java | 1 +
.../statement/type/MySQLDALStatementVisitor.java | 2 +-
.../show/view/MySQLShowCreateViewStatement.java | 7 +++--
23 files changed, 124 insertions(+), 68 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
index 5c4c11dff6c..c7e37ad96b7 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
@@ -38,13 +38,13 @@ import java.util.Optional;
public final class EncryptResultDecoratorEngine implements
ResultDecoratorEngine<EncryptRule> {
@Override
- public Optional<ResultDecorator<EncryptRule>> newInstance(final
ShardingSphereMetaData metaData,
- final
ShardingSphereDatabase database, final ConfigurationProperties props, final
SQLStatementContext sqlStatementContext) {
+ public Optional<ResultDecorator> newInstance(final ShardingSphereMetaData
metaData,
+ final ShardingSphereDatabase
database, final ConfigurationProperties props, final SQLStatementContext
sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
return Optional.of(new EncryptDQLResultDecorator(database,
metaData, (SelectStatementContext) sqlStatementContext));
}
if (sqlStatementContext.getSqlStatement() instanceof DALStatement) {
- return Optional.of(new EncryptDALResultDecorator(metaData));
+ return Optional.of(new EncryptDALResultDecorator(database,
metaData));
}
return Optional.empty();
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
index 910e127fb76..632ea0f4441 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
@@ -26,34 +26,51 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.session.query.QueryContext;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableInResultSetSQLStatementAttribute;
+import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
+import java.util.Collection;
import java.util.Optional;
/**
* DAL result decorator for encrypt.
*/
@RequiredArgsConstructor
-public final class EncryptDALResultDecorator implements
ResultDecorator<EncryptRule> {
+public final class EncryptDALResultDecorator implements ResultDecorator {
+
+ private final ShardingSphereDatabase database;
private final ShardingSphereMetaData metaData;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext, final EncryptRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) {
+ Collection<SimpleTableSegment> simpleTables =
queryContext.getSqlStatementContext().getTablesContext().getSimpleTables();
+ if (1 != simpleTables.size()) {
+ return mergedResult;
+ }
+ ShardingSphereDatabase shardingSphereDatabase =
simpleTables.iterator().next().getTableName().getTableBoundInfo().map(TableSegmentBoundInfo::getOriginalDatabase)
+
.map(IdentifierValue::getValue).map(metaData::getDatabase).orElse(database);
+ Optional<EncryptRule> encryptRule =
shardingSphereDatabase.getRuleMetaData().findSingleRule(EncryptRule.class);
+ if (!encryptRule.isPresent()) {
+ return mergedResult;
+ }
SQLStatement sqlStatement =
queryContext.getSqlStatementContext().getSqlStatement();
if
(sqlStatement.getAttributes().findAttribute(ColumnInResultSetSQLStatementAttribute.class).isPresent())
{
- return new EncryptShowColumnsMergedResult(mergedResult,
queryContext.getSqlStatementContext(), rule);
+ return new EncryptShowColumnsMergedResult(mergedResult,
queryContext.getSqlStatementContext(), encryptRule.get());
}
if
(sqlStatement.getAttributes().findAttribute(TableInResultSetSQLStatementAttribute.class).isPresent())
{
- return new
EncryptShowCreateTableMergedResult(metaData.getGlobalRuleMetaData(),
mergedResult, queryContext.getSqlStatementContext(), rule);
+ return new
EncryptShowCreateTableMergedResult(metaData.getGlobalRuleMetaData(),
mergedResult, queryContext.getSqlStatementContext(), encryptRule.get());
}
Optional<ViewInResultSetSQLStatementAttribute>
viewInResultSetSQLStatementAttribute =
sqlStatement.getAttributes().findAttribute(ViewInResultSetSQLStatementAttribute.class);
if (viewInResultSetSQLStatementAttribute.isPresent()) {
String currentDatabaseName =
queryContext.getConnectionContext().getCurrentDatabaseName().orElse(null);
- return new EncryptShowCreateViewMergedResult(metaData,
mergedResult, viewInResultSetSQLStatementAttribute.get().getViewName(), rule,
currentDatabaseName);
+ return new EncryptShowCreateViewMergedResult(metaData,
mergedResult, viewInResultSetSQLStatementAttribute.get().getViewName(),
encryptRule.get(), currentDatabaseName);
}
return mergedResult;
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
index 8ce4f35203b..f1afaa7d45e 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.encrypt.merge.dql;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
@@ -30,7 +29,7 @@ import
org.apache.shardingsphere.infra.session.query.QueryContext;
* DQL result decorator for encrypt.
*/
@RequiredArgsConstructor
-public final class EncryptDQLResultDecorator implements
ResultDecorator<EncryptRule> {
+public final class EncryptDQLResultDecorator implements ResultDecorator {
private final ShardingSphereDatabase database;
@@ -39,7 +38,7 @@ public final class EncryptDQLResultDecorator implements
ResultDecorator<EncryptR
private final SelectStatementContext selectStatementContext;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext, final EncryptRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) {
return new EncryptMergedResult(database, metaData,
selectStatementContext, mergedResult);
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
index 85603feff8c..97ed8be5256 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
@@ -59,7 +59,7 @@ class EncryptResultDecoratorEngineTest {
@Test
void assertNewInstanceWithSelectStatement() {
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine)
OrderedSPILoader.getServices(ResultProcessEngine.class,
Collections.singleton(rule)).get(rule);
- Optional<ResultDecorator<EncryptRule>> actual =
+ Optional<ResultDecorator> actual =
engine.newInstance(mock(ShardingSphereMetaData.class),
database, mock(ConfigurationProperties.class),
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
assertTrue(actual.isPresent());
assertThat(actual.get(), isA(EncryptDQLResultDecorator.class));
@@ -70,7 +70,7 @@ class EncryptResultDecoratorEngineTest {
SQLStatementContext sqlStatementContext =
mock(ExplainStatementContext.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(ExplainStatement.class));
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine)
OrderedSPILoader.getServices(ResultProcessEngine.class,
Collections.singleton(rule)).get(rule);
- Optional<ResultDecorator<EncryptRule>> actual =
engine.newInstance(mock(ShardingSphereMetaData.class), database,
mock(ConfigurationProperties.class), sqlStatementContext);
+ Optional<ResultDecorator> actual =
engine.newInstance(mock(ShardingSphereMetaData.class), database,
mock(ConfigurationProperties.class), sqlStatementContext);
assertTrue(actual.isPresent());
assertThat(actual.get(), isA(EncryptDALResultDecorator.class));
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
index d141aff2557..7f6fdbcb99d 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -35,12 +36,15 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.S
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Collections;
+import java.util.Optional;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.isA;
@@ -53,19 +57,24 @@ class EncryptDALResultDecoratorTest {
private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
- @Mock
- private EncryptRule rule;
-
@Mock
private SQLStatementContext sqlStatementContext;
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ShardingSphereDatabase database;
+
+ @BeforeEach
+ public void setup() {
+
when(database.getRuleMetaData().findSingleRule(EncryptRule.class)).thenReturn(Optional.ofNullable(mock(EncryptRule.class)));
+ }
+
@Test
void assertMergedResultWithShowColumnsStatement() {
sqlStatementContext =
mockColumnInResultSetSQLStatementAttributeContext();
QueryContext queryContext = mock(QueryContext.class);
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
- EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(mock(ShardingSphereMetaData.class));
- assertThat(decorator.decorate(mock(MergedResult.class), queryContext,
rule), isA(EncryptShowColumnsMergedResult.class));
+ EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(database, mock(ShardingSphereMetaData.class));
+ assertThat(decorator.decorate(mock(MergedResult.class), queryContext),
isA(EncryptShowColumnsMergedResult.class));
}
@Test
@@ -77,8 +86,8 @@ class EncryptDALResultDecoratorTest {
RuleMetaData ruleMetaData = mock(RuleMetaData.class);
when(ruleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(mock(SQLParserRule.class));
when(metaData.getGlobalRuleMetaData()).thenReturn(ruleMetaData);
- EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(metaData);
- assertThat(decorator.decorate(mock(MergedResult.class), queryContext,
rule), isA(EncryptShowCreateTableMergedResult.class));
+ EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(database, metaData);
+ assertThat(decorator.decorate(mock(MergedResult.class), queryContext),
isA(EncryptShowCreateTableMergedResult.class));
}
@Test
@@ -86,8 +95,8 @@ class EncryptDALResultDecoratorTest {
sqlStatementContext = mock(SQLStatementContext.class,
RETURNS_DEEP_STUBS);
QueryContext queryContext = mock(QueryContext.class);
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
- EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(mock(ShardingSphereMetaData.class));
- assertThat(decorator.decorate(mock(MergedResult.class), queryContext,
rule), isA(MergedResult.class));
+ EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(database, mock(ShardingSphereMetaData.class));
+ assertThat(decorator.decorate(mock(MergedResult.class), queryContext),
isA(MergedResult.class));
}
private SQLStatementContext
mockColumnInResultSetSQLStatementAttributeContext() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
index 030c3deaaad..bfd42472bbb 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
@@ -22,9 +22,12 @@ import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectS
import org.apache.shardingsphere.infra.merge.result.MergedResult;
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.junit.jupiter.api.Test;
import java.sql.SQLException;
+import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -37,9 +40,15 @@ class EncryptDQLResultDecoratorTest {
void assertDecorate() throws SQLException {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
+ EncryptRule rule = mock(EncryptRule.class);
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+ when(database.getRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singleton(rule)));
+ ResourceMetaData resourceMetaData = mock(ResourceMetaData.class);
+
when(resourceMetaData.getStorageUnits()).thenReturn(Collections.emptyMap());
+ when(database.getResourceMetaData()).thenReturn(resourceMetaData);
EncryptDQLResultDecorator decorator =
- new
EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class),
mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class,
RETURNS_DEEP_STUBS));
- MergedResult actual = decorator.decorate(mergedResult, mock(),
mock(EncryptRule.class));
+ new EncryptDQLResultDecorator(database,
mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class,
RETURNS_DEEP_STUBS));
+ MergedResult actual = decorator.decorate(mergedResult, mock());
assertTrue(actual.next());
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
index 60692b2b8dc..6e321f6258d 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
@@ -36,8 +36,8 @@ import java.util.Optional;
public final class MaskResultDecoratorEngine implements
ResultDecoratorEngine<MaskRule> {
@Override
- public Optional<ResultDecorator<MaskRule>> newInstance(final
ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final
ConfigurationProperties props,
- final
SQLStatementContext sqlStatementContext) {
+ public Optional<ResultDecorator> newInstance(final ShardingSphereMetaData
metaData, final ShardingSphereDatabase database, final ConfigurationProperties
props,
+ final SQLStatementContext
sqlStatementContext) {
return sqlStatementContext instanceof SelectStatementContext
? Optional.of(new MaskDQLResultDecorator(database, metaData,
(SelectStatementContext) sqlStatementContext))
: Optional.empty();
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
index 24c6a7b8c74..232537e41b4 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
@@ -24,13 +24,12 @@ import
org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.session.query.QueryContext;
-import org.apache.shardingsphere.mask.rule.MaskRule;
/**
* DQL result decorator for mask.
*/
@RequiredArgsConstructor
-public final class MaskDQLResultDecorator implements ResultDecorator<MaskRule>
{
+public final class MaskDQLResultDecorator implements ResultDecorator {
private final ShardingSphereDatabase database;
@@ -39,7 +38,7 @@ public final class MaskDQLResultDecorator implements
ResultDecorator<MaskRule> {
private final SelectStatementContext selectStatementContext;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext, final MaskRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) {
return new MaskMergedResult(database, metaData,
selectStatementContext, mergedResult);
}
}
diff --git
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
index 9526156b250..e991c0f064e 100644
---
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
+++
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
@@ -54,7 +54,7 @@ class MaskResultDecoratorEngineTest {
@Test
void assertNewInstanceWithSelectStatement() {
MaskResultDecoratorEngine engine = (MaskResultDecoratorEngine)
OrderedSPILoader.getServices(ResultProcessEngine.class,
Collections.singleton(rule)).get(rule);
- Optional<ResultDecorator<MaskRule>> actual =
+ Optional<ResultDecorator> actual =
engine.newInstance(mock(ShardingSphereMetaData.class),
database, mock(ConfigurationProperties.class),
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
assertTrue(actual.isPresent());
assertThat(actual.get(), isA(MaskDQLResultDecorator.class));
diff --git
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
index 82f8f04814f..0a1bebd939c 100644
---
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
+++
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
@@ -21,7 +21,6 @@ import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectS
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.mask.rule.MaskRule;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
@@ -37,7 +36,7 @@ class MaskDQLResultDecoratorTest {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
MaskDQLResultDecorator decorator = new
MaskDQLResultDecorator(mock(ShardingSphereDatabase.class),
mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class));
- MergedResult actual = decorator.decorate(mergedResult, mock(),
mock(MaskRule.class));
+ MergedResult actual = decorator.decorate(mergedResult, mock());
assertTrue(actual.next());
}
}
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
index 3063946ff12..edac7553680 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
@@ -37,9 +37,10 @@ import
org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import java.sql.SQLException;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -55,15 +56,17 @@ public final class MergeEngine {
private final ConfigurationProperties props;
@SuppressWarnings("rawtypes")
- private final Map<ShardingSphereRule, ResultProcessEngine> engines;
+ private final Collection<ResultProcessEngine> engines;
private final ConnectionContext connectionContext;
- public MergeEngine(final ShardingSphereMetaData metaData, final
ShardingSphereDatabase database, final ConfigurationProperties props, final
ConnectionContext connectionContext) {
+ public MergeEngine(final ShardingSphereMetaData metaData, final
ShardingSphereDatabase database, final ConfigurationProperties props,
+ final ConnectionContext connectionContext) {
this.metaData = metaData;
this.database = database;
this.props = props;
- engines = OrderedSPILoader.getServices(ResultProcessEngine.class,
database.getRuleMetaData().getRules());
+ Map<ShardingSphereRule, ResultProcessEngine> ruleEngines =
OrderedSPILoader.getServices(ResultProcessEngine.class,
database.getRuleMetaData().getRules());
+ engines = new LinkedList<>(ruleEngines.values());
this.connectionContext = connectionContext;
}
@@ -82,11 +85,14 @@ public final class MergeEngine {
@SuppressWarnings({"unchecked", "rawtypes"})
private Optional<MergedResult> executeMerge(final List<QueryResult>
queryResults, final QueryContext queryContext) throws SQLException {
- for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
- if (entry.getValue() instanceof ResultMergerEngine) {
- ResultMerger resultMerger =
- ((ResultMergerEngine)
entry.getValue()).newInstance(database.getName(), database.getProtocolType(),
entry.getKey(), props, queryContext.getSqlStatementContext());
- return Optional.of(resultMerger.merge(queryResults,
queryContext.getSqlStatementContext(), database, connectionContext));
+ for (ResultProcessEngine each : engines) {
+ if (each instanceof ResultMergerEngine) {
+ Optional<ShardingSphereRule> rule =
database.getRuleMetaData().findSingleRule(each.getTypeClass());
+ if (rule.isPresent()) {
+ ResultMerger resultMerger =
+ ((ResultMergerEngine)
each).newInstance(database.getName(), database.getProtocolType(), rule.get(),
props, queryContext.getSqlStatementContext());
+ return Optional.of(resultMerger.merge(queryResults,
queryContext.getSqlStatementContext(), database, connectionContext));
+ }
}
}
return Optional.empty();
@@ -95,11 +101,10 @@ public final class MergeEngine {
@SuppressWarnings({"unchecked", "rawtypes"})
private MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) throws SQLException {
MergedResult result = null;
- for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
- if (entry.getValue() instanceof ResultDecoratorEngine) {
- ResultDecorator resultDecorator =
getResultDecorator(queryContext.getSqlStatementContext(), entry.getValue());
- result = null == result ?
resultDecorator.decorate(mergedResult, queryContext, entry.getKey())
- : resultDecorator.decorate(result, queryContext,
entry.getKey());
+ for (ResultProcessEngine each : engines) {
+ if (each instanceof ResultDecoratorEngine) {
+ ResultDecorator resultDecorator =
getResultDecorator(queryContext.getSqlStatementContext(), each);
+ result = null == result ?
resultDecorator.decorate(mergedResult, queryContext) :
resultDecorator.decorate(result, queryContext);
}
}
return null == result ? mergedResult : result;
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
index d2d923a9922..749e247838c 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
@@ -18,26 +18,22 @@
package org.apache.shardingsphere.infra.merge.engine.decorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import java.sql.SQLException;
/**
* Result decorator.
- *
- * @param <T> type of ShardingSphere rule
*/
-public interface ResultDecorator<T extends ShardingSphereRule> {
+public interface ResultDecorator {
/**
* Decorate merged result.
*
* @param mergedResult merged result
* @param queryContext query context
- * @param rule ShardingSphere rule
* @return merged result
* @throws SQLException SQL exception
*/
- MergedResult decorate(MergedResult mergedResult, QueryContext
queryContext, T rule) throws SQLException;
+ MergedResult decorate(MergedResult mergedResult, QueryContext
queryContext) throws SQLException;
}
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
index 71c17538d77..a511c4fb5a7 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
@@ -42,5 +42,5 @@ public interface ResultDecoratorEngine<T extends
ShardingSphereRule> extends Res
* @param sqlStatementContext SQL statement context
* @return created instance
*/
- Optional<ResultDecorator<T>> newInstance(ShardingSphereMetaData metaData,
ShardingSphereDatabase database, ConfigurationProperties props,
SQLStatementContext sqlStatementContext);
+ Optional<ResultDecorator> newInstance(ShardingSphereMetaData metaData,
ShardingSphereDatabase database, ConfigurationProperties props,
SQLStatementContext sqlStatementContext);
}
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
index a27a6f0299e..52c750f3b16 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
@@ -19,16 +19,15 @@ package
org.apache.shardingsphere.infra.merge.engine.decorator.impl;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.session.query.QueryContext;
/**
* Transparent result decorator.
*/
-public final class TransparentResultDecorator implements
ResultDecorator<ShardingSphereRule> {
+public final class TransparentResultDecorator implements ResultDecorator {
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext, final ShardingSphereRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) {
return mergedResult;
}
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
index 428b6647fbc..5fd8272ee18 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
@@ -38,10 +38,12 @@ import org.mockito.quality.Strictness;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Optional;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -69,6 +71,7 @@ class MergeEngineTest {
@Test
void assertMergeWithMergerRuleOnly() throws SQLException {
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
MergerRuleFixture()));
+
when(database.getRuleMetaData().findSingleRule(any())).thenReturn(Optional.of(new
MergerRuleFixture()));
MergedResult actual =
new MergeEngine(mock(ShardingSphereMetaData.class), database,
new ConfigurationProperties(new Properties()),
mock(ConnectionContext.class)).merge(
Collections.singletonList(queryResult),
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
index 4caa1af2489..2abe21b7f33 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.infra.merge.engine.decorator.impl;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
@@ -34,6 +33,6 @@ class TransparentResultDecoratorTest {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
TransparentResultDecorator decorator = new
TransparentResultDecorator();
- assertTrue(decorator.decorate(mergedResult, mock(),
mock(ShardingSphereRule.class)).next());
+ assertTrue(decorator.decorate(mergedResult, mock()).next());
}
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
index 7fe0065e3b7..0e43a21bbd2 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
@@ -30,8 +30,8 @@ import java.util.Optional;
public final class ResultDecoratorEngineFixture implements
ResultDecoratorEngine<DecoratorRuleFixture> {
@Override
- public Optional<ResultDecorator<DecoratorRuleFixture>> newInstance(final
ShardingSphereMetaData metaData,
- final
ShardingSphereDatabase database, final ConfigurationProperties props, final
SQLStatementContext sqlStatementContext) {
+ public Optional<ResultDecorator> newInstance(final ShardingSphereMetaData
metaData,
+ final ShardingSphereDatabase
database, final ConfigurationProperties props, final SQLStatementContext
sqlStatementContext) {
return Optional.of(new ResultDecoratorFixture());
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
index 69ecb4d28e6..7596ffbd447 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.infra.merge.fixture.decorator;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.stream.JDBCStreamQueryResult;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
-import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
import org.apache.shardingsphere.infra.session.query.QueryContext;
@@ -30,10 +29,10 @@ import java.sql.SQLException;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public final class ResultDecoratorFixture implements
ResultDecorator<DecoratorRuleFixture> {
+public final class ResultDecoratorFixture implements ResultDecorator {
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext, final DecoratorRuleFixture rule) throws SQLException
{
+ public MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) throws SQLException {
ResultSet resultSet = mock(ResultSet.class);
when(resultSet.getString(1)).thenReturn("decorated_merged_value");
return new TransparentMergedResult(new
JDBCStreamQueryResult(resultSet));
diff --git
a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java
b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java
index a6f2d1f8c4a..4067c7ffc21 100644
---
a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java
+++
b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java
@@ -34,6 +34,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.t
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -115,4 +116,23 @@ public final class QueryContext {
ShardingSpherePreconditions.checkState(metaData.containsDatabase(databaseName),
() -> new UnknownDatabaseException(databaseName));
return metaData.getDatabase(databaseName);
}
+
+ /**
+ * Get used databases.
+ *
+ * @return used databases
+ */
+ public Collection<ShardingSphereDatabase> getUsedDatabases() {
+ Collection<ShardingSphereDatabase> result = new LinkedList<>();
+ for (String each : usedDatabaseNames) {
+ result.add(getDatabase(each));
+ }
+ return result;
+ }
+
+ private ShardingSphereDatabase getDatabase(final String databaseName) {
+ ShardingSpherePreconditions.checkNotNull(databaseName,
NoDatabaseSelectedException::new);
+
ShardingSpherePreconditions.checkState(metaData.containsDatabase(databaseName),
() -> new UnknownDatabaseException(databaseName));
+ return metaData.getDatabase(databaseName);
+ }
}
diff --git
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
index 45d62e5b1d4..590ffd92256 100644
---
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
+++
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
@@ -161,7 +161,8 @@ public final class EnumerableScanImplementor implements
ScanImplementor {
processEngine.executeSQL(executionGroupContext, queryContext);
List<QueryResult> queryResults =
executorContext.getJdbcExecutor().execute(executionGroupContext,
executorContext.getQueryCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
- MergeEngine mergeEngine = new
MergeEngine(queryContext.getMetaData(), database,
queryContext.getMetaData().getProps(), queryContext.getConnectionContext());
+ MergeEngine mergeEngine = new
MergeEngine(queryContext.getMetaData(), database,
queryContext.getMetaData().getProps(),
+ queryContext.getConnectionContext());
MergedResult mergedResult = mergeEngine.merge(queryResults,
queryContext);
Collection<Statement> statements =
getStatements(executionGroupContext.getInputGroups());
return new JDBCDataRowEnumerator(mergedResult,
queryResults.get(0).getMetaData(), statements);
diff --git
a/kernel/sql-federation/executor/src/test/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementorTest.java
b/kernel/sql-federation/executor/src/test/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementorTest.java
index c51cccf8122..a1043c2d80c 100644
---
a/kernel/sql-federation/executor/src/test/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementorTest.java
+++
b/kernel/sql-federation/executor/src/test/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementorTest.java
@@ -263,6 +263,7 @@ class EnumerableScanImplementorTest {
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
when(database.getName()).thenReturn("foo_db");
+ when(metaData.containsDatabase("foo_db")).thenReturn(true);
when(metaData.getDatabase("foo_db")).thenReturn(database);
when(metaData.getGlobalRuleMetaData()).thenReturn(mock(RuleMetaData.class));
when(queryContext.getMetaData()).thenReturn(metaData);
diff --git
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
index cf067c04ad3..ff8ee6e6f52 100644
---
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
+++
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
@@ -266,7 +266,7 @@ public final class MySQLDALStatementVisitor extends
MySQLStatementVisitor implem
@Override
public ASTNode visitShowCreateView(final ShowCreateViewContext ctx) {
- return new MySQLShowCreateViewStatement(getDatabaseType(),
((SimpleTableSegment)
visit(ctx.viewName())).getTableName().getIdentifier().getValue());
+ return new MySQLShowCreateViewStatement(getDatabaseType(),
(SimpleTableSegment) visit(ctx.viewName()));
}
@Override
diff --git
a/parser/sql/statement/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/view/MySQLShowCreateViewStatement.java
b/parser/sql/statement/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/view/MySQLShowCreateViewStatement.java
index 41970eca33d..7a86db03a50 100644
---
a/parser/sql/statement/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/view/MySQLShowCreateViewStatement.java
+++
b/parser/sql/statement/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/view/MySQLShowCreateViewStatement.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.view;
import
com.sphereex.dbplusengine.sql.parser.statement.core.statement.attribute.type.ViewInResultSetSQLStatementAttribute;
import lombok.Getter;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.DatabaseSelectRequiredSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.DALStatement;
@@ -30,15 +31,15 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.DA
@Getter
public final class MySQLShowCreateViewStatement extends DALStatement {
- private final String viewName;
+ private final SimpleTableSegment viewName;
- public MySQLShowCreateViewStatement(final DatabaseType databaseType, final
String viewName) {
+ public MySQLShowCreateViewStatement(final DatabaseType databaseType, final
SimpleTableSegment viewName) {
super(databaseType);
this.viewName = viewName;
}
@Override
public SQLStatementAttributes getAttributes() {
- return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute(), new
ViewInResultSetSQLStatementAttribute(2, viewName));
+ return new SQLStatementAttributes(new
DatabaseSelectRequiredSQLStatementAttribute(), new
ViewInResultSetSQLStatementAttribute(2,
getViewName().getTableName().getIdentifier().getValue()));
}
}