Fixed bug #17269: Search with LIKE is case sensitive on Oracle
authorXavier Perseguers <typo3@perseguers.ch>
Mon, 24 Jan 2011 14:55:27 +0000 (14:55 +0000)
committerXavier Perseguers <typo3@perseguers.ch>
Mon, 24 Jan 2011 14:55:27 +0000 (14:55 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Extensions/dbal/trunk@42537 735d13b6-9817-0410-8766-e36946ffe9aa

typo3/sysext/dbal/ChangeLog
typo3/sysext/dbal/class.ux_t3lib_sqlparser.php
typo3/sysext/dbal/tests/dbOracleTest.php

index 8fcf2e1..2bd0ad8 100644 (file)
@@ -1,3 +1,7 @@
+2011-01-24  Xavier Perseguers  <typo3@perseguers.ch>
+
+       * Fixed bug #17269: Search with LIKE is case sensitive on Oracle
+
 2010-12-27  Xavier Perseguers  <typo3@perseguers.ch>
 
        * Set version to 1.2.0beta3
index bf606a7..3f59f76 100644 (file)
@@ -609,9 +609,9 @@ class ux_t3lib_sqlparser extends t3lib_sqlparser {
                                                                                        $isLob = ($fieldType === 'B' || $fieldType === 'XL');
                                                                                }
                                                                                if ($isLob) {
-                                                                                       $output .= '(dbms_lob.instr(' . trim(($v['table'] ? $v['table'] . '.' : '') . $v['field']) . ', ' . $compareValue . ',1,1) > 0)';
+                                                                                       $output .= '(dbms_lob.instr(LOWER(' . trim(($v['table'] ? $v['table'] . '.' : '') . $v['field']) . '), ' . t3lib_div::strtolower($compareValue) . ',1,1) > 0)';
                                                                                } else {
-                                                                                       $output .= '(instr(' . trim(($v['table'] ? $v['table'] . '.' : '') . $v['field']) . ', ' . $compareValue . ',1,1) > 0)';
+                                                                                       $output .= '(instr(LOWER(' . trim(($v['table'] ? $v['table'] . '.' : '') . $v['field']) . '), ' . t3lib_div::strtolower($compareValue) . ',1,1) > 0)';
                                                                                }
                                                                                break;
                                                                        default:
index 7c2c874..2ce1ff4 100644 (file)
@@ -318,7 +318,7 @@ class dbOracleTest extends BaseTestCase {
                                                . ' AND sys_refindex.ref_string LIKE CONCAT(tx_dam_file_tracking.file_path, tx_dam_file_tracking.file_name)'
                ));
                $expected = 'SELECT * FROM "sys_refindex", "tx_dam_file_tracking" WHERE "sys_refindex"."tablename" = \'tx_dam_file_tracking\'';
-               $expected .= ' AND (instr("sys_refindex"."ref_string", CONCAT("tx_dam_file_tracking"."file_path","tx_dam_file_tracking"."file_name"),1,1) > 0)';
+               $expected .= ' AND (instr(LOWER("sys_refindex"."ref_string"), CONCAT("tx_dam_file_tracking"."file_path","tx_dam_file_tracking"."file_name"),1,1) > 0)';
                $this->assertEquals($expected, $query);
        }
 
@@ -448,7 +448,7 @@ class dbOracleTest extends BaseTestCase {
                $query = $this->cleanSql($GLOBALS['TYPO3_DB']->_call('SELECTqueryFromArray', $remappedParameters));
 
                $expected = 'SELECT * FROM "sys_refindex", "tx_dam_file_tracking" WHERE "sys_refindex"."tablename" = \'tx_dam_file_tracking\'';
-               $expected .= ' AND (instr("sys_refindex"."ref_string", CONCAT("tx_dam_file_tracking"."path","tx_dam_file_tracking"."filename"),1,1) > 0)';
+               $expected .= ' AND (instr(LOWER("sys_refindex"."ref_string"), CONCAT("tx_dam_file_tracking"."path","tx_dam_file_tracking"."filename"),1,1) > 0)';
                $this->assertEquals($expected, $query);
        }
 
@@ -666,7 +666,7 @@ class dbOracleTest extends BaseTestCase {
                        'tt_content',
                        'tt_content.bodytext LIKE \'foo%\''
                ));
