This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new e1f7f62c224 Refactor DMLStatement (#35583)
e1f7f62c224 is described below
commit e1f7f62c22486b86afec1366257cb92987b37c18
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 4 14:32:51 2025 +0800
Refactor DMLStatement (#35583)
* Refactor DMLStatement
* Refactor DMLStatement
* Refactor DMLStatement
* Refactor DMLStatement
---
.../engine/statement/dml/CopyStatementBinder.java | 24 ++++++-----
.../statement/dml/LoadDataStatementBinder.java | 11 ++----
.../statement/dml/LoadXMLStatementBinder.java | 11 ++----
.../statement/type/DorisDMLStatementVisitor.java | 17 ++------
.../statement/type/MySQLDMLStatementVisitor.java | 17 ++------
.../type/OpenGaussDMLStatementVisitor.java | 12 +++---
.../type/PostgreSQLDMLStatementVisitor.java | 43 +++++---------------
.../core/statement/dml/CallStatement.java | 11 +++---
.../core/statement/dml/CopyStatement.java | 32 +++++----------
.../statement/core/statement/dml/DoStatement.java | 7 ++--
.../core/statement/dml/HandlerStatement.java | 2 +-
.../core/statement/dml/ImportStatement.java | 2 +-
.../core/statement/dml/LoadDataStatement.java | 8 ++--
.../core/statement/dml/LoadXMLStatement.java | 8 ++--
.../core/statement/dml/TableStatement.java | 26 ------------
.../postgresql/dml/PostgreSQLCopyStatement.java | 46 ----------------------
.../prepare/MySQLComStmtPrepareCheckerTest.java | 11 +++---
17 files changed, 79 insertions(+), 209 deletions(-)
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
index 6f69d87d4c1..3d7f6c11941 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/CopyStatementBinder.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.infra.binder.engine.statement.dml;
import com.cedarsoftware.util.CaseInsensitiveMap.CaseInsensitiveString;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.binder.engine.segment.SegmentType;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.expression.type.ColumnSegmentBinder;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
@@ -28,8 +27,15 @@ import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.Simpl
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.prepare.PrepareStatementQuerySegmentBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
+import java.util.Collection;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
/**
* Copy statement binder.
*/
@@ -37,17 +43,17 @@ public final class CopyStatementBinder implements
SQLStatementBinder<CopyStateme
@Override
public CopyStatement bind(final CopyStatement sqlStatement, final
SQLStatementBinderContext binderContext) {
- CopyStatement result = copy(sqlStatement);
Multimap<CaseInsensitiveString, TableSegmentBinderContext>
tableBinderContexts = LinkedHashMultimap.create();
- sqlStatement.getTable().ifPresent(optional ->
result.setTable(SimpleTableSegmentBinder.bind(optional, binderContext,
tableBinderContexts)));
- sqlStatement.getPrepareStatementQuery().ifPresent(optional ->
result.setPrepareStatementQuery(PrepareStatementQuerySegmentBinder.bind(optional,
binderContext)));
- sqlStatement.getColumns().forEach(each ->
result.getColumns().add(ColumnSegmentBinder.bind(each, SegmentType.COPY,
binderContext, tableBinderContexts, LinkedHashMultimap.create())));
- return result;
+ Optional<SimpleTableSegment> boundTable =
sqlStatement.getTable().map(optional -> SimpleTableSegmentBinder.bind(optional,
binderContext, tableBinderContexts));
+ Collection<ColumnSegment> boundColumns =
sqlStatement.getColumns().stream()
+ .map(each -> ColumnSegmentBinder.bind(each, SegmentType.COPY,
binderContext, tableBinderContexts,
LinkedHashMultimap.create())).collect(Collectors.toList());
+ Optional<PrepareStatementQuerySegment> boundPrepareStatementQuery =
sqlStatement.getPrepareStatementQuery().map(optional ->
PrepareStatementQuerySegmentBinder.bind(optional, binderContext));
+ return copy(sqlStatement, boundTable.orElse(null), boundColumns,
boundPrepareStatementQuery.orElse(null));
}
- @SneakyThrows(ReflectiveOperationException.class)
- private CopyStatement copy(final CopyStatement sqlStatement) {
- CopyStatement result =
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+ private CopyStatement copy(final CopyStatement sqlStatement,
+ final SimpleTableSegment boundTable, final
Collection<ColumnSegment> boundColumns, final PrepareStatementQuerySegment
boundPrepareStatementQuery) {
+ CopyStatement result = new CopyStatement(boundTable, boundColumns,
boundPrepareStatementQuery);
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
index 2c69c1281b0..aaac5207bfa 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadDataStatementBinder.java
@@ -20,11 +20,11 @@ package
org.apache.shardingsphere.infra.binder.engine.statement.dml;
import com.cedarsoftware.util.CaseInsensitiveMap;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.SimpleTableSegmentBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadDataStatement;
/**
@@ -34,15 +34,12 @@ public final class LoadDataStatementBinder implements
SQLStatementBinder<LoadDat
@Override
public LoadDataStatement bind(final LoadDataStatement sqlStatement, final
SQLStatementBinderContext binderContext) {
- LoadDataStatement result = copy(sqlStatement);
Multimap<CaseInsensitiveMap.CaseInsensitiveString,
TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create();
-
result.setTableSegment(SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(),
binderContext, tableBinderContexts));
- return result;
+ return copy(sqlStatement,
SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(), binderContext,
tableBinderContexts));
}
- @SneakyThrows(ReflectiveOperationException.class)
- private static LoadDataStatement copy(final LoadDataStatement
sqlStatement) {
- LoadDataStatement result =
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+ private LoadDataStatement copy(final LoadDataStatement sqlStatement, final
SimpleTableSegment boundTableSegment) {
+ LoadDataStatement result = new LoadDataStatement(boundTableSegment);
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
index 2e70c0f21a6..73a3a7cf80e 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/LoadXMLStatementBinder.java
@@ -20,11 +20,11 @@ package
org.apache.shardingsphere.infra.binder.engine.statement.dml;
import com.cedarsoftware.util.CaseInsensitiveMap;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
import
org.apache.shardingsphere.infra.binder.engine.segment.dml.from.type.SimpleTableSegmentBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
import
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadXMLStatement;
/**
@@ -34,15 +34,12 @@ public final class LoadXMLStatementBinder implements
SQLStatementBinder<LoadXMLS
@Override
public LoadXMLStatement bind(final LoadXMLStatement sqlStatement, final
SQLStatementBinderContext binderContext) {
- LoadXMLStatement result = copy(sqlStatement);
Multimap<CaseInsensitiveMap.CaseInsensitiveString,
TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create();
-
result.setTableSegment(SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(),
binderContext, tableBinderContexts));
- return result;
+ return copy(sqlStatement,
SimpleTableSegmentBinder.bind(sqlStatement.getTableSegment(), binderContext,
tableBinderContexts));
}
- @SneakyThrows(ReflectiveOperationException.class)
- private static LoadXMLStatement copy(final LoadXMLStatement sqlStatement) {
- LoadXMLStatement result =
sqlStatement.getClass().getDeclaredConstructor().newInstance();
+ private LoadXMLStatement copy(final LoadXMLStatement sqlStatement, final
SimpleTableSegment boundTableSegment) {
+ LoadXMLStatement result = new LoadXMLStatement(boundTableSegment);
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
result.getVariableNames().addAll(sqlStatement.getVariableNames());
diff --git
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
index b760aab1fd1..d668a3973f3 100644
---
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
+++
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
@@ -61,19 +61,14 @@ public final class DorisDMLStatementVisitor extends
DorisStatementVisitor implem
@Override
public ASTNode visitCall(final CallContext ctx) {
- CallStatement result = new CallStatement();
String procedureName = null == ctx.owner() ?
ctx.identifier().getText() : ctx.owner().getText() + "." +
ctx.identifier().getText();
- result.setProcedureName(procedureName);
List<ExpressionSegment> params = ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList());
- result.getParameters().addAll(params);
- return result;
+ return new CallStatement(procedureName, params);
}
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- DoStatement result = new DoStatement();
- result.getParameters().addAll(ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
- return result;
+ return new DoStatement(ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
}
@Override
@@ -93,16 +88,12 @@ public final class DorisDMLStatementVisitor extends
DorisStatementVisitor implem
@Override
public ASTNode visitLoadDataStatement(final LoadDataStatementContext ctx) {
- LoadDataStatement result = new LoadDataStatement();
- result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
- return result;
+ return new LoadDataStatement((SimpleTableSegment)
visit(ctx.tableName()));
}
@Override
public ASTNode visitLoadXmlStatement(final LoadXmlStatementContext ctx) {
- LoadXMLStatement result = new LoadXMLStatement();
- result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
- return result;
+ return new LoadXMLStatement((SimpleTableSegment)
visit(ctx.tableName()));
}
@Override
diff --git
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
index 12dd5b93081..99032dc441c 100644
---
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
+++
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
@@ -67,19 +67,14 @@ public final class MySQLDMLStatementVisitor extends
MySQLStatementVisitor implem
@Override
public ASTNode visitCall(final CallContext ctx) {
- CallStatement result = new CallStatement();
String procedureName = null == ctx.owner() ?
ctx.identifier().getText() : ctx.owner().getText() + "." +
ctx.identifier().getText();
- result.setProcedureName(procedureName);
List<ExpressionSegment> params = ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList());
- result.getParameters().addAll(params);
- return result;
+ return new CallStatement(procedureName, params);
}
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- DoStatement result = new DoStatement();
- result.getParameters().addAll(ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
- return result;
+ return new DoStatement(ctx.expr().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
}
@Override
@@ -99,16 +94,12 @@ public final class MySQLDMLStatementVisitor extends
MySQLStatementVisitor implem
@Override
public ASTNode visitLoadDataStatement(final LoadDataStatementContext ctx) {
- LoadDataStatement result = new LoadDataStatement();
- result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
- return result;
+ return new LoadDataStatement((SimpleTableSegment)
visit(ctx.tableName()));
}
@Override
public ASTNode visitLoadXmlStatement(final LoadXmlStatementContext ctx) {
- LoadXMLStatement result = new LoadXMLStatement();
- result.setTableSegment((SimpleTableSegment) visit(ctx.tableName()));
- return result;
+ return new LoadXMLStatement((SimpleTableSegment)
visit(ctx.tableName()));
}
@Override
diff --git
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
index 546b4e77f0b..97c67aaae42 100644
---
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
+++
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDMLStatementVisitor.java
@@ -31,6 +31,8 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CallSta
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
+import java.util.Collections;
+
/**
* DML statement visitor for openGauss.
*/
@@ -38,21 +40,17 @@ public final class OpenGaussDMLStatementVisitor extends
OpenGaussStatementVisito
@Override
public ASTNode visitCall(final CallContext ctx) {
- return new CallStatement();
+ return new CallStatement(null, Collections.emptyList());
}
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- return new DoStatement();
+ return new DoStatement(Collections.emptyList());
}
@Override
public ASTNode visitCopy(final CopyContext ctx) {
- CopyStatement result = new CopyStatement();
- if (null != ctx.qualifiedName()) {
- result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
- }
- return result;
+ return new CopyStatement(null == ctx.qualifiedName() ? null :
(SimpleTableSegment) visit(ctx.qualifiedName()), Collections.emptyList(), null);
}
@Override
diff --git
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
index 2b0d2ba099c..5f742c88c16 100644
---
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
+++
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDMLStatementVisitor.java
@@ -38,6 +38,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Proj
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CallStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
@@ -45,7 +46,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectS
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-import
org.apache.shardingsphere.sql.parser.statement.postgresql.dml.PostgreSQLCopyStatement;
import java.util.Collections;
import java.util.List;
@@ -58,14 +58,11 @@ public final class PostgreSQLDMLStatementVisitor extends
PostgreSQLStatementVisi
@Override
public ASTNode visitCall(final CallContext ctx) {
- CallStatement result = new CallStatement();
String procedureName = ((IdentifierValue)
visit(ctx.identifier())).getValue();
- result.setProcedureName(procedureName);
List<ExpressionSegment> params = null == ctx.callArguments()
? Collections.emptyList()
: ctx.callArguments().callArgument().stream().map(each ->
(ExpressionSegment) visit(each)).collect(Collectors.toList());
- result.getParameters().addAll(params);
- return result;
+ return new CallStatement(procedureName, params);
}
@Override
@@ -79,7 +76,7 @@ public final class PostgreSQLDMLStatementVisitor extends
PostgreSQLStatementVisi
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- return new DoStatement();
+ return new DoStatement(Collections.emptyList());
}
@Override
@@ -95,17 +92,9 @@ public final class PostgreSQLDMLStatementVisitor extends
PostgreSQLStatementVisi
@Override
public ASTNode visitCopyWithTableOrQuery(final CopyWithTableOrQueryContext
ctx) {
- PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
- if (null != ctx.qualifiedName()) {
- result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
- if (null != ctx.columnNames()) {
- result.getColumns().addAll(((CollectionValue<ColumnSegment>)
visit(ctx.columnNames())).getValue());
- }
- }
- if (null != ctx.preparableStmt()) {
-
result.setPrepareStatementQuery(extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
- }
- return result;
+ return new CopyStatement(null == ctx.qualifiedName() ? null :
(SimpleTableSegment) visit(ctx.qualifiedName()),
+ null == ctx.columnNames() ? Collections.emptyList() :
((CollectionValue<ColumnSegment>) visit(ctx.columnNames())).getValue(),
+ null == ctx.preparableStmt() ? null :
extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
}
private PrepareStatementQuerySegment
extractPrepareStatementQuerySegmentFromPreparableStmt(final
PreparableStmtContext ctx) {
@@ -124,26 +113,14 @@ public final class PostgreSQLDMLStatementVisitor extends
PostgreSQLStatementVisi
@Override
public ASTNode visitCopyWithTableOrQueryBinaryCsv(final
CopyWithTableOrQueryBinaryCsvContext ctx) {
- PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
- if (null != ctx.qualifiedName()) {
- result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
- if (null != ctx.columnNames()) {
- result.getColumns().addAll(((CollectionValue<ColumnSegment>)
visit(ctx.columnNames())).getValue());
- }
- }
- if (null != ctx.preparableStmt()) {
-
result.setPrepareStatementQuery(extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
- }
- return result;
+ return new CopyStatement(null == ctx.qualifiedName() ? null :
(SimpleTableSegment) visit(ctx.qualifiedName()),
+ null == ctx.columnNames() ? Collections.emptyList() :
((CollectionValue<ColumnSegment>) visit(ctx.columnNames())).getValue(),
+ null == ctx.preparableStmt() ? null :
extractPrepareStatementQuerySegmentFromPreparableStmt(ctx.preparableStmt()));
}
@Override
public ASTNode visitCopyWithTableBinary(final CopyWithTableBinaryContext
ctx) {
- PostgreSQLCopyStatement result = new PostgreSQLCopyStatement();
- if (null != ctx.qualifiedName()) {
- result.setTable((SimpleTableSegment) visit(ctx.qualifiedName()));
- }
- return result;
+ return new CopyStatement(null == ctx.qualifiedName() ? null :
(SimpleTableSegment) visit(ctx.qualifiedName()), Collections.emptyList(), null);
}
@Override
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
index 2238248529f..99d1fad4feb 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CallStatement.java
@@ -18,21 +18,20 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import java.util.ArrayList;
import java.util.List;
/**
* Call statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public class CallStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class CallStatement extends AbstractSQLStatement implements
DMLStatement {
- private String procedureName;
+ private final String procedureName;
- private final List<ExpressionSegment> parameters = new ArrayList<>();
+ private final List<ExpressionSegment> parameters;
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
index 968d33b4dcb..4ecc3a25229 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/CopyStatement.java
@@ -18,24 +18,27 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import java.util.Collection;
-import java.util.Collections;
import java.util.Optional;
/**
* Copy statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public class CopyStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class CopyStatement extends AbstractSQLStatement implements
DMLStatement {
- private SimpleTableSegment table;
+ private final SimpleTableSegment table;
+
+ private final Collection<ColumnSegment> columns;
+
+ private final PrepareStatementQuerySegment prepareStatementQuery;
/**
* Get table.
@@ -46,29 +49,12 @@ public class CopyStatement extends AbstractSQLStatement
implements DMLStatement
return Optional.ofNullable(table);
}
- /**
- * Set prepare statement query segment.
- *
- * @param prepareStatementQuery prepare statement query segment
- */
- public void setPrepareStatementQuery(final PrepareStatementQuerySegment
prepareStatementQuery) {
- }
-
/**
* Get prepare statement query segment.
*
* @return prepare statement query segment
*/
public Optional<PrepareStatementQuerySegment> getPrepareStatementQuery() {
- return Optional.empty();
- }
-
- /**
- * Get columns.
- *
- * @return columns
- */
- public Collection<ColumnSegment> getColumns() {
- return Collections.emptyList();
+ return Optional.ofNullable(prepareStatementQuery);
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
index c70df602540..483a4402ab5 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
@@ -18,17 +18,18 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-import java.util.ArrayList;
import java.util.List;
/**
* Do statement.
*/
+@RequiredArgsConstructor
@Getter
-public class DoStatement extends AbstractSQLStatement implements DMLStatement {
+public final class DoStatement extends AbstractSQLStatement implements
DMLStatement {
- private final List<ExpressionSegment> parameters = new ArrayList<>();
+ private final List<ExpressionSegment> parameters;
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
index d7cb26a1d8e..dfc8e632fd0 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/HandlerStatement.java
@@ -22,5 +22,5 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
/**
* Handler statement.
*/
-public class HandlerStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class HandlerStatement extends AbstractSQLStatement implements
DMLStatement {
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
index 19eea9e5fdf..2fbd4b8907b 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/ImportStatement.java
@@ -22,5 +22,5 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
/**
* Import statement.
*/
-public class ImportStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class ImportStatement extends AbstractSQLStatement implements
DMLStatement {
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
index 46130080f77..b995547ff4c 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadDataStatement.java
@@ -18,16 +18,16 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
/**
* Load data statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public class LoadDataStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class LoadDataStatement extends AbstractSQLStatement implements
DMLStatement {
- private SimpleTableSegment tableSegment;
+ private final SimpleTableSegment tableSegment;
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
index 80c8b8b8f69..72c24c89800 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/LoadXMLStatement.java
@@ -18,16 +18,16 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
/**
* Load xml statement.
*/
-@Setter
+@RequiredArgsConstructor
@Getter
-public class LoadXMLStatement extends AbstractSQLStatement implements
DMLStatement {
+public final class LoadXMLStatement extends AbstractSQLStatement implements
DMLStatement {
- private SimpleTableSegment tableSegment;
+ private final SimpleTableSegment tableSegment;
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
deleted file mode 100644
index 8ac3b7e5e4a..00000000000
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/TableStatement.java
+++ /dev/null
@@ -1,26 +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.statement.core.statement.dml;
-
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
-
-/**
- * Table statement.
- */
-public abstract class TableStatement extends AbstractSQLStatement implements
DMLStatement {
-}
diff --git
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
b/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
deleted file mode 100644
index d3c653d1ee5..00000000000
---
a/parser/sql/statement/type/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/statement/postgresql/dml/PostgreSQLCopyStatement.java
+++ /dev/null
@@ -1,46 +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.statement.postgresql.dml;
-
-import lombok.Getter;
-import lombok.Setter;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.prepare.PrepareStatementQuerySegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.CopyStatement;
-import
org.apache.shardingsphere.sql.parser.statement.postgresql.PostgreSQLStatement;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Optional;
-
-/**
- * PostgreSQL copy statement.
- */
-@Getter
-@Setter
-public final class PostgreSQLCopyStatement extends CopyStatement implements
PostgreSQLStatement {
-
- private final Collection<ColumnSegment> columns = new LinkedList<>();
-
- private PrepareStatementQuerySegment prepareStatementQuery;
-
- @Override
- public Optional<PrepareStatementQuerySegment> getPrepareStatementQuery() {
- return Optional.ofNullable(prepareStatementQuery);
- }
-}
diff --git
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
index b2a0e6069b3..ccfe80d5d7a 100644
---
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
+++
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
@@ -88,17 +88,16 @@ class MySQLComStmtPrepareCheckerTest {
MySQLCreateTableStatement createTableStatement = new
MySQLCreateTableStatement();
Collection<SQLStatement> sqlStatements = Arrays.asList(
new MySQLAlterTableStatement(), new AlterUserStatement(), new
AnalyzeTableStatement(Collections.emptyList()), new CacheIndexStatement(),
- new CallStatement(), new ChangeMasterStatement(), new
ChecksumTableStatement(Collections.emptyList()), new CommitStatement(), new
MySQLCreateIndexStatement(),
- new MySQLDropIndexStatement(), new CreateDatabaseStatement(),
new DropDatabaseStatement(), createTableStatement,
+ new CallStatement(null, Collections.emptyList()), new
ChangeMasterStatement(), new ChecksumTableStatement(Collections.emptyList()),
new CommitStatement(),
+ new MySQLCreateIndexStatement(), new
MySQLDropIndexStatement(), new CreateDatabaseStatement(), new
DropDatabaseStatement(), createTableStatement,
new MySQLDropTableStatement(), new MySQLCreateUserStatement(),
new RenameUserStatement(), new DropUserStatement(Collections.emptyList()),
- new CreateViewStatement(), new MySQLDropViewStatement(), new
MySQLDeleteStatement(), new DoStatement(), new
FlushStatement(Collections.emptyList(), false),
+ new CreateViewStatement(), new MySQLDropViewStatement(), new
MySQLDeleteStatement(), new DoStatement(Collections.emptyList()), new
FlushStatement(Collections.emptyList(), false),
new MySQLGrantStatement(), new MySQLInsertStatement(), new
InstallPluginStatement(null), new KillStatement(null, null),
new LoadIndexInfoStatement(Collections.emptyList()), new
OptimizeTableStatement(null), new RenameTableStatement(), new
RepairTableStatement(Collections.emptyList()),
new ResetStatement(Collections.emptyList()), new
MySQLRevokeStatement(), new MySQLSelectStatement(), new
SetStatement(Collections.emptyList()), new ShowWarningsStatement(null),
new ShowErrorsStatement(null), new
ShowBinlogEventsStatement(null, null), new ShowCreateProcedureStatement(null),
new ShowCreateFunctionStatement(null),
- new ShowCreateEventStatement(null),
- new ShowCreateTableStatement(null), new
ShowCreateViewStatement(null), new ShowBinaryLogsStatement(), new
ShowStatusStatement(null), new StartSlaveStatement(),
- new StopSlaveStatement(), new TruncateStatement(), new
UninstallPluginStatement(null), new MySQLUpdateStatement(),
+ new ShowCreateEventStatement(null), new
ShowCreateTableStatement(null), new ShowCreateViewStatement(null), new
ShowBinaryLogsStatement(), new ShowStatusStatement(null),
+ new StartSlaveStatement(), new StopSlaveStatement(), new
TruncateStatement(), new UninstallPluginStatement(null), new
MySQLUpdateStatement(),
new XABeginStatement("1"), new XAPrepareStatement("1"), new
XACommitStatement("1"), new XARollbackStatement("1"), new XAEndStatement("1"),
new XARecoveryStatement());
for (SQLStatement each : sqlStatements) {
assertTrue(MySQLComStmtPrepareChecker.isAllowedStatement(each));