private function makeSQLFromConditions($conditions, &$bindings, $addSql = '')
{
reset($bindings);
$firstKey = key($bindings);
$paramTypeIsNum = is_numeric($firstKey);
$counter = 0;
$sqlConditions = array();
foreach ($conditions as $column => $values) {
if (!count($values)) {
continue;
}
$sql = $this->esc($column);
$sql .= ' IN ( ';
if (!is_array($values)) {
$values = array($values);
}
if ($paramTypeIsNum) {
$sql .= implode(',', array_fill(0, count($values), '?')) . ' ) ';
array_unshift($sqlConditions, $sql);
foreach ($values as $k => $v) {
$values[$k] = strval($v);
array_unshift($bindings, $v);
}
} else {
$slots = array();
foreach ($values as $k => $v) {
$slot = ':slot' . $counter++;
$slots[] = $slot;
$bindings[$slot] = strval($v);
}
$sql .= implode(',', $slots) . ' ) ';
$sqlConditions[] = $sql;
}
}
$sql = '';
if (is_array($sqlConditions) && count($sqlConditions) > 0) {
$sql = implode(' AND ', $sqlConditions);
$sql = " WHERE ( {$sql} ) ";
if ($addSql) {
$sql .= $addSql;
}
} elseif ($addSql) {
$sql = $addSql;
}
return $sql;
}