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
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;
|
return false;
|
||||||
|
|
||||||
case COMPARE_LT:
|
case COMPARE_LT:
|
||||||
return (cmp < 0 || (cmp == 0 && len1 < len2));
|
return cmp < 0;
|
||||||
|
|
||||||
case COMPARE_EQ:
|
case COMPARE_EQ:
|
||||||
return (cmp == 0 && len1 == len2 ? true : false);
|
return cmp == 0;
|
||||||
|
|
||||||
case COMPARE_LE:
|
case COMPARE_LE:
|
||||||
return (cmp < 0 || (cmp == 0 && len1 <= len2));
|
return cmp <= 0;
|
||||||
|
|
||||||
case COMPARE_GT:
|
case COMPARE_GT:
|
||||||
return (cmp > 0 || (cmp == 0 && len1 > len2));
|
return cmp > 0;
|
||||||
|
|
||||||
case COMPARE_NE:
|
case COMPARE_NE:
|
||||||
return (cmp != 0 || len1 != len2 ? true : false);
|
return cmp != 0;
|
||||||
|
|
||||||
case COMPARE_GE:
|
case COMPARE_GE:
|
||||||
return (cmp > 0 || (cmp == 0 && len1 >= len2));
|
return cmp >= 0;
|
||||||
|
|
||||||
case COMPARE_LIKE:
|
case COMPARE_LIKE:
|
||||||
return cmp; // is done elsewhere; shouldn't get here. Exception?
|
return cmp; // is done elsewhere; shouldn't get here. Exception?
|
||||||
@@ -213,7 +213,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
|||||||
}
|
}
|
||||||
else
|
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);
|
cmpResult = compare(tmp, h->COP1, siglen, args->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
|||||||
|
|
||||||
else
|
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);
|
cmpResult = compare(tmp, h->COP2, siglen, args->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +282,7 @@ void PrimitiveProcessor::p_TokenByScan(const TokenByScanRequestHeader* h,
|
|||||||
|
|
||||||
else
|
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);
|
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
|
// len == 0 indicates this is the first pass
|
||||||
if (max.len != 0)
|
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)
|
if (tmp > 0)
|
||||||
max = sigptr;
|
max = sigptr;
|
||||||
@@ -714,7 +714,7 @@ void PrimitiveProcessor::p_Dictionary(const DictInput* in,
|
|||||||
|
|
||||||
if (min.len != 0)
|
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)
|
if (tmp < 0)
|
||||||
min = sigptr;
|
min = sigptr;
|
||||||
@@ -757,7 +757,7 @@ void PrimitiveProcessor::p_Dictionary(const DictInput* in,
|
|||||||
}
|
}
|
||||||
else
|
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);
|
cmpResult = compare(tmp, filter->COP, sigptr.len, filter->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user