You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2022/10/16 06:31:36 UTC
[doris] branch master updated: [Enhancement](function) refactor of date function (#13362)
This is an automated email from the ASF dual-hosted git repository.
panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 632670a49c [Enhancement](function) refactor of date function (#13362)
632670a49c is described below
commit 632670a49c2eb28790510c52d8f5630f141e9c28
Author: Pxl <px...@qq.com>
AuthorDate: Sun Oct 16 14:31:26 2022 +0800
[Enhancement](function) refactor of date function (#13362)
refactor of date function
---
.../exec/format/parquet/vparquet_page_reader.cpp | 1 +
be/src/vec/functions/date_time_transforms.h | 242 ++++++++-------------
.../function_date_or_datetime_to_something.h | 3 +-
.../function_date_or_datetime_to_string.cpp | 16 +-
.../function_date_or_datetime_to_string.h | 4 +-
be/src/vec/functions/time_of_function.cpp | 59 ++---
be/src/vec/functions/to_time_function.cpp | 115 +++-------
be/src/vec/runtime/vdatetime_value.cpp | 7 +-
be/src/vec/runtime/vdatetime_value.h | 32 ++-
tools/tpch-tools/queries/q9.sql | 2 +-
10 files changed, 188 insertions(+), 293 deletions(-)
diff --git a/be/src/vec/exec/format/parquet/vparquet_page_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_page_reader.cpp
index 00e2ef0926..cd018f4107 100644
--- a/be/src/vec/exec/format/parquet/vparquet_page_reader.cpp
+++ b/be/src/vec/exec/format/parquet/vparquet_page_reader.cpp
@@ -19,6 +19,7 @@
#include <stdint.h>
+#include "common/config.h"
#include "util/thrift_util.h"
namespace doris::vectorized {
diff --git a/be/src/vec/functions/date_time_transforms.h b/be/src/vec/functions/date_time_transforms.h
index 8255713221..5fca7b1ce3 100644
--- a/be/src/vec/functions/date_time_transforms.h
+++ b/be/src/vec/functions/date_time_transforms.h
@@ -34,27 +34,20 @@
namespace doris::vectorized {
-#define TIME_FUNCTION_IMPL(CLASS, UNIT, FUNCTION) \
- template <typename DateValueType, typename ArgType> \
- struct CLASS { \
- using ARG_TYPE = ArgType; \
- static constexpr auto name = #UNIT; \
- \
- static inline auto execute(const ARG_TYPE& t, bool& is_null) { \
- const auto& date_time_value = (DateValueType&)(t); \
- is_null = !date_time_value.is_valid_date(); \
- return date_time_value.FUNCTION; \
- } \
- \
- static DataTypes get_variadic_argument_types() { \
- if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) { \
- return {std::make_shared<DataTypeDateTime>()}; \
- } else if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) { \
- return {std::make_shared<DataTypeDateV2>()}; \
- } else { \
- return {std::make_shared<DataTypeDateTimeV2>()}; \
- } \
- } \
+#define TIME_FUNCTION_IMPL(CLASS, UNIT, FUNCTION) \
+ template <typename ArgType> \
+ struct CLASS { \
+ using OpArgType = ArgType; \
+ static constexpr auto name = #UNIT; \
+ \
+ static inline auto execute(const ArgType& t) { \
+ const auto& date_time_value = (typename DateTraits<ArgType>::T&)(t); \
+ return date_time_value.FUNCTION; \
+ } \
+ \
+ static DataTypes get_variadic_argument_types() { \
+ return {std::make_shared<typename DateTraits<ArgType>::DateType>()}; \
+ } \
}
#define TO_TIME_FUNCTION(CLASS, UNIT) TIME_FUNCTION_IMPL(CLASS, UNIT, UNIT())
@@ -75,63 +68,50 @@ TIME_FUNCTION_IMPL(WeekDayImpl, weekday, weekday());
// TODO: the method should be always not nullable
TIME_FUNCTION_IMPL(ToDaysImpl, to_days, daynr());
-#define TIME_FUNCTION_ONE_ARG_IMPL(CLASS, UNIT, FUNCTION) \
- template <typename DateValueType, typename ArgType> \
- struct CLASS { \
- using ARG_TYPE = ArgType; \
- static constexpr auto name = #UNIT; \
- \
- static inline auto execute(const ARG_TYPE& t, bool& is_null) { \
- const auto& date_time_value = (DateValueType&)(t); \
- is_null = !date_time_value.is_valid_date(); \
- return date_time_value.FUNCTION; \
- } \
- \
- static DataTypes get_variadic_argument_types() { \
- if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) { \
- return {std::make_shared<DataTypeDateTime>()}; \
- } else if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) { \
- return {std::make_shared<DataTypeDateV2>()}; \
- } else { \
- return {std::make_shared<DataTypeDateTimeV2>()}; \
- } \
- } \
+#define TIME_FUNCTION_ONE_ARG_IMPL(CLASS, UNIT, FUNCTION) \
+ template <typename ArgType> \
+ struct CLASS { \
+ using OpArgType = ArgType; \
+ static constexpr auto name = #UNIT; \
+ \
+ static inline auto execute(const ArgType& t) { \
+ const auto& date_time_value = (typename DateTraits<ArgType>::T&)(t); \
+ return date_time_value.FUNCTION; \
+ } \
+ \
+ static DataTypes get_variadic_argument_types() { \
+ return {std::make_shared<typename DateTraits<ArgType>::DateType>()}; \
+ } \
}
TIME_FUNCTION_ONE_ARG_IMPL(ToWeekOneArgImpl, week, week(mysql_week_mode(0)));
TIME_FUNCTION_ONE_ARG_IMPL(ToYearWeekOneArgImpl, yearweek, year_week(mysql_week_mode(0)));
-template <typename DateValueType, typename ArgType>
+template <typename ArgType>
struct ToDateImpl {
- using ARG_TYPE = ArgType;
+ using OpArgType = ArgType;
+ using T = typename DateTraits<ArgType>::T;
static constexpr auto name = "to_date";
- static inline auto execute(const ArgType& t, bool& is_null) {
- auto dt = binary_cast<ArgType, DateValueType>(t);
- is_null = !dt.is_valid_date();
- if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) {
- return binary_cast<DateValueType, ArgType>(dt);
- } else if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
+ static inline auto execute(const ArgType& t) {
+ auto dt = binary_cast<ArgType, T>(t);
+ if constexpr (std::is_same_v<T, DateV2Value<DateV2ValueType>>) {
+ return binary_cast<T, ArgType>(dt);
+ } else if constexpr (std::is_same_v<T, VecDateTimeValue>) {
dt.cast_to_date();
- return binary_cast<DateValueType, ArgType>(dt);
+ return binary_cast<T, ArgType>(dt);
} else {
- return (UInt32)(binary_cast<DateValueType, ArgType>(dt) >> TIME_PART_LENGTH);
+ return (UInt32)(binary_cast<T, ArgType>(dt) >> TIME_PART_LENGTH);
}
}
static DataTypes get_variadic_argument_types() {
- if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
- return {std::make_shared<DataTypeDateTime>()};
- } else if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) {
- return {std::make_shared<DataTypeDateV2>()};
- } else {
- return {std::make_shared<DataTypeDateTimeV2>()};
- }
+ return {std::make_shared<typename DateTraits<ArgType>::DateType>()};
}
};
-template <typename DateValue, typename ArgType>
-struct DateImpl : public ToDateImpl<DateValue, ArgType> {
+template <typename ArgType>
+struct DateImpl : public ToDateImpl<ArgType> {
static constexpr auto name = "date";
};
@@ -139,23 +119,22 @@ struct DateImpl : public ToDateImpl<DateValue, ArgType> {
// this function
template <typename ArgType>
struct TimeStampImpl {
- using ARG_TYPE = ArgType;
+ using OpArgType = ArgType;
static constexpr auto name = "timestamp";
- static inline auto execute(const ARG_TYPE& t, bool& is_null) { return t; }
+ static inline auto execute(const OpArgType& t) { return t; }
};
-template <typename DateValueType, typename ArgType>
+template <typename ArgType>
struct DayNameImpl {
- using ARG_TYPE = ArgType;
+ using OpArgType = ArgType;
static constexpr auto name = "dayname";
static constexpr auto max_size = MAX_DAY_NAME_LEN;
- static inline auto execute(const DateValueType& dt, ColumnString::Chars& res_data,
- size_t& offset, bool& is_null) {
+ static inline auto execute(const typename DateTraits<ArgType>::T& dt,
+ ColumnString::Chars& res_data, size_t& offset) {
const auto* day_name = dt.day_name();
- is_null = !dt.is_valid_date();
- if (day_name != nullptr && !is_null) {
+ if (day_name != nullptr) {
auto len = strlen(day_name);
memcpy(&res_data[offset], day_name, len);
offset += len;
@@ -164,27 +143,20 @@ struct DayNameImpl {
}
static DataTypes get_variadic_argument_types() {
- if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
- return {std::make_shared<DataTypeDateTime>()};
- } else if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) {
- return {std::make_shared<DataTypeDateV2>()};
- } else {
- return {std::make_shared<DataTypeDateTimeV2>()};
- }
+ return {std::make_shared<typename DateTraits<ArgType>::DateType>()};
}
};
-template <typename DateValueType, typename ArgType>
+template <typename ArgType>
struct MonthNameImpl {
- using ARG_TYPE = ArgType;
+ using OpArgType = ArgType;
static constexpr auto name = "monthname";
static constexpr auto max_size = MAX_MONTH_NAME_LEN;
- static inline auto execute(const DateValueType& dt, ColumnString::Chars& res_data,
- size_t& offset, bool& is_null) {
+ static inline auto execute(const typename DateTraits<ArgType>::T& dt,
+ ColumnString::Chars& res_data, size_t& offset) {
const auto* month_name = dt.month_name();
- is_null = !dt.is_valid_date();
- if (month_name != nullptr && !is_null) {
+ if (month_name != nullptr) {
auto len = strlen(month_name);
memcpy(&res_data[offset], month_name, len);
offset += len;
@@ -193,13 +165,7 @@ struct MonthNameImpl {
}
static DataTypes get_variadic_argument_types() {
- if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
- return {std::make_shared<DataTypeDateTime>()};
- } else if constexpr (std::is_same_v<DateValueType, DateV2Value<DateV2ValueType>>) {
- return {std::make_shared<DataTypeDateV2>()};
- } else {
- return {std::make_shared<DataTypeDateTimeV2>()};
- }
+ return {std::make_shared<typename DateTraits<ArgType>::DateType>()};
}
};
@@ -227,25 +193,11 @@ struct DateFormatImpl {
}
static DataTypes get_variadic_argument_types() {
- if constexpr (std::is_same_v<DateType, VecDateTimeValue>) {
- return std::vector<DataTypePtr> {
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeDateTime>()),
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeString>())};
- } else if constexpr (std::is_same_v<DateType, DateV2Value<DateV2ValueType>>) {
- return std::vector<DataTypePtr> {
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeDateV2>()),
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeString>())};
- } else {
- return std::vector<DataTypePtr> {
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeDateTimeV2>()),
- std::dynamic_pointer_cast<const IDataType>(
- std::make_shared<vectorized::DataTypeString>())};
- }
+ return std::vector<DataTypePtr> {
+ std::dynamic_pointer_cast<const IDataType>(
+ std::make_shared<typename DateTraits<ArgType>::DateType>()),
+ std::dynamic_pointer_cast<const IDataType>(
+ std::make_shared<vectorized::DataTypeString>())};
}
};
@@ -280,52 +232,22 @@ struct FromUnixTimeImpl {
template <typename Transform>
struct TransformerToStringOneArgument {
- static void vector(const PaddedPODArray<Int64>& ts, ColumnString::Chars& res_data,
- ColumnString::Offsets& res_offsets, NullMap& null_map) {
- const auto len = ts.size();
- res_data.resize(len * Transform::max_size);
- res_offsets.resize(len);
- null_map.resize_fill(len, false);
-
- size_t offset = 0;
- for (int i = 0; i < len; ++i) {
- const auto& t = ts[i];
- const auto& date_time_value = reinterpret_cast<const VecDateTimeValue&>(t);
- res_offsets[i] = Transform::execute(date_time_value, res_data, offset,
- reinterpret_cast<bool&>(null_map[i]));
- }
- }
-
- static void vector(const PaddedPODArray<UInt32>& ts, ColumnString::Chars& res_data,
- ColumnString::Offsets& res_offsets, NullMap& null_map) {
- const auto len = ts.size();
- res_data.resize(len * Transform::max_size);
- res_offsets.resize(len);
- null_map.resize_fill(len, false);
-
- size_t offset = 0;
- for (int i = 0; i < len; ++i) {
- const auto& t = ts[i];
- const auto& date_time_value = reinterpret_cast<const DateV2Value<DateV2ValueType>&>(t);
- res_offsets[i] = Transform::execute(date_time_value, res_data, offset,
- reinterpret_cast<bool&>(null_map[i]));
- }
- }
-
- static void vector(const PaddedPODArray<UInt64>& ts, ColumnString::Chars& res_data,
- ColumnString::Offsets& res_offsets, NullMap& null_map) {
+ static void vector(const PaddedPODArray<typename Transform::OpArgType>& ts,
+ ColumnString::Chars& res_data, ColumnString::Offsets& res_offsets,
+ NullMap& null_map) {
const auto len = ts.size();
res_data.resize(len * Transform::max_size);
res_offsets.resize(len);
- null_map.resize_fill(len, false);
+ null_map.resize(len);
size_t offset = 0;
for (int i = 0; i < len; ++i) {
const auto& t = ts[i];
const auto& date_time_value =
- reinterpret_cast<const DateV2Value<DateTimeV2ValueType>&>(t);
- res_offsets[i] = Transform::execute(date_time_value, res_data, offset,
- reinterpret_cast<bool&>(null_map[i]));
+ reinterpret_cast<const typename DateTraits<typename Transform::OpArgType>::T&>(
+ t);
+ res_offsets[i] = Transform::execute(date_time_value, res_data, offset);
+ null_map[i] = !date_time_value.is_valid_date();
}
}
};
@@ -359,10 +281,34 @@ struct Transformer {
NullMap& null_map) {
size_t size = vec_from.size();
vec_to.resize(size);
- null_map.resize_fill(size, false);
+ null_map.resize(size);
+
+ for (size_t i = 0; i < size; ++i) {
+ vec_to[i] = Transform::execute(vec_from[i]);
+ null_map[i] = !((typename DateTraits<typename Transform::OpArgType>::T&)(vec_from[i]))
+ .is_valid_date();
+ }
+ }
+};
+
+template <typename FromType, typename ToType>
+struct Transformer<FromType, ToType, ToYearImpl<FromType>> {
+ static void vector(const PaddedPODArray<FromType>& vec_from, PaddedPODArray<ToType>& vec_to,
+ NullMap& null_map) {
+ size_t size = vec_from.size();
+ vec_to.resize(size);
+ null_map.resize(size);
+
+ auto* __restrict to_ptr = vec_to.data();
+ auto* __restrict from_ptr = vec_from.data();
+ auto* __restrict null_map_ptr = null_map.data();
+
+ for (size_t i = 0; i < size; ++i) {
+ to_ptr[i] = ToYearImpl<FromType>::execute(from_ptr[i]);
+ }
for (size_t i = 0; i < size; ++i) {
- vec_to[i] = Transform::execute(vec_from[i], reinterpret_cast<bool&>(null_map[i]));
+ null_map_ptr[i] = to_ptr[i] <= MIN_YEAR || to_ptr[i] >= MAX_YEAR;
}
}
};
diff --git a/be/src/vec/functions/function_date_or_datetime_to_something.h b/be/src/vec/functions/function_date_or_datetime_to_something.h
index 0762855fb2..dfac38dd97 100644
--- a/be/src/vec/functions/function_date_or_datetime_to_something.h
+++ b/be/src/vec/functions/function_date_or_datetime_to_something.h
@@ -21,7 +21,6 @@
#pragma once
#include "vec/data_types/data_type_date.h"
-#include "vec/data_types/data_type_date_time.h"
#include "vec/functions/date_time_transforms.h"
#include "vec/functions/function.h"
@@ -91,7 +90,7 @@ public:
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) override {
- return DateTimeTransformImpl<typename Transform::ARG_TYPE, typename ToDataType::FieldType,
+ return DateTimeTransformImpl<typename Transform::OpArgType, typename ToDataType::FieldType,
Transform>::execute(block, arguments, result,
input_rows_count);
}
diff --git a/be/src/vec/functions/function_date_or_datetime_to_string.cpp b/be/src/vec/functions/function_date_or_datetime_to_string.cpp
index 374f38a90e..cf215cd14d 100644
--- a/be/src/vec/functions/function_date_or_datetime_to_string.cpp
+++ b/be/src/vec/functions/function_date_or_datetime_to_string.cpp
@@ -24,17 +24,13 @@
namespace doris::vectorized {
-using FunctionDayName = FunctionDateOrDateTimeToString<DayNameImpl<VecDateTimeValue, Int64>>;
-using FunctionDayNameV2 =
- FunctionDateOrDateTimeToString<DayNameImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionMonthName = FunctionDateOrDateTimeToString<MonthNameImpl<VecDateTimeValue, Int64>>;
-using FunctionMonthNameV2 =
- FunctionDateOrDateTimeToString<MonthNameImpl<DateV2Value<DateV2ValueType>, UInt32>>;
+using FunctionDayName = FunctionDateOrDateTimeToString<DayNameImpl<Int64>>;
+using FunctionDayNameV2 = FunctionDateOrDateTimeToString<DayNameImpl<UInt32>>;
+using FunctionMonthName = FunctionDateOrDateTimeToString<MonthNameImpl<Int64>>;
+using FunctionMonthNameV2 = FunctionDateOrDateTimeToString<MonthNameImpl<UInt32>>;
-using FunctionDateTimeV2DayName =
- FunctionDateOrDateTimeToString<DayNameImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2MonthName =
- FunctionDateOrDateTimeToString<MonthNameImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+using FunctionDateTimeV2DayName = FunctionDateOrDateTimeToString<DayNameImpl<UInt64>>;
+using FunctionDateTimeV2MonthName = FunctionDateOrDateTimeToString<MonthNameImpl<UInt64>>;
void register_function_date_time_to_string(SimpleFunctionFactory& factory) {
factory.register_function<FunctionDayName>();
diff --git a/be/src/vec/functions/function_date_or_datetime_to_string.h b/be/src/vec/functions/function_date_or_datetime_to_string.h
index b4f2b80175..f540fbe229 100644
--- a/be/src/vec/functions/function_date_or_datetime_to_string.h
+++ b/be/src/vec/functions/function_date_or_datetime_to_string.h
@@ -20,8 +20,6 @@
#pragma once
-#include "vec/data_types/data_type_date.h"
-#include "vec/data_types/data_type_date_time.h"
#include "vec/data_types/data_type_string.h"
#include "vec/functions/date_time_transforms.h"
#include "vec/functions/function.h"
@@ -58,7 +56,7 @@ public:
size_t result, size_t input_rows_count) override {
const ColumnPtr source_col = block.get_by_position(arguments[0]).column;
const auto* sources =
- check_and_get_column<ColumnVector<typename Transform::ARG_TYPE>>(source_col.get());
+ check_and_get_column<ColumnVector<typename Transform::OpArgType>>(source_col.get());
auto col_res = ColumnString::create();
auto null_map = ColumnVector<UInt8>::create();
// Support all input of datetime is valind to make sure not null return
diff --git a/be/src/vec/functions/time_of_function.cpp b/be/src/vec/functions/time_of_function.cpp
index 42b0b8c198..e2e4b29625 100644
--- a/be/src/vec/functions/time_of_function.cpp
+++ b/be/src/vec/functions/time_of_function.cpp
@@ -22,54 +22,35 @@
namespace doris::vectorized {
-using FunctionWeekOfYear =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekOfYearImpl<VecDateTimeValue, Int64>>;
+using FunctionWeekOfYear = FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekOfYearImpl<Int64>>;
using FunctionWeekOfYearV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- WeekOfYearImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionDayOfYear =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfYearImpl<VecDateTimeValue, Int64>>;
-using FunctionDayOfYearV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfYearImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionDayOfWeek =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfWeekImpl<VecDateTimeValue, Int64>>;
-using FunctionDayOfWeekV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfWeekImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionDayOfMonth =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfMonthImpl<VecDateTimeValue, Int64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekOfYearImpl<UInt32>>;
+using FunctionDayOfYear = FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfYearImpl<Int64>>;
+using FunctionDayOfYearV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfYearImpl<UInt32>>;
+using FunctionDayOfWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfWeekImpl<Int64>>;
+using FunctionDayOfWeekV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfWeekImpl<UInt32>>;
+using FunctionDayOfMonth = FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfMonthImpl<Int64>>;
using FunctionDayOfMonthV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfMonthImpl<DateV2Value<DateV2ValueType>, UInt32>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfMonthImpl<UInt32>>;
using FunctionYearWeek =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToYearWeekOneArgImpl<VecDateTimeValue, Int64>>;
-using FunctionYearWeekV2 = FunctionDateOrDateTimeToSomething<
- DataTypeInt32, ToYearWeekOneArgImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionWeekDay =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekDayImpl<VecDateTimeValue, Int64>>;
-using FunctionWeekDayV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- WeekDayImpl<DateV2Value<DateV2ValueType>, UInt32>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearWeekOneArgImpl<Int64>>;
+using FunctionYearWeekV2 =
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearWeekOneArgImpl<UInt32>>;
+using FunctionWeekDay = FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekDayImpl<Int64>>;
+using FunctionWeekDayV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekDayImpl<UInt32>>;
using FunctionDateTimeV2WeekOfYear =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- WeekOfYearImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekOfYearImpl<UInt64>>;
using FunctionDateTimeV2DayOfYear =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfYearImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfYearImpl<UInt64>>;
using FunctionDateTimeV2DayOfWeek =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfWeekImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfWeekImpl<UInt64>>;
using FunctionDateTimeV2DayOfMonth =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- DayOfMonthImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2YearWeek = FunctionDateOrDateTimeToSomething<
- DataTypeInt32, ToYearWeekOneArgImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, DayOfMonthImpl<UInt64>>;
+using FunctionDateTimeV2YearWeek =
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearWeekOneArgImpl<UInt64>>;
using FunctionDateTimeV2WeekDay =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- WeekDayImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, WeekDayImpl<UInt64>>;
void register_function_time_of_function(SimpleFunctionFactory& factory) {
factory.register_function<FunctionDayOfWeek>();
diff --git a/be/src/vec/functions/to_time_function.cpp b/be/src/vec/functions/to_time_function.cpp
index d3ee548fc9..5fce870e23 100644
--- a/be/src/vec/functions/to_time_function.cpp
+++ b/be/src/vec/functions/to_time_function.cpp
@@ -23,94 +23,47 @@
namespace doris::vectorized {
-using FunctionYear =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearImpl<VecDateTimeValue, Int64>>;
-using FunctionYearV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToYearImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionQuarter =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToQuarterImpl<VecDateTimeValue, Int64>>;
-using FunctionQuarterV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToQuarterImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionMonth =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMonthImpl<VecDateTimeValue, Int64>>;
-using FunctionMonthV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToMonthImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionDay =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDayImpl<VecDateTimeValue, Int64>>;
-using FunctionDayV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToDayImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionWeek =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToWeekOneArgImpl<VecDateTimeValue, Int64>>;
-using FunctionWeekV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToWeekOneArgImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionHour =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToHourImpl<VecDateTimeValue, Int64>>;
-using FunctionHourV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToHourImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionMinute =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMinuteImpl<VecDateTimeValue, Int64>>;
-using FunctionMinuteV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToMinuteImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionSecond =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToSecondImpl<VecDateTimeValue, Int64>>;
-using FunctionSecondV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToSecondImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionToDays =
- FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDaysImpl<VecDateTimeValue, Int64>>;
-using FunctionToDaysV2 =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToDaysImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionToDate =
- FunctionDateOrDateTimeToSomething<DataTypeDateTime, ToDateImpl<VecDateTimeValue, Int64>>;
-using FunctionToDateV2 =
- FunctionDateOrDateTimeToSomething<DataTypeDateV2,
- ToDateImpl<DateV2Value<DateV2ValueType>, UInt32>>;
-using FunctionDate =
- FunctionDateOrDateTimeToSomething<DataTypeDateTime, DateImpl<VecDateTimeValue, Int64>>;
-using FunctionDateV2 =
- FunctionDateOrDateTimeToSomething<DataTypeDateV2,
- DateImpl<DateV2Value<DateV2ValueType>, UInt32>>;
+using FunctionYear = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearImpl<Int64>>;
+using FunctionYearV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearImpl<UInt32>>;
+using FunctionQuarter = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToQuarterImpl<Int64>>;
+using FunctionQuarterV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToQuarterImpl<UInt32>>;
+using FunctionMonth = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMonthImpl<Int64>>;
+using FunctionMonthV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMonthImpl<UInt32>>;
+using FunctionDay = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDayImpl<Int64>>;
+using FunctionDayV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDayImpl<UInt32>>;
+using FunctionWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToWeekOneArgImpl<Int64>>;
+using FunctionWeekV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToWeekOneArgImpl<UInt32>>;
+using FunctionHour = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToHourImpl<Int64>>;
+using FunctionHourV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToHourImpl<UInt32>>;
+using FunctionMinute = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMinuteImpl<Int64>>;
+using FunctionMinuteV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMinuteImpl<UInt32>>;
+using FunctionSecond = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToSecondImpl<Int64>>;
+using FunctionSecondV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToSecondImpl<UInt32>>;
+using FunctionToDays = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDaysImpl<Int64>>;
+using FunctionToDaysV2 = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDaysImpl<UInt32>>;
+using FunctionToDate = FunctionDateOrDateTimeToSomething<DataTypeDateTime, ToDateImpl<Int64>>;
+using FunctionToDateV2 = FunctionDateOrDateTimeToSomething<DataTypeDateV2, ToDateImpl<UInt32>>;
+using FunctionDate = FunctionDateOrDateTimeToSomething<DataTypeDateTime, DateImpl<Int64>>;
+using FunctionDateV2 = FunctionDateOrDateTimeToSomething<DataTypeDateV2, DateImpl<UInt32>>;
-using FunctionDateTimeV2Year =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToYearImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+using FunctionDateTimeV2Year = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearImpl<UInt64>>;
using FunctionDateTimeV2Quarter =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToQuarterImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToQuarterImpl<UInt64>>;
using FunctionDateTimeV2Month =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToMonthImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2Day =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToDayImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2Week = FunctionDateOrDateTimeToSomething<
- DataTypeInt32, ToWeekOneArgImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2Hour =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToHourImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMonthImpl<UInt64>>;
+using FunctionDateTimeV2Day = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDayImpl<UInt64>>;
+using FunctionDateTimeV2Week =
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToWeekOneArgImpl<UInt64>>;
+using FunctionDateTimeV2Hour = FunctionDateOrDateTimeToSomething<DataTypeInt32, ToHourImpl<UInt64>>;
using FunctionDateTimeV2Minute =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToMinuteImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToMinuteImpl<UInt64>>;
using FunctionDateTimeV2Second =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToSecondImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToSecondImpl<UInt64>>;
using FunctionDateTimeV2ToDays =
- FunctionDateOrDateTimeToSomething<DataTypeInt32,
- ToDaysImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeInt32, ToDaysImpl<UInt64>>;
using FunctionDateTimeV2ToDate =
- FunctionDateOrDateTimeToSomething<DataTypeDateV2,
- ToDateImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
-using FunctionDateTimeV2Date =
- FunctionDateOrDateTimeToSomething<DataTypeDateV2,
- DateImpl<DateV2Value<DateTimeV2ValueType>, UInt64>>;
+ FunctionDateOrDateTimeToSomething<DataTypeDateV2, ToDateImpl<UInt64>>;
+using FunctionDateTimeV2Date = FunctionDateOrDateTimeToSomething<DataTypeDateV2, DateImpl<UInt64>>;
using FunctionTimeStamp = FunctionDateOrDateTimeToSomething<DataTypeDateTime, TimeStampImpl<Int64>>;
diff --git a/be/src/vec/runtime/vdatetime_value.cpp b/be/src/vec/runtime/vdatetime_value.cpp
index 28ecf960f2..1458349e0c 100644
--- a/be/src/vec/runtime/vdatetime_value.cpp
+++ b/be/src/vec/runtime/vdatetime_value.cpp
@@ -25,17 +25,18 @@
#include <sstream>
#include <valarray>
+#include "common/config.h"
#include "runtime/datetime_value.h"
#include "util/timezone_utils.h"
namespace doris::vectorized {
-static int s_days_in_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+static constexpr int s_days_in_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static const char* s_ab_month_name[] = {"", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", nullptr};
-static const char* s_ab_day_name[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", NULL};
+static const char* s_ab_day_name[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", nullptr};
uint8_t mysql_week_mode(uint32_t mode) {
mode &= 7;
diff --git a/be/src/vec/runtime/vdatetime_value.h b/be/src/vec/runtime/vdatetime_value.h
index edf918d5fb..c40eefd8dd 100644
--- a/be/src/vec/runtime/vdatetime_value.h
+++ b/be/src/vec/runtime/vdatetime_value.h
@@ -15,8 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-#ifndef DORIS_BE_RUNTIME_VDATETIME_VALUE_H
-#define DORIS_BE_RUNTIME_VDATETIME_VALUE_H
+#pragma once
#include <re2/re2.h>
#include <stdint.h>
@@ -25,9 +24,7 @@
#include <cstddef>
#include <iostream>
-#include "cctz/civil_time.h"
#include "cctz/time_zone.h"
-#include "common/config.h"
#include "udf/udf.h"
#include "util/hash_util.hpp"
#include "util/time_lut.h"
@@ -1457,6 +1454,31 @@ int64_t datetime_diff(const VecDateTimeValue& ts_value1, const DateV2Value<T>& t
return 0;
}
+class DataTypeDateTime;
+class DataTypeDateV2;
+class DataTypeDateTimeV2;
+
+template <typename T>
+struct DateTraits {};
+
+template <>
+struct DateTraits<int64_t> {
+ using T = VecDateTimeValue;
+ using DateType = DataTypeDateTime;
+};
+
+template <>
+struct DateTraits<uint32_t> {
+ using T = DateV2Value<DateV2ValueType>;
+ using DateType = DataTypeDateV2;
+};
+
+template <>
+struct DateTraits<uint64_t> {
+ using T = DateV2Value<DateTimeV2ValueType>;
+ using DateType = DataTypeDateTimeV2;
+};
+
} // namespace vectorized
} // namespace doris
@@ -1484,5 +1506,3 @@ struct hash<doris::vectorized::DateV2Value<doris::vectorized::DateTimeV2ValueTyp
}
};
} // namespace std
-
-#endif
diff --git a/tools/tpch-tools/queries/q9.sql b/tools/tpch-tools/queries/q9.sql
index 4960e8b67e..357813c6ca 100644
--- a/tools/tpch-tools/queries/q9.sql
+++ b/tools/tpch-tools/queries/q9.sql
@@ -17,7 +17,7 @@
-- Modified
-select/*+SET_VAR(exec_mem_limit=17179869184, parallel_fragment_exec_instance_num=4, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=false, enable_projection=true, enable_remove_no_conjuncts_runtime_filter_policy=true, runtime_filter_wait_time_ms=10000) */
+select/*+SET_VAR(exec_mem_limit=37179869184, parallel_fragment_exec_instance_num=16, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=false, enable_projection=true, enable_remove_no_conjuncts_runtime_filter_policy=true, runtime_filter_wait_time_ms=10000) */
nation,
o_year,
sum(amount) as sum_profit
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org