/** * Process complex interval * * @param RestoModel $model * @param string $filterName * @param array $requestParams * @param array $values * @return string */ private function processComplexInterval($model, $filterName, $values) { /* * First and last characters give operators */ $op1 = substr(trim($values[0]), 0, 1); $op2 = substr(trim($values[1]), -1); /* * A = {n1,n2} then returns = n1 or = n2 */ if ($op1 === '{' && $op2 === '}') { return '(' . $model->getDbKey($model->searchFilters[$filterName]['key']) . ' = ' . pg_escape_string(substr($values[0], 1)) . ' OR ' . $model->getDbKey($model->searchFilters[$filterName]['key']) . ' = ' . pg_escape_string(substr($values[1], 0, strlen($values[1]) - 1)) . ')'; } /* * Other cases i.e. * A = [n1,n2] then returns <= n1 and <= n2 * A = [n1,n2[ then returns <= n1 and B < n2 * A = ]n1,n2[ then returns < n1 and B < n2 * */ if (($op1 === '[' || $op1 === ']') && ($op2 === '[' || $op2 === ']')) { return $model->getDbKey($model->searchFilters[$filterName]['key']) . ($op1 === '[' ? ' >= ' : ' > ') . pg_escape_string(substr($values[0], 1)) . ' AND ' . $model->getDbKey($model->searchFilters[$filterName]['key']) . ($op2 === ']' ? ' <= ' : ' < ') . pg_escape_string(substr($values[1], 0, strlen($values[1]) - 1)); } }