You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zh...@apache.org on 2019/09/23 11:56:26 UTC
[incubator-doris] branch master updated: Support cast datetime to
decimal (#1849)
This is an automated email from the ASF dual-hosted git repository.
zhaoc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new c3fccb7 Support cast datetime to decimal (#1849)
c3fccb7 is described below
commit c3fccb7a495a24f7e58f8756424abaa0e7de47af
Author: ZHAO Chun <bu...@gmail.com>
AuthorDate: Mon Sep 23 19:56:20 2019 +0800
Support cast datetime to decimal (#1849)
---
be/src/exprs/decimal_operators.cpp | 14 ++++++++++++++
be/src/exprs/decimal_operators.h | 1 +
be/src/exprs/decimalv2_operators.cpp | 13 +++++++++++++
be/src/exprs/decimalv2_operators.h | 1 +
fe/src/main/java/org/apache/doris/analysis/CastExpr.java | 4 ++--
5 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/be/src/exprs/decimal_operators.cpp b/be/src/exprs/decimal_operators.cpp
index 88b6e08..8c19b39 100644
--- a/be/src/exprs/decimal_operators.cpp
+++ b/be/src/exprs/decimal_operators.cpp
@@ -77,6 +77,20 @@ DecimalVal DecimalOperators::cast_to_decimal_val(
}
DecimalVal DecimalOperators::cast_to_decimal_val(
+ FunctionContext* context, const DateTimeVal& val) {
+ if (val.is_null) {
+ return DecimalVal::null();
+ }
+
+ DateTimeValue dt_value = DateTimeValue::from_datetime_val(val);
+
+ DecimalValue dv = dt_value.to_int64();
+ DecimalVal result;
+ dv.to_decimal_val(&result);
+ return result;
+}
+
+DecimalVal DecimalOperators::cast_to_decimal_val(
FunctionContext* context, const StringVal& val) {
if (val.is_null) {
return DecimalVal::null();
diff --git a/be/src/exprs/decimal_operators.h b/be/src/exprs/decimal_operators.h
index 766c734..a46532c 100644
--- a/be/src/exprs/decimal_operators.h
+++ b/be/src/exprs/decimal_operators.h
@@ -41,6 +41,7 @@ public:
static DecimalVal cast_to_decimal_val(FunctionContext*, const LargeIntVal&);
static DecimalVal cast_to_decimal_val(FunctionContext*, const FloatVal&);
static DecimalVal cast_to_decimal_val(FunctionContext*, const DoubleVal&);
+ static DecimalVal cast_to_decimal_val(FunctionContext*, const DateTimeVal&);
static DecimalVal cast_to_decimal_val(FunctionContext*, const StringVal&);
static BooleanVal cast_to_boolean_val(FunctionContext*, const DecimalVal&);
diff --git a/be/src/exprs/decimalv2_operators.cpp b/be/src/exprs/decimalv2_operators.cpp
index b15bc40..0a57321 100644
--- a/be/src/exprs/decimalv2_operators.cpp
+++ b/be/src/exprs/decimalv2_operators.cpp
@@ -77,6 +77,19 @@ DecimalV2Val DecimalV2Operators::cast_to_decimalv2_val(
}
DecimalV2Val DecimalV2Operators::cast_to_decimalv2_val(
+ FunctionContext* context, const DateTimeVal& val) {
+ if (val.is_null) {
+ return DecimalV2Val::null();
+ }
+
+ DateTimeValue dt_value = DateTimeValue::from_datetime_val(val);
+ DecimalV2Value dv(dt_value.to_int64(), 0);
+ DecimalV2Val result;
+ dv.to_decimal_val(&result);
+ return result;
+}
+
+DecimalV2Val DecimalV2Operators::cast_to_decimalv2_val(
FunctionContext* context, const StringVal& val) {
if (val.is_null) {
return DecimalV2Val::null();
diff --git a/be/src/exprs/decimalv2_operators.h b/be/src/exprs/decimalv2_operators.h
index 5a404b9..8030985 100644
--- a/be/src/exprs/decimalv2_operators.h
+++ b/be/src/exprs/decimalv2_operators.h
@@ -41,6 +41,7 @@ public:
static DecimalV2Val cast_to_decimalv2_val(FunctionContext*, const LargeIntVal&);
static DecimalV2Val cast_to_decimalv2_val(FunctionContext*, const FloatVal&);
static DecimalV2Val cast_to_decimalv2_val(FunctionContext*, const DoubleVal&);
+ static DecimalV2Val cast_to_decimalv2_val(FunctionContext*, const DateTimeVal&);
static DecimalV2Val cast_to_decimalv2_val(FunctionContext*, const StringVal&);
static BooleanVal cast_to_boolean_val(FunctionContext*, const DecimalV2Val&);
diff --git a/fe/src/main/java/org/apache/doris/analysis/CastExpr.java b/fe/src/main/java/org/apache/doris/analysis/CastExpr.java
index 18334f1..ba1c819 100644
--- a/fe/src/main/java/org/apache/doris/analysis/CastExpr.java
+++ b/fe/src/main/java/org/apache/doris/analysis/CastExpr.java
@@ -103,8 +103,8 @@ public class CastExpr extends Expr {
if (fromType.isStringType() && toType.isBoolean()) {
continue;
}
- // Disable casting from boolean/timestamp to decimal
- if ((fromType.isBoolean() || fromType.isDateType()) &&
+ // Disable casting from boolean to decimal
+ if (fromType.isBoolean() &&
(toType == Type.DECIMAL || toType == Type.DECIMALV2)) {
continue;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org