mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 01:11:15 +02:00
[ticket/12671] Possibility to use NOT LIKE expression
PHPBB3-12671
This commit is contained in:
@ -377,7 +377,7 @@ abstract class driver implements driver_interface
|
|||||||
$expression = utf8_str_replace(array('_', '%'), array("\_", "\%"), $expression);
|
$expression = utf8_str_replace(array('_', '%'), array("\_", "\%"), $expression);
|
||||||
$expression = utf8_str_replace(array(chr(0) . "\_", chr(0) . "\%"), array('_', '%'), $expression);
|
$expression = utf8_str_replace(array(chr(0) . "\_", chr(0) . "\%"), array('_', '%'), $expression);
|
||||||
|
|
||||||
return $this->_sql_like_expression('NOT LIKE \'' . $this->sql_escape($expression) . '\'');
|
return $this->_sql_not_like_expression('NOT LIKE \'' . $this->sql_escape($expression) . '\'');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -274,6 +274,23 @@ class sqlite3 extends \phpbb\db\driver\driver
|
|||||||
return 'GLOB \'' . $this->sql_escape($expression) . '\'';
|
return 'GLOB \'' . $this->sql_escape($expression) . '\'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* For SQLite an underscore is a not-known character...
|
||||||
|
*/
|
||||||
|
public function sql_not_like_expression($expression)
|
||||||
|
{
|
||||||
|
// Unlike LIKE, GLOB is case sensitive (unfortunatly). SQLite users need to live with it!
|
||||||
|
// We only catch * and ? here, not the character map possible on file globbing.
|
||||||
|
$expression = str_replace(array(chr(0) . '_', chr(0) . '%'), array(chr(0) . '?', chr(0) . '*'), $expression);
|
||||||
|
|
||||||
|
$expression = str_replace(array('?', '*'), array("\?", "\*"), $expression);
|
||||||
|
$expression = str_replace(array(chr(0) . "\?", chr(0) . "\*"), array('?', '*'), $expression);
|
||||||
|
|
||||||
|
return 'GLOB \'' . $this->sql_escape($expression) . '\'';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return sql error array
|
* return sql error array
|
||||||
*
|
*
|
||||||
|
@ -237,20 +237,32 @@ class phpbb_dbal_select_test extends phpbb_database_test_case
|
|||||||
{
|
{
|
||||||
// * = any_char; # = one_char
|
// * = any_char; # = one_char
|
||||||
return array(
|
return array(
|
||||||
array('barfoo', array(array('username_clean' => 'bertie'),
|
array('barfoo', array(
|
||||||
array('username_clean' => 'foobar'))),
|
array('username_clean' => 'foobar'),
|
||||||
array('bar', array(array('username_clean' => 'bertie'),)),
|
array('username_clean' => 'bertie'))
|
||||||
array('bar*', array(array('username_clean' => 'bertie'),
|
),
|
||||||
array('username_clean' => 'foobar'))),
|
array('bar', array(array('username_clean' => 'bertie'))),
|
||||||
|
array('bar*', array(
|
||||||
|
array('username_clean' => 'foobar'),
|
||||||
|
array('username_clean' => 'bertie'))
|
||||||
|
),
|
||||||
array('*bar*', array(array('username_clean' => 'bertie'))),
|
array('*bar*', array(array('username_clean' => 'bertie'))),
|
||||||
array('b*r', array(array('username_clean' => 'barfoo'),
|
array('b*r', array(
|
||||||
array('username_clean' => 'foobar'))),
|
array('username_clean' => 'barfoo'),
|
||||||
array('b*e', array(array('username_clean' => 'barfoo'),
|
array('username_clean' => 'foobar'))
|
||||||
array('username_clean' => 'foobar'))),
|
),
|
||||||
array('#b*e', array(array('username_clean' => 'barfoo'),
|
array('b*e', array(
|
||||||
array('username_clean' => 'foobar'))),
|
array('username_clean' => 'barfoo'),
|
||||||
array('b####e', array(array('username_clean' => 'barfoo'),
|
array('username_clean' => 'foobar'))
|
||||||
array('username_clean' => 'foobar'))),
|
),
|
||||||
|
array('#b*e', array(
|
||||||
|
array('username_clean' => 'barfoo'),
|
||||||
|
array('username_clean' => 'foobar'))
|
||||||
|
),
|
||||||
|
array('b####e', array(
|
||||||
|
array('username_clean' => 'barfoo'),
|
||||||
|
array('username_clean' => 'foobar'))
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user