This is an automated email from the ASF dual-hosted git repository.

chengzhang 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 9c48df5b925 Fix wrong parameter count parse when function contains 
placeholder (#38019)
9c48df5b925 is described below

commit 9c48df5b92508d19d1d7f30c4bf167df09ec831a
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Feb 12 16:27:54 2026 +0800

    Fix wrong parameter count parse when function contains placeholder (#38019)
---
 RELEASE-NOTES.md                                   |   1 +
 .../statement/ClickHouseStatementVisitor.java      |  18 +-
 .../visitor/statement/DorisStatementVisitor.java   |  38 ++--
 .../statement/FirebirdStatementVisitor.java        |  15 +-
 .../statement/type/HiveDMLStatementVisitor.java    |  23 +--
 .../visitor/statement/MySQLStatementVisitor.java   |  12 --
 .../visitor/statement/OracleStatementVisitor.java  |   8 -
 .../statement/type/PrestoDMLStatementVisitor.java  |  23 +--
 .../visitor/statement/SQL92StatementVisitor.java   |  18 +-
 .../statement/SQLServerStatementVisitor.java       |   8 -
 .../src/main/resources/case/dml/clickhouse.xml     |  23 ++-
 .../parser/src/main/resources/case/dml/presto.xml  |  49 ++++-
 .../src/main/resources/case/dml/select-hive.xml    |  49 ++++-
 .../resources/case/dml/select-special-function.xml | 224 ++++++++++++++++++++-
 .../parser/src/main/resources/case/dml/select.xml  |  18 +-
 .../main/resources/sql/supported/dml/presto.xml    |   2 +
 .../resources/sql/supported/dml/select-hive.xml    |   2 +
 .../sql/supported/dml/select-special-function.xml  |  12 ++
 18 files changed, 420 insertions(+), 123 deletions(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index c223ded15f6..7029301d88c 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -99,6 +99,7 @@
 1. SQL Parser: Fix SQL parser error when SQL contains implicit concat 
expression for MySQL - 
[#34660](https://github.com/apache/shardingsphere/pull/34660)
 1. SQL Parser: Fix SQL parser error when SQL contains subquery with alias for 
Oracle - [#35239](https://github.com/apache/shardingsphere/pull/35239)
 1. SQL Parser: Fix multiple SQLs split error when comma contained - 
[#31609](https://github.com/apache/shardingsphere/pull/31609)
+1. SQL Parser: Fix wrong parameter count parse when function contains 
placeholder [#38019](https://github.com/apache/shardingsphere/pull/38019)
 1. SQL Binder: Fix unable to find the outer table in the NotExpressionBinder - 
[36135](https://github.com/apache/shardingsphere/pull/36135)
 1. SQL Binder: Fix unable to find the outer table in the 
ExistsSubqueryExpressionBinder - 
[#36068](https://github.com/apache/shardingsphere/pull/36068)
 1. SQL Binder: Fix column bind exception caused by oracle XMLELEMENT function 
first parameter without quote - 
[#36963](https://github.com/apache/shardingsphere/pull/36963)
diff --git 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
index 76e7bbdeb9c..5689336f136 100644
--- 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
@@ -37,6 +37,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.Bina
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalUnit;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.NotExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonExpressionSegment;
@@ -367,6 +369,9 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         if (null != ctx.literals()) {
             return SQLUtils.createLiteralExpression(visit(ctx.literals()), 
startIndex, stopIndex, ctx.literals().start.getInputStream().getText(new 
Interval(startIndex, stopIndex)));
         }
+        if (null != ctx.intervalExpression()) {
+            return visit(ctx.intervalExpression());
+        }
         if (null != ctx.functionCall()) {
             return visit(ctx.functionCall());
         }
@@ -378,8 +383,9 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     
     @Override
     public final ASTNode visitIntervalExpression(final 
ClickHouseStatementParser.IntervalExpressionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
-        return new ExpressionProjectionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), getOriginalText(ctx));
+        IntervalUnit intervalUnit = 
IntervalUnit.valueOf(ctx.intervalUnit().getText().toUpperCase());
+        return new 
IntervalExpression(ctx.INTERVAL().getSymbol().getStartIndex(), 
ctx.getStop().getStopIndex(), (ExpressionSegment) visit(ctx.expr()), 
intervalUnit,
+                getOriginalText(ctx));
     }
     
     @Override
@@ -434,7 +440,6 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     
     @Override
     public final ASTNode visitCastFunction(final 
ClickHouseStatementParser.CastFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CAST().getText(), getOriginalText(ctx));
         ASTNode exprSegment = visit(ctx.expr());
         if (exprSegment instanceof ColumnSegment) {
@@ -458,13 +463,6 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         return new KeywordValue(IntStream.range(0, 
ctx.getChildCount()).mapToObj(i -> 
ctx.getChild(i).getText()).collect(Collectors.joining(" ")));
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final 
Collection<ClickHouseStatementParser.ExprContext> exprContexts) {
-        for (ClickHouseStatementParser.ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitOrderByClause(final 
ClickHouseStatementParser.OrderByClauseContext ctx) {
         return new OrderBySegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.orderByItem().stream().map(each -> 
(OrderByItemSegment) visit(each)).collect(Collectors.toList()));
diff --git 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
index b2bf8dc4cfd..bf377a154ab 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
@@ -98,11 +98,8 @@ import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.NumberL
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OnDuplicateKeyClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OrderByClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OrderByItemContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OwnerContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OutfilePropertyContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectFieldsIntoContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectIntoExpressionContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectLinesIntoContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OwnerContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ParameterMarkerContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PositionFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PrecisionContext;
@@ -121,6 +118,9 @@ import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.Replace
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ReplaceValuesClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.RowConstructorListContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectFieldsIntoContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectIntoExpressionContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectLinesIntoContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectSpecificationContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SelectWithIntoContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SetAssignmentsClauseContext;
@@ -151,17 +151,13 @@ import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.UpdateC
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.UserVariableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ValuesFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.VariableContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewColumnDefinitionContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewColumnDefinitionsContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewNamesContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.WeightStringFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.WhereClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.WithClauseContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewColumnDefinitionContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ViewColumnDefinitionsContext;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.view.ViewColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileColumnsSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileLinesSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.enums.AggregationType;
 import org.apache.shardingsphere.sql.parser.statement.core.enums.CombineType;
 import org.apache.shardingsphere.sql.parser.statement.core.enums.JoinType;
@@ -173,6 +169,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constrain
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine.EngineSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.view.ViewColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.InsertValuesSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
@@ -214,6 +211,9 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.ite
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ExpressionOrderByItemSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.IndexOrderByItemSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.OrderByItemSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileColumnsSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileLinesSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.outfile.OutfileSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.PaginationValueSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.LimitSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
@@ -257,11 +257,11 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.stream.Collectors;
 import java.util.Map;
-import java.util.LinkedHashMap;
+import java.util.stream.Collectors;
 
 /**
  * Statement visitor for Doris.
@@ -1161,7 +1161,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitGroupConcatFunction(final 
GroupConcatFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.GROUP_CONCAT().getText(), getOriginalText(ctx));
         for (ExprContext each : getTargetRuleContextFromParseTree(ctx, 
ExprContext.class)) {
             result.getParameters().add((ExpressionSegment) visit(each));
@@ -1263,7 +1262,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitPositionFunction(final PositionFunctionContext 
ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.POSITION().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(0)));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(1)));
@@ -1283,7 +1281,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitExtractFunction(final ExtractFunctionContext 
ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.EXTRACT().getText(), getOriginalText(ctx));
         result.getParameters().add(new 
LiteralExpressionSegment(ctx.intervalUnit().getStart().getStartIndex(), 
ctx.intervalUnit().getStop().getStopIndex(), ctx.intervalUnit().getText()));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
@@ -1292,7 +1289,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitCharFunction(final CharFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CHAR().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -1324,7 +1320,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitWeightStringFunction(final 
WeightStringFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.WEIGHT_STRING().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
         return result;
@@ -1464,13 +1459,6 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
         return result;
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitDataType(final DataTypeContext ctx) {
         DataTypeSegment result = new DataTypeSegment();
@@ -1978,12 +1966,10 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
             }
             return result;
         }
-        // DORIS ADDED BEGIN
         if (null != ctx.regularFunction()) {
             FunctionSegment functionSegment = (FunctionSegment) 
visit(ctx.regularFunction());
             return new FunctionTableSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), functionSegment);
         }
-        // DORIS ADDED END
         return result;
     }
     
diff --git 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/FirebirdStatementVisitor.java
 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/FirebirdStatementVisitor.java
index 724be9bdbeb..d451dbbcc5b 100644
--- 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/FirebirdStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/FirebirdStatementVisitor.java
@@ -78,6 +78,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.Exis
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalUnit;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.NotExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonExpressionSegment;
@@ -430,8 +432,9 @@ public abstract class FirebirdStatementVisitor extends 
FirebirdStatementBaseVisi
     
     @Override
     public final ASTNode visitIntervalExpression(final 
IntervalExpressionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
-        return new ExpressionProjectionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), getOriginalText(ctx));
+        IntervalUnit intervalUnit = 
IntervalUnit.valueOf(ctx.intervalUnit().getText().toUpperCase());
+        return new 
IntervalExpression(ctx.INTERVAL().getSymbol().getStartIndex(), 
ctx.getStop().getStopIndex(), (ExpressionSegment) visit(ctx.expr()), 
intervalUnit,
+                getOriginalText(ctx));
     }
     
     @Override
@@ -501,7 +504,6 @@ public abstract class FirebirdStatementVisitor extends 
FirebirdStatementBaseVisi
     
     @Override
     public final ASTNode visitCastFunction(final CastFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CAST().getText(), getOriginalText(ctx));
         ASTNode exprSegment = visit(ctx.expr());
         if (exprSegment instanceof ColumnSegment) {
@@ -563,13 +565,6 @@ public abstract class FirebirdStatementVisitor extends 
FirebirdStatementBaseVisi
         return new KeywordValue(String.join(" ", dataTypeNames));
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitOrderByClause(final OrderByClauseContext ctx) {
         Collection<OrderByItemSegment> items = new LinkedList<>();
diff --git 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
index 2f610623ca1..1cb5ac65484 100644
--- 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
@@ -574,7 +574,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitGroupConcatFunction(final GroupConcatFunctionContext 
ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.GROUP_CONCAT().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             result.getParameters().add((ExpressionSegment) visit(each));
@@ -590,7 +589,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitCastFunction(final CastFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CAST().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -635,13 +633,18 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitConvertFunction(final ConvertFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
-        return new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.CONVERT().getText(), getOriginalText(ctx));
+        FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CONVERT().getText(), getOriginalText(ctx));
+        result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
+        if (null != ctx.castType()) {
+            result.getParameters().add((DataTypeSegment) 
visit(ctx.castType()));
+        } else if (null != ctx.charsetName()) {
+            result.getParameters().add((ExpressionSegment) 
visit(ctx.charsetName()));
+        }
+        return result;
     }
     
     @Override
     public ASTNode visitPositionFunction(final PositionFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.POSITION().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(0)));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(1)));
@@ -661,7 +664,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitExtractFunction(final ExtractFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.EXTRACT().getText(), getOriginalText(ctx));
         result.getParameters().add(new 
LiteralExpressionSegment(ctx.identifier().getStart().getStartIndex(), 
ctx.identifier().getStop().getStopIndex(), ctx.identifier().getText()));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
@@ -670,7 +672,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitCharFunction(final CharFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CHAR().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -702,7 +703,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitWeightStringFunction(final WeightStringFunctionContext 
ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.WEIGHT_STRING().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
         return result;
@@ -791,13 +791,6 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
         return new CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), text);
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public ASTNode visitDataType(final DataTypeContext ctx) {
         DataTypeSegment result = new DataTypeSegment();
diff --git 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
index 4ce39ab25a3..b4fff545c77 100644
--- 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1100,7 +1100,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitGroupConcatFunction(final 
GroupConcatFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.GROUP_CONCAT().getText(), getOriginalText(ctx));
         for (ExprContext each : getTargetRuleContextFromParseTree(ctx, 
ExprContext.class)) {
             result.getParameters().add((ExpressionSegment) visit(each));
@@ -1188,7 +1187,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitPositionFunction(final PositionFunctionContext 
ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.POSITION().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(0)));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(1)));
@@ -1212,7 +1210,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitExtractFunction(final ExtractFunctionContext 
ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.EXTRACT().getText(), getOriginalText(ctx));
         result.getParameters().add(new 
IntervalUnitExpression(ctx.intervalUnit().getStart().getStartIndex(), 
ctx.intervalUnit().getStop().getStopIndex(),
                 
IntervalUnit.valueOf(ctx.intervalUnit().getText().toUpperCase())));
@@ -1222,7 +1219,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitCharFunction(final CharFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CHAR().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -1254,7 +1250,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitWeightStringFunction(final 
WeightStringFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.WEIGHT_STRING().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
         return result;
@@ -1411,13 +1406,6 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
         return result;
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitDataType(final DataTypeContext ctx) {
         DataTypeSegment result = new DataTypeSegment();
diff --git 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/OracleStatementVisitor.java
 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/OracleStatementVisitor.java
index cbf3b099279..2bd9d4a6b8b 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/OracleStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/OracleStatementVisitor.java
@@ -1237,7 +1237,6 @@ public abstract class OracleStatementVisitor extends 
OracleStatementBaseVisitor<
     
     @Override
     public final ASTNode visitCharFunction(final CharFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result;
         if (null != ctx.CHR()) {
             result = new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.CHR().getText(), getOriginalText(ctx));
@@ -1302,13 +1301,6 @@ public abstract class OracleStatementVisitor extends 
OracleStatementBaseVisitor<
         return new KeywordValue(String.join(" ", dataTypeNames));
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitOrderByClause(final OrderByClauseContext ctx) {
         Collection<OrderByItemSegment> items = new LinkedList<>();
diff --git 
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
index 19389429b54..50dfb9393e0 100644
--- 
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
@@ -546,7 +546,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitGroupConcatFunction(final GroupConcatFunctionContext 
ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.GROUP_CONCAT().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             result.getParameters().add((ExpressionSegment) visit(each));
@@ -562,7 +561,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitCastFunction(final CastFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CAST().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -607,13 +605,18 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitConvertFunction(final ConvertFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
-        return new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.CONVERT().getText(), getOriginalText(ctx));
+        FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CONVERT().getText(), getOriginalText(ctx));
+        result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
+        if (null != ctx.castType()) {
+            result.getParameters().add((DataTypeSegment) 
visit(ctx.castType()));
+        } else if (null != ctx.charsetName()) {
+            result.getParameters().add((ExpressionSegment) 
visit(ctx.charsetName()));
+        }
+        return result;
     }
     
     @Override
     public ASTNode visitPositionFunction(final PositionFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.POSITION().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(0)));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr(1)));
@@ -633,7 +636,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitExtractFunction(final ExtractFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.EXTRACT().getText(), getOriginalText(ctx));
         result.getParameters().add(new 
LiteralExpressionSegment(ctx.identifier().getStart().getStartIndex(), 
ctx.identifier().getStop().getStopIndex(), ctx.identifier().getText()));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
@@ -642,7 +644,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitCharFunction(final CharFunctionContext ctx) {
-        calculateParameterCount(ctx.expr());
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CHAR().getText(), getOriginalText(ctx));
         for (ExprContext each : ctx.expr()) {
             ASTNode expr = visit(each);
@@ -674,7 +675,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitWeightStringFunction(final WeightStringFunctionContext 
ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.WEIGHT_STRING().getText(), getOriginalText(ctx));
         result.getParameters().add((ExpressionSegment) visit(ctx.expr()));
         return result;
@@ -763,13 +763,6 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
         return new CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), text);
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public ASTNode visitTypeDatetimePrecision(final 
TypeDatetimePrecisionContext ctx) {
         DataTypeLengthSegment result = new DataTypeLengthSegment();
diff --git 
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/SQL92StatementVisitor.java
 
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/SQL92StatementVisitor.java
index 69d5b98bf75..cc3e7c5fcf9 100644
--- 
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/SQL92StatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/SQL92StatementVisitor.java
@@ -68,6 +68,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.Bina
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.IntervalUnit;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.NotExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonExpressionSegment;
@@ -403,6 +405,9 @@ public abstract class SQL92StatementVisitor extends 
SQL92StatementBaseVisitor<AS
         if (null != ctx.literals()) {
             return SQLUtils.createLiteralExpression(visit(ctx.literals()), 
startIndex, stopIndex, ctx.literals().start.getInputStream().getText(new 
Interval(startIndex, stopIndex)));
         }
+        if (null != ctx.intervalExpression()) {
+            return visit(ctx.intervalExpression());
+        }
         if (null != ctx.functionCall()) {
             return visit(ctx.functionCall());
         }
@@ -414,8 +419,9 @@ public abstract class SQL92StatementVisitor extends 
SQL92StatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitIntervalExpression(final 
IntervalExpressionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
-        return new ExpressionProjectionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), getOriginalText(ctx));
+        IntervalUnit intervalUnit = 
IntervalUnit.valueOf(ctx.intervalUnit().getText().toUpperCase());
+        return new 
IntervalExpression(ctx.INTERVAL().getSymbol().getStartIndex(), 
ctx.getStop().getStopIndex(), (ExpressionSegment) visit(ctx.expr()), 
intervalUnit,
+                getOriginalText(ctx));
     }
     
     @Override
@@ -482,7 +488,6 @@ public abstract class SQL92StatementVisitor extends 
SQL92StatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitCastFunction(final CastFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CAST().getText(), getOriginalText(ctx));
         ASTNode exprSegment = visit(ctx.expr());
         if (exprSegment instanceof ColumnSegment) {
@@ -511,13 +516,6 @@ public abstract class SQL92StatementVisitor extends 
SQL92StatementBaseVisitor<AS
         return new KeywordValue(String.join(" ", dataTypeNames));
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitOrderByClause(final OrderByClauseContext ctx) {
         Collection<OrderByItemSegment> items = new LinkedList<>();
diff --git 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index 9a03fccdeca..9578e7686f4 100644
--- 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -1056,7 +1056,6 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
     
     @Override
     public final ASTNode visitCastFunction(final CastFunctionContext ctx) {
-        calculateParameterCount(Collections.singleton(ctx.expr()));
         String functionName = null == ctx.CAST() ? ctx.TRY_CAST().getText() : 
ctx.CAST().getText();
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
functionName, getOriginalText(ctx));
         ASTNode exprSegment = visit(ctx.expr());
@@ -1135,13 +1134,6 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
         return new KeywordValue(ctx.getText());
     }
     
-    // TODO :FIXME, sql case id: insert_with_str_to_date
-    private void calculateParameterCount(final Collection<ExprContext> 
exprContexts) {
-        for (ExprContext each : exprContexts) {
-            visit(each);
-        }
-    }
-    
     @Override
     public final ASTNode visitOrderByItem(final OrderByItemContext ctx) {
         OrderDirection orderDirection = null == ctx.DESC() ? 
OrderDirection.ASC : OrderDirection.DESC;
diff --git a/test/it/parser/src/main/resources/case/dml/clickhouse.xml 
b/test/it/parser/src/main/resources/case/dml/clickhouse.xml
index 1b28d833354..55b7d7b8e51 100644
--- a/test/it/parser/src/main/resources/case/dml/clickhouse.xml
+++ b/test/it/parser/src/main/resources/case/dml/clickhouse.xml
@@ -342,9 +342,14 @@
                     </function>
                 </expr>
             </expression-projection>
-            <expression-projection alias="inter" text="INTERVAL2DAY" 
start-index="105" stop-index="127">
+            <expression-projection alias="inter" text="INTERVAL 2 DAY" 
start-index="105" stop-index="127">
                 <expr>
-                    <common-expression text="INTERVAL2DAY" start-index="105" 
stop-index="118" />
+                    <interval-expression start-index="105" stop-index="118">
+                        <value>
+                            <literal-expression value="2" start-index="114" 
stop-index="114" />
+                        </value>
+                        <interval-unit>DAY</interval-unit>
+                    </interval-expression>
                 </expr>
             </expression-projection>
             <aggregation-distinct-projection type="COUNT" 
expression="COUNT(DISTINCT user_id)" distinct-inner-expression="user_id" 
alias="cnt" start-index="130" stop-index="152" />
@@ -686,7 +691,12 @@
                         </left>
                         <operator>+</operator>
                         <right>
-                            <common-expression text="INTERVAL2DAY" 
literal-text="INTERVAL2DAY" start-index="20" stop-index="33" />
+                            <interval-expression start-index="20" 
stop-index="33">
+                                <value>
+                                    <literal-expression value="2" 
start-index="29" stop-index="29" />
+                                </value>
+                                <interval-unit>DAY</interval-unit>
+                            </interval-expression>
                         </right>
                     </binary-operation-expression>
                 </expr>
@@ -1128,7 +1138,12 @@
                         </left>
                         <operator>+</operator>
                         <right>
-                            <common-expression text="INTERVAL1DAY" 
literal-text="INTERVAL1DAY" start-index="20" stop-index="33" />
+                            <interval-expression start-index="20" 
stop-index="33">
+                                <value>
+                                    <literal-expression value="1" 
start-index="29" stop-index="29" />
+                                </value>
+                                <interval-unit>DAY</interval-unit>
+                            </interval-expression>
                         </right>
                     </binary-operation-expression>
                 </expr>
diff --git a/test/it/parser/src/main/resources/case/dml/presto.xml 
b/test/it/parser/src/main/resources/case/dml/presto.xml
index 59c2515a85b..a600b661ab9 100644
--- a/test/it/parser/src/main/resources/case/dml/presto.xml
+++ b/test/it/parser/src/main/resources/case/dml/presto.xml
@@ -547,7 +547,54 @@
         <projections start-index="7" stop-index="29">
             <expression-projection text="CONVERT(order_id, CHAR)" 
start-index="7" stop-index="29">
                 <expr>
-                    <function function-name="CONVERT" text="CONVERT(order_id, 
CHAR)" start-index="7" stop-index="29" />
+                    <function function-name="CONVERT" text="CONVERT(order_id, 
CHAR)" start-index="7" stop-index="29">
+                        <parameter>
+                            <column name="order_id" start-index="15" 
stop-index="22" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="CHAR" start-index="25" 
stop-index="28" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="36" stop-index="42" />
+        </from>
+    </select>
+
+    <select sql-case-id="presto_select_convert_with_placeholder">
+        <projections start-index="7" stop-index="24">
+            <expression-projection text="CONVERT(?, CHAR)" start-index="7" 
stop-index="24">
+                <expr>
+                    <function function-name="CONVERT" text="CONVERT(?, CHAR)" 
start-index="7" stop-index="24">
+                        <parameter>
+                            <parameter-marker index="0" start-index="15" 
stop-index="15" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="CHAR" start-index="18" 
stop-index="21" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="31" stop-index="37" />
+        </from>
+    </select>
+
+    <select sql-case-id="presto_select_convert_using_with_placeholder">
+        <projections start-index="7" stop-index="29">
+            <expression-projection text="CONVERT(? USING utf8)" 
start-index="7" stop-index="29">
+                <expr>
+                    <function function-name="CONVERT" text="CONVERT(? USING 
utf8)" start-index="7" stop-index="29">
+                        <parameter>
+                            <parameter-marker index="0" start-index="15" 
stop-index="15" />
+                        </parameter>
+                        <parameter>
+                            <literal-expression value="utf8" start-index="23" 
stop-index="26" />
+                        </parameter>
+                    </function>
                 </expr>
             </expression-projection>
         </projections>
diff --git a/test/it/parser/src/main/resources/case/dml/select-hive.xml 
b/test/it/parser/src/main/resources/case/dml/select-hive.xml
index 237c9dcaf67..cec35e7bb9f 100644
--- a/test/it/parser/src/main/resources/case/dml/select-hive.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-hive.xml
@@ -840,10 +840,57 @@
         <projections start-index="7" stop-index="33">
             <expression-projection text="CONVERT('2020-10-01', DATE)" 
start-index="7" stop-index="33">
                 <expr>
-                    <function function-name="CONVERT" 
text="CONVERT('2020-10-01', DATE)" start-index="7" stop-index="33" />
+                    <function function-name="CONVERT" 
text="CONVERT('2020-10-01', DATE)" start-index="7" stop-index="33">
+                        <parameter>
+                            <literal-expression value="2020-10-01" 
start-index="15" stop-index="26" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="DATE" start-index="29" 
stop-index="32" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+
+    <select sql-case-id="hive_convert_with_placeholder">
+        <projections start-index="7" stop-index="23">
+            <expression-projection text="CONVERT(?, DATE)" start-index="7" 
stop-index="23">
+                <expr>
+                    <function function-name="CONVERT" text="CONVERT(?, DATE)" 
start-index="7" stop-index="23">
+                        <parameter>
+                            <parameter-marker index="0" start-index="15" 
stop-index="15" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="DATE" start-index="18" 
stop-index="21" />
+                        </parameter>
+                    </function>
                 </expr>
             </expression-projection>
         </projections>
+        <from>
+            <simple-table name="t_order" start-index="30" stop-index="36" />
+        </from>
+    </select>
+
+    <select sql-case-id="hive_convert_using_with_placeholder">
+        <projections start-index="7" stop-index="28">
+            <expression-projection text="CONVERT(? USING utf8)" 
start-index="7" stop-index="28">
+                <expr>
+                    <function function-name="CONVERT" text="CONVERT(? USING 
utf8)" start-index="7" stop-index="28">
+                        <parameter>
+                            <parameter-marker index="0" start-index="15" 
stop-index="15" />
+                        </parameter>
+                        <parameter>
+                            <literal-expression value="utf8" start-index="23" 
stop-index="26" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="35" stop-index="41" />
+        </from>
     </select>
 
     <select sql-case-id="hive_limit_param" parameters="1,2">
diff --git 
a/test/it/parser/src/main/resources/case/dml/select-special-function.xml 
b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
index 6968db63601..ceed8ed7d4c 100644
--- a/test/it/parser/src/main/resources/case/dml/select-special-function.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
@@ -5024,7 +5024,7 @@
             </expression-projection>
         </projections>
     </select>
-
+    
     <select sql-case-id="select_last_insert_id">
         <projections start-index="7" stop-index="22">
             <expression-projection start-index="7" stop-index="22" 
text="LAST_INSERT_ID()">
@@ -5053,7 +5053,6 @@
             <simple-table name="TEST" start-index="65" stop-index="68" 
literal-start-index="65" literal-stop-index="68" />
         </from>
     </select>
-
     <select sql-case-id="select_lcase_function">
         <projections start-index="7" stop-index="28">
             <expression-projection start-index="7" stop-index="28" 
text="LCASE('QUADRATICALLY')">
@@ -5661,4 +5660,225 @@
             </expression-projection>
         </projections>
     </select>
+
+    <select sql-case-id="select_position_with_placeholder">
+        <from>
+            <simple-table name="t_user" start-index="51" stop-index="57" />
+        </from>
+        <projections start-index="7" stop-index="42">
+            <expression-projection text="POSITION(? IN user_name) AS a_pos" 
start-index="7" stop-index="42">
+                <alias identifier="a_pos" start-index="45" stop-index="49" />
+                <expr>
+                    <function function-name="POSITION" start-index="7" 
stop-index="36" text="POSITION(? IN user_name)">
+                        <parameter>
+                            <parameter-marker index="0" start-index="16" 
stop-index="16" />
+                        </parameter>
+                        <parameter>
+                            <column name="user_name" start-index="21" 
stop-index="28" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <order-by>
+            <column-item name="user_id" order-direction="ASC" start-index="68" 
stop-index="75" />
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_char_nested_with_placeholder">
+        <from>
+            <simple-table name="t_user" start-index="63" stop-index="69" />
+        </from>
+        <projections start-index="7" stop-index="54">
+            <expression-projection text="CHAR(ASCII(SUBSTRING(user_name, ?, 
?))) AS first_char" start-index="7" stop-index="54">
+                <alias identifier="first_char" start-index="58" 
stop-index="67" />
+                <expr>
+                    <function function-name="CHAR" start-index="7" 
stop-index="51" text="CHAR(ASCII(SUBSTRING(user_name, ?, ?)))">
+                        <parameter>
+                            <function function-name="ASCII" start-index="12" 
stop-index="48" text="ASCII(SUBSTRING(user_name, ?, ?))">
+                                <parameter>
+                                    <function function-name="SUBSTRING" 
start-index="19" stop-index="45" text="SUBSTRING(user_name, ?, ?)">
+                                        <parameter>
+                                            <column name="user_name" 
start-index="29" stop-index="36" />
+                                        </parameter>
+                                        <parameter>
+                                            <parameter-marker index="0" 
start-index="39" stop-index="39" />
+                                        </parameter>
+                                        <parameter>
+                                            <parameter-marker index="1" 
start-index="42" stop-index="42" />
+                                        </parameter>
+                                    </function>
+                                </parameter>
+                            </function>
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <order-by>
+            <column-item name="user_id" order-direction="ASC" start-index="80" 
stop-index="87" />
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_extract_with_placeholder">
+        <from>
+            <simple-table name="t_order" start-index="42" stop-index="49" />
+        </from>
+        <projections start-index="7" stop-index="36">
+            <expression-projection text="EXTRACT(? FROM creation_date)" 
start-index="7" stop-index="36">
+                <expr>
+                    <function function-name="EXTRACT" start-index="7" 
stop-index="36" text="EXTRACT(? FROM creation_date)">
+                        <parameter>
+                            <parameter-marker index="0" start-index="16" 
stop-index="16" />
+                        </parameter>
+                        <parameter>
+                            <column name="creation_date" start-index="23" 
stop-index="35" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+
+    <select sql-case-id="select_weight_string_with_placeholder">
+        <from>
+            <simple-table name="t_order" start-index="33" stop-index="40" />
+        </from>
+        <projections start-index="7" stop-index="25">
+            <expression-projection text="WEIGHT_STRING(?)" start-index="7" 
stop-index="25">
+                <expr>
+                    <function function-name="WEIGHT_STRING" start-index="7" 
stop-index="25" text="WEIGHT_STRING(?)">
+                        <parameter>
+                            <parameter-marker index="0" start-index="21" 
stop-index="21" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+
+    <select sql-case-id="select_group_concat_with_placeholder">
+        <from>
+            <simple-table name="t_order" start-index="49" stop-index="55" />
+        </from>
+        <projections start-index="7" stop-index="41">
+            <expression-projection text="GROUP_CONCAT(? ORDER BY ?)" 
start-index="7" stop-index="41">
+                <expr>
+                    <function function-name="GROUP_CONCAT" start-index="7" 
stop-index="41" text="GROUP_CONCAT(? ORDER BY ?)">
+                        <parameter>
+                            <parameter-marker index="0" start-index="20" 
stop-index="20" />
+                        </parameter>
+                        <parameter>
+                            <parameter-marker index="1" start-index="32" 
stop-index="32" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+
+    <select sql-case-id="select_substring_with_placeholder">
+        <from>
+            <simple-table name="t_user" start-index="60" stop-index="66" />
+        </from>
+        <projections start-index="7" stop-index="44">
+            <expression-projection text="SUBSTRING(user_name, ?, ?) AS 
first_char" start-index="7" stop-index="44">
+                <alias identifier="first_char" start-index="48" 
stop-index="57" />
+                <expr>
+                    <function function-name="SUBSTRING" start-index="7" 
stop-index="39" text="SUBSTRING(user_name, ?, ?)">
+                        <parameter>
+                            <column name="user_name" start-index="17" 
stop-index="24" />
+                        </parameter>
+                        <parameter>
+                            <parameter-marker index="0" start-index="27" 
stop-index="27" />
+                        </parameter>
+                        <parameter>
+                            <parameter-marker index="1" start-index="30" 
stop-index="30" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <order-by>
+            <column-item name="user_id" order-direction="ASC" start-index="67" 
stop-index="74" />
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_cast_with_placeholder_mysql">
+        <projections start-index="7" stop-index="33">
+            <expression-projection text="CAST(? AS UNSIGNED)" start-index="7" 
stop-index="33">
+                <expr>
+                    <function function-name="CAST" text="CAST(? AS UNSIGNED)" 
start-index="7" stop-index="33">
+                        <parameter>
+                            <parameter-marker index="0" start-index="12" 
stop-index="12" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="UNSIGNED" start-index="23" 
stop-index="30" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="40" stop-index="46" />
+        </from>
+    </select>
+
+    <select sql-case-id="select_cast_with_placeholder_clickhouse">
+        <projections start-index="7" stop-index="31">
+            <expression-projection text="CAST(? AS INT8)" start-index="7" 
stop-index="31">
+                <expr>
+                    <function function-name="CAST" text="CAST(? AS INT8)" 
start-index="7" stop-index="31">
+                        <parameter>
+                            <parameter-marker index="0" start-index="12" 
stop-index="12" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="INT8" start-index="21" 
stop-index="25" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="38" stop-index="44" />
+        </from>
+    </select>
+
+    <select sql-case-id="select_cast_with_placeholder_standard">
+        <projections start-index="7" stop-index="30">
+            <expression-projection text="CAST(? AS INT)" start-index="7" 
stop-index="30">
+                <expr>
+                    <function function-name="CAST" text="CAST(? AS INT)" 
start-index="7" stop-index="30">
+                        <parameter>
+                            <parameter-marker index="0" start-index="12" 
stop-index="12" />
+                        </parameter>
+                        <parameter>
+                            <data-type value="INT" start-index="21" 
stop-index="24" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="37" stop-index="43" />
+        </from>
+    </select>
+
+    <select sql-case-id="select_interval_with_placeholder">
+        <projections start-index="7" stop-index="22">
+            <expression-projection text="INTERVAL ? DAY" start-index="7" 
stop-index="22">
+                <expr>
+                    <interval-expression start-index="7" stop-index="22">
+                        <value>
+                            <parameter-marker index="0" start-index="16" 
stop-index="16" />
+                        </value>
+                        <interval-unit>DAY</interval-unit>
+                    </interval-expression>
+                </expr>
+            </expression-projection>
+        </projections>
+        <from>
+            <simple-table name="t_order" start-index="29" stop-index="35" />
+        </from>
+    </select>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml 
b/test/it/parser/src/main/resources/case/dml/select.xml
index 77b056ee8a5..b2cbc94c45f 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -12501,6 +12501,14 @@
     <select sql-case-id="select_interval_firebird">
         <projections start-index="7" stop-index="20">
             <expression-projection text="INTERVAL 1 DAY" start-index="7" 
stop-index="20">
+                <expr>
+                    <interval-expression start-index="7" stop-index="20">
+                        <value>
+                            <literal-expression value="1" start-index="16" 
stop-index="16" />
+                        </value>
+                        <interval-unit>DAY</interval-unit>
+                    </interval-expression>
+                </expr>
             </expression-projection>
         </projections>
         <from>
@@ -13436,7 +13444,15 @@
 
     <select sql-case-id="select_interval_expression_sql92">
         <projections start-index="7" stop-index="20">
-            <expression-projection text="INTERVAL1DAY" start-index="7" 
stop-index="20">
+            <expression-projection text="INTERVAL 1 DAY" start-index="7" 
stop-index="20">
+                <expr>
+                    <interval-expression start-index="7" stop-index="20">
+                        <value>
+                            <literal-expression value="1" start-index="16" 
stop-index="16" />
+                        </value>
+                        <interval-unit>DAY</interval-unit>
+                    </interval-expression>
+                </expr>
             </expression-projection>
         </projections>
     </select>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/presto.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
index 9f1d1e1f0ca..22040581b7c 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/presto.xml
@@ -35,6 +35,8 @@
     <sql-case id="presto_select_searched_case" value="SELECT CASE WHEN flag 
THEN 1 ELSE 0 END FROM t_order" db-types="Presto" />
     <sql-case id="presto_select_in_subquery" value="SELECT * FROM t_order 
WHERE order_id IN (SELECT order_id FROM t_order_item)" db-types="Presto" />
     <sql-case id="presto_select_convert_function" value="SELECT 
CONVERT(order_id, CHAR) FROM t_order" db-types="Presto" />
+    <sql-case id="presto_select_convert_with_placeholder" value="SELECT 
CONVERT(?, CHAR) FROM t_order" case-types="placeholder" db-types="Presto" />
+    <sql-case id="presto_select_convert_using_with_placeholder" value="SELECT 
CONVERT(? USING utf8) FROM t_order" case-types="placeholder" db-types="Presto" 
/>
     <sql-case id="presto_select_position_function" value="SELECT POSITION('a' 
IN 'abc')" db-types="Presto" />
     <sql-case id="presto_select_current_user" value="SELECT CURRENT_USER()" 
db-types="Presto" />
     <sql-case id="presto_select_limit_offset" value="SELECT * FROM t_order 
LIMIT 5 OFFSET 2" db-types="Presto" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dml/select-hive.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/select-hive.xml
index 86bedeef66e..1b097bcae09 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-hive.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-hive.xml
@@ -60,6 +60,8 @@
     <sql-case id="hive_group_concat_order" value="SELECT GROUP_CONCAT(status 
ORDER BY status) FROM t_order" db-types="Hive" />
     <sql-case id="hive_json_array_simple" value="SELECT JSON_ARRAY(1, 'abc', 
NULL, TRUE, CURTIME())" db-types="Hive" />
     <sql-case id="hive_convert_date" value="SELECT CONVERT('2020-10-01', 
DATE)" db-types="Hive" />
+    <sql-case id="hive_convert_with_placeholder" value="SELECT CONVERT(?, 
DATE) FROM t_order" case-types="placeholder" db-types="Hive" />
+    <sql-case id="hive_convert_using_with_placeholder" value="SELECT CONVERT(? 
USING utf8) FROM t_order" case-types="placeholder" db-types="Hive" />
     <sql-case id="hive_limit_param" value="SELECT * FROM t_order LIMIT ? 
OFFSET ?" db-types="Hive" />
     <sql-case id="hive_select_not" value="SELECT * FROM t_pred WHERE NOT 
status" db-types="Hive" />
     <sql-case id="hive_select_is_null" value="SELECT * FROM t_pred WHERE 
status IS NULL" db-types="Hive" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
index e26b462660a..98b835f4592 100644
--- 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
+++ 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
@@ -324,4 +324,16 @@
     <sql-case id="select_translate_nchar_cs_oracle" value="SELECT 
TRANSLATE(col USING NCHAR_CS) FROM translate_tab" db-types="Oracle" />
     <sql-case id="select_approx_rank_oracle" value="SELECT APPROX_RANK(0.5) 
FROM dual" db-types="Oracle" />
     <sql-case id="select_isschemavalid_function_oracle" value="SELECT 
ISSCHEMAVALID(xml_doc, 'schema.xsd') FROM dual" db-types="Oracle" />
+    <!-- Parameter count test cases for functions with placeholders -->
+    <sql-case id="select_position_with_placeholder" value="SELECT POSITION(? 
IN user_name) AS a_pos FROM t_user ORDER BY user_id" case-types="placeholder" 
db-types="MySQL,Doris,Hive,Presto,GoldenDB,StarRocks,SQL92" />
+    <sql-case id="select_char_nested_with_placeholder" value="SELECT 
CHAR(ASCII(SUBSTRING(user_name, ?, ?))) AS first_char FROM t_user ORDER BY 
user_id" case-types="placeholder" 
db-types="MySQL,Doris,Hive,Presto,GoldenDB,StarRocks" />
+    <sql-case id="select_substring_with_placeholder" value="SELECT 
SUBSTRING(user_name, ?, ?) AS first_char FROM t_user ORDER BY user_id" 
case-types="placeholder" db-types="MySQL,Doris,Hive,Presto,GoldenDB,StarRocks" 
/>
+    <sql-case id="select_group_concat_with_placeholder" value="SELECT 
GROUP_CONCAT(? ORDER BY ?) FROM t_order" case-types="placeholder" 
db-types="MySQL,Doris,GoldenDB,StarRocks,Hive,Presto" />
+    <sql-case id="select_extract_with_placeholder" value="SELECT EXTRACT(? 
FROM creation_date) FROM t_order" case-types="placeholder" 
db-types="MySQL,Doris,Hive,Presto,GoldenDB,StarRocks" />
+    <sql-case id="select_weight_string_with_placeholder" value="SELECT 
WEIGHT_STRING(?) FROM t_order" case-types="placeholder" 
db-types="MySQL,Doris,Hive" />
+    <!-- CAST test cases per dialect group - different syntax for data types 
-->
+    <sql-case id="select_cast_with_placeholder_mysql" value="SELECT CAST(? AS 
UNSIGNED) FROM t_order" case-types="placeholder" db-types="MySQL,Hive,Presto" />
+    <sql-case id="select_cast_with_placeholder_clickhouse" value="SELECT 
CAST(? AS INT8) FROM t_order" case-types="placeholder" db-types="ClickHouse" />
+    <sql-case id="select_cast_with_placeholder_standard" value="SELECT CAST(? 
AS INT) FROM t_order" case-types="placeholder" 
db-types="SQL92,Firebird,SQLServer" />
+    <sql-case id="select_interval_with_placeholder" value="SELECT INTERVAL ? 
DAY FROM t_order" case-types="placeholder" 
db-types="MySQL,ClickHouse,SQL92,Firebird" />
 </sql-cases>

Reply via email to