This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new f3381578a5c Remove the field parameterCount in AbstractSQLStatement to
eliminate the risk of inconsistency. (#23544)
f3381578a5c is described below
commit f3381578a5c3f93540793eac82b0bb1392f93c5d
Author: Chuxin Chen <[email protected]>
AuthorDate: Sun Jan 15 15:34:22 2023 +0800
Remove the field parameterCount in AbstractSQLStatement to eliminate the
risk of inconsistency. (#23544)
---
.../segment/insert/values/InsertSelectContext.java | 2 +-
.../MySQLComStmtPrepareParameterMarkerExtractor.java | 2 +-
.../extended/describe/PostgreSQLComDescribeExecutor.java | 2 +-
.../statement/impl/MySQLDALStatementSQLVisitor.java | 13 -------------
.../visitor/statement/impl/MySQLStatementSQLVisitor.java | 10 +---------
.../statement/impl/OpenGaussStatementSQLVisitor.java | 14 ++------------
.../statement/impl/OracleDMLStatementSQLVisitor.java | 5 -----
.../statement/impl/OracleStatementSQLVisitor.java | 4 +---
.../statement/impl/PostgreSQLStatementSQLVisitor.java | 14 ++------------
.../statement/impl/SQL92DMLStatementSQLVisitor.java | 4 ----
.../visitor/statement/impl/SQL92StatementSQLVisitor.java | 4 +---
.../statement/impl/SQLServerStatementSQLVisitor.java | 16 ++++++----------
.../expr/simple/ParameterMarkerExpressionSegment.java | 5 +++++
.../ParameterMarkerPaginationValueSegment.java | 7 -------
.../common/segment/generic/ParameterMarkerSegment.java | 7 +++++++
.../sql/common/statement/AbstractSQLStatement.java | 9 +++++----
16 files changed, 33 insertions(+), 85 deletions(-)
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertSelectContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertSelectContext.java
index 5b9ed63c36e..029f40eb61a 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertSelectContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertSelectContext.java
@@ -39,7 +39,7 @@ public final class InsertSelectContext {
private final SelectStatementContext selectStatementContext;
public InsertSelectContext(final SelectStatementContext
selectStatementContext, final List<Object> params, final int parametersOffset) {
- parameterCount =
selectStatementContext.getSqlStatement().getParameterCount();
+ parameterCount =
selectStatementContext.getSqlStatement().getParameterMarkerSegments().size();
this.selectStatementContext = selectStatementContext;
parameters = getParameters(params, parametersOffset);
}
diff --git
a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractor.java
b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractor.java
index 45de08beb8f..96c2b4893d1 100644
---
a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractor.java
+++
b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractor.java
@@ -58,7 +58,7 @@ public final class
MySQLComStmtPrepareParameterMarkerExtractor {
List<String> columnNamesOfInsert =
getColumnNamesOfInsertStatement(insertStatement, table);
Map<String, ShardingSphereColumn> columnsOfTable = table.getColumns();
Map<String, ShardingSphereColumn> caseInsensitiveColumnsOfTable =
convertToCaseInsensitiveColumnsOfTable(columnsOfTable);
- Map<ParameterMarkerSegment, ShardingSphereColumn> result = new
LinkedHashMap<>(insertStatement.getParameterCount(), 1);
+ Map<ParameterMarkerSegment, ShardingSphereColumn> result = new
LinkedHashMap<>(insertStatement.getParameterMarkerSegments().size(), 1);
for (InsertValuesSegment each : insertStatement.getValues()) {
ListIterator<ExpressionSegment> listIterator =
each.getValues().listIterator();
for (int columnIndex = listIterator.nextIndex();
listIterator.hasNext(); columnIndex = listIterator.nextIndex()) {
diff --git
a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
index d1a6681a47d..4beb48e885e 100644
---
a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
+++
b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
@@ -128,7 +128,7 @@ public final class PostgreSQLComDescribeExecutor implements
CommandExecutor {
InsertStatement insertStatement = (InsertStatement)
preparedStatement.getSqlStatementContext().getSqlStatement();
Collection<Integer> unspecifiedTypeParameterIndexes =
getUnspecifiedTypeParameterIndexes(preparedStatement);
Optional<ReturningSegment> returningSegment =
InsertStatementHandler.getReturningSegment(insertStatement);
- if (0 == insertStatement.getParameterCount() &&
unspecifiedTypeParameterIndexes.isEmpty() && !returningSegment.isPresent()) {
+ if (insertStatement.getParameterMarkerSegments().isEmpty() &&
unspecifiedTypeParameterIndexes.isEmpty() && !returningSegment.isPresent()) {
return;
}
String logicTableName =
insertStatement.getTable().getTableName().getIdentifier().getValue();
diff --git
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
index c8f51a63cba..d05a6202ca5 100644
---
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
+++
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
@@ -260,7 +260,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -620,7 +619,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -634,7 +632,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -648,7 +645,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -662,7 +658,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -681,7 +676,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -698,7 +692,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -821,7 +814,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -832,7 +824,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -843,7 +834,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -854,7 +844,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -865,7 +854,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -879,7 +867,6 @@ public final class MySQLDALStatementSQLVisitor extends
MySQLStatementSQLVisitor
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index dbab96ed44b..33051ba2ef0 100644
---
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -231,8 +231,6 @@ import java.util.stream.Collectors;
@Getter(AccessLevel.PROTECTED)
public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public MySQLStatementSQLVisitor(final Properties props) {
@@ -240,7 +238,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
@Override
@@ -638,7 +636,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
if (null != ctx.lockClauseList()) {
result.setLock((LockSegment) visit(ctx.lockClauseList()));
}
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1116,7 +1113,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
result.setOnDuplicateKeyColumns((OnDuplicateKeyColumnsSegment)
visit(ctx.onDuplicateKeyClause()));
}
result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1188,7 +1184,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
result.setSetAssignment((SetAssignmentSegment)
visit(ctx.setAssignmentsClause()));
}
result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1261,7 +1256,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
if (null != ctx.limitClause()) {
result.setLimit((LimitSegment) visit(ctx.limitClause()));
}
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1329,7 +1323,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
if (null != ctx.limitClause()) {
result.setLimit((LimitSegment) visit(ctx.limitClause()));
}
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1374,7 +1367,6 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
} else {
result = (MySQLSelectStatement) visit(ctx.getChild(0));
}
- result.setParameterCount(currentParameterIndex);
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
index e2104246e6b..1362f4dcf2d 100644
---
a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
+++
b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
@@ -205,8 +205,6 @@ import java.util.Properties;
@Getter(AccessLevel.PROTECTED)
public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public OpenGaussStatementSQLVisitor(final Properties props) {
@@ -215,13 +213,9 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
if (null == ctx.DOLLAR_()) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
- }
- int paramIndex = new
NumberLiteralValue(ctx.NUMBER_().getText()).getValue().intValue();
- if (paramIndex > currentParameterIndex) {
- currentParameterIndex = paramIndex;
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
- return new ParameterMarkerValue(paramIndex - 1,
ParameterMarkerType.DOLLAR);
+ return new ParameterMarkerValue(new
NumberLiteralValue(ctx.NUMBER_().getText()).getValue().intValue() - 1,
ParameterMarkerType.DOLLAR);
}
@Override
@@ -696,7 +690,6 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
if (null != ctx.returningClause()) {
result.setReturningSegment((ReturningSegment)
visit(ctx.returningClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -885,7 +878,6 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
if (null != ctx.whereOrCurrentClause()) {
result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -904,7 +896,6 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
if (null != ctx.whereOrCurrentClause()) {
result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -918,7 +909,6 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
public ASTNode visitSelect(final SelectContext ctx) {
// TODO :Unsupported for withClause.
OpenGaussSelectStatement result = (OpenGaussSelectStatement)
visit(ctx.selectNoParens());
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
index 50a8cd7ac86..909c724375f 100644
---
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
+++
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
@@ -197,7 +197,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
SubquerySegment subquerySegment = new
SubquerySegment(ctx.selectSubquery().start.getStartIndex(),
ctx.selectSubquery().stop.getStopIndex(), subquery);
result.setSelectSubquery(subquerySegment);
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -217,7 +216,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
OracleSelectStatement subquery = (OracleSelectStatement)
visit(ctx.selectSubquery());
SubquerySegment subquerySegment = new
SubquerySegment(ctx.selectSubquery().start.getStartIndex(),
ctx.selectSubquery().stop.getStopIndex(), subquery);
result.setSelectSubquery(subquerySegment);
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -326,7 +324,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -440,7 +437,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -461,7 +457,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
@Override
public ASTNode visitSelect(final SelectContext ctx) {
OracleSelectStatement result = (OracleSelectStatement)
visit(ctx.selectSubquery());
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
if (null != ctx.forUpdateClause()) {
result.setLock((LockSegment) visit(ctx.forUpdateClause()));
diff --git
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
index 3c0f5273a2e..b36913baa8a 100644
---
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
+++
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
@@ -155,8 +155,6 @@ import java.util.stream.Collectors;
@Getter(AccessLevel.PROTECTED)
public abstract class OracleStatementSQLVisitor extends
OracleStatementBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public OracleStatementSQLVisitor(final Properties props) {
@@ -164,7 +162,7 @@ public abstract class OracleStatementSQLVisitor extends
OracleStatementBaseVisit
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
@Override
diff --git
a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index 5fb7efaf552..210dbe61e86 100644
---
a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++
b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -205,8 +205,6 @@ import java.util.Properties;
@Getter(AccessLevel.PROTECTED)
public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementParserBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public PostgreSQLStatementSQLVisitor(final Properties props) {
@@ -215,13 +213,9 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
if (null == ctx.DOLLAR_()) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
- }
- int paramIndex = new
NumberLiteralValue(ctx.NUMBER_().getText()).getValue().intValue();
- if (paramIndex > currentParameterIndex) {
- currentParameterIndex = paramIndex;
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
- return new ParameterMarkerValue(paramIndex - 1,
ParameterMarkerType.DOLLAR);
+ return new ParameterMarkerValue(new
NumberLiteralValue(ctx.NUMBER_().getText()).getValue().intValue() - 1,
ParameterMarkerType.DOLLAR);
}
@Override
@@ -693,7 +687,6 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
if (null != ctx.returningClause()) {
result.setReturningSegment((ReturningSegment)
visit(ctx.returningClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -855,7 +848,6 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
if (null != ctx.whereOrCurrentClause()) {
result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -874,7 +866,6 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
if (null != ctx.whereOrCurrentClause()) {
result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -888,7 +879,6 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
public ASTNode visitSelect(final SelectContext ctx) {
// TODO :Unsupported for withClause.
PostgreSQLSelectStatement result = (PostgreSQLSelectStatement)
visit(ctx.selectNoParens());
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
index 39e730296dd..1f8006cb644 100644
---
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
+++
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
@@ -116,7 +116,6 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
public ASTNode visitInsert(final InsertContext ctx) {
SQL92InsertStatement result = (SQL92InsertStatement)
visit(ctx.insertValuesClause());
result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -152,7 +151,6 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -202,7 +200,6 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -220,7 +217,6 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
public ASTNode visitSelect(final SelectContext ctx) {
// TODO :Unsupported for withClause.
SQL92SelectStatement result = (SQL92SelectStatement)
visit(ctx.combineClause());
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
index d3d3907c8b7..36ab7a3ac24 100644
---
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
+++
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
@@ -113,8 +113,6 @@ import java.util.stream.Collectors;
@Getter(AccessLevel.PROTECTED)
public abstract class SQL92StatementSQLVisitor extends
SQL92StatementBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public SQL92StatementSQLVisitor(final Properties props) {
@@ -122,7 +120,7 @@ public abstract class SQL92StatementSQLVisitor extends
SQL92StatementBaseVisitor
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
@Override
diff --git
a/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
b/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
index aebbc7df729..304d73f89a0 100644
---
a/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
+++
b/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
@@ -198,8 +198,6 @@ import java.util.stream.Collectors;
@Getter(AccessLevel.PROTECTED)
public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBaseVisitor<ASTNode> {
- private int currentParameterIndex;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
public SQLServerStatementSQLVisitor(final Properties props) {
@@ -207,7 +205,7 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
@Override
public final ASTNode visitParameterMarker(final ParameterMarkerContext
ctx) {
- return new ParameterMarkerValue(currentParameterIndex++,
ParameterMarkerType.QUESTION);
+ return new ParameterMarkerValue(parameterMarkerSegments.size(),
ParameterMarkerType.QUESTION);
}
@Override
@@ -514,7 +512,9 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
}
if (null != ctx.parameterMarker()) {
ParameterMarkerValue parameterMarker = (ParameterMarkerValue)
visit(ctx.parameterMarker());
- return new ParameterMarkerExpressionSegment(startIndex, stopIndex,
parameterMarker.getValue(), parameterMarker.getType());
+ ParameterMarkerExpressionSegment result = new
ParameterMarkerExpressionSegment(startIndex, stopIndex,
parameterMarker.getValue(), parameterMarker.getType());
+ parameterMarkerSegments.add(result);
+ return result;
}
if (null != ctx.literals()) {
return SQLUtil.createLiteralExpression(visit(ctx.literals()),
startIndex, stopIndex, ctx.literals().start.getInputStream().getText(new
Interval(startIndex, stopIndex)));
@@ -708,7 +708,6 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
@Override
public ASTNode visitSelect(final SelectContext ctx) {
SQLServerSelectStatement result = (SQLServerSelectStatement)
visit(ctx.aggregationClause());
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -792,7 +791,7 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
offset = new
NumberLiteralLimitValueSegment(ctx.expr(0).start.getStartIndex(),
ctx.expr(0).stop.getStopIndex(),
((Number) ((LiteralExpressionSegment)
astNode).getLiterals()).longValue());
} else if (astNode instanceof ParameterMarkerExpressionSegment) {
- offset = new
ParameterMarkerLimitValueSegment(ctx.expr(0).start.getStartIndex(),
ctx.expr(0).stop.getStopIndex(), getCurrentParameterIndex());
+ offset = new
ParameterMarkerLimitValueSegment(ctx.expr(0).start.getStartIndex(),
ctx.expr(0).stop.getStopIndex(), parameterMarkerSegments.size());
}
}
if (null != ctx.FETCH()) {
@@ -801,7 +800,7 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
rowcount = new
NumberLiteralLimitValueSegment(ctx.expr(1).start.getStartIndex(),
ctx.expr(1).stop.getStopIndex(),
((Number) ((LiteralExpressionSegment)
astNode).getLiterals()).longValue());
} else if (astNode instanceof ParameterMarkerExpressionSegment) {
- rowcount = new
ParameterMarkerLimitValueSegment(ctx.expr(1).start.getStartIndex(),
ctx.expr(1).stop.getStopIndex(), getCurrentParameterIndex());
+ rowcount = new
ParameterMarkerLimitValueSegment(ctx.expr(1).start.getStartIndex(),
ctx.expr(1).stop.getStopIndex(), parameterMarkerSegments.size());
}
}
if (null != offset) {
@@ -888,7 +887,6 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
result.setWithSegment((WithSegment) visit(ctx.withClause()));
}
result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -996,7 +994,6 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
@@ -1056,7 +1053,6 @@ public abstract class SQLServerStatementSQLVisitor
extends SQLServerStatementBas
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
- result.setParameterCount(getCurrentParameterIndex());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
index 5b8ff833a11..0291e359a84 100644
---
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
+++
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
@@ -59,4 +59,9 @@ public class ParameterMarkerExpressionSegment implements
SimpleExpressionSegment
public Optional<String> getAlias() {
return null == alias ? Optional.empty() :
Optional.ofNullable(alias.getIdentifier().getValue());
}
+
+ @Override
+ public int getParameterIndex() {
+ return parameterMarkerIndex;
+ }
}
diff --git
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/pagination/ParameterMarkerPaginationValueSegment.java
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/pagination/ParameterMarkerPaginationValueSegment.java
index fbaf2e6b810..42051662729 100644
---
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/pagination/ParameterMarkerPaginationValueSegment.java
+++
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/pagination/ParameterMarkerPaginationValueSegment.java
@@ -23,11 +23,4 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.Parameter
* Pagination value segment for parameter marker.
*/
public interface ParameterMarkerPaginationValueSegment extends
PaginationValueSegment, ParameterMarkerSegment {
-
- /**
- * Get parameter index.
- *
- * @return parameter index
- */
- int getParameterIndex();
}
diff --git
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/ParameterMarkerSegment.java
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/ParameterMarkerSegment.java
index f417bac5bf5..4ffa871af49 100644
---
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/ParameterMarkerSegment.java
+++
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/ParameterMarkerSegment.java
@@ -23,4 +23,11 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
* Parameter marker segment.
*/
public interface ParameterMarkerSegment extends SQLSegment {
+
+ /**
+ * Get parameter index.
+ *
+ * @return parameter index
+ */
+ int getParameterIndex();
}
diff --git
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
index 2f34c0edd40..f5c5cf84503 100644
---
a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
+++
b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.sql.parser.sql.common.statement;
import lombok.Getter;
-import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
@@ -31,10 +30,12 @@ import java.util.LinkedList;
@Getter
public abstract class AbstractSQLStatement implements SQLStatement {
- @Setter
- private int parameterCount;
-
private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
private final Collection<CommentSegment> commentSegments = new
LinkedList<>();
+
+ @Override
+ public int getParameterCount() {
+ return (int)
parameterMarkerSegments.stream().map(ParameterMarkerSegment::getParameterIndex).distinct().count();
+ }
}