public function compare($actual, $condition, $expected)
{
$expected = (array) $expected;
$expected = current($expected);
$cond = str_replace(' ?', '', $condition);
if ($cond === 'LIKE') {
$actual = Strings::toAscii($actual);
$expected = Strings::toAscii($expected);
$pattern = str_replace('%', '(.|\\s)*', preg_quote($expected, '/'));
return (bool) preg_match("/^{$pattern}\$/i", $actual);
} elseif ($cond === '=') {
return $actual == $expected;
} elseif ($cond === '<>') {
return $actual != $expected;
} elseif ($cond === 'IS NULL') {
return $actual === NULL;
} elseif ($cond === 'IS NOT NULL') {
return $actual !== NULL;
} elseif ($cond === '<') {
return (int) $actual < $expected;
} elseif ($cond === '<=') {
return (int) $actual <= $expected;
} elseif ($cond === '>') {
return (int) $actual > $expected;
} elseif ($cond === '>=') {
return (int) $actual >= $expected;
} else {
throw new Exception("Condition '{$condition}' is not implemented yet.");
}
}