Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions be/src/exprs/decimal_operators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,20 @@ DecimalVal DecimalOperators::cast_to_decimal_val(
return result;
}

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) {
Expand Down
1 change: 1 addition & 0 deletions be/src/exprs/decimal_operators.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class DecimalOperators {
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&);
Expand Down
13 changes: 13 additions & 0 deletions be/src/exprs/decimalv2_operators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,19 @@ DecimalV2Val DecimalV2Operators::cast_to_decimalv2_val(
return result;
}

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) {
Expand Down
1 change: 1 addition & 0 deletions be/src/exprs/decimalv2_operators.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class DecimalV2Operators {
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&);
Expand Down
4 changes: 2 additions & 2 deletions fe/src/main/java/org/apache/doris/analysis/CastExpr.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ public static void initBuiltins(FunctionSet functionSet) {
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;
}
Expand Down