You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-01 06:46:55 +03:00
MCOL-4417 Non-equality comparison operators do not work well with NOPAD collations
This commit is contained in:
@ -58,22 +58,22 @@ inline bool PrimitiveProcessor::compare(int cmp, uint8_t COP, int len1, int len2
|
||||
return false;
|
||||
|
||||
case COMPARE_LT:
|
||||
return (cmp < 0 || (cmp == 0 && len1 < len2));
|
||||
return cmp < 0;
|
||||
|
||||
case COMPARE_EQ:
|
||||
return (cmp == 0 && len1 == len2 ? true : false);
|
||||
return cmp == 0;
|
||||
|
||||
case COMPARE_LE:
|
||||
return (cmp < 0 || (cmp == 0 && len1 <= len2));
|
||||
return cmp <= 0;
|
||||
|
||||
case COMPARE_GT:
|
||||
return (cmp > 0 || (cmp == 0 && len1 > len2));
|
||||
return cmp > 0;
|
||||
|
||||
case COMPARE_NE:
|
||||
return (cmp != 0 || len1 != len2 ? true : false);
|
||||
return cmp != 0;
|
||||
|
||||
case COMPARE_GE:
|
||||
return (cmp > 0 || (cmp == 0 && len1 >= len2));
|
||||
return cmp >= 0;
|
||||
|
||||
case COMPARE_LIKE:
|
||||
return cmp; // is done elsewhere; shouldn't get here. Exception?
|
||||
@ -213,7 +213,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = cs->strnncoll(sig, siglen, args->data, args->len);
|
||||
tmp = cs->strnncollsp(sig, siglen, args->data, args->len);
|
||||
cmpResult = compare(tmp, h->COP1, siglen, args->len);
|
||||
}
|
||||
|
||||
@ -254,7 +254,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
||||
|
||||
else
|
||||
{
|
||||
tmp = cs->strnncoll(sig, siglen, args->data, args->len);
|
||||
tmp = cs->strnncollsp(sig, siglen, args->data, args->len);
|
||||
cmpResult = compare(tmp, h->COP2, siglen, args->len);
|
||||
}
|
||||
|
||||
@ -282,7 +282,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
||||
|
||||
else
|
||||
{
|
||||
tmp = cs->strnncoll(sig, siglen, args->data, args->len);
|
||||
tmp = cs->strnncollsp(sig, siglen, args->data, args->len);
|
||||
cmpResult = compare(tmp, h->COP2, siglen, args->len);
|
||||
}
|
||||
|
||||
@ -704,7 +704,7 @@ void PrimitiveProcessor::p_Dictionary(const DictInput* in,
|
||||
// len == 0 indicates this is the first pass
|
||||
if (max.len != 0)
|
||||
{
|
||||
tmp = cs->strnncoll(sigptr.data, sigptr.len, max.data, max.len);
|
||||
tmp = cs->strnncollsp(sigptr.data, sigptr.len, max.data, max.len);
|
||||
|
||||
if (tmp > 0)
|
||||
max = sigptr;
|
||||
@ -714,7 +714,7 @@ void PrimitiveProcessor::p_Dictionary(const DictInput* in,
|
||||
|
||||
if (min.len != 0)
|
||||
{
|
||||
tmp = cs->strnncoll(sigptr.data, sigptr.len, min.data, min.len);
|
||||
tmp = cs->strnncollsp(sigptr.data, sigptr.len, min.data, min.len);
|
||||
|
||||
if (tmp < 0)
|
||||
min = sigptr;
|
||||
@ -757,7 +757,7 @@ void PrimitiveProcessor::p_Dictionary(const DictInput* in,
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = cs->strnncoll(sigptr.data, sigptr.len, filter->data, filter->len);
|
||||
tmp = cs->strnncollsp(sigptr.data, sigptr.len, filter->data, filter->len);
|
||||
cmpResult = compare(tmp, filter->COP, sigptr.len, filter->len);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user