2011/06/07

codeigniterでpostgresqlのlike検索にバグがある件

基本的にMySQL向けに作られているフレームワークだとしてもこれはさすがにひどいでしょ。。。
バグは2点みつけてます。
CIのバージョンは1.7.3です。

①点目
[RESOLVED] Undefined property: CI_DB_postgre_driver::$_like_escape_char | CodeIgniter Forums
↑のURLに書いてあるとおりただのスペルミスです。。

From
$like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_char);

To
$like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_chr);

②点目
「%(パーセント)」「_(アンダースコア)」を含むライク検索が出来ない。

/database/drivers/postgre/postgre_driver.php
299行目

$str = str_replace( array('%', '_',$this->_like_escape_chr),
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_' , $this->_like_escape_chr.$this->_like_escape_chr),
$str);

str_replaceでエスケープを行っているが配列の順番がおかしいため
エスケープ文字が2コ付くようになってしまっています。
下記のように修正

$str = str_replace( array($this->_like_escape_chr ,'%', '_'),
array($this->_like_escape_chr.$this->_like_escape_chr ,$this->_like_escape_chr.'%', $this->_like_escape_chr.'_' ),
$str);

置換前、置換後の配列の3番目の要素をそれぞれ1番目にもってくる。これでOK。
こんなすぐ分かるバグぐらい誰かフィックスしとけよと。

0 件のコメント:

コメントを投稿