protected function getCleanedExpression($expression)
{
$name = $expression[SegmentExpression::INDEX_OPERAND_NAME];
$matchType = $expression[SegmentExpression::INDEX_OPERAND_OPERATOR];
$value = $expression[SegmentExpression::INDEX_OPERAND_VALUE];
$segment = $this->getSegmentByName($name);
$sqlName = $segment['sqlSegment'];
if ($matchType != SegmentExpression::MATCH_IS_NOT_NULL_NOR_EMPTY && $matchType != SegmentExpression::MATCH_IS_NULL_OR_EMPTY) {
if (isset($segment['sqlFilterValue'])) {
$value = call_user_func($segment['sqlFilterValue'], $value);
}
// apply presentation filter
if (isset($segment['sqlFilter'])) {
$value = call_user_func($segment['sqlFilter'], $value, $segment['sqlSegment'], $matchType, $name);
if (is_null($value)) {
// null is returned in TableLogAction::getIdActionFromSegment()
return array(null, $matchType, null);
}
// sqlFilter-callbacks might return arrays for more complex cases
// e.g. see TableLogAction::getIdActionFromSegment()
if (is_array($value) && isset($value['SQL'])) {
// Special case: returned value is a sub sql expression!
$matchType = SegmentExpression::MATCH_ACTIONS_CONTAINS;
}
}
}
return array($sqlName, $matchType, $value);
}