private function getConditionHash($condition, $parameters)
{
foreach ($parameters as $key => &$parameter) {
if ($parameter instanceof Selection) {
$parameter = $this->getConditionHash($parameter->getSql(), $parameter->getSqlBuilder()->getParameters());
} elseif ($parameter instanceof SqlLiteral) {
$parameter = $this->getConditionHash($parameter->__toString(), $parameter->getParameters());
} elseif (is_object($parameter) && method_exists($parameter, '__toString')) {
$parameter = $parameter->__toString();
} elseif (is_array($parameter) || $parameter instanceof \ArrayAccess) {
$parameter = $this->getConditionHash($key, $parameter);
}
}
return md5($condition . json_encode($parameters));
}