Commit c2b60a6f authored by unknown's avatar unknown

Fix for bug#1944 'Function RPad() sometimes produce unexpected result'

parent d8e425c2
...@@ -119,12 +119,12 @@ montymontymontymontymonty * * ...@@ -119,12 +119,12 @@ montymontymontymontymonty * *
select reverse('abc'),reverse('abcd'); select reverse('abc'),reverse('abcd');
reverse('abc') reverse('abcd') reverse('abc') reverse('abcd')
cba dcba cba dcba
select rpad('a',4,'1'),rpad('a',4,'12'),rpad('abcd',3,'12'); select rpad('a',4,'1'),rpad('a',4,'12'),rpad('abcd',3,'12'), rpad(11, 10 , 22), rpad("ab", 10, 22);
rpad('a',4,'1') rpad('a',4,'12') rpad('abcd',3,'12') rpad('a',4,'1') rpad('a',4,'12') rpad('abcd',3,'12') rpad(11, 10 , 22) rpad("ab", 10, 22)
a111 a121 abc a111 a121 abc 1122222222 ab22222222
select lpad('a',4,'1'),lpad('a',4,'12'),lpad('abcd',3,'12'); select lpad('a',4,'1'),lpad('a',4,'12'),lpad('abcd',3,'12'), lpad(11, 10 , 22);
lpad('a',4,'1') lpad('a',4,'12') lpad('abcd',3,'12') lpad('a',4,'1') lpad('a',4,'12') lpad('abcd',3,'12') lpad(11, 10 , 22)
111a 121a abc 111a 121a abc 2222222211
select rpad(741653838,17,'0'),lpad(741653838,17,'0'); select rpad(741653838,17,'0'),lpad(741653838,17,'0');
rpad(741653838,17,'0') lpad(741653838,17,'0') rpad(741653838,17,'0') lpad(741653838,17,'0')
74165383800000000 00000000741653838 74165383800000000 00000000741653838
...@@ -134,6 +134,12 @@ abcdaba abaabcd ...@@ -134,6 +134,12 @@ abcdaba abaabcd
select rpad('abcd',1,'ab'),lpad('abcd',1,'ab'); select rpad('abcd',1,'ab'),lpad('abcd',1,'ab');
rpad('abcd',1,'ab') lpad('abcd',1,'ab') rpad('abcd',1,'ab') lpad('abcd',1,'ab')
a a a a
select rpad('STRING', 20, CONCAT('p','a','d') );
rpad('STRING', 20, CONCAT('p','a','d') )
STRINGpadpadpadpadpa
select lpad('STRING', 20, CONCAT('p','a','d') );
lpad('STRING', 20, CONCAT('p','a','d') )
padpadpadpadpaSTRING
select LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'),GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'); select LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'),GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD');
LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD') GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD') LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD') GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD')
HAROLD HARRY HAROLD HARRY
......
...@@ -49,11 +49,13 @@ select aes_decrypt("a","a"); ...@@ -49,11 +49,13 @@ select aes_decrypt("a","a");
select aes_decrypt(aes_encrypt("","a"),"a"); select aes_decrypt(aes_encrypt("","a"),"a");
select repeat('monty',5),concat('*',space(5),'*'); select repeat('monty',5),concat('*',space(5),'*');
select reverse('abc'),reverse('abcd'); select reverse('abc'),reverse('abcd');
select rpad('a',4,'1'),rpad('a',4,'12'),rpad('abcd',3,'12'); select rpad('a',4,'1'),rpad('a',4,'12'),rpad('abcd',3,'12'), rpad(11, 10 , 22), rpad("ab", 10, 22);
select lpad('a',4,'1'),lpad('a',4,'12'),lpad('abcd',3,'12'); select lpad('a',4,'1'),lpad('a',4,'12'),lpad('abcd',3,'12'), lpad(11, 10 , 22);
select rpad(741653838,17,'0'),lpad(741653838,17,'0'); select rpad(741653838,17,'0'),lpad(741653838,17,'0');
select rpad('abcd',7,'ab'),lpad('abcd',7,'ab'); select rpad('abcd',7,'ab'),lpad('abcd',7,'ab');
select rpad('abcd',1,'ab'),lpad('abcd',1,'ab'); select rpad('abcd',1,'ab'),lpad('abcd',1,'ab');
select rpad('STRING', 20, CONCAT('p','a','d') );
select lpad('STRING', 20, CONCAT('p','a','d') );
select LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'),GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'); select LEAST(NULL,'HARRY','HARRIOT',NULL,'HAROLD'),GREATEST(NULL,'HARRY','HARRIOT',NULL,'HAROLD');
select least(1,2,3) | greatest(16,32,8), least(5,4)*1,greatest(-1.0,1.0)*1,least(3,2,1)*1.0,greatest(1,1.1,1.0),least("10",9),greatest("A","B","0"); select least(1,2,3) | greatest(16,32,8), least(5,4)*1,greatest(-1.0,1.0)*1,least(3,2,1)*1.0,greatest(1,1.1,1.0),least("10",9),greatest("A","B","0");
......
...@@ -1806,7 +1806,7 @@ String *Item_func_rpad::val_str(String *str) ...@@ -1806,7 +1806,7 @@ String *Item_func_rpad::val_str(String *str)
const char *ptr_pad; const char *ptr_pad;
int32 count= (int32) args[1]->val_int(); int32 count= (int32) args[1]->val_int();
String *res =args[0]->val_str(str); String *res =args[0]->val_str(str);
String *rpad = args[2]->val_str(str); String *rpad = args[2]->val_str(&rpad_str);
if (!res || args[1]->null_value || !rpad || count < 0) if (!res || args[1]->null_value || !rpad || count < 0)
goto err; goto err;
...@@ -1866,7 +1866,7 @@ String *Item_func_lpad::val_str(String *str) ...@@ -1866,7 +1866,7 @@ String *Item_func_lpad::val_str(String *str)
const char *ptr_pad; const char *ptr_pad;
ulong count= (long) args[1]->val_int(); ulong count= (long) args[1]->val_int();
String *res= args[0]->val_str(str); String *res= args[0]->val_str(str);
String *lpad= args[2]->val_str(str); String *lpad= args[2]->val_str(&lpad_str);
if (!res || args[1]->null_value || !lpad) if (!res || args[1]->null_value || !lpad)
goto err; goto err;
......
...@@ -436,7 +436,7 @@ class Item_func_repeat :public Item_str_func ...@@ -436,7 +436,7 @@ class Item_func_repeat :public Item_str_func
class Item_func_rpad :public Item_str_func class Item_func_rpad :public Item_str_func
{ {
String tmp_value; String tmp_value, rpad_str;
public: public:
Item_func_rpad(Item *arg1,Item *arg2,Item *arg3) Item_func_rpad(Item *arg1,Item *arg2,Item *arg3)
:Item_str_func(arg1,arg2,arg3) {} :Item_str_func(arg1,arg2,arg3) {}
...@@ -449,7 +449,7 @@ class Item_func_rpad :public Item_str_func ...@@ -449,7 +449,7 @@ class Item_func_rpad :public Item_str_func
class Item_func_lpad :public Item_str_func class Item_func_lpad :public Item_str_func
{ {
String tmp_value; String tmp_value, lpad_str;
public: public:
Item_func_lpad(Item *arg1,Item *arg2,Item *arg3) Item_func_lpad(Item *arg1,Item *arg2,Item *arg3)
:Item_str_func(arg1,arg2,arg3) {} :Item_str_func(arg1,arg2,arg3) {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment