[Bug](Datetime) Fix date time function mem use after free (#16814)
This commit is contained in:
@ -452,8 +452,8 @@ struct DateTimeAddIntervalImpl {
|
||||
const auto is_nullable = block.get_by_position(result).type->is_nullable();
|
||||
if (const auto* sources = check_and_get_column<ColumnVector<FromType1>>(source_col.get())) {
|
||||
auto col_to = ColumnVector<ToType>::create();
|
||||
const IColumn& delta_column =
|
||||
*remove_nullable(block.get_by_position(arguments[1]).column);
|
||||
auto delta_column_ptr = remove_nullable(block.get_by_position(arguments[1]).column);
|
||||
const IColumn& delta_column = *delta_column_ptr;
|
||||
|
||||
if (is_nullable) {
|
||||
auto null_map = ColumnUInt8::create(input_rows_count, 0);
|
||||
@ -545,16 +545,17 @@ struct DateTimeAddIntervalImpl {
|
||||
auto col_to = ColumnVector<ToType>::create();
|
||||
if (is_nullable) {
|
||||
auto null_map = ColumnUInt8::create(input_rows_count, 0);
|
||||
auto not_nullable_column_ptr_arg1 =
|
||||
remove_nullable(block.get_by_position(arguments[1]).column);
|
||||
if (const auto* delta_vec_column = check_and_get_column<ColumnVector<FromType2>>(
|
||||
*remove_nullable(block.get_by_position(arguments[1]).column))) {
|
||||
*not_nullable_column_ptr_arg1)) {
|
||||
Op::constant_vector(sources_const->template get_value<FromType1>(),
|
||||
col_to->get_data(), null_map->get_data(),
|
||||
delta_vec_column->get_data());
|
||||
} else {
|
||||
Op::constant_vector(
|
||||
sources_const->template get_value<FromType2>(), col_to->get_data(),
|
||||
null_map->get_data(),
|
||||
*remove_nullable(block.get_by_position(arguments[1]).column));
|
||||
Op::constant_vector(sources_const->template get_value<FromType2>(),
|
||||
col_to->get_data(), null_map->get_data(),
|
||||
*not_nullable_column_ptr_arg1);
|
||||
}
|
||||
if (const auto* nullable_col = check_and_get_column<ColumnNullable>(
|
||||
block.get_by_position(arguments[0]).column.get())) {
|
||||
|
||||
@ -590,6 +590,9 @@ true
|
||||
-- !sql --
|
||||
2019-08-01T13:21:02.111111
|
||||
|
||||
-- !sql --
|
||||
-1096
|
||||
|
||||
-- !sql --
|
||||
\N \N \N \N
|
||||
2000-02-29 2000-02-29 2000-02-29 2000-02-29
|
||||
|
||||
@ -548,6 +548,8 @@ suite("test_date_function") {
|
||||
qt_sql """ select minutes_sub(test_time2,1) result from ${tableName}; """
|
||||
//seconds_sub
|
||||
qt_sql """ select seconds_sub(test_time2,1) result from ${tableName}; """
|
||||
//datediff
|
||||
qt_sql """ select datediff(test_time2, STR_TO_DATE('2022-08-01 00:00:00','%Y-%m-%d')) from ${tableName}; """
|
||||
|
||||
// test last_day for vec
|
||||
sql """ DROP TABLE IF EXISTS ${tableName}; """
|
||||
|
||||
Reference in New Issue
Block a user