diff --git a/dibi/dibi.php b/dibi/dibi.php index 8905f037..f037a19c 100644 --- a/dibi/dibi.php +++ b/dibi/dibi.php @@ -56,16 +56,13 @@ if (!class_exists('FileNotFoundException', FALSE)) { class FileNotFoundException extends IOException {} } -if (!class_exists(/*Nette::*/'Object', FALSE)) { - require_once dirname(__FILE__) . '/Nette/Object.php'; -} - if (!interface_exists(/*Nette::*/'IDebuggable', FALSE)) { require_once dirname(__FILE__) . '/Nette/IDebuggable.php'; } // dibi libraries require_once dirname(__FILE__) . '/libs/interfaces.php'; +require_once dirname(__FILE__) . '/libs/DibiObject.php'; require_once dirname(__FILE__) . '/libs/DibiException.php'; require_once dirname(__FILE__) . '/libs/DibiConnection.php'; require_once dirname(__FILE__) . '/libs/DibiResult.php'; diff --git a/dibi/drivers/mssql.php b/dibi/drivers/mssql.php index b3fce4e2..5ec45bf0 100644 --- a/dibi/drivers/mssql.php +++ b/dibi/drivers/mssql.php @@ -34,7 +34,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiMsSqlDriver extends /*Nette::*/Object implements IDibiDriver +class DibiMsSqlDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/mysql.php b/dibi/drivers/mysql.php index 1b2dff21..9c165075 100644 --- a/dibi/drivers/mysql.php +++ b/dibi/drivers/mysql.php @@ -40,7 +40,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiMySqlDriver extends /*Nette::*/Object implements IDibiDriver +class DibiMySqlDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/mysqli.php b/dibi/drivers/mysqli.php index e5fb2d4a..98690fc4 100644 --- a/dibi/drivers/mysqli.php +++ b/dibi/drivers/mysqli.php @@ -40,7 +40,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiMySqliDriver extends /*Nette::*/Object implements IDibiDriver +class DibiMySqliDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/odbc.php b/dibi/drivers/odbc.php index f91b8fe5..c669d639 100644 --- a/dibi/drivers/odbc.php +++ b/dibi/drivers/odbc.php @@ -33,7 +33,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiOdbcDriver extends /*Nette::*/Object implements IDibiDriver +class DibiOdbcDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/oracle.php b/dibi/drivers/oracle.php index 7e9fcc8c..f3ef224e 100644 --- a/dibi/drivers/oracle.php +++ b/dibi/drivers/oracle.php @@ -33,7 +33,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiOracleDriver extends /*Nette::*/Object implements IDibiDriver +class DibiOracleDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/pdo.php b/dibi/drivers/pdo.php index b192ea3e..0165901d 100644 --- a/dibi/drivers/pdo.php +++ b/dibi/drivers/pdo.php @@ -34,7 +34,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiPdoDriver extends /*Nette::*/Object implements IDibiDriver +class DibiPdoDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/postgre.php b/dibi/drivers/postgre.php index e19c7bf4..cc633e45 100644 --- a/dibi/drivers/postgre.php +++ b/dibi/drivers/postgre.php @@ -34,7 +34,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiPostgreDriver extends /*Nette::*/Object implements IDibiDriver +class DibiPostgreDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/drivers/sqlite.php b/dibi/drivers/sqlite.php index 67a2e533..e960a592 100644 --- a/dibi/drivers/sqlite.php +++ b/dibi/drivers/sqlite.php @@ -34,7 +34,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiSqliteDriver extends /*Nette::*/Object implements IDibiDriver +class DibiSqliteDriver extends DibiObject implements IDibiDriver { /** diff --git a/dibi/libs/DibiConnection.php b/dibi/libs/DibiConnection.php index 1fc3ee2b..1e0f147d 100644 --- a/dibi/libs/DibiConnection.php +++ b/dibi/libs/DibiConnection.php @@ -27,7 +27,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiConnection extends /*Nette::*/Object +class DibiConnection extends DibiObject { /** * Current connection configuration. diff --git a/dibi/libs/DibiDataSource.php b/dibi/libs/DibiDataSource.php index afd68bbf..636da9ce 100644 --- a/dibi/libs/DibiDataSource.php +++ b/dibi/libs/DibiDataSource.php @@ -27,7 +27,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiDataSource extends /*Nette::*/Object implements IDataSource +class DibiDataSource extends DibiObject implements IDataSource { /** @var DibiConnection */ private $connection; diff --git a/dibi/libs/DibiFluent.php b/dibi/libs/DibiFluent.php index 43beabc6..1d5bfc73 100644 --- a/dibi/libs/DibiFluent.php +++ b/dibi/libs/DibiFluent.php @@ -27,7 +27,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiFluent extends /*Nette::*/Object +class DibiFluent extends DibiObject { /** @var array */ public static $masks = array( diff --git a/dibi/libs/DibiLogger.php b/dibi/libs/DibiLogger.php index a72aa81b..fca238ac 100644 --- a/dibi/libs/DibiLogger.php +++ b/dibi/libs/DibiLogger.php @@ -27,7 +27,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -final class DibiLogger extends /*Nette::*/Object +final class DibiLogger extends DibiObject { /** @var string Name of the file where SQL errors should be logged */ private $file; diff --git a/dibi/Nette/Object.php b/dibi/libs/DibiObject.php similarity index 91% rename from dibi/Nette/Object.php rename to dibi/libs/DibiObject.php index 42eb64ce..37e174bd 100644 --- a/dibi/Nette/Object.php +++ b/dibi/libs/DibiObject.php @@ -1,27 +1,29 @@ * * @author David Grudl - * @copyright Copyright (c) 2004, 2008 David Grudl - * @package Nette + * @copyright Copyright (c) 2005, 2008 David Grudl + * @package dibi */ -abstract class Object +abstract class DibiObject { /** @var array (method => array(type => callback)) */ private static $extMethods; diff --git a/dibi/libs/DibiResult.php b/dibi/libs/DibiResult.php index 6a1bbfa7..c13b0625 100644 --- a/dibi/libs/DibiResult.php +++ b/dibi/libs/DibiResult.php @@ -41,7 +41,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -class DibiResult extends /*Nette::*/Object implements IDataSource +class DibiResult extends DibiObject implements IDataSource { /** * IDibiDriver. diff --git a/dibi/libs/DibiTable.php b/dibi/libs/DibiTable.php index 15f55be2..3908bd3f 100644 --- a/dibi/libs/DibiTable.php +++ b/dibi/libs/DibiTable.php @@ -26,7 +26,7 @@ * @copyright Copyright (c) 2005, 2008 David Grudl * @package dibi */ -abstract class DibiTable extends /*Nette::*/Object +abstract class DibiTable extends DibiObject { /** @var string primary key mask */ public static $primaryMask = 'id'; @@ -204,22 +204,23 @@ abstract class DibiTable extends /*Nette::*/Object /** * Selects all rows. + * @param array conditions * @param string column to order by * @return DibiResult */ - public function findAll($order = NULL) + public function findAll($conditions = NULL, $order = NULL) { - if ($order === NULL) { - return $this->complete($this->connection->query( - 'SELECT * FROM %n', $this->name - )); + $order = func_get_args(); + if (is_array($conditions)) { + array_shift($order); } else { - $order = func_get_args(); - return $this->complete($this->connection->query( - 'SELECT * FROM %n', $this->name, - 'ORDER BY %n', $order - )); + $conditions = NULL; } + return $this->complete($this->connection->query( + 'SELECT * FROM %n', $this->name, + '%ex', $conditions ? array('WHERE %and', $conditions) : NULL, + '%ex', $order ? array('ORDER BY %n', $order) : NULL + )); } diff --git a/dibi/libs/DibiTranslator.php b/dibi/libs/DibiTranslator.php index 9a3bab06..36995d25 100644 --- a/dibi/libs/DibiTranslator.php +++ b/dibi/libs/DibiTranslator.php @@ -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); } diff --git a/dibi/libs/DibiVariable.php b/dibi/libs/DibiVariable.php index 00e07ad6..5440be12 100644 --- a/dibi/libs/DibiVariable.php +++ b/dibi/libs/DibiVariable.php @@ -24,7 +24,7 @@ * Default implemenation of IDibiVariable. * @package dibi */ -class DibiVariable extends /*Nette::*/Object implements IDibiVariable +class DibiVariable extends DibiObject implements IDibiVariable { /** @var mixed */ public $value; diff --git a/examples/dibi.table.php b/examples/dibi.table.php index 31cf2190..6d321b9a 100644 --- a/examples/dibi.table.php +++ b/examples/dibi.table.php @@ -49,6 +49,7 @@ $products->findAll()->dump(); // select all, order by title, product_id $products->findAll('title', $products->primary)->dump(); +$products->findAll(array('title' => 'Chair'), 'title')->dump(); // fetches single row with id 3