private function buildHashCondition($condition)
{
$parts = [];
foreach ($condition as $attribute => $value) {
if ($attribute == '_id') {
if ($value === null) {
// there is no null pk
$parts[] = ['terms' => ['_uid' => []]];
// this condition is equal to WHERE false
} else {
$parts[] = ['ids' => ['values' => is_array($value) ? $value : [$value]]];
}
} else {
if (is_array($value)) {
// IN condition
$parts[] = ['in' => [$attribute => $value]];
} else {
if ($value === null) {
$parts[] = ['missing' => ['field' => $attribute, 'existence' => true, 'null_value' => true]];
} else {
$parts[] = ['term' => [$attribute => $value]];
}
}
}
}
return count($parts) === 1 ? $parts[0] : ['and' => $parts];
}