This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-1.1-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.1-lts by this push:
new 1fe5b846f6 [Fix](planner)fix cast error when query a view with cast to
string-like type. (#17131)
1fe5b846f6 is described below
commit 1fe5b846f671b9c8f646b278ef6eccbb38f5afe9
Author: mch_ucchi <[email protected]>
AuthorDate: Mon Mar 6 16:27:30 2023 +0800
[Fix](planner)fix cast error when query a view with cast to string-like
type. (#17131)
fix bug:
create table t (
id int,
k1 int
)
distributed by hash(id) buckets 4
properties(...)
create view v1 as select cast(k1 as varchar) k1 from t1
select k1 from v1
which will cause 'Failed analysis when expr subsitution' because
inlineViewDef always change string-like type to char.
---
fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java | 7 ++++++-
.../src/test/java/org/apache/doris/catalog/CreateFunctionTest.java | 4 ++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
index 261c1cf89a..4cf590eb63 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
@@ -194,7 +194,12 @@ public class CastExpr extends Expr {
}
if (isAnalyzed) {
if (type.isStringType()) {
- return "CAST(" + getChild(0).toSql() + " AS " + "CHARACTER" +
")";
+ String typeString = type.toSql();
+ ScalarType scalarType = ((ScalarType) type);
+ if (scalarType.isWildcardChar() ||
scalarType.isWildcardVarchar()) {
+ typeString = typeString.replace("(-1)", "");
+ }
+ return "CAST(" + getChild(0).toSql() + " AS " + typeString +
")";
} else {
return "CAST(" + getChild(0).toSql() + " AS " +
type.toString() + ")";
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateFunctionTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateFunctionTest.java
index 7da7f92b8e..1e7c2fa9b7 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateFunctionTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateFunctionTest.java
@@ -197,7 +197,7 @@ public class CreateFunctionTest {
Assert.assertTrue(constExprLists.get(0).get(0) instanceof
StringLiteral);
queryStr = "select db1.varchar(k1, 4) from db1.tbl1;";
-
Assert.assertTrue(dorisAssert.query(queryStr).explainQuery().contains("CAST(`k1`
AS CHARACTER)"));
+
Assert.assertTrue(dorisAssert.query(queryStr).explainQuery().contains("CAST(`k1`
AS varchar(4))"));
// cast any type to char with fixed length
createFuncStr = "create alias function db1.char(all, int) with
parameter(text, length) as " +
@@ -224,6 +224,6 @@ public class CreateFunctionTest {
Assert.assertTrue(constExprLists.get(0).get(0) instanceof
StringLiteral);
queryStr = "select db1.char(k1, 4) from db1.tbl1;";
-
Assert.assertTrue(dorisAssert.query(queryStr).explainQuery().contains("CAST(`k1`
AS CHARACTER)"));
+
Assert.assertTrue(dorisAssert.query(queryStr).explainQuery().contains("CAST(`k1`
AS char(4))"));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]