You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
fix(funcexp): MCOL-5237 Proper handle DATETIME column for "ifnull" function. (#3196)
This commit is contained in:
16
mysql-test/columnstore/bugfixes/mcol-5237.result
Normal file
16
mysql-test/columnstore/bugfixes/mcol-5237.result
Normal file
@ -0,0 +1,16 @@
|
||||
DROP DATABASE IF EXISTS mcol_5237;
|
||||
CREATE DATABASE mcol_5237;
|
||||
USE mcol_5237;
|
||||
create table t1 (a varchar(1000), b datetime, c int) ENGINE=Columnstore DEFAULT CHARSET=utf8;
|
||||
insert into t1 values
|
||||
('abc', null, 1),
|
||||
('xyz', str_to_date('2022-09-22 00:00:00', '%Y-%m-%d %H:%i:%s'), 1);
|
||||
create view v1 as
|
||||
select a, NVL(b, str_to_date('1970-01-01 00:00:00', '%Y-%m-%d %H:%i:%s')) as b, c from t1;
|
||||
select count(*) from v1 where YEAR(b) = 2022;
|
||||
count(*)
|
||||
1
|
||||
select count(*) from v1 where YEAR(b) = 1970;
|
||||
count(*)
|
||||
1
|
||||
DROP DATABASE mcol_5237;
|
26
mysql-test/columnstore/bugfixes/mcol-5237.test
Normal file
26
mysql-test/columnstore/bugfixes/mcol-5237.test
Normal file
@ -0,0 +1,26 @@
|
||||
#
|
||||
# MCOL-5237
|
||||
#
|
||||
|
||||
--source ../include/have_columnstore.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mcol_5237;
|
||||
--enable_warnings
|
||||
CREATE DATABASE mcol_5237;
|
||||
USE mcol_5237;
|
||||
create table t1 (a varchar(1000), b datetime, c int) ENGINE=Columnstore DEFAULT CHARSET=utf8;
|
||||
|
||||
insert into t1 values
|
||||
('abc', null, 1),
|
||||
('xyz', str_to_date('2022-09-22 00:00:00', '%Y-%m-%d %H:%i:%s'), 1);
|
||||
|
||||
create view v1 as
|
||||
select a, NVL(b, str_to_date('1970-01-01 00:00:00', '%Y-%m-%d %H:%i:%s')) as b, c from t1;
|
||||
|
||||
select count(*) from v1 where YEAR(b) = 2022;
|
||||
select count(*) from v1 where YEAR(b) = 1970;
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE mcol_5237;
|
||||
--enable_warnings
|
@ -25,6 +25,7 @@
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#include "constantcolumn.h"
|
||||
#include "functor_all.h"
|
||||
#include "functioncolumn.h"
|
||||
using namespace execplan;
|
||||
@ -60,7 +61,14 @@ int64_t Func_ifnull::getIntVal(Row& row, FunctionParm& parm, bool& isNull, Calpo
|
||||
if (isNull)
|
||||
{
|
||||
isNull = false;
|
||||
return parm[1]->data()->getIntVal(row, isNull);
|
||||
r = parm[1]->data()->getIntVal(row, isNull);
|
||||
// MCOL-5237 In case we substitude a null value for `DATETIME` column with a value from `ConstantColumn`
|
||||
// we have to convert the value into the `DATETIME` format for `int64_t` type.
|
||||
if (parm[0]->data()->resultType().colDataType == CalpontSystemCatalog::DATETIME &&
|
||||
dynamic_cast<ConstantColumn*>(parm[1]->data()))
|
||||
{
|
||||
r = r << 48;
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
|
Reference in New Issue
Block a user