This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
new bd2b6d37c6 [cherry-pick](planner)pick prs to branch-1.2 (#23542)
bd2b6d37c6 is described below
commit bd2b6d37c61b3a89654f48a78b28932c3017ce68
Author: mch_ucchi <[email protected]>
AuthorDate: Mon Aug 28 14:16:03 2023 +0800
[cherry-pick](planner)pick prs to branch-1.2 (#23542)
from #21754 #22770
---
.../java/org/apache/doris/analysis/FunctionCallExpr.java | 14 ++++++++++++++
.../main/java/org/apache/doris/analysis/SelectStmt.java | 3 ++-
.../java/org/apache/doris/datasource/InternalCatalog.java | 5 +++--
.../java/org/apache/doris/analysis/InsertStmtTest.java | 10 ++++++----
4 files changed, 25 insertions(+), 7 deletions(-)
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 07785f47ac..10b1f9e46d 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
@@ -1583,6 +1583,20 @@ public class FunctionCallExpr extends Expr {
this.type =
PRECISION_INFER_RULE.getOrDefault(fnName.getFunction(),
DEFAULT_PRECISION_INFER_RULE)
.apply(children, this.type);
}
+
+ // cast(xx as char(N)/varchar(N)) will be handled as substr(cast(xx as
char, varchar), 1, N),
+ // but type is varchar(*), we change it to varchar(N);
+ if (fn.getFunctionName().getFunction().equals("substr")
+ && children.size() == 3
+ && children.get(1) instanceof IntLiteral
+ && children.get(2) instanceof IntLiteral) {
+ long len = ((IntLiteral) children.get(2)).getValue();
+ if (type.isWildcardChar()) {
+ this.type = ScalarType.createCharType(((int) (len)));
+ } else if (type.isWildcardVarchar()) {
+ this.type = ScalarType.createVarchar(((int) (len)));
+ }
+ }
// rewrite return type if is nested type function
analyzeNestedFunction();
for (OrderByElement o : orderByElements) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 22b9c0a82d..16bb1ecf2f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -76,6 +76,7 @@ import java.util.stream.Collectors;
*/
public class SelectStmt extends QueryStmt {
private static final Logger LOG = LogManager.getLogger(SelectStmt.class);
+ public static final String DEFAULT_VALUE = "__DEFAULT_VALUE__";
private UUID id = UUID.randomUUID();
// ///////////////////////////////////////
@@ -504,7 +505,7 @@ public class SelectStmt extends QueryStmt {
}
for (Expr expr : valueList.getFirstRow()) {
if (expr instanceof DefaultValueExpr) {
- resultExprs.add(new IntLiteral(1));
+ resultExprs.add(new StringLiteral(DEFAULT_VALUE));
} else {
resultExprs.add(expr);
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index ca24af08eb..aa8f355f77 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -1220,8 +1220,9 @@ public class InternalCatalog implements
CatalogIf<Database> {
Expr resultExpr = resultExprs.get(i);
Type resultType = resultExpr.getType();
if (resultExpr instanceof FunctionCallExpr
- &&
resultExpr.getType().getPrimitiveType().equals(PrimitiveType.VARCHAR)) {
- resultType = ScalarType.createVarchar(65533);
+ &&
resultExpr.getType().getPrimitiveType().equals(PrimitiveType.VARCHAR)
+ && resultExpr.getType().getLength() == -1) {
+ resultType =
ScalarType.createVarchar(ScalarType.MAX_VARCHAR_LENGTH);
}
if (resultType.isStringType() && (keysDesc == null ||
!keysDesc.containsCol(name))) {
// Use String for varchar/char/string type,
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java
b/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java
index 72c9e67d8a..8f4688f230 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/InsertStmtTest.java
@@ -157,8 +157,9 @@ public class InsertStmtTest {
ConnectContext ctx = UtFrameUtils.createDefaultCtx();
String sql = "values(1,'a',2,'b')";
- SqlScanner input = new SqlScanner(new StringReader(sql),
ctx.getSessionVariable().getSqlMode());
- SqlParser parser = new SqlParser(input);
+ org.apache.doris.analysis.SqlScanner input = new
org.apache.doris.analysis.SqlScanner(
+ new StringReader(sql), ctx.getSessionVariable().getSqlMode());
+ org.apache.doris.analysis.SqlParser parser = new
org.apache.doris.analysis.SqlParser(input);
Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx);
StatementBase statementBase = null;
try {
@@ -221,8 +222,9 @@ public class InsertStmtTest {
ConnectContext ctx = UtFrameUtils.createDefaultCtx();
String sql = "select kk1, kk2, kk3, kk4 from db.tbl";
- SqlScanner input = new SqlScanner(new StringReader(sql),
ctx.getSessionVariable().getSqlMode());
- SqlParser parser = new SqlParser(input);
+ org.apache.doris.analysis.SqlScanner input = new
org.apache.doris.analysis.SqlScanner(
+ new StringReader(sql), ctx.getSessionVariable().getSqlMode());
+ org.apache.doris.analysis.SqlParser parser = new
org.apache.doris.analysis.SqlParser(input);
Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx);
StatementBase statementBase = null;
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]