This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 ba5e6b7a8ab Refactor name, owner and alias to IdentifierValue to
support rewrite with quote (#27296)
ba5e6b7a8ab is described below
commit ba5e6b7a8ab456d581b4756a6cbac09ee6d680f0
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Jul 19 15:39:10 2023 +0800
Refactor name, owner and alias to IdentifierValue to support rewrite with
quote (#27296)
* Refactor name, owner and alias to IdentifierValue to support rewrite with
quote
* fix unit test
---
.../encrypt/merge/dql/EncryptMergedResult.java | 8 ++---
.../generator/EncryptProjectionTokenGenerator.java | 37 +++++++++++-----------
.../mask/merge/dql/MaskAlgorithmMetaData.java | 4 +--
.../impl/AggregationDistinctTokenGenerator.java | 2 +-
.../generator/impl/ProjectionsTokenGenerator.java | 8 ++---
.../AggregationDistinctTokenGeneratorTest.java | 5 +--
.../token/ProjectionsTokenGeneratorTest.java | 6 ++--
.../segment/select/projection/Projection.java | 2 +-
.../select/projection/ProjectionsContext.java | 3 +-
.../select/projection/engine/ProjectionEngine.java | 32 +++++++++----------
.../engine/ProjectionsContextEngine.java | 8 +++--
.../impl/AggregationDistinctProjection.java | 7 ++--
.../projection/impl/AggregationProjection.java | 9 +++---
.../select/projection/impl/ColumnProjection.java | 28 ++++++++--------
.../select/projection/impl/DerivedProjection.java | 9 +++---
.../projection/impl/ExpressionProjection.java | 9 +++---
.../projection/impl/ParameterMarkerProjection.java | 10 +++---
.../projection/impl/ShorthandProjection.java | 11 +++----
.../select/projection/impl/SubqueryProjection.java | 20 ++++++------
.../engine/SubqueryTableContextEngine.java | 6 ++--
.../infra/binder/segment/table/TablesContext.java | 8 ++---
.../statement/dml/SelectStatementContext.java | 10 +++---
.../select/projection/ProjectionsContextTest.java | 13 ++++----
.../projection/engine/ProjectionEngineTest.java | 2 +-
.../impl/AggregationDistinctProjectionTest.java | 3 +-
.../projection/impl/AggregationProjectionTest.java | 9 +++---
.../projection/impl/ShorthandProjectionTest.java | 9 +++---
.../pojo/generic/SubstitutableColumnNameToken.java | 14 ++++----
.../generic/SubstitutableColumnNameTokenTest.java | 2 +-
.../resultset/ShardingSphereResultSetMetaData.java | 2 +-
.../resultset/SQLFederationResultSetMetaData.java | 2 +-
.../simple/ParameterMarkerExpressionSegment.java | 5 +--
.../dml/item/AggregationProjectionSegment.java | 5 +--
.../segment/dml/item/ColumnProjectionSegment.java | 5 +--
.../dml/item/ExpressionProjectionSegment.java | 5 +--
.../dml/item/ShorthandProjectionSegment.java | 5 +--
.../dml/item/SubqueryProjectionSegment.java | 5 +--
.../sql/common/segment/generic/AliasAvailable.java | 7 ++--
.../generic/table/DeleteMultiTableSegment.java | 3 +-
.../segment/generic/table/JoinTableSegment.java | 5 +--
.../segment/generic/table/SimpleTableSegment.java | 5 +--
.../generic/table/SubqueryTableSegment.java | 5 +--
.../segment/generic/table/XmlTableSegment.java | 3 +-
.../header/query/QueryHeaderBuilderEngine.java | 2 +-
.../executor/MySQLSystemVariableQueryExecutor.java | 2 +-
.../admin/executor/ShowConnectionIdExecutor.java | 2 +-
46 files changed, 187 insertions(+), 175 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
index 882db16ba41..d4b231aeff6 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
@@ -69,12 +69,12 @@ public final class EncryptMergedResult implements
MergedResult {
if (!tableName.isPresent()) {
return mergedResult.getValue(columnIndex, type);
}
- if (!encryptRule.findEncryptTable(tableName.get()).map(optional ->
optional.isEncryptColumn(originalColumn.getName())).orElse(false)) {
+ if (!encryptRule.findEncryptTable(tableName.get()).map(optional ->
optional.isEncryptColumn(originalColumn.getName().getValue())).orElse(false)) {
return mergedResult.getValue(columnIndex, type);
}
Object cipherValue = mergedResult.getValue(columnIndex, Object.class);
- EncryptColumn encryptColumn =
encryptRule.getEncryptTable(tableName.get()).getEncryptColumn(originalColumn.getName());
- return encryptColumn.getCipher().decrypt(database.getName(),
schemaName, tableName.get(), originalColumn.getName(), cipherValue);
+ EncryptColumn encryptColumn =
encryptRule.getEncryptTable(tableName.get()).getEncryptColumn(originalColumn.getName().getValue());
+ return encryptColumn.getCipher().decrypt(database.getName(),
schemaName, tableName.get(), originalColumn.getName().getValue(), cipherValue);
}
private Optional<String> findTableName(final ColumnProjection
columnProjection, final Map<String, String> columnTableNames) {
@@ -83,7 +83,7 @@ public final class EncryptMergedResult implements
MergedResult {
return Optional.of(tableName);
}
for (String each :
selectStatementContext.getTablesContext().getTableNames()) {
- if (encryptRule.findEncryptTable(each).map(optional ->
optional.isEncryptColumn(columnProjection.getName())).orElse(false)) {
+ if (encryptRule.findEncryptTable(each).map(optional ->
optional.isEncryptColumn(columnProjection.getName().getValue())).orElse(false))
{
return Optional.of(each);
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index 4f7f48b1f58..75980dd3e31 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -41,7 +41,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.enums.SubqueryType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
@@ -97,8 +96,8 @@ public final class EncryptProjectionTokenGenerator implements
CollectionSQLToken
continue;
}
Optional<EncryptTable> encryptTable =
encryptRule.findEncryptTable(tableName);
- if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(columnProjection.getName()) &&
!containsTableSubquery(selectStatementContext)) {
-
sqlTokens.add(generateSQLToken(encryptTable.get().getEncryptColumn(columnProjection.getName()),
columnSegment, columnProjection, subqueryType));
+ if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(columnProjection.getName().getValue()) &&
!containsTableSubquery(selectStatementContext)) {
+
sqlTokens.add(generateSQLToken(encryptTable.get().getEncryptColumn(columnProjection.getName().getValue()),
columnSegment, columnProjection, subqueryType));
}
}
if (each instanceof ShorthandProjectionSegment) {
@@ -128,7 +127,7 @@ public final class EncryptProjectionTokenGenerator
implements CollectionSQLToken
if (!encryptTable.isPresent() ||
!encryptTable.get().isEncryptColumn(each.getColumnLabel()) ||
containsTableSubquery(selectStatementContext)) {
projections.add(each.getAlias().map(optional -> (Projection)
new ColumnProjection(null, optional, null)).orElse(each));
} else if (each instanceof ColumnProjection) {
-
projections.addAll(generateProjections(encryptTable.get().getEncryptColumn(((ColumnProjection)
each).getName()), (ColumnProjection) each, subqueryType, true, segment));
+
projections.addAll(generateProjections(encryptTable.get().getEncryptColumn(((ColumnProjection)
each).getName().getValue()), (ColumnProjection) each, subqueryType, true,
segment));
}
}
int startIndex = segment.getOwner().isPresent() ?
segment.getOwner().get().getStartIndex() : segment.getStartIndex();
@@ -148,7 +147,7 @@ public final class EncryptProjectionTokenGenerator
implements CollectionSQLToken
private ColumnProjection buildColumnProjection(final
ColumnProjectionSegment segment) {
IdentifierValue owner =
segment.getColumn().getOwner().map(OwnerSegment::getIdentifier).orElse(null);
- return new ColumnProjection(owner,
segment.getColumn().getIdentifier(), segment.getAliasName().isPresent() ?
segment.getAlias().map(AliasSegment::getIdentifier).orElse(null) : null);
+ return new ColumnProjection(owner,
segment.getColumn().getIdentifier(), segment.getAliasName().isPresent() ?
segment.getAlias().orElse(null) : null);
}
private Map<String, String> getColumnTableNames(final
SelectStatementContext selectStatementContext) {
@@ -182,43 +181,43 @@ public final class EncryptProjectionTokenGenerator
implements CollectionSQLToken
}
private ColumnProjection distinctOwner(final ColumnProjection column,
final boolean shorthand) {
- if (shorthand || null == column.getOwner()) {
+ if (shorthand || !column.getOwner().isPresent()) {
return column;
}
- return new ColumnProjection(null, column.getNameIdentifier(),
column.getAlias().isPresent() ? column.getAliasIdentifier() : null);
+ return new ColumnProjection(null, column.getName(),
column.getAlias().isPresent() ? column.getAlias().get() : null);
}
private ColumnProjection generatePredicateSubqueryProjection(final
EncryptColumn encryptColumn, final ColumnProjection column) {
Optional<AssistedQueryColumnItem> assistedQueryColumn =
encryptColumn.getAssistedQuery();
if (assistedQueryColumn.isPresent()) {
- return new ColumnProjection(column.getOwnerIdentifier(), new
IdentifierValue(assistedQueryColumn.get().getName(),
column.getNameIdentifier().getQuoteCharacter()), null);
+ return new ColumnProjection(column.getOwner().orElse(null), new
IdentifierValue(assistedQueryColumn.get().getName(),
column.getName().getQuoteCharacter()), null);
}
String cipherColumn = encryptColumn.getCipher().getName();
- return new ColumnProjection(column.getOwnerIdentifier(), new
IdentifierValue(cipherColumn, column.getNameIdentifier().getQuoteCharacter()),
null);
+ return new ColumnProjection(column.getOwner().orElse(null), new
IdentifierValue(cipherColumn, column.getName().getQuoteCharacter()), null);
}
private Collection<ColumnProjection>
generateTableSubqueryProjections(final EncryptColumn encryptColumn, final
ColumnProjection column, final boolean shorthand) {
Collection<ColumnProjection> result = new LinkedList<>();
- result.add(distinctOwner(new
ColumnProjection(column.getOwnerIdentifier(), new
IdentifierValue(encryptColumn.getCipher().getName(),
- column.getNameIdentifier().getQuoteCharacter()),
Optional.ofNullable(column.getAliasIdentifier()).orElse(column.getNameIdentifier())),
shorthand));
+ result.add(distinctOwner(new
ColumnProjection(column.getOwner().orElse(null), new
IdentifierValue(encryptColumn.getCipher().getName(),
+ column.getName().getQuoteCharacter()),
column.getAlias().orElse(column.getName())), shorthand));
encryptColumn.getAssistedQuery().ifPresent(optional -> result.add(
- new ColumnProjection(column.getOwnerIdentifier(), new
IdentifierValue(optional.getName(),
column.getNameIdentifier().getQuoteCharacter()), null)));
+ new ColumnProjection(column.getOwner().orElse(null), new
IdentifierValue(optional.getName(), column.getName().getQuoteCharacter()),
null)));
return result;
}
private Collection<ColumnProjection>
generateExistsSubqueryProjections(final EncryptColumn encryptColumn, final
ColumnProjection column, final boolean shorthand) {
Collection<ColumnProjection> result = new LinkedList<>();
- result.add(distinctOwner(new
ColumnProjection(column.getOwnerIdentifier(), new
IdentifierValue(encryptColumn.getCipher().getName(),
- column.getNameIdentifier().getQuoteCharacter()), null),
shorthand));
+ result.add(distinctOwner(new
ColumnProjection(column.getOwner().orElse(null), new
IdentifierValue(encryptColumn.getCipher().getName(),
+ column.getName().getQuoteCharacter()), null), shorthand));
return result;
}
private ColumnProjection generateCommonProjection(final EncryptColumn
encryptColumn, final ColumnProjection column, final ShorthandProjectionSegment
segment) {
String queryColumnName = encryptColumn.getCipher().getName();
- IdentifierValue owner = (null == segment ||
!segment.getOwner().isPresent()) ? column.getOwnerIdentifier() :
segment.getOwner().get().getIdentifier();
- return new ColumnProjection(owner, new
IdentifierValue(queryColumnName,
column.getNameIdentifier().getQuoteCharacter()), column.getAlias().isPresent()
- ? column.getAliasIdentifier()
- : column.getNameIdentifier());
+ IdentifierValue owner = (null == segment ||
!segment.getOwner().isPresent()) ? column.getOwner().orElse(null) :
segment.getOwner().get().getIdentifier();
+ return new ColumnProjection(owner, new
IdentifierValue(queryColumnName, column.getName().getQuoteCharacter()),
column.getAlias().isPresent()
+ ? column.getAlias().get()
+ : column.getName());
}
private ShorthandProjection getShorthandProjection(final
ShorthandProjectionSegment segment, final ProjectionsContext
projectionsContext) {
@@ -228,7 +227,7 @@ public final class EncryptProjectionTokenGenerator
implements CollectionSQLToken
if (!owner.isPresent() && !((ShorthandProjection)
each).getOwner().isPresent()) {
return (ShorthandProjection) each;
}
- if (owner.isPresent() &&
owner.get().equals(((ShorthandProjection) each).getOwner().orElse(null))) {
+ if (owner.isPresent() &&
owner.get().equals(((ShorthandProjection)
each).getOwner().map(IdentifierValue::getValue).orElse(null))) {
return (ShorthandProjection) each;
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
index b2ec588e00e..5c0757c2af4 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
@@ -60,7 +60,7 @@ public final class MaskAlgorithmMetaData {
String schemaName = tablesContext.getSchemaName().orElseGet(() ->
DatabaseTypeEngine.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
database.getName()));
Map<String, String> expressionTableNames =
tablesContext.findTableNamesByColumnProjection(
Collections.singletonList(columnProjection.get()),
database.getSchema(schemaName));
- return findTableName(columnProjection.get(),
expressionTableNames).flatMap(optional -> maskRule.findMaskAlgorithm(optional,
columnProjection.get().getName()));
+ return findTableName(columnProjection.get(),
expressionTableNames).flatMap(optional -> maskRule.findMaskAlgorithm(optional,
columnProjection.get().getName().getValue()));
}
private Optional<ColumnProjection> findColumnProjection(final int
columnIndex) {
@@ -78,7 +78,7 @@ public final class MaskAlgorithmMetaData {
return Optional.of(tableName);
}
for (String each :
selectStatementContext.getTablesContext().getTableNames()) {
- if (maskRule.findMaskAlgorithm(each,
columnProjection.getName()).isPresent()) {
+ if (maskRule.findMaskAlgorithm(each,
columnProjection.getName().getValue()).isPresent()) {
return Optional.of(each);
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/AggregationDistinctTokenGenerator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/AggregationDistinctTokenGenerator.java
index 356fc1483f7..8a67d663c1b 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/AggregationDistinctTokenGenerator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/AggregationDistinctTokenGenerator.java
@@ -51,7 +51,7 @@ public final class AggregationDistinctTokenGenerator
implements CollectionSQLTok
private AggregationDistinctToken generateSQLToken(final
AggregationDistinctProjection projection) {
Preconditions.checkArgument(projection.getAlias().isPresent());
- String derivedAlias =
DerivedColumn.isDerivedColumnName(projection.getAlias().get()) ?
projection.getAlias().get() : null;
+ String derivedAlias =
DerivedColumn.isDerivedColumnName(projection.getAlias().get().getValue()) ?
projection.getAlias().get().getValue() : null;
return new AggregationDistinctToken(projection.getStartIndex(),
projection.getStopIndex(), projection.getDistinctInnerExpression(),
derivedAlias);
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
index c073cbc2af1..377db5803e0 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
@@ -25,8 +25,8 @@ import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.Agg
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.DerivedProjection;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.database.oracle.OracleDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import
org.apache.shardingsphere.infra.rewrite.sql.token.generator.OptionalSQLTokenGenerator;
import
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.RouteContextAware;
import org.apache.shardingsphere.infra.route.context.RouteContext;
@@ -98,9 +98,9 @@ public final class ProjectionsTokenGenerator implements
OptionalSQLTokenGenerato
private String getDerivedProjectionText(final Projection projection) {
Preconditions.checkState(projection.getAlias().isPresent());
if (projection instanceof AggregationDistinctProjection) {
- return ((AggregationDistinctProjection)
projection).getDistinctInnerExpression() + " AS " + projection.getAlias().get()
+ " ";
+ return ((AggregationDistinctProjection)
projection).getDistinctInnerExpression() + " AS " +
projection.getAlias().get().getValue() + " ";
}
- return projection.getExpression() + " AS " +
projection.getAlias().get() + " ";
+ return projection.getExpression() + " AS " +
projection.getAlias().get().getValue() + " ";
}
private String getDerivedProjectionTextFromColumnOrderByItemSegment(final
DerivedProjection projection, final TableExtractor tableExtractor, final
RouteUnit routeUnit,
@@ -109,7 +109,7 @@ public final class ProjectionsTokenGenerator implements
OptionalSQLTokenGenerato
Preconditions.checkState(projection.getDerivedProjectionSegment()
instanceof ColumnOrderByItemSegment);
ColumnOrderByItemSegment columnOrderByItemSegment =
(ColumnOrderByItemSegment) projection.getDerivedProjectionSegment();
ColumnOrderByItemSegment newColumnOrderByItem =
generateNewColumnOrderByItem(columnOrderByItemSegment, routeUnit,
tableExtractor, databaseType);
- return newColumnOrderByItem.getText() + " AS " +
projection.getAlias().get() + " ";
+ return newColumnOrderByItem.getText() + " AS " +
projection.getAlias().get().getValue() + " ";
}
private Optional<String> getActualTables(final RouteUnit routeUnit, final
String logicalTableName) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/AggregationDistinctTokenGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/AggregationDistinctTokenGeneratorTest.java
index 9d6bf17a125..01c279d27f7 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/AggregationDistinctTokenGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/AggregationDistinctTokenGeneratorTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementConte
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.AggregationDistinctTokenGenerator;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
@@ -52,7 +53,7 @@ class AggregationDistinctTokenGeneratorTest {
void assertGenerateSQLToken() {
AggregationDistinctProjection aggregationDistinctProjection =
mock(AggregationDistinctProjection.class);
String testAlias = "AVG_DERIVED_COUNT_0";
-
when(aggregationDistinctProjection.getAlias()).thenReturn(Optional.of(testAlias));
+
when(aggregationDistinctProjection.getAlias()).thenReturn(Optional.of(new
IdentifierValue(testAlias)));
when(aggregationDistinctProjection.getStartIndex()).thenReturn(0);
when(aggregationDistinctProjection.getStopIndex()).thenReturn(2);
String testDistinctInnerExpression = "TEST_DISTINCT_INNER_EXPRESSION";
@@ -62,7 +63,7 @@ class AggregationDistinctTokenGeneratorTest {
AggregationDistinctTokenGenerator aggregationDistinctTokenGenerator =
new AggregationDistinctTokenGenerator();
List<SQLToken> generateSQLTokensResult = new
ArrayList<>(aggregationDistinctTokenGenerator.generateSQLTokens(selectStatementContext));
assertThat(generateSQLTokensResult.get(0).toString(),
is(testDistinctInnerExpression + " AS " + testAlias));
-
when(aggregationDistinctProjection.getAlias()).thenReturn(Optional.of("TEST_ERROR_ALIAS"));
+
when(aggregationDistinctProjection.getAlias()).thenReturn(Optional.of(new
IdentifierValue("TEST_ERROR_ALIAS")));
generateSQLTokensResult = new
ArrayList<>(aggregationDistinctTokenGenerator.generateSQLTokens(selectStatementContext));
assertThat(generateSQLTokensResult.get(0).toString(),
is(testDistinctInnerExpression));
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
index 38c52ea51b6..ae6e59337f0 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
@@ -127,7 +127,7 @@ class ProjectionsTokenGeneratorTest {
private AggregationProjection getAggregationProjection() {
AggregationDistinctProjection derivedAggregationDistinctProjection =
mock(AggregationDistinctProjection.class);
when(derivedAggregationDistinctProjection.getDistinctInnerExpression()).thenReturn(TEST_AGGREGATION_DISTINCT_PROJECTION_DISTINCT_INNER_EXPRESSION);
-
when(derivedAggregationDistinctProjection.getAlias()).thenReturn(Optional.of(TEST_AGGREGATION_DISTINCT_PROJECTION_ALIAS));
+
when(derivedAggregationDistinctProjection.getAlias()).thenReturn(Optional.of(new
IdentifierValue(TEST_AGGREGATION_DISTINCT_PROJECTION_ALIAS)));
AggregationProjection result = mock(AggregationProjection.class);
when(result.getDerivedAggregationProjections()).thenReturn(Collections.singletonList(derivedAggregationDistinctProjection));
return result;
@@ -142,7 +142,7 @@ class ProjectionsTokenGeneratorTest {
when(oldColumnOrderByItemSegment.getOrderDirection()).thenReturn(mock(OrderDirection.class));
when(oldColumnOrderByItemSegment.getColumn().getIdentifier()).thenReturn(mock(IdentifierValue.class));
DerivedProjection result = mock(DerivedProjection.class);
-
when(result.getAlias()).thenReturn(Optional.of(TEST_DERIVED_PROJECTION_ALIAS));
+ when(result.getAlias()).thenReturn(Optional.of(new
IdentifierValue(TEST_DERIVED_PROJECTION_ALIAS)));
when(result.getDerivedProjectionSegment()).thenReturn(oldColumnOrderByItemSegment);
return result;
}
@@ -150,7 +150,7 @@ class ProjectionsTokenGeneratorTest {
private DerivedProjection getOtherDerivedProjection() {
DerivedProjection result = mock(DerivedProjection.class);
when(result.getDerivedProjectionSegment()).thenReturn(null);
-
when(result.getAlias()).thenReturn(Optional.of(TEST_OTHER_DERIVED_PROJECTION_ALIAS));
+ when(result.getAlias()).thenReturn(Optional.of(new
IdentifierValue(TEST_OTHER_DERIVED_PROJECTION_ALIAS)));
when(result.getExpression()).thenReturn(TEST_OTHER_DERIVED_PROJECTION_EXPRESSION);
return result;
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/Projection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/Projection.java
index ee6e71e4835..91cd960b15a 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/Projection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/Projection.java
@@ -38,7 +38,7 @@ public interface Projection {
*
* @return alias
*/
- Optional<String> getAlias();
+ Optional<IdentifierValue> getAlias();
/**
* Get columnLabel.
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
index 8b9dd179279..523c7b27ac6 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.Col
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.DerivedProjection;
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ShorthandProjection;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.ArrayList;
import java.util.Collection;
@@ -116,7 +117,7 @@ public final class ProjectionsContext {
}
}
if
(projectionName.equalsIgnoreCase(SQLUtils.getExactlyValue(each.getExpression())))
{
- return each.getAlias();
+ return each.getAlias().map(IdentifierValue::getValue);
}
}
return Optional.empty();
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
index 956a21dff07..d318ba9bada 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
@@ -28,9 +28,9 @@ import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.Exp
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ParameterMarkerProjection;
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ShorthandProjection;
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.SubqueryProjection;
-import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.exception.SchemaNotFoundException;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
@@ -45,7 +45,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.SubqueryProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -113,13 +112,13 @@ public final class ProjectionEngine {
}
private ParameterMarkerProjection createProjection(final
ParameterMarkerExpressionSegment projectionSegment) {
- return new
ParameterMarkerProjection(projectionSegment.getParameterMarkerIndex(),
projectionSegment.getParameterMarkerType(),
projectionSegment.getAliasName().orElse(null));
+ return new
ParameterMarkerProjection(projectionSegment.getParameterMarkerIndex(),
projectionSegment.getParameterMarkerType(),
projectionSegment.getAlias().orElse(null));
}
private SubqueryProjection createProjection(final TableSegment table,
final SubqueryProjectionSegment projectionSegment) {
Projection subqueryProjection = createProjection(table,
projectionSegment.getSubquery().getSelect().getProjections().getProjections().iterator().next())
.orElseThrow(() -> new IllegalArgumentException("Subquery
projection must have at least one projection column."));
- return new SubqueryProjection(projectionSegment.getText(),
subqueryProjection, projectionSegment.getAliasName().orElse(null),
databaseType);
+ return new SubqueryProjection(projectionSegment.getText(),
subqueryProjection, projectionSegment.getAlias().orElse(null), databaseType);
}
private ShorthandProjection createProjection(final TableSegment table,
final ShorthandProjectionSegment projectionSegment) {
@@ -128,23 +127,22 @@ public final class ProjectionEngine {
projections.addAll(getShorthandColumnsFromSimpleTableSegment(table,
owner));
projections.addAll(getShorthandColumnsFromSubqueryTableSegment(table,
owner));
projections.addAll(getShorthandColumnsFromJoinTableSegment(table,
owner, projectionSegment));
- return new ShorthandProjection(null == owner ? null :
owner.getValue(), projections);
+ return new ShorthandProjection(owner, projections);
}
private ColumnProjection createProjection(final ColumnProjectionSegment
projectionSegment) {
IdentifierValue owner =
projectionSegment.getColumn().getOwner().isPresent() ?
projectionSegment.getColumn().getOwner().get().getIdentifier() : null;
- return new ColumnProjection(owner,
projectionSegment.getColumn().getIdentifier(),
projectionSegment.getAliasName().isPresent()
- ?
projectionSegment.getAlias().map(AliasSegment::getIdentifier).orElse(null)
- : null);
+ return new ColumnProjection(owner,
projectionSegment.getColumn().getIdentifier(),
projectionSegment.getAliasName().isPresent() ?
projectionSegment.getAlias().orElse(null) : null);
}
private ExpressionProjection createProjection(final
ExpressionProjectionSegment projectionSegment) {
- return new ExpressionProjection(projectionSegment.getText(),
projectionSegment.getAliasName().orElse(null));
+ return new ExpressionProjection(projectionSegment.getText(),
projectionSegment.getAlias().orElse(null));
}
private AggregationDistinctProjection createProjection(final
AggregationDistinctProjectionSegment projectionSegment) {
String innerExpression = projectionSegment.getInnerExpression();
- String alias = projectionSegment.getAliasName().orElseGet(() ->
DerivedColumn.AGGREGATION_DISTINCT_DERIVED.getDerivedColumnAlias(aggregationDistinctDerivedColumnCount++));
+ IdentifierValue alias =
+ projectionSegment.getAlias().orElseGet(() -> new
IdentifierValue(DerivedColumn.AGGREGATION_DISTINCT_DERIVED.getDerivedColumnAlias(aggregationDistinctDerivedColumnCount++)));
AggregationDistinctProjection result = new
AggregationDistinctProjection(
projectionSegment.getStartIndex(),
projectionSegment.getStopIndex(), projectionSegment.getType(), innerExpression,
alias, projectionSegment.getDistinctExpression(), databaseType);
if (AggregationType.AVG == result.getType()) {
@@ -155,7 +153,7 @@ public final class ProjectionEngine {
private AggregationProjection createProjection(final
AggregationProjectionSegment projectionSegment) {
String innerExpression = projectionSegment.getInnerExpression();
- AggregationProjection result = new
AggregationProjection(projectionSegment.getType(), innerExpression,
projectionSegment.getAliasName().orElse(null), databaseType);
+ AggregationProjection result = new
AggregationProjection(projectionSegment.getType(), innerExpression,
projectionSegment.getAlias().orElse(null), databaseType);
if (AggregationType.AVG == result.getType()) {
appendAverageDerivedProjection(result);
// TODO replace avg to constant, avoid calculate useless avg
@@ -175,7 +173,7 @@ public final class ProjectionEngine {
ShardingSpherePreconditions.checkNotNull(schema, () -> new
SchemaNotFoundException(schemaName));
Collection<ColumnProjection> result = new LinkedList<>();
if (null == owner) {
- schema.getVisibleColumnNames(tableName).stream().map(each -> new
ColumnProjection(table.getAlias().map(AliasSegment::getIdentifier)
+ schema.getVisibleColumnNames(tableName).stream().map(each -> new
ColumnProjection(table.getAlias()
.orElse(((SimpleTableSegment)
table).getTableName().getIdentifier()), new IdentifierValue(each,
databaseType.getQuoteCharacter()), null)).forEach(result::add);
} else if (owner.getValue().equalsIgnoreCase(tableAlias)) {
schema.getVisibleColumnNames(tableName).stream().map(each -> new
ColumnProjection(owner, new IdentifierValue(each,
databaseType.getQuoteCharacter()), null)).forEach(result::add);
@@ -190,7 +188,7 @@ public final class ProjectionEngine {
SelectStatement subSelectStatement = ((SubqueryTableSegment)
table).getSubquery().getSelect();
Collection<Projection> projections =
subSelectStatement.getProjections().getProjections().stream().map(each ->
createProjection(subSelectStatement.getFrom(), each).orElse(null))
.filter(Objects::nonNull).collect(Collectors.toList());
- IdentifierValue subqueryTableAlias =
table.getAlias().map(AliasSegment::getIdentifier).orElse(null);
+ IdentifierValue subqueryTableAlias = table.getAlias().orElse(null);
return getSubqueryTableActualProjections(projections,
subqueryTableAlias);
}
@@ -332,10 +330,10 @@ public final class ProjectionEngine {
String distinctInnerExpression =
averageDistinctProjection.getDistinctInnerExpression();
String countAlias =
DerivedColumn.AVG_COUNT_ALIAS.getDerivedColumnAlias(aggregationAverageDerivedColumnCount);
AggregationDistinctProjection countDistinctProjection = new
AggregationDistinctProjection(
- 0, 0, AggregationType.COUNT, innerExpression, countAlias,
distinctInnerExpression, databaseType);
+ 0, 0, AggregationType.COUNT, innerExpression, new
IdentifierValue(countAlias), distinctInnerExpression, databaseType);
String sumAlias =
DerivedColumn.AVG_SUM_ALIAS.getDerivedColumnAlias(aggregationAverageDerivedColumnCount);
AggregationDistinctProjection sumDistinctProjection = new
AggregationDistinctProjection(
- 0, 0, AggregationType.SUM, innerExpression, sumAlias,
distinctInnerExpression, databaseType);
+ 0, 0, AggregationType.SUM, innerExpression, new
IdentifierValue(sumAlias), distinctInnerExpression, databaseType);
averageDistinctProjection.getDerivedAggregationProjections().add(countDistinctProjection);
averageDistinctProjection.getDerivedAggregationProjections().add(sumDistinctProjection);
aggregationAverageDerivedColumnCount++;
@@ -344,9 +342,9 @@ public final class ProjectionEngine {
private void appendAverageDerivedProjection(final AggregationProjection
averageProjection) {
String innerExpression = averageProjection.getInnerExpression();
String countAlias =
DerivedColumn.AVG_COUNT_ALIAS.getDerivedColumnAlias(aggregationAverageDerivedColumnCount);
- AggregationProjection countProjection = new
AggregationProjection(AggregationType.COUNT, innerExpression, countAlias,
databaseType);
+ AggregationProjection countProjection = new
AggregationProjection(AggregationType.COUNT, innerExpression, new
IdentifierValue(countAlias), databaseType);
String sumAlias =
DerivedColumn.AVG_SUM_ALIAS.getDerivedColumnAlias(aggregationAverageDerivedColumnCount);
- AggregationProjection sumProjection = new
AggregationProjection(AggregationType.SUM, innerExpression, sumAlias,
databaseType);
+ AggregationProjection sumProjection = new
AggregationProjection(AggregationType.SUM, innerExpression, new
IdentifierValue(sumAlias), databaseType);
averageProjection.getDerivedAggregationProjections().add(countProjection);
averageProjection.getDerivedAggregationProjections().add(sumProjection);
aggregationAverageDerivedColumnCount++;
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
index c5fc0089926..d5458b77e0c 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
@@ -37,6 +37,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.Or
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.TextOrderByItemSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.LinkedList;
@@ -92,7 +93,8 @@ public final class ProjectionsContextEngine {
int derivedColumnOffset = 0;
for (OrderByItem each : orderItems) {
if (!containsProjection(each.getSegment(), projections)) {
- result.add(new DerivedProjection(((TextOrderByItemSegment)
each.getSegment()).getText(),
derivedColumn.getDerivedColumnAlias(derivedColumnOffset++), each.getSegment()));
+ result.add(new DerivedProjection(((TextOrderByItemSegment)
each.getSegment()).getText(), new
IdentifierValue(derivedColumn.getDerivedColumnAlias(derivedColumnOffset++)),
+ each.getSegment()));
}
}
return result;
@@ -140,11 +142,11 @@ public final class ProjectionsContextEngine {
}
private boolean isSameName(final ColumnProjection projection, final String
text) {
- return
SQLUtils.getExactlyValue(text).equalsIgnoreCase(projection.getName());
+ return
SQLUtils.getExactlyValue(text).equalsIgnoreCase(projection.getName().getValue());
}
private boolean isSameAlias(final Projection projection, final String
text) {
- return projection.getAlias().isPresent() &&
SQLUtils.getExactlyValue(text).equalsIgnoreCase(SQLUtils.getExactlyValue(projection.getAlias().get()));
+ return projection.getAlias().isPresent() &&
SQLUtils.getExactlyValue(text).equalsIgnoreCase(SQLUtils.getExactlyValue(projection.getAlias().get().getValue()));
}
private boolean isSameQualifiedName(final Projection projection, final
String text) {
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjection.java
index 778de40d7e9..2ed89fa7571 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjection.java
@@ -36,7 +36,7 @@ public final class AggregationDistinctProjection extends
AggregationProjection {
private final String distinctInnerExpression;
public AggregationDistinctProjection(final int startIndex, final int
stopIndex, final AggregationType type, final String innerExpression,
- final String alias, final String
distinctInnerExpression, final DatabaseType databaseType) {
+ final IdentifierValue alias, final
String distinctInnerExpression, final DatabaseType databaseType) {
super(type, innerExpression, alias, databaseType);
this.startIndex = startIndex;
this.stopIndex = stopIndex;
@@ -49,14 +49,13 @@ public final class AggregationDistinctProjection extends
AggregationProjection {
* @return distinct column label
*/
public String getDistinctColumnLabel() {
- return getAlias().orElse(distinctInnerExpression);
+ return
getAlias().map(IdentifierValue::getValue).orElse(distinctInnerExpression);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
if (getAlias().isPresent()) {
- return new ColumnProjection(subqueryTableAlias, new
IdentifierValue(getAlias().get()), null);
+ return new ColumnProjection(subqueryTableAlias, getAlias().get(),
null);
}
return new AggregationDistinctProjection(startIndex, stopIndex,
getType(), getInnerExpression(), null, distinctInnerExpression,
getDatabaseType());
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjection.java
index 3888bf67850..598bfa77ba2 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjection.java
@@ -44,7 +44,7 @@ public class AggregationProjection implements Projection {
private final String innerExpression;
- private final String alias;
+ private final IdentifierValue alias;
private final DatabaseType databaseType;
@@ -59,7 +59,7 @@ public class AggregationProjection implements Projection {
}
@Override
- public final Optional<String> getAlias() {
+ public final Optional<IdentifierValue> getAlias() {
return Optional.ofNullable(alias);
}
@@ -70,14 +70,13 @@ public class AggregationProjection implements Projection {
*/
@Override
public String getColumnLabel() {
- return getAlias().orElseGet(() ->
databaseType.getDefaultSchema().isPresent() ? type.name().toLowerCase() :
getExpression());
+ return getAlias().map(IdentifierValue::getValue).orElseGet(() ->
databaseType.getDefaultSchema().isPresent() ? type.name().toLowerCase() :
getExpression());
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
if (getAlias().isPresent()) {
- return new ColumnProjection(subqueryTableAlias, new
IdentifierValue(getAlias().get()), null);
+ return new ColumnProjection(subqueryTableAlias, getAlias().get(),
null);
}
AggregationProjection result = new AggregationProjection(type,
innerExpression, alias, databaseType);
result.setIndex(index);
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ColumnProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ColumnProjection.java
index 1b12c8a8c60..30eddead84e 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ColumnProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ColumnProjection.java
@@ -38,11 +38,11 @@ import java.util.Optional;
@ToString
public final class ColumnProjection implements Projection {
- private final IdentifierValue ownerIdentifier;
+ private final IdentifierValue owner;
- private final IdentifierValue nameIdentifier;
+ private final IdentifierValue name;
- private final IdentifierValue aliasIdentifier;
+ private final IdentifierValue alias;
private IdentifierValue originalOwner;
@@ -58,8 +58,8 @@ public final class ColumnProjection implements Projection {
*
* @return column name
*/
- public String getName() {
- return nameIdentifier.getValue();
+ public IdentifierValue getName() {
+ return name;
}
/**
@@ -67,28 +67,28 @@ public final class ColumnProjection implements Projection {
*
* @return owner
*/
- public String getOwner() {
- return null == ownerIdentifier ? null : ownerIdentifier.getValue();
+ public Optional<IdentifierValue> getOwner() {
+ return Optional.ofNullable(owner);
}
@Override
public String getExpression() {
- return null == getOwner() ? getName() : getOwner() + "." + getName();
+ return null == owner ? name.getValue() : owner.getValue() + "." +
name.getValue();
}
@Override
public String getColumnLabel() {
- return getAlias().orElse(getName());
+ return
getAlias().map(IdentifierValue::getValue).orElse(name.getValue());
}
@Override
- public Optional<String> getAlias() {
- return
Optional.ofNullable(aliasIdentifier).map(IdentifierValue::getValue);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- ColumnProjection result = null == aliasIdentifier ? new
ColumnProjection(subqueryTableAlias, nameIdentifier, null) : new
ColumnProjection(subqueryTableAlias, aliasIdentifier, null);
+ ColumnProjection result = null == alias ? new
ColumnProjection(subqueryTableAlias, name, null) : new
ColumnProjection(subqueryTableAlias, alias, null);
result.setOriginalOwner(originalOwner);
result.setOriginalName(originalName);
return result;
@@ -100,7 +100,7 @@ public final class ColumnProjection implements Projection {
* @return original owner
*/
public IdentifierValue getOriginalOwner() {
- return null == originalOwner ? ownerIdentifier : originalOwner;
+ return null == originalOwner ? owner : originalOwner;
}
/**
@@ -109,6 +109,6 @@ public final class ColumnProjection implements Projection {
* @return original name
*/
public IdentifierValue getOriginalName() {
- return null == originalName ? nameIdentifier : originalName;
+ return null == originalName ? name : originalName;
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
index 29b2d690fc5..c842bc1d1a3 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
@@ -38,23 +38,22 @@ public final class DerivedProjection implements Projection {
private final String expression;
- private final String alias;
+ private final IdentifierValue alias;
private final SQLSegment derivedProjectionSegment;
@Override
- public Optional<String> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.ofNullable(alias);
}
@Override
public String getColumnLabel() {
- return getAlias().orElse(expression);
+ return getAlias().map(IdentifierValue::getValue).orElse(expression);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
- return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, new IdentifierValue(getAlias().get()),
null) : new DerivedProjection(expression, alias, derivedProjectionSegment);
+ return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, getAlias().get(), null) : new
DerivedProjection(expression, alias, derivedProjectionSegment);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ExpressionProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ExpressionProjection.java
index aa28aaa2ab3..a6e93d18bb2 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ExpressionProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ExpressionProjection.java
@@ -37,21 +37,20 @@ public final class ExpressionProjection implements
Projection {
private final String expression;
- private final String alias;
+ private final IdentifierValue alias;
@Override
- public Optional<String> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.ofNullable(alias);
}
@Override
public String getColumnLabel() {
- return getAlias().orElse(expression);
+ return getAlias().map(IdentifierValue::getValue).orElse(expression);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
- return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, new IdentifierValue(getAlias().get()),
null) : new ExpressionProjection(expression, alias);
+ return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, getAlias().get(), null) : new
ExpressionProjection(expression, alias);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ParameterMarkerProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ParameterMarkerProjection.java
index 4f09d7e0c32..e484394b053 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ParameterMarkerProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ParameterMarkerProjection.java
@@ -40,7 +40,7 @@ public final class ParameterMarkerProjection implements
Projection {
private final ParameterMarkerType parameterMarkerType;
- private final String alias;
+ private final IdentifierValue alias;
@Override
public String getExpression() {
@@ -49,18 +49,16 @@ public final class ParameterMarkerProjection implements
Projection {
@Override
public String getColumnLabel() {
- return getAlias().orElseGet(() ->
String.valueOf(parameterMarkerIndex));
+ return getAlias().map(IdentifierValue::getValue).orElseGet(() ->
String.valueOf(parameterMarkerIndex));
}
@Override
- public Optional<String> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.ofNullable(alias);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
- return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, new IdentifierValue(getAlias().get()),
null)
- : new ParameterMarkerProjection(parameterMarkerIndex,
parameterMarkerType, alias);
+ return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, getAlias().get(), null) : new
ParameterMarkerProjection(parameterMarkerIndex, parameterMarkerType, alias);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
index 248413bb463..fdd7f913655 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.binder.segment.select.projection.impl;
-import com.google.common.base.Strings;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -38,17 +37,17 @@ import java.util.Optional;
@ToString
public final class ShorthandProjection implements Projection {
- private final String owner;
+ private final IdentifierValue owner;
private final Collection<Projection> actualColumns;
@Override
public String getExpression() {
- return Strings.isNullOrEmpty(owner) ? "*" : owner + ".*";
+ return null == owner ? "*" : owner.getValue() + ".*";
}
@Override
- public Optional<String> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.empty();
}
@@ -62,7 +61,7 @@ public final class ShorthandProjection implements Projection {
*
* @return owner
*/
- public Optional<String> getOwner() {
+ public Optional<IdentifierValue> getOwner() {
return Optional.ofNullable(owner);
}
@@ -83,6 +82,6 @@ public final class ShorthandProjection implements Projection {
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- return new ShorthandProjection(subqueryTableAlias.getValue(),
actualColumns);
+ return new ShorthandProjection(subqueryTableAlias, actualColumns);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/SubqueryProjection.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/SubqueryProjection.java
index c21aac17c11..dec00e0b232 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/SubqueryProjection.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/SubqueryProjection.java
@@ -17,14 +17,13 @@
package org.apache.shardingsphere.infra.binder.segment.select.projection.impl;
-import com.google.common.base.Strings;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
-import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.database.oracle.OracleDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -42,30 +41,29 @@ public final class SubqueryProjection implements Projection
{
private final Projection projection;
- private final String alias;
+ private final IdentifierValue alias;
private final DatabaseType databaseType;
@Override
- public Optional<String> getAlias() {
- return Strings.isNullOrEmpty(alias) ? buildDefaultAlias(databaseType)
: Optional.of(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return null == alias ? buildDefaultAlias(databaseType) :
Optional.of(alias);
}
- private Optional<String> buildDefaultAlias(final DatabaseType
databaseType) {
+ private Optional<IdentifierValue> buildDefaultAlias(final DatabaseType
databaseType) {
if (databaseType instanceof OracleDatabaseType) {
- return Optional.of(expression.replace(" ", "").toUpperCase());
+ return Optional.of(new IdentifierValue(expression.replace(" ",
"").toUpperCase()));
}
- return Optional.of(expression);
+ return Optional.of(new IdentifierValue(expression));
}
@Override
public String getColumnLabel() {
- return getAlias().orElse(expression);
+ return getAlias().map(IdentifierValue::getValue).orElse(expression);
}
@Override
public Projection transformSubqueryProjection(final IdentifierValue
subqueryTableAlias, final IdentifierValue originalOwner, final IdentifierValue
originalName) {
- // TODO replace getAlias with aliasIdentifier
- return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, new IdentifierValue(getAlias().get()),
null) : new SubqueryProjection(expression, projection, alias, databaseType);
+ return getAlias().isPresent() ? new
ColumnProjection(subqueryTableAlias, getAlias().get(), null) : new
SubqueryProjection(expression, projection, alias, databaseType);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/subquery/engine/SubqueryTableContextEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/subquery/engine/SubqueryTableContextEngine.java
index 3899af3f9aa..8da23c0d04f 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/subquery/engine/SubqueryTableContextEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/subquery/engine/SubqueryTableContextEngine.java
@@ -49,13 +49,13 @@ public final class SubqueryTableContextEngine {
if (!(each instanceof ColumnProjection)) {
continue;
}
- String columnName = ((ColumnProjection) each).getName();
+ String columnName = ((ColumnProjection) each).getName().getValue();
if (tableSegment instanceof SimpleTableSegment) {
String tableName = ((SimpleTableSegment)
tableSegment).getTableName().getIdentifier().getValue();
result.computeIfAbsent(tableName.toLowerCase(), unused -> new
SubqueryTableContext(tableName, aliasName)).getColumnNames().add(columnName);
}
- if (tableSegment instanceof JoinTableSegment && null !=
((ColumnProjection) each).getOwner()) {
- Optional<String> tableName =
getTableNameByOwner(subqueryContext.getTablesContext().getSimpleTableSegments(),
((ColumnProjection) each).getOwner());
+ if (tableSegment instanceof JoinTableSegment &&
((ColumnProjection) each).getOwner().isPresent()) {
+ Optional<String> tableName =
getTableNameByOwner(subqueryContext.getTablesContext().getSimpleTableSegments(),
((ColumnProjection) each).getOwner().get().getValue());
tableName.ifPresent(optional ->
result.computeIfAbsent(optional.toLowerCase(), unused -> new
SubqueryTableContext(optional, aliasName)).getColumnNames().add(columnName));
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
index af367c72a58..781192dbae1 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
@@ -226,8 +226,8 @@ public final class TablesContext {
private Map<String, Collection<String>>
getOwnerColumnNamesByColumnProjection(final Collection<ColumnProjection>
columns) {
Map<String, Collection<String>> result = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
for (ColumnProjection each : columns) {
- if (null != each.getOwner()) {
- result.computeIfAbsent(each.getOwner(), unused -> new
LinkedList<>()).add(each.getExpression());
+ if (each.getOwner().isPresent()) {
+ result.computeIfAbsent(each.getOwner().get().getValue(),
unused -> new LinkedList<>()).add(each.getExpression());
}
}
return result;
@@ -280,8 +280,8 @@ public final class TablesContext {
private Collection<String> getNoOwnerColumnNamesByColumnProjection(final
Collection<ColumnProjection> columns) {
Collection<String> result = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
for (ColumnProjection each : columns) {
- if (null == each.getOwner()) {
- result.add(each.getName());
+ if (!each.getOwner().isPresent()) {
+ result.add(each.getName().getValue());
}
}
return result;
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
index 4ba638f4699..46cb79eacfd 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
@@ -70,6 +70,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUti
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
import
org.apache.shardingsphere.sql.parser.sql.common.util.SubqueryExtractUtils;
import org.apache.shardingsphere.sql.parser.sql.common.util.WhereExtractUtils;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.Collections;
@@ -291,21 +292,22 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
}
String rawName = SQLUtils.getExactlyValue(((TextOrderByItemSegment)
orderByItem).getText());
for (Projection each : projectionsContext.getProjections()) {
+ Optional<String> result =
each.getAlias().map(IdentifierValue::getValue);
if
(SQLUtils.getExactlyExpression(rawName).equalsIgnoreCase(SQLUtils.getExactlyExpression(SQLUtils.getExactlyValue(each.getExpression()))))
{
- return each.getAlias();
+ return result;
}
- if (rawName.equalsIgnoreCase(each.getAlias().orElse(null))) {
+ if (rawName.equalsIgnoreCase(result.orElse(null))) {
return Optional.of(rawName);
}
if (isSameColumnName(each, rawName)) {
- return each.getAlias();
+ return result;
}
}
return Optional.empty();
}
private boolean isSameColumnName(final Projection projection, final String
name) {
- return projection instanceof ColumnProjection &&
name.equalsIgnoreCase(((ColumnProjection) projection).getName());
+ return projection instanceof ColumnProjection &&
name.equalsIgnoreCase(((ColumnProjection) projection).getName().getValue());
}
private String getOrderItemText(final TextOrderByItemSegment
orderByItemSegment) {
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContextTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContextTest.java
index d5a8e835987..2f45cc770f4 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContextTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContextTest.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.Exp
import
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ShorthandProjection;
import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
@@ -113,7 +114,7 @@ class ProjectionsContextTest {
}
private ShorthandProjection getShorthandProjection() {
- return new ShorthandProjection("table", Collections.emptyList());
+ return new ShorthandProjection(new IdentifierValue("table"),
Collections.emptyList());
}
private ColumnProjection getColumnProjection() {
@@ -125,12 +126,12 @@ class ProjectionsContextTest {
}
private AggregationProjection getAggregationProjection() {
- return new AggregationProjection(AggregationType.COUNT, "(column)",
"c", mock(DatabaseType.class));
+ return new AggregationProjection(AggregationType.COUNT, "(column)",
new IdentifierValue("c"), mock(DatabaseType.class));
}
private AggregationDistinctProjection getAggregationDistinctProjection() {
return new AggregationDistinctProjection(
- 0, 0, AggregationType.COUNT, "(DISTINCT column)", "c",
"column", mock(DatabaseType.class));
+ 0, 0, AggregationType.COUNT, "(DISTINCT column)", new
IdentifierValue("c"), "column", mock(DatabaseType.class));
}
@Test
@@ -138,7 +139,7 @@ class ProjectionsContextTest {
ColumnProjection columnProjection1 = new ColumnProjection(null,
"col1", null);
ColumnProjection columnProjection2 = new ColumnProjection(null,
"col2", null);
ColumnProjection columnProjection3 = new ColumnProjection(null,
"col3", null);
- DerivedProjection derivedProjection = new DerivedProjection("col3",
"a3", null);
+ DerivedProjection derivedProjection = new DerivedProjection("col3",
new IdentifierValue("a3"), null);
ShorthandProjection shorthandProjection = new
ShorthandProjection(null, Arrays.asList(columnProjection2, columnProjection3));
ProjectionsContext actual = new ProjectionsContext(0, 0, false,
Arrays.asList(columnProjection1, shorthandProjection, derivedProjection));
assertThat(actual.getExpandProjections().size(), is(3));
@@ -149,9 +150,9 @@ class ProjectionsContextTest {
@Test
void assertIsContainsLastInsertIdProjection() {
- ProjectionsContext lastInsertIdProjection = new ProjectionsContext(0,
0, false, Collections.singletonList(new
ExpressionProjection("LAST_INSERT_ID()", "id")));
+ ProjectionsContext lastInsertIdProjection = new ProjectionsContext(0,
0, false, Collections.singletonList(new
ExpressionProjection("LAST_INSERT_ID()", new IdentifierValue("id"))));
assertTrue(lastInsertIdProjection.isContainsLastInsertIdProjection());
- ProjectionsContext maxProjection = new ProjectionsContext(0, 0, false,
Collections.singletonList(new ExpressionProjection("MAX(id)", "max")));
+ ProjectionsContext maxProjection = new ProjectionsContext(0, 0, false,
Collections.singletonList(new ExpressionProjection("MAX(id)", new
IdentifierValue("max"))));
assertFalse(maxProjection.isContainsLastInsertIdProjection());
}
}
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
index 6429138b0a5..cfc5e9c92e4 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
@@ -178,7 +178,7 @@ class ProjectionEngineTest {
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, schema),
databaseType).createProjection(mock(TableSegment.class),
parameterMarkerExpressionSegment);
assertTrue(actual.isPresent());
assertThat(actual.get(), instanceOf(ParameterMarkerProjection.class));
- assertThat(actual.get().getAlias().orElse(null), is("alias"));
+
assertThat(actual.get().getAlias().map(IdentifierValue::getValue).orElse(null),
is("alias"));
}
@Test
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjectionTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjectionTest.java
index c25d8bbed6d..fe731e1edc2 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjectionTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationDistinctProjectionTest.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.infra.binder.segment.select.projection.impl;
import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -28,7 +29,7 @@ import static org.mockito.Mockito.mock;
class AggregationDistinctProjectionTest {
private final AggregationDistinctProjection aggregationDistinctProjection
= new AggregationDistinctProjection(
- 0, 0, AggregationType.COUNT, "(DISTINCT order_id)", "c",
"order_id", mock(DatabaseType.class));
+ 0, 0, AggregationType.COUNT, "(DISTINCT order_id)", new
IdentifierValue("c"), "order_id", mock(DatabaseType.class));
@Test
void assertGetDistinctColumnLabel() {
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjectionTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjectionTest.java
index b2a98bb58d8..569f736ec72 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjectionTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/AggregationProjectionTest.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.binder.segment.select.projection.Projecti
import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import java.util.Optional;
@@ -40,15 +41,15 @@ class AggregationProjectionTest {
@Test
void assertGetAlias() {
- Projection projection = new
AggregationProjection(AggregationType.COUNT, "( A.\"DIRECTION\" )",
"AVG_DERIVED_COUNT_0", mock(DatabaseType.class));
- Optional<String> actual = projection.getAlias();
+ Projection projection = new
AggregationProjection(AggregationType.COUNT, "( A.\"DIRECTION\" )", new
IdentifierValue("AVG_DERIVED_COUNT_0"), mock(DatabaseType.class));
+ Optional<IdentifierValue> actual = projection.getAlias();
assertTrue(actual.isPresent());
- assertThat(actual.get(), is("AVG_DERIVED_COUNT_0"));
+ assertThat(actual.get().getValue(), is("AVG_DERIVED_COUNT_0"));
}
@Test
void assertGetColumnLabelWithAlias() {
- Projection projection = new
AggregationProjection(AggregationType.COUNT, "( A.\"DIRECTION\" )",
"AVG_DERIVED_COUNT_0", mock(DatabaseType.class));
+ Projection projection = new
AggregationProjection(AggregationType.COUNT, "( A.\"DIRECTION\" )", new
IdentifierValue("AVG_DERIVED_COUNT_0"), mock(DatabaseType.class));
assertThat(projection.getColumnLabel(), is("AVG_DERIVED_COUNT_0"));
}
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjectionTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjectionTest.java
index 6830512b167..7555bc427e8 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjectionTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjectionTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.infra.binder.segment.select.projection.impl;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
import java.util.Collections;
@@ -30,21 +31,21 @@ class ShorthandProjectionTest {
@Test
void assertGetExpression() {
- assertThat(new ShorthandProjection("owner",
Collections.emptyList()).getExpression(), is("owner.*"));
+ assertThat(new ShorthandProjection(new IdentifierValue("owner"),
Collections.emptyList()).getExpression(), is("owner.*"));
}
@Test
void assertGetAliasWhenAbsent() {
- assertFalse(new ShorthandProjection("owner",
Collections.emptyList()).getAlias().isPresent());
+ assertFalse(new ShorthandProjection(new IdentifierValue("owner"),
Collections.emptyList()).getAlias().isPresent());
}
@Test
void assertGetColumnLabel() {
- assertTrue(new ShorthandProjection("owner",
Collections.emptyList()).getColumnLabel().contains("*"));
+ assertTrue(new ShorthandProjection(new IdentifierValue("owner"),
Collections.emptyList()).getColumnLabel().contains("*"));
}
@Test
void assertContains() {
- assertTrue(new ShorthandProjection("owner",
Collections.emptyList()).getOwner().isPresent());
+ assertTrue(new ShorthandProjection(new IdentifierValue("owner"),
Collections.emptyList()).getOwner().isPresent());
}
}
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
index 40c39db6783..69d0a601331 100644
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic;
-import com.google.common.base.Strings;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
@@ -28,12 +27,14 @@ import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.Substitutable;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.sql.parser.sql.common.enums.QuoteCharacter;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Optional;
/**
* Substitutable column name token.
@@ -118,13 +119,14 @@ public final class SubstitutableColumnNameToken extends
SQLToken implements Subs
}
private static void appendColumnProjection(final ColumnProjection
columnProjection, final Map<String, String> logicActualTableNames, final
StringBuilder builder) {
- if (!Strings.isNullOrEmpty(columnProjection.getOwner())) {
- String lowerCaseOwner = columnProjection.getOwner().toLowerCase();
-
builder.append(columnProjection.getOwnerIdentifier().getQuoteCharacter().wrap(logicActualTableNames.getOrDefault(lowerCaseOwner,
columnProjection.getOwner()))).append('.');
+ if (columnProjection.getOwner().isPresent()) {
+ Optional<IdentifierValue> owner = columnProjection.getOwner();
+ String lowerCaseOwner = owner.get().getValue().toLowerCase();
+
builder.append(owner.get().getQuoteCharacter().wrap(logicActualTableNames.getOrDefault(lowerCaseOwner,
owner.get().getValue()))).append('.');
}
-
builder.append(columnProjection.getNameIdentifier().getQuoteCharacter().wrap(columnProjection.getName()));
+
builder.append(columnProjection.getName().getValueWithQuoteCharacters());
if (columnProjection.getAlias().isPresent()) {
- builder.append(" AS
").append(columnProjection.getAliasIdentifier().getQuoteCharacter().wrap(columnProjection.getAlias().get()));
+ builder.append(" AS
").append(columnProjection.getAlias().get().getValueWithQuoteCharacters());
}
}
}
diff --git
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameTokenTest.java
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameTokenTest.java
index 549a84d6491..945af0324fc 100644
---
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameTokenTest.java
+++
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameTokenTest.java
@@ -63,7 +63,7 @@ class SubstitutableColumnNameTokenTest {
void assertToStringWithSubqueryProjection() {
Collection<Projection> projections = Arrays.asList(new
ColumnProjection(new IdentifierValue("temp", QuoteCharacter.BACK_QUOTE),
new IdentifierValue("id", QuoteCharacter.BACK_QUOTE), new
IdentifierValue("id", QuoteCharacter.BACK_QUOTE)),
- new SubqueryProjection("(SELECT name FROM t_order)", new
ColumnProjection(null, "name", null), "name", new OracleDatabaseType()));
+ new SubqueryProjection("(SELECT name FROM t_order)", new
ColumnProjection(null, "name", null), new IdentifierValue("name"), new
OracleDatabaseType()));
assertThat(new SubstitutableColumnNameToken(0, 1, projections,
QuoteCharacter.BACK_QUOTE).toString(mock(RouteUnit.class)),
is("`temp`.`id` AS `id`, `name`"));
}
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
index 33227925f79..c91ac1df616 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
@@ -114,7 +114,7 @@ public final class ShardingSphereResultSetMetaData extends
WrapperAdapter implem
checkColumnIndex(column);
Projection projection = ((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections().get(column
- 1);
if (projection instanceof ColumnProjection) {
- return ((ColumnProjection) projection).getName();
+ return ((ColumnProjection) projection).getName().getValue();
}
if (projection instanceof AggregationDistinctProjection) {
return
DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) ?
projection.getExpression() : projection.getColumnLabel();
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSetMetaData.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSetMetaData.java
index 20c7e238f27..0472c59c3da 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSetMetaData.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSetMetaData.java
@@ -118,7 +118,7 @@ public final class SQLFederationResultSetMetaData extends
WrapperAdapter impleme
}
Projection projection = expandProjections.get(column - 1);
if (projection instanceof ColumnProjection) {
- return ((ColumnProjection) projection).getName();
+ return ((ColumnProjection) projection).getName().getValue();
}
return getColumnLabel(column);
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
index 2f153926dbc..eb233923b72 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Projecti
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -61,8 +62,8 @@ public class ParameterMarkerExpressionSegment implements
SimpleExpressionSegment
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
index 1d2ae417e0e..9ebff3908ee 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.LinkedList;
@@ -60,8 +61,8 @@ public class AggregationProjectionSegment implements
ProjectionSegment, AliasAva
}
@Override
- public final Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public final Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
index 214e9c66963..916b441bd3e 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
@@ -22,6 +22,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -46,8 +47,8 @@ public final class ColumnProjectionSegment implements
ProjectionSegment, AliasAv
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
index e7e3dcda0d1..148a3b53406 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -64,8 +65,8 @@ public final class ExpressionProjectionSegment implements
ProjectionSegment, Com
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ShorthandProjectionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ShorthandProjectionSegment.java
index a35b5a1628d..aa1096829bb 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ShorthandProjectionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ShorthandProjectionSegment.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvai
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -54,7 +55,7 @@ public final class ShorthandProjectionSegment implements
ProjectionSegment, Owne
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/SubqueryProjectionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/SubqueryProjectionSegment.java
index 8ab137d655e..c9783a150bc 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/SubqueryProjectionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/SubqueryProjectionSegment.java
@@ -23,6 +23,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -46,8 +47,8 @@ public final class SubqueryProjectionSegment implements
ProjectionSegment, Alias
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/AliasAvailable.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/AliasAvailable.java
index a7f729f91a6..6e7d820c2e7 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/AliasAvailable.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/AliasAvailable.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.sql.parser.sql.common.segment.generic;
import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -34,11 +35,11 @@ public interface AliasAvailable extends SQLSegment {
Optional<String> getAliasName();
/**
- * Get alias segment.
+ * Get alias.
*
- * @return alias segment
+ * @return alias
*/
- Optional<AliasSegment> getAlias();
+ Optional<IdentifierValue> getAlias();
/**
* Set alias.
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/DeleteMultiTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/DeleteMultiTableSegment.java
index 500984b6258..b9b6632ce8f 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/DeleteMultiTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/DeleteMultiTableSegment.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table;
import lombok.Getter;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.LinkedList;
import java.util.List;
@@ -46,7 +47,7 @@ public final class DeleteMultiTableSegment implements
TableSegment {
}
@Override
- public Optional<AliasSegment> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.empty();
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/JoinTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/JoinTableSegment.java
index 304a3131f2a..5956268f5a2 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/JoinTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/JoinTableSegment.java
@@ -22,6 +22,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collections;
import java.util.List;
@@ -55,7 +56,7 @@ public final class JoinTableSegment implements TableSegment {
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
index b0d387e8395..521ae04601b 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
@@ -23,6 +23,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -65,7 +66,7 @@ public final class SimpleTableSegment implements
TableSegment, OwnerAvailable {
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SubqueryTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SubqueryTableSegment.java
index a9c0f4d7fdf..5c80e0e8cac 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SubqueryTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SubqueryTableSegment.java
@@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -43,8 +44,8 @@ public final class SubqueryTableSegment implements
TableSegment {
}
@Override
- public Optional<AliasSegment> getAlias() {
- return Optional.ofNullable(alias);
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.ofNullable(alias).map(AliasSegment::getIdentifier);
}
@Override
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/XmlTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/XmlTableSegment.java
index 3d6663d2985..bc4551adbd1 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/XmlTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/XmlTableSegment.java
@@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.XmlTableFunctionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -51,7 +52,7 @@ public final class XmlTableSegment implements TableSegment {
}
@Override
- public Optional<AliasSegment> getAlias() {
+ public Optional<IdentifierValue> getAlias() {
return Optional.empty();
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
index 0fcf28fdb2b..4b59e3f053a 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
@@ -76,6 +76,6 @@ public final class QueryHeaderBuilderEngine {
private String getColumnName(final ProjectionsContext projectionsContext,
final QueryResultMetaData queryResultMetaData, final int columnIndex) throws
SQLException {
Projection projection =
projectionsContext.getExpandProjections().get(columnIndex - 1);
- return projection instanceof ColumnProjection ? ((ColumnProjection)
projection).getName() : queryResultMetaData.getColumnName(columnIndex);
+ return projection instanceof ColumnProjection ? ((ColumnProjection)
projection).getName().getValue() :
queryResultMetaData.getColumnName(columnIndex);
}
}
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSystemVariableQueryExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSystemVariableQueryExecutor.java
index a61b5b2f81a..16cf5e1c92c 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSystemVariableQueryExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSystemVariableQueryExecutor.java
@@ -28,8 +28,8 @@ import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedRe
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
import
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
import
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
-import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.MySQLSystemVariable;
+import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowConnectionIdExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowConnectionIdExecutor.java
index a18451ab5a7..1077d2a85f9 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowConnectionIdExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowConnectionIdExecutor.java
@@ -25,8 +25,8 @@ import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;