From 6b68a25610e6e3c303d86e074b1557f409426b71 Mon Sep 17 00:00:00 2001 From: emmymiao87 <522274284@qq.com> Date: Fri, 20 Sep 2019 18:12:30 +0800 Subject: [PATCH] Bug-fix: Enable StringLiteral cast to Varchar For issue: https://github.com/apache/incubator-doris/issues/1842 StringLiteral could be cast to VARCHAR or CHAR. The default value of lead and lag function could be 'String' when the column type is CHAR or VARCHAR. --- .../org/apache/doris/analysis/AnalyticExpr.java | 14 ++++++++++---- .../org/apache/doris/analysis/StringLiteral.java | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/analysis/AnalyticExpr.java b/fe/src/main/java/org/apache/doris/analysis/AnalyticExpr.java index df1c2be93ed155..4dc4aff70fe49a 100644 --- a/fe/src/main/java/org/apache/doris/analysis/AnalyticExpr.java +++ b/fe/src/main/java/org/apache/doris/analysis/AnalyticExpr.java @@ -17,10 +17,6 @@ package org.apache.doris.analysis; -import com.google.common.base.Joiner; -import com.google.common.base.Objects; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; import org.apache.doris.analysis.AnalyticWindow.Boundary; import org.apache.doris.analysis.AnalyticWindow.BoundaryType; import org.apache.doris.catalog.AggregateFunction; @@ -30,6 +26,12 @@ import org.apache.doris.common.AnalysisException; import org.apache.doris.common.TreeNode; import org.apache.doris.thrift.TExprNode; + +import com.google.common.base.Joiner; +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -288,6 +290,10 @@ void checkDefaultValue(Analyzer analyzer) throws AnalysisException { return; } + if (!getFnCall().getChild(0).getType().getPrimitiveType().isNumericType()) { + return; + } + double value = val.getConstFromExpr(val); PrimitiveType type = getFnCall().getChild(0).getType().getPrimitiveType(); boolean out = false; diff --git a/fe/src/main/java/org/apache/doris/analysis/StringLiteral.java b/fe/src/main/java/org/apache/doris/analysis/StringLiteral.java index c0f1546a01a35a..6912997c1c71f9 100644 --- a/fe/src/main/java/org/apache/doris/analysis/StringLiteral.java +++ b/fe/src/main/java/org/apache/doris/analysis/StringLiteral.java @@ -28,6 +28,7 @@ import org.apache.doris.thrift.TStringLiteral; import com.google.common.base.Preconditions; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -202,6 +203,11 @@ protected Expr uncheckedCastTo(Type targetType) throws AnalysisException { } catch (AnalysisException e) { // pass; } + } else if (targetType.equals(type)) { + return this; + } else if (targetType.isStringType()) { + type = targetType; + return this; } return super.uncheckedCastTo(targetType); }