BUG 11104 (same as changeset 1.1891 on the 5.0 tree, but realised this
needed to be fixed in earlier versions) Fixed the iteration of how substrings are handled with negative indexes in SUBSTRING_INDEX
This commit is contained in:
parent
4098c40d87
commit
8109934e1d
@ -38,6 +38,123 @@ www. .se
|
||||
select substring_index('.tcx.se','.',-2),substring_index('.tcx.se','.tcx',-1);
|
||||
substring_index('.tcx.se','.',-2) substring_index('.tcx.se','.tcx',-1)
|
||||
tcx.se .se
|
||||
select substring_index('aaaaaaaaa1','a',1);
|
||||
substring_index('aaaaaaaaa1','a',1)
|
||||
|
||||
select substring_index('aaaaaaaaa1','aa',1);
|
||||
substring_index('aaaaaaaaa1','aa',1)
|
||||
|
||||
select substring_index('aaaaaaaaa1','aa',2);
|
||||
substring_index('aaaaaaaaa1','aa',2)
|
||||
aa
|
||||
select substring_index('aaaaaaaaa1','aa',3);
|
||||
substring_index('aaaaaaaaa1','aa',3)
|
||||
aaaa
|
||||
select substring_index('aaaaaaaaa1','aa',4);
|
||||
substring_index('aaaaaaaaa1','aa',4)
|
||||
aaaaaa
|
||||
select substring_index('aaaaaaaaa1','aa',5);
|
||||
substring_index('aaaaaaaaa1','aa',5)
|
||||
aaaaaaaaa1
|
||||
select substring_index('aaaaaaaaa1','aaa',1);
|
||||
substring_index('aaaaaaaaa1','aaa',1)
|
||||
|
||||
select substring_index('aaaaaaaaa1','aaa',2);
|
||||
substring_index('aaaaaaaaa1','aaa',2)
|
||||
aaa
|
||||
select substring_index('aaaaaaaaa1','aaa',3);
|
||||
substring_index('aaaaaaaaa1','aaa',3)
|
||||
aaaaaa
|
||||
select substring_index('aaaaaaaaa1','aaa',4);
|
||||
substring_index('aaaaaaaaa1','aaa',4)
|
||||
aaaaaaaaa1
|
||||
select substring_index('aaaaaaaaa1','aaaa',1);
|
||||
substring_index('aaaaaaaaa1','aaaa',1)
|
||||
|
||||
select substring_index('aaaaaaaaa1','aaaa',2);
|
||||
substring_index('aaaaaaaaa1','aaaa',2)
|
||||
aaaa
|
||||
select substring_index('aaaaaaaaa1','1',1);
|
||||
substring_index('aaaaaaaaa1','1',1)
|
||||
aaaaaaaaa
|
||||
select substring_index('aaaaaaaaa1','a',-1);
|
||||
substring_index('aaaaaaaaa1','a',-1)
|
||||
1
|
||||
select substring_index('aaaaaaaaa1','aa',-1);
|
||||
substring_index('aaaaaaaaa1','aa',-1)
|
||||
1
|
||||
select substring_index('aaaaaaaaa1','aa',-2);
|
||||
substring_index('aaaaaaaaa1','aa',-2)
|
||||
aa1
|
||||
select substring_index('aaaaaaaaa1','aa',-3);
|
||||
substring_index('aaaaaaaaa1','aa',-3)
|
||||
aaaa1
|
||||
select substring_index('aaaaaaaaa1','aa',-4);
|
||||
substring_index('aaaaaaaaa1','aa',-4)
|
||||
aaaaaa1
|
||||
select substring_index('aaaaaaaaa1','aa',-5);
|
||||
substring_index('aaaaaaaaa1','aa',-5)
|
||||
aaaaaaaaa1
|
||||
select substring_index('aaaaaaaaa1','aaa',-1);
|
||||
substring_index('aaaaaaaaa1','aaa',-1)
|
||||
1
|
||||
select substring_index('aaaaaaaaa1','aaa',-2);
|
||||
substring_index('aaaaaaaaa1','aaa',-2)
|
||||
aaa1
|
||||
select substring_index('aaaaaaaaa1','aaa',-3);
|
||||
substring_index('aaaaaaaaa1','aaa',-3)
|
||||
aaaaaa1
|
||||
select substring_index('aaaaaaaaa1','aaa',-4);
|
||||
substring_index('aaaaaaaaa1','aaa',-4)
|
||||
|
||||
select substring_index('the king of thethe hill','the',-2);
|
||||
substring_index('the king of thethe hill','the',-2)
|
||||
the hill
|
||||
select substring_index('the king of the the hill','the',-2);
|
||||
substring_index('the king of the the hill','the',-2)
|
||||
the hill
|
||||
select substring_index('the king of the the hill','the',-2);
|
||||
substring_index('the king of the the hill','the',-2)
|
||||
the hill
|
||||
select substring_index('the king of the the hill',' the ',-1);
|
||||
substring_index('the king of the the hill',' the ',-1)
|
||||
hill
|
||||
select substring_index('the king of the the hill',' the ',-2);
|
||||
substring_index('the king of the the hill',' the ',-2)
|
||||
the hill
|
||||
select substring_index('the king of the the hill',' ',-1);
|
||||
substring_index('the king of the the hill',' ',-1)
|
||||
hill
|
||||
select substring_index('the king of the the hill',' ',-2);
|
||||
substring_index('the king of the the hill',' ',-2)
|
||||
the hill
|
||||
select substring_index('the king of the the hill',' ',-3);
|
||||
substring_index('the king of the the hill',' ',-3)
|
||||
the hill
|
||||
select substring_index('the king of the the hill',' ',-4);
|
||||
substring_index('the king of the the hill',' ',-4)
|
||||
the the hill
|
||||
select substring_index('the king of the the hill',' ',-5);
|
||||
substring_index('the king of the the hill',' ',-5)
|
||||
of the the hill
|
||||
select substring_index('the king of the.the hill','the',-2);
|
||||
substring_index('the king of the.the hill','the',-2)
|
||||
.the hill
|
||||
select substring_index('the king of thethethe.the hill','the',-3);
|
||||
substring_index('the king of thethethe.the hill','the',-3)
|
||||
the.the hill
|
||||
select substring_index('the king of thethethe.the hill','the',-1);
|
||||
substring_index('the king of thethethe.the hill','the',-1)
|
||||
hill
|
||||
select substring_index('the king of the the hill','the',1);
|
||||
substring_index('the king of the the hill','the',1)
|
||||
|
||||
select substring_index('the king of the the hill','the',2);
|
||||
substring_index('the king of the the hill','the',2)
|
||||
the king of
|
||||
select substring_index('the king of the the hill','the',3);
|
||||
substring_index('the king of the the hill','the',3)
|
||||
the king of the
|
||||
select concat(':',ltrim(' left '),':',rtrim(' right '),':');
|
||||
concat(':',ltrim(' left '),':',rtrim(' right '),':')
|
||||
:left : right:
|
||||
|
@ -19,6 +19,45 @@ select concat('',left(right(concat('what ',concat('is ','happening')),9),4),'',s
|
||||
select substring_index('www.tcx.se','.',-2),substring_index('www.tcx.se','.',1);
|
||||
select substring_index('www.tcx.se','tcx',1),substring_index('www.tcx.se','tcx',-1);
|
||||
select substring_index('.tcx.se','.',-2),substring_index('.tcx.se','.tcx',-1);
|
||||
select substring_index('aaaaaaaaa1','a',1);
|
||||
select substring_index('aaaaaaaaa1','aa',1);
|
||||
select substring_index('aaaaaaaaa1','aa',2);
|
||||
select substring_index('aaaaaaaaa1','aa',3);
|
||||
select substring_index('aaaaaaaaa1','aa',4);
|
||||
select substring_index('aaaaaaaaa1','aa',5);
|
||||
select substring_index('aaaaaaaaa1','aaa',1);
|
||||
select substring_index('aaaaaaaaa1','aaa',2);
|
||||
select substring_index('aaaaaaaaa1','aaa',3);
|
||||
select substring_index('aaaaaaaaa1','aaa',4);
|
||||
select substring_index('aaaaaaaaa1','aaaa',1);
|
||||
select substring_index('aaaaaaaaa1','aaaa',2);
|
||||
select substring_index('aaaaaaaaa1','1',1);
|
||||
select substring_index('aaaaaaaaa1','a',-1);
|
||||
select substring_index('aaaaaaaaa1','aa',-1);
|
||||
select substring_index('aaaaaaaaa1','aa',-2);
|
||||
select substring_index('aaaaaaaaa1','aa',-3);
|
||||
select substring_index('aaaaaaaaa1','aa',-4);
|
||||
select substring_index('aaaaaaaaa1','aa',-5);
|
||||
select substring_index('aaaaaaaaa1','aaa',-1);
|
||||
select substring_index('aaaaaaaaa1','aaa',-2);
|
||||
select substring_index('aaaaaaaaa1','aaa',-3);
|
||||
select substring_index('aaaaaaaaa1','aaa',-4);
|
||||
select substring_index('the king of thethe hill','the',-2);
|
||||
select substring_index('the king of the the hill','the',-2);
|
||||
select substring_index('the king of the the hill','the',-2);
|
||||
select substring_index('the king of the the hill',' the ',-1);
|
||||
select substring_index('the king of the the hill',' the ',-2);
|
||||
select substring_index('the king of the the hill',' ',-1);
|
||||
select substring_index('the king of the the hill',' ',-2);
|
||||
select substring_index('the king of the the hill',' ',-3);
|
||||
select substring_index('the king of the the hill',' ',-4);
|
||||
select substring_index('the king of the the hill',' ',-5);
|
||||
select substring_index('the king of the.the hill','the',-2);
|
||||
select substring_index('the king of thethethe.the hill','the',-3);
|
||||
select substring_index('the king of thethethe.the hill','the',-1);
|
||||
select substring_index('the king of the the hill','the',1);
|
||||
select substring_index('the king of the the hill','the',2);
|
||||
select substring_index('the king of the the hill','the',3);
|
||||
|
||||
select concat(':',ltrim(' left '),':',rtrim(' right '),':');
|
||||
select concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':');
|
||||
|
@ -1084,11 +1084,23 @@ String *Item_func_substr_index::val_str(String *str)
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Start counting at end
|
||||
for (offset=res->length() ; ; offset-=delimeter_length-1)
|
||||
{
|
||||
/*
|
||||
Negative index, start counting at the end
|
||||
*/
|
||||
for (offset=res->length(); offset ;)
|
||||
{
|
||||
/*
|
||||
this call will result in finding the position pointing to one
|
||||
address space less than where the found substring is located
|
||||
in res
|
||||
*/
|
||||
if ((int) (offset=res->strrstr(*delimeter,offset)) < 0)
|
||||
return res; // Didn't find, return org string
|
||||
/*
|
||||
At this point, we've searched for the substring
|
||||
the number of times as supplied by the index value
|
||||
*/
|
||||
if (!++count)
|
||||
{
|
||||
offset+=delimeter_length;
|
||||
|
Loading…
x
Reference in New Issue
Block a user