private function visitComparison(Comparison $comparison)
{
$fieldName = $comparison->getField();
if (preg_match('{param\\[.*\\]}', $fieldName)) {
$fieldName = 'param';
}
if (!isset($this->fieldMap[$fieldName])) {
throw new \InvalidArgumentException(sprintf('Unknown field "%s", allowed fields: "%s"', $fieldName, implode('", "', array_keys($this->fieldMap))));
}
if (!array_key_exists($comparison->getComparator(), $this->comparatorMap)) {
throw new \InvalidArgumentException(sprintf('Unsupported comparator "%s"', $comparison->getComparator()));
}
$comparator = $comparison->getComparator();
$fieldName = $this->fieldMap[$fieldName];
if ($comparator == '$in') {
return $this->visitComparatorIn($fieldName, $comparison);
}
if ($fieldName === 'param') {
return $this->visitParam($comparison);
}
$comparator = $this->getComparatorSql($comparison);
$paramName = $this->registerParamValue($comparison->getValue());
return sprintf('%s %s :%s', $fieldName, $comparator, $paramName);
}