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 2519931a04 [vectorized](function) support time_to_sec function (#18354) 2519931a04 is described below commit 2519931a048014cfc51284a4a795016435b294b0 Author: zhangstar333 <87313068+zhangstar...@users.noreply.github.com> AuthorDate: Thu Apr 13 19:31:12 2023 +0800 [vectorized](function) support time_to_sec function (#18354) support time_to_sec function --- be/src/vec/exprs/vectorized_fn_call.cpp | 9 +++- .../function_date_or_datetime_computation.cpp | 2 + .../function_date_or_datetime_computation.h | 28 +++++++++++++ .../date-time-functions/time_to_sec.md | 48 ++++++++++++++++++++++ docs/sidebars.json | 1 + .../date-time-functions/time_to_sec.md | 48 ++++++++++++++++++++++ gensrc/script/doris_builtins_functions.py | 1 + 7 files changed, 136 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exprs/vectorized_fn_call.cpp b/be/src/vec/exprs/vectorized_fn_call.cpp index 0680d05bbe..761797b762 100644 --- a/be/src/vec/exprs/vectorized_fn_call.cpp +++ b/be/src/vec/exprs/vectorized_fn_call.cpp @@ -59,7 +59,14 @@ doris::Status VectorizedFnCall::prepare(doris::RuntimeState* state, argument_template, _data_type); } if (_function == nullptr) { - return Status::InternalError("Function {} is not implemented", _fn.name.function_name); + std::string type_str; + for (auto arg : argument_template) { + type_str = type_str + " " + arg.type->get_name(); + } + return Status::InternalError( + "Function {} is not implemented, input param type is {}, " + "and return type is {}.", + _fn.name.function_name, type_str, _data_type->get_name()); } VExpr::register_function_context(state, context); _expr_name = fmt::format("{}({})", _fn.name.function_name, child_expr_name); diff --git a/be/src/vec/functions/function_date_or_datetime_computation.cpp b/be/src/vec/functions/function_date_or_datetime_computation.cpp index 8df40c1fc3..990c6da187 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.cpp +++ b/be/src/vec/functions/function_date_or_datetime_computation.cpp @@ -122,6 +122,7 @@ struct CurrentTimeFunctionName { using FunctionCurTime = FunctionCurrentDateOrDateTime<CurrentTimeImpl<CurTimeFunctionName>>; using FunctionCurrentTime = FunctionCurrentDateOrDateTime<CurrentTimeImpl<CurrentTimeFunctionName>>; using FunctionUtcTimeStamp = FunctionCurrentDateOrDateTime<UtcTimestampImpl>; +using FunctionTimeToSec = FunctionCurrentDateOrDateTime<TimeToSecImpl>; void register_function_date_time_computation(SimpleFunctionFactory& factory) { factory.register_function<FunctionAddSeconds>(); @@ -171,6 +172,7 @@ void register_function_date_time_computation(SimpleFunctionFactory& factory) { factory.register_function<FunctionCurTime>(); factory.register_function<FunctionCurrentTime>(); factory.register_function<FunctionUtcTimeStamp>(); + factory.register_function<FunctionTimeToSec>(); // alias factory.register_alias("days_add", "date_add"); diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h b/be/src/vec/functions/function_date_or_datetime_computation.h index 731da580db..f84f16c725 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.h +++ b/be/src/vec/functions/function_date_or_datetime_computation.h @@ -25,6 +25,7 @@ #include "util/binary_cast.hpp" #include "vec/columns/column_const.h" #include "vec/columns/column_vector.h" +#include "vec/core/types.h" #include "vec/data_types/data_type_date.h" #include "vec/data_types/data_type_date_time.h" #include "vec/data_types/data_type_number.h" @@ -1001,6 +1002,33 @@ struct CurrentTimeImpl { } }; +struct TimeToSecImpl { + using ReturnType = DataTypeInt32; + static constexpr auto name = "time_to_sec"; + static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments, + size_t result, size_t input_rows_count) { + auto res_col = ColumnVector<Int32>::create(); + const auto& [argument_column, arg_is_const] = + unpack_if_const(block.get_by_position(arguments[0]).column); + const auto& column_data = assert_cast<const ColumnFloat64&>(*argument_column); + if (arg_is_const) { + double time = column_data.get_element(0); + res_col->insert_value(static_cast<int>(time)); + block.replace_by_position(result, + ColumnConst::create(std::move(res_col), input_rows_count)); + } else { + auto& res_data = res_col->get_data(); + res_data.resize(input_rows_count); + for (int i = 0; i < input_rows_count; ++i) { + double time = column_data.get_element(i); + res_data[i] = static_cast<int>(time); + } + block.replace_by_position(result, std::move(res_col)); + } + return Status::OK(); + } +}; + struct UtcTimestampImpl { using ReturnType = DataTypeDateTime; static constexpr auto name = "utc_timestamp"; diff --git a/docs/en/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md b/docs/en/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md new file mode 100644 index 0000000000..7a28683a4d --- /dev/null +++ b/docs/en/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md @@ -0,0 +1,48 @@ +--- +{ + "title": "time_to_sec", + "language": "en" +} +--- + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +## time_to_sec +### description +#### Syntax + +`INT time_to_sec(TIME datetime)` + +input parameter is the time type +Convert the specified time value to seconds, returned result is: hours × 3600+ minutes×60 + seconds. + +### example + +``` +mysql >select current_time(),time_to_sec(current_time()); ++----------------+-----------------------------+ +| current_time() | time_to_sec(current_time()) | ++----------------+-----------------------------+ +| 16:32:18 | 59538 | ++----------------+-----------------------------+ +1 row in set (0.01 sec) +``` +### keywords + TIME_TO_SEC diff --git a/docs/sidebars.json b/docs/sidebars.json index 69895e2d7c..128a46da79 100644 --- a/docs/sidebars.json +++ b/docs/sidebars.json @@ -340,6 +340,7 @@ "sql-manual/sql-functions/date-time-functions/utc_timestamp", "sql-manual/sql-functions/date-time-functions/to_date", "sql-manual/sql-functions/date-time-functions/to_days", + "sql-manual/sql-functions/date-time-functions/time_to_sec", "sql-manual/sql-functions/date-time-functions/extract", "sql-manual/sql-functions/date-time-functions/makedate", "sql-manual/sql-functions/date-time-functions/str_to_date", diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md new file mode 100644 index 0000000000..f35e9982b3 --- /dev/null +++ b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/time_to_sec.md @@ -0,0 +1,48 @@ +--- +{ + "title": "time_to_sec", + "language": "zh-CN" +} +--- + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +## time_to_sec +### description +#### Syntax + +`INT time_to_sec(TIME datetime)` + +参数为Datetime类型 +将指定的时间值转为秒数,即返回结果为:小时×3600 + 分钟×60 + 秒。 + +### example + +``` +mysql >select current_time(),time_to_sec(current_time()); ++----------------+-----------------------------+ +| current_time() | time_to_sec(current_time()) | ++----------------+-----------------------------+ +| 16:32:18 | 59538 | ++----------------+-----------------------------+ +1 row in set (0.01 sec) +``` +### keywords + TIME_TO_SEC diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index c987e1e111..39fd36f54e 100644 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -951,6 +951,7 @@ visible_functions = [ [['timestamp'], 'DATETIMEV2', ['DATETIMEV2'], ''], [['to_days'], 'INT', ['DATEV2'], ''], + [['time_to_sec'], 'INT', ['TIME'], ''], [['year'], 'INT', ['DATETIMEV2'], ''], [['month'], 'INT', ['DATETIMEV2'], ''], --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org