summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.mysql.r18.ru>2003-03-30 18:36:01 +0500
committerunknown <hf@deer.mysql.r18.ru>2003-03-30 18:36:01 +0500
commit5380411728be50eb7a4d8fbcb337e6c2f14a9e7a (patch)
treea21c2b605e1720fc0506df39a9d292c62658b491
parent420686dd8e363449f60813279ea6766660fe82c8 (diff)
downloadmariadb-git-5380411728be50eb7a4d8fbcb337e6c2f14a9e7a.tar.gz
truncating REPLACE result bug fix
mysql-test/r/func_str.result: test result for truncating REPLACE result mysql-test/t/func_str.test: test with long arguments for REPLACE sql/item_strfunc.cc: fix for counting REPLACE result length
-rw-r--r--mysql-test/r/func_str.result3
-rw-r--r--mysql-test/t/func_str.test1
-rw-r--r--sql/item_strfunc.cc4
3 files changed, 6 insertions, 2 deletions
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index 9e8f2b90f07..a72d32d39f8 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -225,6 +225,9 @@ CONCAT('"',CONCAT_WS('";"',title,prio,category,program,bugstatus,submitter), '"'
SELECT CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter) FROM t1;
CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter)
Link";"1";"1";"1";"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";"2001-02-28 08:40:16";"20010228084016";"0";"4
+SELECT bugdesc, REPLACE(bugdesc, 'xxxxxxxxxxxxxxxxxxxx', 'bbbbbbbbbbbbbbbbbbbb') from t1 group by bugdesc;
+bugdesc REPLACE(bugdesc, 'xxxxxxxxxxxxxxxxxxxx', 'bbbbbbbbbbbbbbbbbbbb')
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
drop table t1;
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, tmp text NOT NULL, KEY id (id)) TYPE=MyISAM;
INSERT INTO t1 VALUES (1, 'a545f661efdd1fb66fdee3aab79945bf');
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index f95cd901dfb..118de6cd01e 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -114,6 +114,7 @@ INSERT INTO t1 VALUES (1,'Link',1,1,1,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SELECT CONCAT('"',CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter), '"') FROM t1;
SELECT CONCAT('"',CONCAT_WS('";"',title,prio,category,program,bugstatus,submitter), '"') FROM t1;
SELECT CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter) FROM t1;
+SELECT bugdesc, REPLACE(bugdesc, 'xxxxxxxxxxxxxxxxxxxx', 'bbbbbbbbbbbbbbbbbbbb') from t1 group by bugdesc;
drop table t1;
#
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index bff8bc7e3f4..0f1ce8adba6 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -780,8 +780,8 @@ void Item_func_replace::fix_length_and_dec()
int diff=(int) (args[2]->max_length - args[1]->max_length);
if (diff > 0 && args[1]->max_length)
{ // Calculate of maxreplaces
- max_length= max_length/args[1]->max_length;
- max_length= (max_length+1)*(uint) diff;
+ uint max_substrs= max_length/args[1]->max_length;
+ max_length+= max_substrs * (uint)diff;
}
if (max_length > MAX_BLOB_WIDTH)
{