From dddb02afd853f59ddff06257f197e23aa27cc1c6 Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Mon, 4 Sep 2023 17:09:24 +0800 Subject: [PATCH] [fix](planner)fix 'char' function's toSql implementation is wrong --- .../org/apache/doris/analysis/FunctionCallExpr.java | 13 +++++++++++++ regression-test/data/view_p0/view_p0.out | 3 +++ regression-test/suites/view_p0/view_p0.groovy | 9 ++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 480877e6663345a..7e9b9f8779b4b23 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -551,6 +551,19 @@ private String paramsToSql() { sb.append("DISTINCT "); } int len = children.size(); + + if (fnName.getFunction().equalsIgnoreCase("char")) { + for (int i = 1; i < len; ++i) { + sb.append(children.get(i).toSql()); + if (i < len - 1) { + sb.append(", "); + } + } + sb.append(" using "); + sb.append(children.get(0).toSql().replace("'", "")).append(")"); + return sb.toString(); + } + // XXX_diff are used by nereids only if (fnName.getFunction().equalsIgnoreCase("years_diff") || fnName.getFunction().equalsIgnoreCase("months_diff") || fnName.getFunction().equalsIgnoreCase("days_diff") diff --git a/regression-test/data/view_p0/view_p0.out b/regression-test/data/view_p0/view_p0.out index ff952fdaa7b833f..976d4a3cb2ad074 100644 --- a/regression-test/data/view_p0/view_p0.out +++ b/regression-test/data/view_p0/view_p0.out @@ -15,3 +15,6 @@ -- !sql -- 960 +-- !sql2 -- + + diff --git a/regression-test/suites/view_p0/view_p0.groovy b/regression-test/suites/view_p0/view_p0.groovy index bb6a5ab5a631e03..cf55380a717a1cb 100644 --- a/regression-test/suites/view_p0/view_p0.groovy +++ b/regression-test/suites/view_p0/view_p0.groovy @@ -122,5 +122,12 @@ suite("view_p0") { qt_sql "select * from test_time_diff" sql "drop view if exists test_time_diff" - + + sql "drop view if exists test_vv1;" + + sql "create view test_vv1 as select char(field2) from test_array_tbl_2;" + + qt_sql2 "select * from test_vv1;" + + sql "drop view if exists test_vv1;" }