-               $expected = 'SELECT * FROM "tt_content" WHERE (dbms_lob.instr("tt_content"."bodytext", \'foo\',1,1) > 0)';
+               $expected = 'SELECT * FROM "tt_content" WHERE (dbms_lob.instr(LOWER("tt_content"."bodytext"), \'foo\',1,1) > 0)';
                $this->assertEquals($expected, $select);
 
                $select = $this->cleanSql($GLOBALS['TYPO3_DB']->SELECTquery(
@@ -674,7 +674,7 @@ class dbOracleTest extends BaseTestCase {
                        'fe_users',
                        'fe_users.usergroup LIKE \'2\''
                ));
-               $expected = 'SELECT * FROM "fe_users" WHERE (instr("fe_users"."usergroup", \'2\',1,1) > 0)';
+               $expected = 'SELECT * FROM "fe_users" WHERE (instr(LOWER("fe_users"."usergroup"), \'2\',1,1) > 0)';
                $this->assertEquals($expected, $select);
        }
 
@@ -688,7 +688,7 @@ class dbOracleTest extends BaseTestCase {
                        'tt_content',
                        'tt_content.bodytext NOT LIKE \'foo%\''
                ));
-               $expected = 'SELECT * FROM "tt_content" WHERE NOT (dbms_lob.instr("tt_content"."bodytext", \'foo\',1,1) > 0)';
+               $expected = 'SELECT * FROM "tt_content" WHERE NOT (dbms_lob.instr(LOWER("tt_content"."bodytext"), \'foo\',1,1) > 0)';
                $this->assertEquals($expected, $select);
 
                $select = $this->cleanSql($GLOBALS['TYPO3_DB']->SELECTquery(
@@ -696,7 +696,7 @@ class dbOracleTest extends BaseTestCase {
                        'fe_users',
                        'fe_users.usergroup NOT LIKE \'2\''
                ));
-               $expected = 'SELECT * FROM "fe_users" WHERE NOT (instr("fe_users"."usergroup", \'2\',1,1) > 0)';
+               $expected = 'SELECT * FROM "fe_users" WHERE NOT (instr(LOWER("fe_users"."usergroup"), \'2\',1,1) > 0)';
                $this->assertEquals($expected, $select);
        }
 
@@ -722,13 +722,13 @@ class dbOracleTest extends BaseTestCase {
                $expected .= ' AND "tt_content"."hidden" = 0 AND ("tt_content"."starttime" <= 1264487640)';
                $expected .= ' AND ("tt_content"."endtime" = 0 OR "tt_content"."endtime" > 1264487640)';
                $expected .= ' AND ("tt_content"."fe_group" = \'\' OR "tt_content"."fe_group" IS NULL OR "tt_content"."fe_group" = \'0\'';
-               $expected .= ' OR ((instr("tt_content"."fe_group", \',0,\',1,1) > 0)';
-               $expected .= ' OR (instr("tt_content"."fe_group", \'0,\',1,1) > 0)';
-               $expected .= ' OR (instr("tt_content"."fe_group", \',0\',1,1) > 0)';
+               $expected .= ' OR ((instr(LOWER("tt_content"."fe_group"), \',0,\',1,1) > 0)';
+               $expected .= ' OR (instr(LOWER("tt_content"."fe_group"), \'0,\',1,1) > 0)';
+               $expected .= ' OR (instr(LOWER("tt_content"."fe_group"), \',0\',1,1) > 0)';
                $expected .= ' OR "tt_content"."fe_group" = \'0\')';
-               $expected .= ' OR ((instr("tt_content"."fe_group", \',-1,\',1,1) > 0)';
-               $expected .= ' OR (instr("tt_content"."fe_group", \'-1,\',1,1) > 0)';
-               $expected .= ' OR (instr("tt_content"."fe_group", \',-1\',1,1) > 0)';
+               $expected .= ' OR ((instr(LOWER("tt_content"."fe_group"), \',-1,\',1,1) > 0)';
+               $expected .= ' OR (instr(LOWER("tt_content"."fe_group"), \'-1,\',1,1) > 0)';
+               $expected .= ' OR (instr(LOWER("tt_content"."fe_group"), \',-1\',1,1) > 0)';
                $expected .= ' OR "tt_content"."fe_group" = \'-1\'))';
                $this->assertEquals($expected, $select);
        }
@@ -1137,7 +1137,7 @@ class dbOracleTest extends BaseTestCase {
                        'tt_content',
                        'bodytext LIKE BINARY \'test\''
                ));
-               $expected = 'SELECT * FROM "tt_content" WHERE (dbms_lob.instr("bodytext", \'test\',1,1) > 0)';
+               $expected = 'SELECT * FROM "tt_content" WHERE (dbms_lob.instr(LOWER("bodytext"), \'test\',1,1) > 0)';
                $this->assertEquals($expected, $query);
        }
 }