1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-25 15:01:29 +02:00

- Object renamed to DibiObject

- DibiTranslator: improved %and and %or handling
- DibiTable::findAll allows to add conditions
This commit is contained in:
David Grudl
2008-09-05 05:35:15 +00:00
parent f935968aa7
commit e5af8a8c67
19 changed files with 73 additions and 51 deletions

View File

@@ -27,7 +27,7 @@
* @copyright Copyright (c) 2005, 2008 David Grudl
* @package dibi
*/
final class DibiTranslator extends /*Nette::*/Object
final class DibiTranslator extends DibiObject
{
/** @var string */
public $sql;
@@ -201,16 +201,37 @@ final class DibiTranslator extends /*Nette::*/Object
$separator = ', ';
switch ($modifier) {
case 'and':
case 'or':
case 'or': // key=val AND key IS NULL AND ...
$separator = ' ' . strtoupper($modifier) . ' ';
if (!is_string(key($value))) {
if (empty($value)) {
return '1';
} elseif (!is_string(key($value))) {
foreach ($value as $v) {
$vx[] = $this->formatValue($v, 'sql');
}
return implode($separator, $vx);
} else {
foreach ($value as $k => $v) {
$pair = explode('%', $k, 2); // split into identifier & modifier
$k = $this->delimite($pair[0]);
if (isset($pair[1])) {
$pair = explode(' ', $pair[1], 2); // split into modifier & operator
$op = isset($pair[1]) ? $pair[1] : '=';
$v = $this->formatValue($v, $pair[0]);
} else {
$op = '=';
$v = $this->formatValue($v, FALSE);
}
if ($v === 'NULL') {
$op = 'IS';
}
$vx[] = $k . ' ' . $op . ' ' . $v;
}
}
// break intentionally omitted
case 'a': // SET key=val, key=val, ...
return implode($separator, $vx);
case 'a': // key=val, key=val, ...
foreach ($value as $k => $v) {
$pair = explode('%', $k, 2); // split into identifier & modifier
$vx[] = $this->delimite($pair[0]) . '='
@@ -219,7 +240,7 @@ final class DibiTranslator extends /*Nette::*/Object
return implode($separator, $vx);
case 'l': // LIST (val, val, ...)
case 'l': // (val, val, ...)
foreach ($value as $k => $v) {
$pair = explode('%', $k, 2); // split into identifier & modifier
$vx[] = $this->formatValue($v, isset($pair[1]) ? $pair[1] : FALSE);
@@ -235,7 +256,7 @@ final class DibiTranslator extends /*Nette::*/Object
}
return '(' . implode(', ', $kx) . ') VALUES (' . implode(', ', $vx) . ')';
default:
default: // value, value, value - all with the same modifier
foreach ($value as $v) {
$vx[] = $this->formatValue($v, $modifier);
}