You've already forked mariadb-columnstore-engine
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:
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user