1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

Mcol 5092 MODA uses wrong column width for some types (#2450)

* MCOL-5092 Ensure column width is correct for datatype
                       Change MODA return type to STRING
                       Modify MODA to handle every numeric type
* MCOL-5162 MODA to support char and varchar with collation support

Fixes to the aggregate bit functions
When we fixed the storage sign issue for MCOL-5092, it uncovered a problem in the bit aggregates (bit_and, bit_or and bit_xor). These aggregates should always return UBIGINT, but they relied on the type of the argument column, which gave bad results.
This commit is contained in:
David.Hall
2022-08-11 15:16:11 -05:00
committed by GitHub
parent c906172bf5
commit 2020f35e88
16 changed files with 594 additions and 111 deletions

View File

@ -478,49 +478,49 @@ int TypeHandlerVarbinary::storeValueToField(rowgroup::Row& row, int pos, StoreFi
int TypeHandlerSInt64::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
int64_t val = row.getIntField<8>(pos);
return f->store_xlonglong(val);
return f->store_longlong(val);
}
int TypeHandlerUInt64::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
uint64_t val = row.getUintField<8>(pos);
return f->store_xlonglong(static_cast<int64_t>(val));
return f->store_ulonglong(val);
}
int TypeHandlerInt::storeValueToFieldSInt32(rowgroup::Row& row, int pos, StoreField* f) const
{
int64_t val = row.getIntField<4>(pos);
return f->store_xlonglong(val);
return f->store_longlong(val);
}
int TypeHandlerInt::storeValueToFieldUInt32(rowgroup::Row& row, int pos, StoreField* f) const
{
uint64_t val = row.getUintField<4>(pos);
return f->store_xlonglong(static_cast<int64_t>(val));
return f->store_ulonglong(val);
}
int TypeHandlerSInt16::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
int64_t val = row.getIntField<2>(pos);
return f->store_xlonglong(val);
return f->store_longlong(val);
}
int TypeHandlerUInt16::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
uint64_t val = row.getUintField<2>(pos);
return f->store_xlonglong(static_cast<int64_t>(val));
return f->store_ulonglong(val);
}
int TypeHandlerSInt8::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
int64_t val = row.getIntField<1>(pos);
return f->store_xlonglong(val);
return f->store_longlong(val);
}
int TypeHandlerUInt8::storeValueToField(rowgroup::Row& row, int pos, StoreField* f) const
{
uint64_t val = row.getUintField<1>(pos);
return f->store_xlonglong(static_cast<int64_t>(val));
return f->store_ulonglong(val);
}
/*

View File

@ -953,7 +953,8 @@ class StoreField
virtual int store_timestamp(int64_t val) = 0;
virtual int store_string(const char* str, size_t length) = 0;
virtual int store_varbinary(const char* str, size_t length) = 0;
virtual int store_xlonglong(int64_t val) = 0;
virtual int store_longlong(int64_t val) = 0;
virtual int store_ulonglong(uint64_t val) = 0;
virtual int store_float(float val) = 0;
virtual int store_double(double val) = 0;
virtual int store_long_double(long double val) = 0;