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();
+    }
 }


Reply via email to