public static function conditionArgs($context, $prefix, $args = [])
{
if ($args === null) {
return;
}
$exprs = array();
$params = array();
foreach ($args as $k => $v) {
if (is_array($v)) {
$ops = ['=', '>', '<', '<>', '>=', '<=', 'IN', 'NOT IN', 'BETWEEN', 'LIKE'];
$op = array_keys($v)[0];
$op = strtoupper($op);
Verify::isTrue(false !== array_search($op, $ops), new \InvalidArgumentException("invalid param {$op} for whereArgs"));
$var = array_values($v)[0];
if ($op == 'IN' || $op == 'NOT IN') {
$stubs = [];
foreach ($var as $i) {
if (is_a($i, 'phprs\\ezsql\\Native')) {
$stubs[] = strval($i);
} else {
$stubs[] = '?';
$params[] = $i;
}
}
$stubs = implode(',', $stubs);
$exprs[] = "{$k} {$op} ({$stubs})";
} else {
if ($op == 'BETWEEN') {
$cond = "{$k} BETWEEN";
if (is_a($var[0], 'phprs\\ezsql\\Native')) {
$cond = "{$cond} " . strval($var[0]);
} else {
$cond = "{$cond} ?";
$params[] = $var[0];
}
if (is_a($var[1], 'phprs\\ezsql\\Native')) {
$cond = "{$cond} AND " . strval($var[1]);
} else {
$cond = "{$cond} AND ?";
$params[] = $var[1];
}
$exprs[] = $cond;
} else {
if (is_a($var, 'phprs\\ezsql\\Native')) {
$exprs[] = "{$k} {$op} " . strval($var);
} else {
$exprs[] = "{$k} {$op} ?";
$params[] = $var;
}
}
}
} else {
if (is_a($v, 'phprs\\ezsql\\Native')) {
$exprs[] = "{$k} = " . strval($v);
} else {
$exprs[] = "{$k} = ?";
$params[] = $v;
}
}
}
return self::condition($context, $prefix, implode(' AND ', $exprs), $params);
}