This is an automated email from the ASF dual-hosted git repository. wuweijie 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 0bb53ad5687 Merge AssignmentSegment and ColumnAssignmentSegment (#29605) 0bb53ad5687 is described below commit 0bb53ad56872a618f2c64cc9925da4cb1b936b5c Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Dec 30 23:32:15 2023 +0800 Merge AssignmentSegment and ColumnAssignmentSegment (#29605) * Fix javadoc on ShardingSpherePrivileges * Merge AssignmentSegment and ColumnAssignmentSegment --- .../EncryptAssignmentParameterRewriter.java | 4 +- .../generator/EncryptAssignmentTokenGenerator.java | 18 +++++---- .../EncryptInsertOnUpdateTokenGenerator.java | 22 ++++++----- .../EncryptAssignmentTokenGeneratorTest.java | 4 +- .../EncryptInsertOnUpdateTokenGeneratorTest.java | 9 ++--- .../dml/ShardingDMLStatementValidator.java | 10 ++--- .../dml/impl/ShardingInsertStatementValidator.java | 6 +-- .../dml/ShardingInsertStatementValidatorTest.java | 3 +- .../dml/ShardingUpdateStatementValidatorTest.java | 3 +- .../insert/values/OnDuplicateUpdateContext.java | 6 +-- .../statement/dml/InsertStatementContext.java | 8 ++-- .../segment/assign/AssignmentSegmentBinder.java | 13 ++----- .../binder/statement/dml/MergeStatementBinder.java | 5 +-- .../values/OnDuplicateUpdateContextTest.java | 23 ++++++----- .../statement/SQLStatementContextFactoryTest.java | 6 +-- .../statement/dml/InsertStatementContextTest.java | 9 ++--- .../assign/AssignmentSegmentBinderTest.java | 3 +- .../statement/merge/MergeStatementConverter.java | 4 +- .../statement/update/UpdateStatementConverter.java | 4 +- .../visitor/statement/MySQLStatementVisitor.java | 9 ++--- .../statement/OpenGaussStatementVisitor.java | 15 ++++---- .../statement/type/OracleDMLStatementVisitor.java | 39 ++++++++++--------- .../statement/PostgreSQLStatementVisitor.java | 13 +++---- .../statement/type/SQL92DMLStatementVisitor.java | 7 ++-- .../statement/SQLServerStatementVisitor.java | 11 +++--- .../sql/common/extractor/TableExtractor.java | 4 +- .../segment/dml/assignment/AssignmentSegment.java | 44 ---------------------- .../dml/assignment/ColumnAssignmentSegment.java | 3 +- .../dml/assignment/SetAssignmentSegment.java | 2 +- .../dml/column/OnDuplicateKeyColumnsSegment.java | 4 +- .../sql/common/extractor/TableExtractorTest.java | 3 +- .../HeterogeneousUpdateStatementChecker.java | 7 ++-- .../type/HBaseUpdateOperationConverter.java | 4 +- .../segment/assignment/AssignmentAssert.java | 4 +- .../insert/OnDuplicateKeyColumnsAssert.java | 6 +-- .../asserts/segment/set/SetClauseAssert.java | 6 +-- 36 files changed, 141 insertions(+), 200 deletions(-) diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java index 763072b441a..5470724bce9 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java @@ -32,7 +32,7 @@ import org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilde import org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.GroupedParameterBuilder; import org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder; import org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement; @@ -71,7 +71,7 @@ public final class EncryptAssignmentParameterRewriter implements ParameterRewrit public void rewrite(final ParameterBuilder paramBuilder, final SQLStatementContext sqlStatementContext, final List<Object> params) { String tableName = ((TableAvailable) sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue(); String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); - for (AssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) { + for (ColumnAssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) { String columnName = each.getColumns().get(0).getIdentifier().getValue(); if (each.getValue() instanceof ParameterMarkerExpressionSegment && encryptRule.findEncryptTable(tableName).map(optional -> optional.isEncryptColumn(columnName)).orElse(false)) { EncryptColumn encryptColumn = encryptRule.getEncryptTable(tableName).getEncryptColumn(columnName); diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java index 5cb725c2cfe..f7394194f32 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java @@ -34,7 +34,7 @@ import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment; @@ -70,7 +70,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken String tableName = ((TableAvailable) sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue(); EncryptTable encryptTable = encryptRule.getEncryptTable(tableName); String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); - for (AssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) { + for (ColumnAssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) { String columnName = each.getColumns().get(0).getIdentifier().getValue(); if (encryptTable.isEncryptColumn(columnName)) { generateSQLToken(schemaName, encryptTable.getTable(), encryptTable.getEncryptColumn(columnName), each).ifPresent(result::add); @@ -88,7 +88,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken return ((UpdateStatement) sqlStatement).getSetAssignment(); } - private Optional<EncryptAssignmentToken> generateSQLToken(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment) { + private Optional<EncryptAssignmentToken> generateSQLToken(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final ColumnAssignmentSegment segment) { if (segment.getValue() instanceof ParameterMarkerExpressionSegment) { return Optional.of(generateParameterSQLToken(encryptColumn, segment)); } @@ -98,7 +98,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken return Optional.empty(); } - private EncryptAssignmentToken generateParameterSQLToken(final EncryptColumn encryptColumn, final AssignmentSegment segment) { + private EncryptAssignmentToken generateParameterSQLToken(final EncryptColumn encryptColumn, final ColumnAssignmentSegment segment) { EncryptParameterAssignmentToken result = new EncryptParameterAssignmentToken(segment.getColumns().get(0).getStartIndex(), segment.getStopIndex()); result.addColumnName(encryptColumn.getCipher().getName()); encryptColumn.getAssistedQuery().ifPresent(optional -> result.addColumnName(optional.getName())); @@ -106,7 +106,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken return result; } - private EncryptAssignmentToken generateLiteralSQLToken(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment) { + private EncryptAssignmentToken generateLiteralSQLToken(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final ColumnAssignmentSegment segment) { EncryptLiteralAssignmentToken result = new EncryptLiteralAssignmentToken(segment.getColumns().get(0).getStartIndex(), segment.getStopIndex()); addCipherAssignment(schemaName, tableName, encryptColumn, segment, result); addAssistedQueryAssignment(schemaName, tableName, encryptColumn, segment, result); @@ -114,14 +114,15 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken return result; } - private void addCipherAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment, final EncryptLiteralAssignmentToken token) { + private void addCipherAssignment(final String schemaName, final String tableName, + final EncryptColumn encryptColumn, final ColumnAssignmentSegment segment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) segment.getValue()).getLiterals(); Object cipherValue = encryptColumn.getCipher().encrypt(databaseName, schemaName, tableName, encryptColumn.getName(), Collections.singletonList(originalValue)).iterator().next(); token.addAssignment(encryptColumn.getCipher().getName(), cipherValue); } private void addAssistedQueryAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, - final AssignmentSegment segment, final EncryptLiteralAssignmentToken token) { + final ColumnAssignmentSegment segment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) segment.getValue()).getLiterals(); if (encryptColumn.getAssistedQuery().isPresent()) { Object assistedQueryValue = encryptColumn.getAssistedQuery().get().encrypt( @@ -130,7 +131,8 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken } } - private void addLikeAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment, final EncryptLiteralAssignmentToken token) { + private void addLikeAssignment(final String schemaName, final String tableName, + final EncryptColumn encryptColumn, final ColumnAssignmentSegment segment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) segment.getValue()).getLiterals(); if (encryptColumn.getLikeQuery().isPresent()) { Object assistedQueryValue = encryptColumn.getLikeQuery().get().encrypt(databaseName, schemaName, diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java index aea37844050..17263098289 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java @@ -36,7 +36,7 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatem import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; 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.dml.expr.FunctionSegment; @@ -70,7 +70,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT public Collection<SQLToken> generateSQLTokens(final InsertStatementContext insertStatementContext) { InsertStatement insertStatement = insertStatementContext.getSqlStatement(); Preconditions.checkState(InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement).isPresent()); - Collection<AssignmentSegment> onDuplicateKeyColumnsSegments = InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement).get().getColumns(); + Collection<ColumnAssignmentSegment> onDuplicateKeyColumnsSegments = InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement).get().getColumns(); if (onDuplicateKeyColumnsSegments.isEmpty()) { return Collections.emptyList(); } @@ -79,7 +79,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT String tableName = insertStatement.getTable().getTableName().getIdentifier().getValue(); EncryptTable encryptTable = encryptRule.getEncryptTable(tableName); Collection<SQLToken> result = new LinkedList<>(); - for (AssignmentSegment each : onDuplicateKeyColumnsSegments) { + for (ColumnAssignmentSegment each : onDuplicateKeyColumnsSegments) { boolean leftColumnIsEncrypt = encryptTable.isEncryptColumn(each.getColumns().get(0).getIdentifier().getValue()); if (each.getValue() instanceof FunctionSegment && "VALUES".equalsIgnoreCase(((FunctionSegment) each.getValue()).getFunctionName())) { Optional<ExpressionSegment> rightColumnSegment = ((FunctionSegment) each.getValue()).getParameters().stream().findFirst(); @@ -98,7 +98,8 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT return result; } - private Optional<EncryptAssignmentToken> generateSQLToken(final String schemaName, final EncryptTable encryptTable, final EncryptColumn encryptColumn, final AssignmentSegment assignmentSegment) { + private Optional<EncryptAssignmentToken> generateSQLToken(final String schemaName, final EncryptTable encryptTable, + final EncryptColumn encryptColumn, final ColumnAssignmentSegment assignmentSegment) { if (assignmentSegment.getValue() instanceof ParameterMarkerExpressionSegment) { return Optional.of(generateParameterSQLToken(encryptTable, assignmentSegment)); } @@ -111,7 +112,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT return Optional.empty(); } - private EncryptAssignmentToken generateParameterSQLToken(final EncryptTable encryptTable, final AssignmentSegment assignmentSegment) { + private EncryptAssignmentToken generateParameterSQLToken(final EncryptTable encryptTable, final ColumnAssignmentSegment assignmentSegment) { EncryptParameterAssignmentToken result = new EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(), assignmentSegment.getStopIndex()); String columnName = assignmentSegment.getColumns().get(0).getIdentifier().getValue(); EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnName); @@ -121,7 +122,8 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT return result; } - private EncryptAssignmentToken generateLiteralSQLToken(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final AssignmentSegment assignmentSegment) { + private EncryptAssignmentToken generateLiteralSQLToken(final String schemaName, final String tableName, + final EncryptColumn encryptColumn, final ColumnAssignmentSegment assignmentSegment) { EncryptLiteralAssignmentToken result = new EncryptLiteralAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(), assignmentSegment.getStopIndex()); addCipherAssignment(schemaName, tableName, encryptColumn, assignmentSegment, result); addAssistedQueryAssignment(schemaName, tableName, encryptColumn, assignmentSegment, result); @@ -129,7 +131,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT return result; } - private EncryptAssignmentToken generateValuesSQLToken(final EncryptTable encryptTable, final AssignmentSegment assignmentSegment, final FunctionSegment functionSegment) { + private EncryptAssignmentToken generateValuesSQLToken(final EncryptTable encryptTable, final ColumnAssignmentSegment assignmentSegment, final FunctionSegment functionSegment) { ColumnSegment columnSegment = assignmentSegment.getColumns().get(0); String column = columnSegment.getIdentifier().getValue(); Optional<ExpressionSegment> valueColumnSegment = functionSegment.getParameters().stream().findFirst(); @@ -168,7 +170,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT } private void addCipherAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, - final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { + final ColumnAssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); Object cipherValue = encryptColumn.getCipher().encrypt(databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); @@ -176,7 +178,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT } private void addAssistedQueryAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, - final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { + final ColumnAssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { encryptColumn.getAssistedQuery().ifPresent(optional -> { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); Object assistedQueryValue = optional.encrypt( @@ -186,7 +188,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT } private void addLikeAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, - final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { + final ColumnAssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { encryptColumn.getLikeQuery().ifPresent(optional -> { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); Object likeValue = optional.encrypt( diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGeneratorTest.java index 57f52d4a637..39166f26cf6 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGeneratorTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGeneratorTest.java @@ -22,7 +22,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptTable; import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment; @@ -62,7 +62,7 @@ class EncryptAssignmentTokenGeneratorTest { private InsertStatementContext insertStatement; @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private AssignmentSegment assignmentSegment; + private ColumnAssignmentSegment assignmentSegment; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private SetAssignmentSegment setAssignmentSegment; diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java index 51942c43254..ae61eb40131 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java @@ -24,7 +24,6 @@ import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext; import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment; @@ -122,14 +121,14 @@ class EncryptInsertOnUpdateTokenGeneratorTest { assertFalse(actual.hasNext()); } - private Collection<AssignmentSegment> buildAssignmentSegment() { + private Collection<ColumnAssignmentSegment> buildAssignmentSegment() { ColumnSegment columnSegment = new ColumnSegment(0, 0, new IdentifierValue("mobile")); List<ColumnSegment> columnSegments = Collections.singletonList(columnSegment); - AssignmentSegment assignmentSegment1 = new ColumnAssignmentSegment(0, 0, columnSegments, new ParameterMarkerExpressionSegment(0, 0, 0)); + ColumnAssignmentSegment assignmentSegment1 = new ColumnAssignmentSegment(0, 0, columnSegments, new ParameterMarkerExpressionSegment(0, 0, 0)); FunctionSegment functionSegment = new FunctionSegment(0, 0, "VALUES", "VALUES (0)"); functionSegment.getParameters().add(columnSegment); - AssignmentSegment assignmentSegment2 = new ColumnAssignmentSegment(0, 0, columnSegments, functionSegment); - AssignmentSegment assignmentSegment3 = new ColumnAssignmentSegment(0, 0, columnSegments, new LiteralExpressionSegment(0, 0, 0)); + ColumnAssignmentSegment assignmentSegment2 = new ColumnAssignmentSegment(0, 0, columnSegments, functionSegment); + ColumnAssignmentSegment assignmentSegment3 = new ColumnAssignmentSegment(0, 0, columnSegments, new LiteralExpressionSegment(0, 0, 0)); return Arrays.asList(assignmentSegment1, assignmentSegment2, assignmentSegment3); } diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java index 9d06e0fe167..0f2c36cb92f 100644 --- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java +++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java @@ -18,10 +18,10 @@ package org.apache.shardingsphere.sharding.route.engine.validator.dml; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; +import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.infra.route.context.RouteContext; import org.apache.shardingsphere.infra.route.context.RouteMapper; import org.apache.shardingsphere.infra.route.context.RouteUnit; -import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.sharding.exception.syntax.DMLWithMultipleShardingTablesException; import org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition; import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions; @@ -29,7 +29,7 @@ import org.apache.shardingsphere.sharding.route.engine.condition.value.ListShard import org.apache.shardingsphere.sharding.route.engine.condition.value.ShardingConditionValue; import org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator; import org.apache.shardingsphere.sharding.rule.ShardingRule; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment; @@ -114,10 +114,10 @@ public abstract class ShardingDMLStatementValidator implements ShardingStatement */ @SuppressWarnings({"rawtypes", "unchecked"}) protected Optional<ShardingConditions> createShardingConditions(final SQLStatementContext sqlStatementContext, final ShardingRule shardingRule, - final Collection<AssignmentSegment> assignments, final List<Object> params) { + final Collection<ColumnAssignmentSegment> assignments, final List<Object> params) { Collection<ShardingConditionValue> values = new LinkedList<>(); String tableName = sqlStatementContext.getTablesContext().getTableNames().iterator().next(); - for (AssignmentSegment each : assignments) { + for (ColumnAssignmentSegment each : assignments) { String shardingColumn = each.getColumns().get(0).getIdentifier().getValue(); if (shardingRule.findShardingColumn(shardingColumn, tableName).isPresent()) { Optional<Object> assignmentValue = getShardingColumnAssignmentValue(each, params); @@ -132,7 +132,7 @@ public abstract class ShardingDMLStatementValidator implements ShardingStatement return Optional.of(new ShardingConditions(Collections.singletonList(shardingCondition), sqlStatementContext, shardingRule)); } - private Optional<Object> getShardingColumnAssignmentValue(final AssignmentSegment assignmentSegment, final List<Object> params) { + private Optional<Object> getShardingColumnAssignmentValue(final ColumnAssignmentSegment assignmentSegment, final List<Object> params) { ExpressionSegment segment = assignmentSegment.getValue(); int shardingSetAssignIndex = -1; if (segment instanceof ParameterMarkerExpressionSegment) { diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java index e1c5f188c6f..1d7405ad28f 100644 --- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java +++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java @@ -23,10 +23,10 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.connection.validator.ShardingSphereMetaDataValidateUtils; +import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.route.context.RouteContext; -import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.sharding.exception.algorithm.sharding.DuplicateInsertDataRecordException; import org.apache.shardingsphere.sharding.exception.syntax.InsertSelectTableViolationException; import org.apache.shardingsphere.sharding.exception.syntax.MissingGenerateKeyColumnWithInsertSelectException; @@ -36,7 +36,7 @@ import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditi import org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine; import org.apache.shardingsphere.sharding.route.engine.validator.dml.ShardingDMLStatementValidator; import org.apache.shardingsphere.sharding.rule.ShardingRule; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment; @@ -99,7 +99,7 @@ public final class ShardingInsertStatementValidator extends ShardingDMLStatement boolean singleRoutingOrSameShardingCondition = routeContext.isSingleRouting() || shardingConditions.isSameShardingCondition(); ShardingSpherePreconditions.checkState(singleRoutingOrSameShardingCondition, () -> new UnsupportedShardingOperationException("INSERT ... SELECT ...", tableName)); } - Collection<AssignmentSegment> assignments = InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement) + Collection<ColumnAssignmentSegment> assignments = InsertStatementHandler.getOnDuplicateKeyColumnsSegment(insertStatement) .map(OnDuplicateKeyColumnsSegment::getColumns).orElse(Collections.emptyList()); Optional<ShardingConditions> onDuplicateKeyShardingConditions = createShardingConditions(sqlStatementContext, shardingRule, assignments, params); Optional<RouteContext> onDuplicateKeyRouteContext = onDuplicateKeyShardingConditions.map(optional -> new ShardingStandardRoutingEngine(tableName, optional, diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingInsertStatementValidatorTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingInsertStatementValidatorTest.java index 41f0dd2b6d6..5ad4bd52849 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingInsertStatementValidatorTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingInsertStatementValidatorTest.java @@ -46,7 +46,6 @@ import org.apache.shardingsphere.sharding.route.engine.validator.dml.impl.Shardi import org.apache.shardingsphere.sharding.rule.ShardingRule; import org.apache.shardingsphere.sharding.rule.TableRule; import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment; @@ -297,7 +296,7 @@ class ShardingInsertStatementValidatorTest { ColumnSegment columnSegment = new ColumnSegment(0, 0, new IdentifierValue("id")); List<ColumnSegment> columnSegments = new LinkedList<>(); columnSegments.add(columnSegment); - AssignmentSegment assignmentSegment = new ColumnAssignmentSegment(0, 0, columnSegments, new ParameterMarkerExpressionSegment(0, 0, 0)); + ColumnAssignmentSegment assignmentSegment = new ColumnAssignmentSegment(0, 0, columnSegments, new ParameterMarkerExpressionSegment(0, 0, 0)); result.setOnDuplicateKeyColumns(new OnDuplicateKeyColumnsSegment(0, 0, Collections.singletonList(assignmentSegment))); Collection<ColumnSegment> columns = new LinkedList<>(); columns.add(columnSegment); diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingUpdateStatementValidatorTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingUpdateStatementValidatorTest.java index 1559a080c88..e08eb426ace 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingUpdateStatementValidatorTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingUpdateStatementValidatorTest.java @@ -34,7 +34,6 @@ import org.apache.shardingsphere.sharding.route.engine.validator.dml.impl.Shardi import org.apache.shardingsphere.sharding.rule.ShardingRule; import org.apache.shardingsphere.sharding.rule.TableRule; import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; @@ -176,7 +175,7 @@ class ShardingUpdateStatementValidatorTest { result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("user")))); List<ColumnSegment> columns = new LinkedList<>(); columns.add(new ColumnSegment(0, 0, new IdentifierValue("id"))); - AssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); + ColumnAssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); result.setSetAssignment(new SetAssignmentSegment(0, 0, Collections.singleton(assignment))); return result; } diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContext.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContext.java index 6808481a6ac..da3684a925a 100644 --- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContext.java +++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContext.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.infra.binder.context.segment.insert.values; import com.google.common.base.Preconditions; import lombok.Getter; import lombok.ToString; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; 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.dml.expr.FunctionSegment; @@ -48,8 +48,8 @@ public final class OnDuplicateUpdateContext { private final List<ColumnSegment> columns; - public OnDuplicateUpdateContext(final Collection<AssignmentSegment> assignments, final List<Object> params, final int parametersOffset) { - List<ExpressionSegment> expressionSegments = assignments.stream().map(AssignmentSegment::getValue).collect(Collectors.toList()); + public OnDuplicateUpdateContext(final Collection<ColumnAssignmentSegment> assignments, final List<Object> params, final int parametersOffset) { + List<ExpressionSegment> expressionSegments = assignments.stream().map(ColumnAssignmentSegment::getValue).collect(Collectors.toList()); valueExpressions = getValueExpressions(expressionSegments); parameterMarkerExpressions = ExpressionExtractUtils.getParameterMarkerExpressions(expressionSegments); parameterCount = parameterMarkerExpressions.size(); diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java index 90e3e08e55a..6e0227be195 100644 --- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java +++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java @@ -36,7 +36,7 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.sql.parser.sql.common.enums.SubqueryType; import org.apache.shardingsphere.sql.parser.sql.common.extractor.TableExtractor; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; @@ -142,7 +142,7 @@ public final class InsertStatementContext extends CommonSQLStatementContext impl if (!onDuplicateKeyColumnsSegment.isPresent()) { return Optional.empty(); } - Collection<AssignmentSegment> onDuplicateKeyColumns = onDuplicateKeyColumnsSegment.get().getColumns(); + Collection<ColumnAssignmentSegment> onDuplicateKeyColumns = onDuplicateKeyColumnsSegment.get().getColumns(); OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(onDuplicateKeyColumns, params, parametersOffset.get()); parametersOffset.addAndGet(onDuplicateUpdateContext.getParameterCount()); return Optional.of(onDuplicateUpdateContext); @@ -223,7 +223,7 @@ public final class InsertStatementContext extends CommonSQLStatementContext impl private List<String> getColumnNamesForSetAssignment(final SetAssignmentSegment setAssignment) { List<String> result = new LinkedList<>(); - for (AssignmentSegment each : setAssignment.getAssignments()) { + for (ColumnAssignmentSegment each : setAssignment.getAssignments()) { result.add(each.getColumns().get(0).getIdentifier().getValue().toLowerCase()); } return result; @@ -245,7 +245,7 @@ public final class InsertStatementContext extends CommonSQLStatementContext impl private List<ExpressionSegment> getAllValueExpressionsFromSetAssignment(final SetAssignmentSegment setAssignment) { List<ExpressionSegment> result = new ArrayList<>(setAssignment.getAssignments().size()); - for (AssignmentSegment each : setAssignment.getAssignments()) { + for (ColumnAssignmentSegment each : setAssignment.getAssignments()) { result.add(each.getValue()); } return result; diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java index c5840b7f0a2..7514a37ce5e 100644 --- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java +++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java @@ -24,7 +24,6 @@ import org.apache.shardingsphere.infra.binder.segment.expression.ExpressionSegme import org.apache.shardingsphere.infra.binder.segment.expression.impl.ColumnSegmentBinder; import org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext; import org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; @@ -52,14 +51,10 @@ public final class AssignmentSegmentBinder { */ public static SetAssignmentSegment bind(final SetAssignmentSegment segment, final SQLStatementBinderContext statementBinderContext, final Map<String, TableSegmentBinderContext> tableBinderContexts, final Map<String, TableSegmentBinderContext> outerTableBinderContexts) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); - for (AssignmentSegment each : segment.getAssignments()) { - if (each instanceof ColumnAssignmentSegment) { - assignments.add(new ColumnAssignmentSegment(each.getStartIndex(), each.getStopIndex(), bindColumns(each.getColumns(), statementBinderContext, tableBinderContexts, - outerTableBinderContexts), bindValue(each.getValue(), statementBinderContext, tableBinderContexts, outerTableBinderContexts))); - } else { - assignments.add(each); - } + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); + for (ColumnAssignmentSegment each : segment.getAssignments()) { + assignments.add(new ColumnAssignmentSegment(each.getStartIndex(), each.getStopIndex(), bindColumns(each.getColumns(), statementBinderContext, tableBinderContexts, + outerTableBinderContexts), bindValue(each.getValue(), statementBinderContext, tableBinderContexts, outerTableBinderContexts))); } return new SetAssignmentSegment(segment.getStartIndex(), segment.getStopIndex(), assignments); } diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java index 7ad3df9e534..64b3c8cc87e 100644 --- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java +++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java @@ -30,7 +30,6 @@ import org.apache.shardingsphere.infra.binder.segment.where.WhereSegmentBinder; import org.apache.shardingsphere.infra.binder.statement.SQLStatementBinder; import org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -163,13 +162,13 @@ public final class MergeStatementBinder implements SQLStatementBinder<MergeState final Map<String, TableSegmentBinderContext> targetTableBinderContexts, final Map<String, TableSegmentBinderContext> sourceTableBinderContexts) { UpdateStatement result = sqlStatement.getClass().getDeclaredConstructor().newInstance(); result.setTable(tableSegment); - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); SQLStatementBinderContext updateStatementBinderContext = new SQLStatementBinderContext(statementBinderContext.getMetaData(), statementBinderContext.getDefaultDatabaseName(), statementBinderContext.getDatabaseType(), statementBinderContext.getVariableNames()); updateStatementBinderContext.getExternalTableBinderContexts().putAll(statementBinderContext.getExternalTableBinderContexts()); updateStatementBinderContext.getExternalTableBinderContexts().putAll(sourceTableBinderContexts); Map<ParameterMarkerSegment, ColumnSegmentBoundedInfo> parameterMarkerSegmentBoundedInfos = new LinkedHashMap<>(); - for (AssignmentSegment each : sqlStatement.getSetAssignment().getAssignments()) { + for (ColumnAssignmentSegment each : sqlStatement.getSetAssignment().getAssignments()) { List<ColumnSegment> columnSegments = new ArrayList<>(each.getColumns().size()); each.getColumns().forEach(column -> columnSegments.add( ColumnSegmentBinder.bind(column, SegmentType.SET_ASSIGNMENT, updateStatementBinderContext, targetTableBinderContexts, Collections.emptyMap()))); diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContextTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContextTest.java index 001a63185bf..d45aeb43342 100644 --- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContextTest.java +++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/insert/values/OnDuplicateUpdateContextTest.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.infra.binder.context.segment.insert.values; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression; @@ -51,7 +50,7 @@ class OnDuplicateUpdateContextTest { @Test void assertGetValueWhenParameterMarker() { - Collection<AssignmentSegment> assignments = createParameterMarkerExpressionAssignmentSegment(); + Collection<ColumnAssignmentSegment> assignments = createParameterMarkerExpressionAssignmentSegment(); String parameterValue1 = "test1"; String parameterValue2 = "test2"; List<Object> params = Arrays.asList(parameterValue1, parameterValue2); @@ -62,26 +61,26 @@ class OnDuplicateUpdateContextTest { assertThat(valueFromInsertValueContext2, is(parameterValue2)); } - private Collection<AssignmentSegment> createParameterMarkerExpressionAssignmentSegment() { + private Collection<ColumnAssignmentSegment> createParameterMarkerExpressionAssignmentSegment() { ParameterMarkerExpressionSegment parameterMarkerExpressionSegment0 = new ParameterMarkerExpressionSegment(0, 10, 5); - AssignmentSegment assignmentSegment1 = createAssignmentSegment(parameterMarkerExpressionSegment0); + ColumnAssignmentSegment assignmentSegment1 = createAssignmentSegment(parameterMarkerExpressionSegment0); ParameterMarkerExpressionSegment parameterMarkerExpressionSegment1 = new ParameterMarkerExpressionSegment(0, 10, 6); - AssignmentSegment assignmentSegment2 = createAssignmentSegment(parameterMarkerExpressionSegment1); + ColumnAssignmentSegment assignmentSegment2 = createAssignmentSegment(parameterMarkerExpressionSegment1); return Arrays.asList(assignmentSegment1, assignmentSegment2); } @Test void assertGetValueWhenLiteralExpressionSegment() { Object literalObject = new Object(); - Collection<AssignmentSegment> assignments = createLiteralExpressionSegment(literalObject); + Collection<ColumnAssignmentSegment> assignments = createLiteralExpressionSegment(literalObject); OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, Collections.emptyList(), 0); Object valueFromInsertValueContext = onDuplicateUpdateContext.getValue(0); assertThat(valueFromInsertValueContext, is(literalObject)); } - private Collection<AssignmentSegment> createLiteralExpressionSegment(final Object literalObject) { + private Collection<ColumnAssignmentSegment> createLiteralExpressionSegment(final Object literalObject) { LiteralExpressionSegment parameterLiteralExpression = new LiteralExpressionSegment(0, 10, literalObject); - AssignmentSegment assignmentSegment = createAssignmentSegment(parameterLiteralExpression); + ColumnAssignmentSegment assignmentSegment = createAssignmentSegment(parameterLiteralExpression); return Collections.singleton(assignmentSegment); } @@ -91,12 +90,12 @@ class OnDuplicateUpdateContextTest { return new BinaryOperationExpression(0, 0, left, right, "=", "columnNameStr=?"); } - private AssignmentSegment createAssignmentSegment(final SimpleExpressionSegment expressionSegment) { + private ColumnAssignmentSegment createAssignmentSegment(final SimpleExpressionSegment expressionSegment) { List<ColumnSegment> columnSegments = Collections.singletonList(new ColumnSegment(0, 0, new IdentifierValue("columnNameStr"))); return new ColumnAssignmentSegment(0, 0, columnSegments, expressionSegment); } - private AssignmentSegment createAssignmentSegment(final BinaryOperationExpression binaryOperationExpression) { + private ColumnAssignmentSegment createAssignmentSegment(final BinaryOperationExpression binaryOperationExpression) { List<ColumnSegment> columnSegments = Collections.singletonList(new ColumnSegment(0, 0, new IdentifierValue("columnNameStr"))); return new ColumnAssignmentSegment(0, 0, columnSegments, binaryOperationExpression); } @@ -104,7 +103,7 @@ class OnDuplicateUpdateContextTest { @Test void assertGetColumn() { Object literalObject = new Object(); - Collection<AssignmentSegment> assignments = createLiteralExpressionSegment(literalObject); + Collection<ColumnAssignmentSegment> assignments = createLiteralExpressionSegment(literalObject); OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, Collections.emptyList(), 0); ColumnSegment column = onDuplicateUpdateContext.getColumn(0); assertThat(column, is(assignments.iterator().next().getColumns().get(0))); @@ -112,7 +111,7 @@ class OnDuplicateUpdateContextTest { @Test void assertParameterCount() { - List<AssignmentSegment> assignments = Arrays.asList( + List<ColumnAssignmentSegment> assignments = Arrays.asList( createAssignmentSegment(createBinaryOperationExpression()), createAssignmentSegment(new ParameterMarkerExpressionSegment(0, 10, 5)), createAssignmentSegment(new LiteralExpressionSegment(0, 10, new Object()))); diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java index 2ff863375cc..3eabcfe33bd 100644 --- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java +++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactoryTest.java @@ -30,7 +30,6 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; @@ -81,9 +80,8 @@ class SQLStatementContextFactoryTest { MySQLInsertStatement insertStatement = new MySQLInsertStatement(); List<ColumnSegment> columnSegments = new LinkedList<>(); columnSegments.add(new ColumnSegment(0, 0, new IdentifierValue("IdentifierValue"))); - AssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, columnSegments, null); - insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0, - Collections.singleton(assignment))); + ColumnAssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, columnSegments, null); + insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0, Collections.singleton(assignment))); assertSQLStatementContextCreatedWhenSQLStatementInstanceOfInsertStatement(insertStatement); } diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContextTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContextTest.java index 2e847372444..597d70332a5 100644 --- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContextTest.java +++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContextTest.java @@ -25,7 +25,6 @@ import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -184,11 +183,11 @@ class InsertStatementContextTest { private void setUpOnDuplicateValues(final MySQLInsertStatement insertStatement) { List<ColumnSegment> parameterMarkerExpressionAssignmentColumns = new LinkedList<>(); parameterMarkerExpressionAssignmentColumns.add(new ColumnSegment(0, 0, new IdentifierValue("on_duplicate_key_update_column_1"))); - AssignmentSegment parameterMarkerExpressionAssignment = new ColumnAssignmentSegment(0, 0, parameterMarkerExpressionAssignmentColumns, + ColumnAssignmentSegment parameterMarkerExpressionAssignment = new ColumnAssignmentSegment(0, 0, parameterMarkerExpressionAssignmentColumns, new ParameterMarkerExpressionSegment(0, 0, 4)); List<ColumnSegment> literalExpressionAssignmentColumns = new LinkedList<>(); literalExpressionAssignmentColumns.add(new ColumnSegment(0, 0, new IdentifierValue("on_duplicate_key_update_column_2"))); - AssignmentSegment literalExpressionAssignment = new ColumnAssignmentSegment(0, 0, literalExpressionAssignmentColumns, + ColumnAssignmentSegment literalExpressionAssignment = new ColumnAssignmentSegment(0, 0, literalExpressionAssignmentColumns, new LiteralExpressionSegment(0, 0, 5)); OnDuplicateKeyColumnsSegment onDuplicateKeyColumnsSegment = new OnDuplicateKeyColumnsSegment(0, 0, Arrays.asList(parameterMarkerExpressionAssignment, literalExpressionAssignment)); insertStatement.setOnDuplicateKeyColumns(onDuplicateKeyColumnsSegment); @@ -332,7 +331,7 @@ class InsertStatementContextTest { MySQLInsertStatement insertStatement = new MySQLInsertStatement(); List<ColumnSegment> columns = new LinkedList<>(); columns.add(new ColumnSegment(0, 0, new IdentifierValue("col"))); - AssignmentSegment insertStatementAssignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); + ColumnAssignmentSegment insertStatementAssignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0, Collections.singletonList(insertStatementAssignment))); insertStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("")))); InsertStatementContext insertStatementContext = createInsertStatementContext(Collections.emptyList(), insertStatement); @@ -379,7 +378,7 @@ class InsertStatementContextTest { MySQLInsertStatement insertStatement = new MySQLInsertStatement(); List<ColumnSegment> columns = new LinkedList<>(); columns.add(new ColumnSegment(0, 0, new IdentifierValue("col"))); - AssignmentSegment insertStatementAssignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); + ColumnAssignmentSegment insertStatementAssignment = new ColumnAssignmentSegment(0, 0, columns, new LiteralExpressionSegment(0, 0, 1)); insertStatement.setSetAssignment(new SetAssignmentSegment(0, 0, Collections.singletonList(insertStatementAssignment))); insertStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("")))); InsertStatementContext insertStatementContext = createInsertStatementContext(Collections.emptyList(), insertStatement); diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinderTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinderTest.java index 38971df6c15..ff98d420737 100644 --- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinderTest.java +++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinderTest.java @@ -21,7 +21,6 @@ import org.apache.shardingsphere.infra.binder.segment.from.SimpleTableSegmentBin import org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext; import org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext; import org.apache.shardingsphere.infra.database.core.DefaultDatabase; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; @@ -46,7 +45,7 @@ class AssignmentSegmentBinderTest { @Test void assertBindAssignmentSegment() { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); Map<String, TableSegmentBinderContext> tableBinderContexts = new LinkedHashMap<>(); ColumnSegment boundedOrderIdColumn = new ColumnSegment(0, 0, new IdentifierValue("order_id")); boundedOrderIdColumn.setColumnBoundedInfo(new ColumnSegmentBoundedInfo(new IdentifierValue(DefaultDatabase.LOGIC_NAME), new IdentifierValue(DefaultDatabase.LOGIC_NAME), diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/merge/MergeStatementConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/merge/MergeStatementConverter.java index 9c18f88890e..da22cc2e558 100644 --- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/merge/MergeStatementConverter.java +++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/merge/MergeStatementConverter.java @@ -22,7 +22,7 @@ import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.SqlNodeList; import org.apache.calcite.sql.SqlUpdate; import org.apache.calcite.sql.parser.SqlParserPos; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; 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.statement.dml.MergeStatement; @@ -55,7 +55,7 @@ public final class MergeStatementConverter implements SQLStatementConverter<Merg SqlNode condition = updateStatement.getWhere().flatMap(WhereConverter::convert).orElse(null); SqlNodeList columns = new SqlNodeList(SqlParserPos.ZERO); SqlNodeList expressions = new SqlNodeList(SqlParserPos.ZERO); - for (AssignmentSegment each : updateStatement.getAssignmentSegment().orElseThrow(IllegalStateException::new).getAssignments()) { + for (ColumnAssignmentSegment each : updateStatement.getAssignmentSegment().orElseThrow(IllegalStateException::new).getAssignments()) { columns.addAll(convertColumn(each.getColumns())); expressions.add(convertExpression(each.getValue())); } diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/update/UpdateStatementConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/update/UpdateStatementConverter.java index 479beaf6bdf..3eba8ffc7b3 100644 --- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/update/UpdateStatementConverter.java +++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/statement/update/UpdateStatementConverter.java @@ -22,7 +22,7 @@ import org.apache.calcite.sql.SqlNodeList; import org.apache.calcite.sql.SqlOrderBy; import org.apache.calcite.sql.SqlUpdate; import org.apache.calcite.sql.parser.SqlParserPos; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; 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.dml.pagination.limit.LimitSegment; @@ -63,7 +63,7 @@ public final class UpdateStatementConverter implements SQLStatementConverter<Upd SqlNode condition = updateStatement.getWhere().flatMap(WhereConverter::convert).orElse(null); SqlNodeList columns = new SqlNodeList(SqlParserPos.ZERO); SqlNodeList expressions = new SqlNodeList(SqlParserPos.ZERO); - for (AssignmentSegment each : updateStatement.getAssignmentSegment().orElseThrow(IllegalStateException::new).getAssignments()) { + for (ColumnAssignmentSegment each : updateStatement.getAssignmentSegment().orElseThrow(IllegalStateException::new).getAssignments()) { columns.addAll(convertColumn(each.getColumns())); expressions.add(convertExpression(each.getValue())); } diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java index 213d64a23e8..066195f3a66 100644 --- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java +++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java @@ -160,7 +160,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.Co import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.engine.EngineSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -1440,9 +1439,9 @@ public abstract class MySQLStatementVisitor extends MySQLStatementBaseVisitor<AS @Override public ASTNode visitOnDuplicateKeyClause(final OnDuplicateKeyClauseContext ctx) { - Collection<AssignmentSegment> columns = new LinkedList<>(); + Collection<ColumnAssignmentSegment> columns = new LinkedList<>(); for (AssignmentContext each : ctx.assignment()) { - columns.add((AssignmentSegment) visit(each)); + columns.add((ColumnAssignmentSegment) visit(each)); } return new OnDuplicateKeyColumnsSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columns); } @@ -1530,9 +1529,9 @@ public abstract class MySQLStatementVisitor extends MySQLStatementBaseVisitor<AS @Override public ASTNode visitSetAssignmentsClause(final SetAssignmentsClauseContext ctx) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); for (AssignmentContext each : ctx.assignment()) { - assignments.add((AssignmentSegment) visit(each)); + assignments.add((ColumnAssignmentSegment) visit(each)); } return new SetAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } diff --git a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java index 0375db142e8..d143f6c514b 100644 --- a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java +++ b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java @@ -121,7 +121,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.Co import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.ReturningSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -774,9 +773,9 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi if (null != ctx.NOTHING()) { return new OnDuplicateKeyColumnsSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), Collections.emptyList()); } - Collection<AssignmentSegment> columns = new LinkedList<>(); + Collection<ColumnAssignmentSegment> columns = new LinkedList<>(); for (AssignmentContext each : ctx.assignment()) { - columns.add((AssignmentSegment) visit(each)); + columns.add((ColumnAssignmentSegment) visit(each)); } return new OnDuplicateKeyColumnsSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columns); } @@ -841,13 +840,13 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi return result; } - private Collection<AssignmentSegment> generateAssignmentSegments(final SetClauseListContext ctx) { - Collection<AssignmentSegment> result = new LinkedList<>(); + private Collection<ColumnAssignmentSegment> generateAssignmentSegments(final SetClauseListContext ctx) { + Collection<ColumnAssignmentSegment> result = new LinkedList<>(); if (null != ctx.setClauseList()) { - Collection<AssignmentSegment> tmpResult = generateAssignmentSegments(ctx.setClauseList()); + Collection<ColumnAssignmentSegment> tmpResult = generateAssignmentSegments(ctx.setClauseList()); result.addAll(tmpResult); } - AssignmentSegment assignmentSegment = (AssignmentSegment) visit(ctx.setClause()); + ColumnAssignmentSegment assignmentSegment = (ColumnAssignmentSegment) visit(ctx.setClause()); result.add(assignmentSegment); return result; } @@ -898,7 +897,7 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi @Override public ASTNode visitSetClauseList(final SetClauseListContext ctx) { - Collection<AssignmentSegment> assignments = generateAssignmentSegments(ctx); + Collection<ColumnAssignmentSegment> assignments = generateAssignmentSegments(ctx); return new SetAssignmentSegment(ctx.start.getStartIndex() - 4, ctx.stop.getStopIndex(), assignments); } diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java index bc8954114d0..3d75b33cce8 100644 --- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java +++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java @@ -111,7 +111,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.enums.CombineType; import org.apache.shardingsphere.sql.parser.sql.common.enums.JoinType; import org.apache.shardingsphere.sql.parser.sql.common.enums.OrderDirection; import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -122,18 +121,10 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenE import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CollateExpression; -import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.datetime.DatetimeExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionWithParamsSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.multiset.MultisetExpression; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlElementFunctionSegment; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlPiFunctionSegment; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlQueryAndExistsFunctionSegment; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlSerializeFunctionSegment; -import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTableFunctionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment; @@ -169,6 +160,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Fun import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment; import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement; import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement; @@ -176,12 +168,19 @@ import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils; import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue; import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue; import org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.BooleanLiteralValue; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.datetime.DatetimeExpression; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.multiset.MultisetExpression; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableConditionalIntoElseSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableConditionalIntoSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableConditionalIntoThenSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableConditionalIntoWhenThenSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableInsertIntoSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.table.MultiTableInsertType; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlElementFunctionSegment; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlPiFunctionSegment; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlQueryAndExistsFunctionSegment; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlSerializeFunctionSegment; +import org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTableFunctionSegment; import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleDeleteStatement; import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleInsertStatement; import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleLockTableStatement; @@ -231,13 +230,13 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl @Override public ASTNode visitUpdateSetClause(final UpdateSetClauseContext ctx) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); if (null != ctx.updateSetColumnList()) { for (UpdateSetColumnClauseContext each : ctx.updateSetColumnList().updateSetColumnClause()) { - assignments.add((AssignmentSegment) visit(each)); + assignments.add((ColumnAssignmentSegment) visit(each)); } } else { - assignments.add((AssignmentSegment) visit(ctx.updateSetValueClause())); + assignments.add((ColumnAssignmentSegment) visit(ctx.updateSetValueClause())); } return new SetAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } @@ -247,7 +246,7 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl return 1 == ctx.columnName().size() ? createAssignmentSegmentFromSingleColumnAssignment(ctx) : createAssignmentSegmentFromMultiColumnAssignment(ctx); } - private AssignmentSegment createAssignmentSegmentFromSingleColumnAssignment(final UpdateSetColumnClauseContext ctx) { + private ColumnAssignmentSegment createAssignmentSegmentFromSingleColumnAssignment(final UpdateSetColumnClauseContext ctx) { ColumnSegment column = (ColumnSegment) visitColumnName(ctx.columnName(0)); List<ColumnSegment> columnSegments = new LinkedList<>(); columnSegments.add(column); @@ -259,17 +258,17 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl SubquerySegment subquerySegment = new SubquerySegment(ctx.selectSubquery().start.getStartIndex(), ctx.selectSubquery().stop.getStopIndex(), (OracleSelectStatement) visit(ctx.selectSubquery()), getOriginalText(ctx.selectSubquery())); SubqueryExpressionSegment value = new SubqueryExpressionSegment(subquerySegment); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } CommonExpressionSegment value = new CommonExpressionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), ctx.DEFAULT().getText()); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } - private AssignmentSegment createAssignmentSegmentFromMultiColumnAssignment(final UpdateSetColumnClauseContext ctx) { + private ColumnAssignmentSegment createAssignmentSegmentFromMultiColumnAssignment(final UpdateSetColumnClauseContext ctx) { List<ColumnSegment> columnSegments = new LinkedList<>(); for (ColumnNameContext each : ctx.columnName()) { columnSegments.add((ColumnSegment) visit(each)); @@ -287,14 +286,14 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl columnSegments.add(column); if (null != ctx.expr()) { ExpressionSegment value = (ExpressionSegment) visit(ctx.expr()); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } else { SubquerySegment subquerySegment = new SubquerySegment(ctx.selectSubquery().start.getStartIndex(), ctx.selectSubquery().stop.getStopIndex(), (OracleSelectStatement) visit(ctx.selectSubquery()), getOriginalText(ctx.selectSubquery())); SubqueryExpressionSegment value = new SubqueryExpressionSegment(subquerySegment); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } @@ -1367,9 +1366,9 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl @Override public ASTNode visitMergeSetAssignmentsClause(final MergeSetAssignmentsClauseContext ctx) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); for (MergeAssignmentContext each : ctx.mergeAssignment()) { - assignments.add((AssignmentSegment) visit(each)); + assignments.add((ColumnAssignmentSegment) visit(each)); } return new SetAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } diff --git a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java index 3c388eb0786..90ecc822eb3 100644 --- a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java +++ b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java @@ -121,7 +121,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.Co import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.ReturningSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -708,7 +707,7 @@ public abstract class PostgreSQLStatementVisitor extends PostgreSQLStatementPars @Override public ASTNode visitOptOnConflict(final OptOnConflictContext ctx) { SetClauseListContext setClauseListContext = ctx.setClauseList(); - Collection<AssignmentSegment> assignments = ((SetAssignmentSegment) visit(setClauseListContext)).getAssignments(); + Collection<ColumnAssignmentSegment> assignments = ((SetAssignmentSegment) visit(setClauseListContext)).getAssignments(); return new OnDuplicateKeyColumnsSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } @@ -818,13 +817,13 @@ public abstract class PostgreSQLStatementVisitor extends PostgreSQLStatementPars return result; } - private Collection<AssignmentSegment> generateAssignmentSegments(final SetClauseListContext ctx) { - Collection<AssignmentSegment> result = new LinkedList<>(); + private Collection<ColumnAssignmentSegment> generateAssignmentSegments(final SetClauseListContext ctx) { + Collection<ColumnAssignmentSegment> result = new LinkedList<>(); if (null != ctx.setClauseList()) { - Collection<AssignmentSegment> tmpResult = generateAssignmentSegments(ctx.setClauseList()); + Collection<ColumnAssignmentSegment> tmpResult = generateAssignmentSegments(ctx.setClauseList()); result.addAll(tmpResult); } - AssignmentSegment assignmentSegment = (AssignmentSegment) visit(ctx.setClause()); + ColumnAssignmentSegment assignmentSegment = (ColumnAssignmentSegment) visit(ctx.setClause()); result.add(assignmentSegment); return result; } @@ -868,7 +867,7 @@ public abstract class PostgreSQLStatementVisitor extends PostgreSQLStatementPars @Override public ASTNode visitSetClauseList(final SetClauseListContext ctx) { - Collection<AssignmentSegment> assignments = generateAssignmentSegments(ctx); + Collection<ColumnAssignmentSegment> assignments = generateAssignmentSegments(ctx); return new SetAssignmentSegment(ctx.start.getStartIndex() - 4, ctx.stop.getStopIndex(), assignments); } diff --git a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java index 43663ad5ac8..3d5b1618e87 100644 --- a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java +++ b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java @@ -53,7 +53,6 @@ import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.TableRe import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.UpdateContext; import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.WhereClauseContext; import org.apache.shardingsphere.sql.parser.sql.common.enums.JoinType; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -150,9 +149,9 @@ public final class SQL92DMLStatementVisitor extends SQL92StatementVisitor implem @Override public ASTNode visitSetAssignmentsClause(final SetAssignmentsClauseContext ctx) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); for (AssignmentContext each : ctx.assignment()) { - assignments.add((AssignmentSegment) visit(each)); + assignments.add((ColumnAssignmentSegment) visit(each)); } return new SetAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } @@ -172,7 +171,7 @@ public final class SQL92DMLStatementVisitor extends SQL92StatementVisitor implem List<ColumnSegment> columnSegments = new LinkedList<>(); columnSegments.add(column); ExpressionSegment value = (ExpressionSegment) visit(ctx.assignmentValue()); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } diff --git a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java index bbbcfea55ca..112ec390d6f 100644 --- a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java +++ b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java @@ -46,10 +46,10 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Con import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableAsSelectClauseContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CteClauseContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CteClauseSetContext; -import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DatabaseNameContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeLengthContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeNameContext; +import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DatabaseNameContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DeleteContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DelimitedIdentifierContext; import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DuplicateSpecificationContext; @@ -116,7 +116,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; @@ -167,13 +166,13 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegm import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.FunctionTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment; 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.segment.generic.table.FunctionTableSegment; import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue; import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue; import org.apache.shardingsphere.sql.parser.sql.common.value.keyword.KeywordValue; @@ -1039,9 +1038,9 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi @Override public ASTNode visitSetAssignmentsClause(final SetAssignmentsClauseContext ctx) { - Collection<AssignmentSegment> assignments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignments = new LinkedList<>(); for (AssignmentContext each : ctx.assignment()) { - assignments.add((AssignmentSegment) visit(each)); + assignments.add((ColumnAssignmentSegment) visit(each)); } return new SetAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), assignments); } @@ -1061,7 +1060,7 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi List<ColumnSegment> columnSegments = new LinkedList<>(); columnSegments.add(column); ExpressionSegment value = (ExpressionSegment) visit(ctx.assignmentValue()); - AssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); + ColumnAssignmentSegment result = new ColumnAssignmentSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnSegments, value); result.getColumns().add(column); return result; } diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java index 8985479dbef..551df80356f 100644 --- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java +++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.common.extractor; import lombok.Getter; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.RoutineBodySegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.ValidStatementSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression; @@ -242,7 +242,7 @@ public final class TableExtractor { } } - private void extractTablesFromAssignmentItems(final Collection<AssignmentSegment> assignmentItems) { + private void extractTablesFromAssignmentItems(final Collection<ColumnAssignmentSegment> assignmentItems) { assignmentItems.forEach(each -> extractTablesFromColumnSegments(each.getColumns())); } diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/AssignmentSegment.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/AssignmentSegment.java deleted file mode 100644 index 7ad440abf14..00000000000 --- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/AssignmentSegment.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment; - -import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment; -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 java.util.List; - -/** - * Assignment segment. - */ -public interface AssignmentSegment extends SQLSegment { - - /** - * Get list of column segments. - * - * @return list of ColumnSegment - */ - List<ColumnSegment> getColumns(); - - /** - * Get expression segment value. - * - * @return ExpressionSegment - */ - ExpressionSegment getValue(); -} diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/ColumnAssignmentSegment.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/ColumnAssignmentSegment.java index db6585a8437..4833cb16fcc 100644 --- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/ColumnAssignmentSegment.java +++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/ColumnAssignmentSegment.java @@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment; @@ -29,7 +30,7 @@ import java.util.List; */ @RequiredArgsConstructor @Getter -public final class ColumnAssignmentSegment implements AssignmentSegment { +public final class ColumnAssignmentSegment implements SQLSegment { private final int startIndex; diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/SetAssignmentSegment.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/SetAssignmentSegment.java index c8b2cd08b45..908757225e3 100644 --- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/SetAssignmentSegment.java +++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/assignment/SetAssignmentSegment.java @@ -34,5 +34,5 @@ public final class SetAssignmentSegment implements SQLSegment { private final int stopIndex; - private final Collection<AssignmentSegment> assignments; + private final Collection<ColumnAssignmentSegment> assignments; } diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/OnDuplicateKeyColumnsSegment.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/OnDuplicateKeyColumnsSegment.java index c8d3bd29ffc..8bf59d7b8a0 100644 --- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/OnDuplicateKeyColumnsSegment.java +++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/OnDuplicateKeyColumnsSegment.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import java.util.Collection; @@ -35,5 +35,5 @@ public final class OnDuplicateKeyColumnsSegment implements SQLSegment { private final int stopIndex; - private final Collection<AssignmentSegment> columns; + private final Collection<ColumnAssignmentSegment> columns; } diff --git a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java index ebd59e4d090..7ddae54892a 100644 --- a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java +++ b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java @@ -21,7 +21,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType; import org.apache.shardingsphere.sql.parser.sql.common.enums.CombineType; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.RoutineBodySegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.ValidStatementSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment; @@ -116,7 +115,7 @@ class TableExtractorTest { void assertExtractTablesFromInsert() { MySQLInsertStatement insertStatement = new MySQLInsertStatement(); insertStatement.setTable(new SimpleTableSegment(new TableNameSegment(122, 128, new IdentifierValue("t_order")))); - Collection<AssignmentSegment> assignmentSegments = new LinkedList<>(); + Collection<ColumnAssignmentSegment> assignmentSegments = new LinkedList<>(); ColumnSegment columnSegment = new ColumnSegment(133, 136, new IdentifierValue("id")); columnSegment.setOwner(new OwnerSegment(130, 132, new IdentifierValue("t_order"))); assignmentSegments.add(new ColumnAssignmentSegment(130, 140, Collections.singletonList(columnSegment), new LiteralExpressionSegment(141, 142, 1))); diff --git a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java index 9296379552f..e63bace5305 100644 --- a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java +++ b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java @@ -18,10 +18,11 @@ package org.apache.shardingsphere.proxy.backend.hbase.checker; import com.google.common.base.Preconditions; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment; import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement; + import java.util.Collection; import java.util.Optional; @@ -50,8 +51,8 @@ public final class HeterogeneousUpdateStatementChecker extends CommonHeterogeneo } private void checkAssignmentIsOk() { - Collection<AssignmentSegment> assignmentSegments = sqlStatement.getSetAssignment().getAssignments(); - for (AssignmentSegment assignmentSegment : assignmentSegments) { + Collection<ColumnAssignmentSegment> assignmentSegments = sqlStatement.getSetAssignment().getAssignments(); + for (ColumnAssignmentSegment assignmentSegment : assignmentSegments) { Preconditions.checkArgument(isAllowExpressionSegment(assignmentSegment.getValue()), "Assignment must is literal or parameter marker."); boolean isRowKey = ALLOW_KEYS.stream().anyMatch(each -> each.equalsIgnoreCase(assignmentSegment.getColumns().iterator().next().getIdentifier().getValue())); Preconditions.checkArgument(!isRowKey, "Do not allow update rowKey"); diff --git a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java index 812433d6cc3..4888795d6c2 100644 --- a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java +++ b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java @@ -27,7 +27,7 @@ import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation; import org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter; import org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor; import org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment; @@ -76,7 +76,7 @@ public final class HBaseUpdateOperationConverter implements HBaseOperationConver } private void addPutColumn(final UpdateStatementContext updateStatementContext, final Put put) { - for (AssignmentSegment each : updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()) { + for (ColumnAssignmentSegment each : updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()) { String columnName = each.getColumns().iterator().next().getIdentifier().getValue(); String value = String.valueOf(((LiteralExpressionSegment) each.getValue()).getLiterals()); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes(columnName), Bytes.toBytes(value)); diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java index 47dfe84025e..1d759cf8592 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.as import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert; @@ -41,7 +41,7 @@ public final class AssignmentAssert { * @param actual actual assignment segment * @param expected expected assignment */ - public static void assertIs(final SQLCaseAssertContext assertContext, final AssignmentSegment actual, final ExpectedAssignment expected) { + public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnAssignmentSegment actual, final ExpectedAssignment expected) { if (expected.getColumns().isEmpty()) { ColumnAssert.assertIs(assertContext, actual.getColumns().get(0), expected.getColumn()); } else { diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java index b7017471478..d98f6cfd3fd 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.in import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert; @@ -27,8 +27,8 @@ import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.ass import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedOnDuplicateKeyColumns; import static org.hamcrest.CoreMatchers.is; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * On duplicate key columns assert. @@ -47,7 +47,7 @@ public final class OnDuplicateKeyColumnsAssert { assertNotNull(expected, assertContext.getText("On duplicate key columns should exist.")); assertThat(assertContext.getText("On duplicate key columns size assertion error: "), actual.getColumns().size(), is(expected.getAssignments().size())); int count = 0; - for (AssignmentSegment each : actual.getColumns()) { + for (ColumnAssignmentSegment each : actual.getColumns()) { AssignmentAssert.assertIs(assertContext, each, expected.getAssignments().get(count)); count++; } diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java index d3db50eedb9..076041eeb2d 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.se import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert; @@ -27,8 +27,8 @@ import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.ass import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.set.ExpectedSetClause; import static org.hamcrest.CoreMatchers.is; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Set clause assert. @@ -47,7 +47,7 @@ public final class SetClauseAssert { assertNotNull(expected, assertContext.getText("Assignments should exist.")); assertThat(assertContext.getText("Assignments size assertion error: "), actual.getAssignments().size(), is(expected.getAssignments().size())); int count = 0; - for (AssignmentSegment each : actual.getAssignments()) { + for (ColumnAssignmentSegment each : actual.getAssignments()) { AssignmentAssert.assertIs(assertContext, each, expected.getAssignments().get(count)); count++; }