You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-07 03:22:57 +03:00
Properly initialize hasCollation data member of Row and RowGroup classes.
This commit is contained in:
@@ -544,8 +544,9 @@ Row::Row(const Row& r) : columnCount(r.columnCount), baseRid(r.baseRid),
|
|||||||
offsets(r.offsets), colWidths(r.colWidths), types(r.types),
|
offsets(r.offsets), colWidths(r.colWidths), types(r.types),
|
||||||
charsetNumbers(r.charsetNumbers), charsets(r.charsets),
|
charsetNumbers(r.charsetNumbers), charsets(r.charsets),
|
||||||
data(r.data), scale(r.scale), precision(r.precision), strings(r.strings),
|
data(r.data), scale(r.scale), precision(r.precision), strings(r.strings),
|
||||||
useStringTable(r.useStringTable), hasCollation(r.hasCollation), hasLongStringField(r.hasLongStringField),
|
useStringTable(r.useStringTable), hasCollation(r.hasCollation),
|
||||||
sTableThreshold(r.sTableThreshold), forceInline(r.forceInline), userDataStore(NULL)
|
hasLongStringField(r.hasLongStringField), sTableThreshold(r.sTableThreshold),
|
||||||
|
forceInline(r.forceInline), userDataStore(NULL)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
Row::~Row() { }
|
Row::~Row() { }
|
||||||
@@ -1149,7 +1150,7 @@ const CHARSET_INFO* Row::getCharset(uint32_t col) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
RowGroup::RowGroup() : columnCount(0), data(NULL), rgData(NULL), strings(NULL),
|
RowGroup::RowGroup() : columnCount(0), data(NULL), rgData(NULL), strings(NULL),
|
||||||
useStringTable(true), hasLongStringField(false), sTableThreshold(20)
|
useStringTable(true), hasCollation(false), hasLongStringField(false), sTableThreshold(20)
|
||||||
{
|
{
|
||||||
// 1024 is too generous to waste.
|
// 1024 is too generous to waste.
|
||||||
oldOffsets.reserve(10);
|
oldOffsets.reserve(10);
|
||||||
@@ -1191,6 +1192,7 @@ RowGroup::RowGroup(uint32_t colCount,
|
|||||||
stOffsets.resize(columnCount + 1);
|
stOffsets.resize(columnCount + 1);
|
||||||
stOffsets[0] = 2; // 2-byte rid
|
stOffsets[0] = 2; // 2-byte rid
|
||||||
hasLongStringField = false;
|
hasLongStringField = false;
|
||||||
|
hasCollation = false;
|
||||||
|
|
||||||
for (i = 0; i < columnCount; i++)
|
for (i = 0; i < columnCount; i++)
|
||||||
{
|
{
|
||||||
@@ -1226,8 +1228,8 @@ RowGroup::RowGroup(const RowGroup& r) :
|
|||||||
oids(r.oids), keys(r.keys), types(r.types), charsetNumbers(r.charsetNumbers),
|
oids(r.oids), keys(r.keys), types(r.types), charsetNumbers(r.charsetNumbers),
|
||||||
charsets(r.charsets), scale(r.scale), precision(r.precision),
|
charsets(r.charsets), scale(r.scale), precision(r.precision),
|
||||||
rgData(r.rgData), strings(r.strings), useStringTable(r.useStringTable),
|
rgData(r.rgData), strings(r.strings), useStringTable(r.useStringTable),
|
||||||
hasLongStringField(r.hasLongStringField), sTableThreshold(r.sTableThreshold),
|
hasCollation(r.hasCollation), hasLongStringField(r.hasLongStringField),
|
||||||
forceInline(r.forceInline)
|
sTableThreshold(r.sTableThreshold), forceInline(r.forceInline)
|
||||||
{
|
{
|
||||||
//stOffsets and oldOffsets are sometimes empty...
|
//stOffsets and oldOffsets are sometimes empty...
|
||||||
//offsets = (useStringTable ? &stOffsets[0] : &oldOffsets[0]);
|
//offsets = (useStringTable ? &stOffsets[0] : &oldOffsets[0]);
|
||||||
@@ -1299,6 +1301,7 @@ void RowGroup::serialize(ByteStream& bs) const
|
|||||||
serializeInlineVector<uint32_t>(bs, scale);
|
serializeInlineVector<uint32_t>(bs, scale);
|
||||||
serializeInlineVector<uint32_t>(bs, precision);
|
serializeInlineVector<uint32_t>(bs, precision);
|
||||||
bs << (uint8_t) useStringTable;
|
bs << (uint8_t) useStringTable;
|
||||||
|
bs << (uint8_t) hasCollation;
|
||||||
bs << (uint8_t) hasLongStringField;
|
bs << (uint8_t) hasLongStringField;
|
||||||
bs << sTableThreshold;
|
bs << sTableThreshold;
|
||||||
bs.append((uint8_t*) &forceInline[0], sizeof(bool) * columnCount);
|
bs.append((uint8_t*) &forceInline[0], sizeof(bool) * columnCount);
|
||||||
@@ -1321,6 +1324,8 @@ void RowGroup::deserialize(ByteStream& bs)
|
|||||||
bs >> tmp8;
|
bs >> tmp8;
|
||||||
useStringTable = (bool) tmp8;
|
useStringTable = (bool) tmp8;
|
||||||
bs >> tmp8;
|
bs >> tmp8;
|
||||||
|
hasCollation = (bool) tmp8;
|
||||||
|
bs >> tmp8;
|
||||||
hasLongStringField = (bool) tmp8;
|
hasLongStringField = (bool) tmp8;
|
||||||
bs >> sTableThreshold;
|
bs >> sTableThreshold;
|
||||||
forceInline.reset(new bool[columnCount]);
|
forceInline.reset(new bool[columnCount]);
|
||||||
@@ -1551,6 +1556,7 @@ RowGroup& RowGroup::operator+=(const RowGroup& rhs)
|
|||||||
|
|
||||||
hasLongStringField = rhs.hasLongStringField || hasLongStringField;
|
hasLongStringField = rhs.hasLongStringField || hasLongStringField;
|
||||||
useStringTable = rhs.useStringTable || useStringTable;
|
useStringTable = rhs.useStringTable || useStringTable;
|
||||||
|
hasCollation = rhs.hasCollation || hasCollation;
|
||||||
offsets = (useStringTable ? &stOffsets[0] : &oldOffsets[0]);
|
offsets = (useStringTable ? &stOffsets[0] : &oldOffsets[0]);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
@@ -1791,13 +1797,22 @@ RowGroup RowGroup::truncate(uint32_t cols)
|
|||||||
memcpy(ret.forceInline.get(), forceInline.get(), cols * sizeof(bool));
|
memcpy(ret.forceInline.get(), forceInline.get(), cols * sizeof(bool));
|
||||||
|
|
||||||
ret.hasLongStringField = false;
|
ret.hasLongStringField = false;
|
||||||
|
ret.hasCollation = false;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < columnCount; i++)
|
for (uint32_t i = 0; i < columnCount &&
|
||||||
|
(!ret.hasLongStringField || !ret.hasCollation); i++)
|
||||||
{
|
{
|
||||||
if (colWidths[i] >= sTableThreshold && !forceInline[i])
|
if (colWidths[i] >= sTableThreshold && !forceInline[i])
|
||||||
{
|
{
|
||||||
ret.hasLongStringField = true;
|
ret.hasLongStringField = true;
|
||||||
break;
|
}
|
||||||
|
|
||||||
|
execplan::CalpontSystemCatalog::ColDataType type = types[i];
|
||||||
|
if ((type == execplan::CalpontSystemCatalog::CHAR && (colWidths[i] > 1)) ||
|
||||||
|
type == execplan::CalpontSystemCatalog::VARCHAR ||
|
||||||
|
type == execplan::CalpontSystemCatalog::TEXT)
|
||||||
|
{
|
||||||
|
ret.hasCollation = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user