Loading mysql-test/r/func_str.result +117 −0 Original line number Diff line number Diff line Loading @@ -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: Loading mysql-test/t/func_str.test +39 −0 Original line number Diff line number Diff line Loading @@ -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 '),':'); Loading sql/item_strfunc.cc +14 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
mysql-test/r/func_str.result +117 −0 Original line number Diff line number Diff line Loading @@ -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: Loading
mysql-test/t/func_str.test +39 −0 Original line number Diff line number Diff line Loading @@ -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 '),':'); Loading
sql/item_strfunc.cc +14 −2 Original line number Diff line number Diff line Loading @@ -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