public function build(ExpressionInterface $expression, array &$params = [])
{
$operator = strtoupper($expression->getOperator());
$column = $expression->getColumn();
$values = $expression->getValues();
if ($column === []) {
return $operator === 'IN' ? '0=1' : '';
}
if ($values instanceof Query) {
return $this->buildSubqueryInCondition($operator, $column, $values, $params);
}
if (!is_array($values) && !$values instanceof \Traversable) {
$values = (array) $values;
}
if (is_array($column)) {
if (count($column) > 1) {
return $this->buildCompositeInCondition($operator, $column, $values, $params);
}
$column = reset($column);
}
if ($column instanceof \Traversable) {
if (iterator_count($column) > 1) {
return $this->buildCompositeInCondition($operator, $column, $values, $params);
}
$column->rewind();
$column = $column->current();
}
if ($column instanceof Expression) {
$column = $column->expression;
}
if (is_array($values)) {
$rawValues = $values;
} elseif ($values instanceof \Traversable) {
$rawValues = $this->getRawValuesFromTraversableObject($values);
}
$nullCondition = null;
$nullConditionOperator = null;
if (isset($rawValues) && in_array(null, $rawValues, true)) {
$nullCondition = $this->getNullCondition($operator, $column);
$nullConditionOperator = $operator === 'IN' ? 'OR' : 'AND';
}
$sqlValues = $this->buildValues($expression, $values, $params);
if (empty($sqlValues)) {
if ($nullCondition === null) {
return $operator === 'IN' ? '0=1' : '';
}
return $nullCondition;
}
if (strpos($column, '(') === false) {
$column = $this->queryBuilder->db->quoteColumnName($column);
}
if (count($sqlValues) > 1) {
$sql = "$column $operator (" . implode(', ', $sqlValues) . ')';
} else {
$operator = $operator === 'IN' ? '=' : '<>';
$sql = $column . $operator . reset($sqlValues);
}
return $nullCondition !== null && $nullConditionOperator !== null
? sprintf('%s %s %s', $sql, $nullConditionOperator, $nullCondition)
: $sql;
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4