mysql:3623
From: <takeshi@xxxxxxxxxx>
Date: Thu, 10 May 2001 00:39:30 +0900
Subject: [mysql 03623] Re: REPLACE 関数の問題
At Wed, 09 May 2001 17:44:52 +0900, Akihiko Shinohara wrote: > どうも、REPLACE関数がうまく動かないようです。 > > | mysql> select replace('abcd','a','b'); > | +-------------------------+ > | | replace('abcd','a','b') | > | +-------------------------+ > | | bbcd | > | +-------------------------+ > | 1 row in set (0.00 sec) > | > | mysql> select replace('abcd','a','ab'); > > これを実行すると、サーバからレスポンスが得られません。 > サーバ内で無限ループに陥っている感じです。 MultiBytes の場合おこるようです。とりあえずのパッチです diff -ru mysql-3.23.37.orig/sql/item_strfunc.cc mysql-3.23.37/sql/item_strfunc.cc --- mysql-3.23.37.orig/sql/item_strfunc.cc Wed Apr 18 17:45:53 2001 +++ mysql-3.23.37/sql/item_strfunc.cc Thu May 10 00:35:26 2001 @@ -393,12 +393,14 @@ String *Item_func_replace::val_str(String *str) { String *res,*res2,*res3; - int offset=0; + int offset; uint from_length,to_length; bool alloced=0; #ifdef USE_MB const char *ptr,*end,*strend,*search,*search_end; register uint32 l; + bool binary_str = (args[0]->binary || args[1]->binary || + !use_mb(default_charset_info)); #endif null_value=0; @@ -415,7 +417,8 @@ if ((offset=res->strstr(*res2)) < 0) return res; #else - if (!use_mb(default_charset_info) && (offset=res->strstr(*res2)) < 0) + offset=0; + if (binary_str && (offset=res->strstr(*res2)) < 0) return res; #endif if (!(res3=args[2]->val_str(&tmp_value2))) @@ -424,7 +427,7 @@ to_length= res3->length(); #ifdef USE_MB - if (use_mb(default_charset_info)) + if (!binary_str) { search=res2->ptr(); search_end=search+from_length; @@ -449,6 +452,7 @@ res=copy_if_not_alloced(str,res,res->length()+to_length); } res->replace((uint) offset,from_length,*res3); + offset+=(int) to_length; goto redo; } skipp: -- 村上 毅 takeshi@xxxxxxxxxx Soft Agency Co., Ltd. TEL +81-48-661-1527 PGP fingerprint = 45 5D 54 12 B4 55 77 7F D4 52 66 EC 03 3F 1B E9
3619 2001-05-09 17:44 [Akihiko Shinohara <s] REPLACE 関数の問題 3620 2001-05-09 18:21 ┣[Seiji Tateyama <tate] -> 3623 2001-05-10 00:39 ┗[<takeshi@xxxxxxxxxx>] 3624 2001-05-10 10:44 ┗[Akihiko Shinohara <s]