1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

MCOL-2233 substring_index() now returns correct value when

index value is negative.
The problem caused by unsigned type used to store negative
index value.
This commit is contained in:
Roman Nozdrin
2019-03-13 13:02:17 +03:00
parent 2509d833fc
commit 9ff348b97f

View File

@ -62,7 +62,7 @@ std::string Func_substring_index::getStrVal(rowgroup::Row& row,
if (isNull)
return "";
size_t count = fp[2]->data()->getIntVal(row, isNull);
int64_t count = fp[2]->data()->getIntVal(row, isNull);
if (isNull)
return "";
@ -70,7 +70,8 @@ std::string Func_substring_index::getStrVal(rowgroup::Row& row,
if ( count == 0 )
return "";
size_t end = strlen(str.c_str());
// To avoid comparison b/w int64_t and size_t
int64_t end = strlen(str.c_str()) & 0x7fffffffffffffff;
if ( count > end )
return str;
@ -84,7 +85,7 @@ std::string Func_substring_index::getStrVal(rowgroup::Row& row,
{
int pointer = 0;
for ( size_t i = 0 ; i < count ; i ++ )
for ( int64_t i = 0 ; i < count ; i ++ )
{
string::size_type pos = str.find(delim, pointer);
@ -103,7 +104,7 @@ std::string Func_substring_index::getStrVal(rowgroup::Row& row,
int pointer = end;
int start = 0;
for ( size_t i = 0 ; i < count ; i ++ )
for ( int64_t i = 0 ; i < count ; i ++ )
{
string::size_type pos = str.rfind(delim, pointer);