diff --git a/mysql-test/columnstore/bugfixes/mcol_5386.result b/mysql-test/columnstore/bugfixes/mcol_5386.result new file mode 100644 index 000000000..be7da80c1 --- /dev/null +++ b/mysql-test/columnstore/bugfixes/mcol_5386.result @@ -0,0 +1,11 @@ +DROP DATABASE IF EXISTS mcol_5386; +CREATE DATABASE mcol_5386; +USE mcol_5386; +DROP TABLE IF EXISTS t1; +create table t1(c decimal(19)) engine=columnstore; +insert into t1(c) values (-2); +select bit_or(c), bit_xor(c), bit_and(c) from t1; +bit_or(c) bit_xor(c) bit_and(c) +18446744073709551614 18446744073709551614 18446744073709551614 +DROP TABLE IF EXISTS t1; +DROP DATABASE mcol_5386; diff --git a/mysql-test/columnstore/bugfixes/mcol_5386.test b/mysql-test/columnstore/bugfixes/mcol_5386.test new file mode 100644 index 000000000..ab81c0177 --- /dev/null +++ b/mysql-test/columnstore/bugfixes/mcol_5386.test @@ -0,0 +1,21 @@ +-- source ../include/have_columnstore.inc +--disable_warnings +DROP DATABASE IF EXISTS mcol_5386; +--enable_warnings +CREATE DATABASE mcol_5386; +USE mcol_5386; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +create table t1(c decimal(19)) engine=columnstore; +insert into t1(c) values (-2); +select bit_or(c), bit_xor(c), bit_and(c) from t1; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--disable_warnings +DROP DATABASE mcol_5386; +--enable_warnings diff --git a/utils/rowgroup/rowgroup.h b/utils/rowgroup/rowgroup.h index 573d10611..7ecab0eca 100644 --- a/utils/rowgroup/rowgroup.h +++ b/utils/rowgroup/rowgroup.h @@ -866,6 +866,8 @@ inline int64_t Row::getIntField(uint32_t colIndex) const case 8: return *((int64_t*)&data[offsets[colIndex]]); + case 16: return *((int128_t*)&data[offsets[colIndex]]); + default: idbassert(0); throw std::logic_error("Row::getIntField(): bad length."); } }