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
Part#1 MCOL-4064 Make JOIN collation aware
Making field1=field2 collation aware for long CHAR/VARCHAR.
This commit is contained in:
@ -354,7 +354,11 @@ void BatchPrimitiveProcessor::initBPP(ByteStream& bs)
|
||||
bs >> tlKeyLengths[i];
|
||||
//storedKeyAllocators[i] = PoolAllocator();
|
||||
for (uint j = 0; j < processorThreads; ++j)
|
||||
tlJoiners[i][j].reset(new TLJoiner(10, TupleJoiner::hasher()));
|
||||
tlJoiners[i][j].reset(new TLJoiner(10,
|
||||
TupleJoiner::TypelessDataHasher(&outputRG,
|
||||
&tlLargeSideKeyColumns[i]),
|
||||
TupleJoiner::TypelessDataComparator(&outputRG,
|
||||
&tlLargeSideKeyColumns[i])));
|
||||
}
|
||||
}
|
||||
|
||||
@ -613,7 +617,7 @@ void BatchPrimitiveProcessor::addToJoiner(ByteStream& bs)
|
||||
{
|
||||
tlLargeKey.deserialize(bs, storedKeyAllocator);
|
||||
bs >> tlIndex;
|
||||
bucket = bucketPicker((char *) tlLargeKey.data, tlLargeKey.len, bpSeed) & ptMask;
|
||||
bucket = tlLargeKey.hash(outputRG, tlLargeSideKeyColumns[joinerNum]) & ptMask;
|
||||
tmpBuckets[bucket].push_back(make_pair(tlLargeKey, tlIndex));
|
||||
}
|
||||
else
|
||||
@ -1188,7 +1192,7 @@ void BatchPrimitiveProcessor::executeTupleJoin()
|
||||
// the null values are not sent by UM in typeless case. null -> !found
|
||||
tlLargeKey = makeTypelessKey(oldRow, tlLargeSideKeyColumns[j], tlKeyLengths[j],
|
||||
&tmpKeyAllocators[j]);
|
||||
uint bucket = bucketPicker((char *) tlLargeKey.data, tlLargeKey.len, bpSeed) & ptMask;
|
||||
uint bucket = tlLargeKey.hash(outputRG, tlLargeSideKeyColumns[j]) & ptMask;
|
||||
found = tlJoiners[j][bucket]->find(tlLargeKey) != tlJoiners[j][bucket]->end();
|
||||
|
||||
if ((!found && !(joinTypes[j] & (LARGEOUTER | ANTI))) ||
|
||||
@ -2736,7 +2740,7 @@ inline void BatchPrimitiveProcessor::getJoinResults(const Row& r, uint32_t jInde
|
||||
TypelessData largeKey = makeTypelessKey(r, tlLargeSideKeyColumns[jIndex],
|
||||
tlKeyLengths[jIndex], &tmpKeyAllocators[jIndex]);
|
||||
pair<TLJoiner::iterator, TLJoiner::iterator> range;
|
||||
bucket = bucketPicker((char *) largeKey.data, largeKey.len, bpSeed) & ptMask;
|
||||
bucket = largeKey.hash(outputRG, tlLargeSideKeyColumns[jIndex]) & ptMask;
|
||||
range = tlJoiners[jIndex][bucket]->equal_range(largeKey);
|
||||
for (; range.first != range.second; ++range.first)
|
||||
v.push_back(range.first->second);
|
||||
|
Reference in New Issue
Block a user