[limb-svn] r6039 - in 3.x/trunk/limb/dbal: src src/query src/toolkit tests/cases/non-driver tests/cases/non-driver/criteria tests/cases/non-driver/query
svn at limb-project.com
svn at limb-project.com
Mon Jul 2 16:51:09 MSD 2007
Author: pachanga
Date: 2007-07-02 16:51:09 +0400 (Mon, 02 Jul 2007)
New Revision: 6039
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6039
Added:
3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php
Removed:
3.x/trunk/limb/dbal/src/query/lmbSelectQueryDecorator.class.php
Modified:
3.x/trunk/limb/dbal/src/lmbDBAL.class.php
3.x/trunk/limb/dbal/src/lmbSimpleDb.class.php
3.x/trunk/limb/dbal/src/lmbTableGateway.class.php
3.x/trunk/limb/dbal/src/query/lmbCriteriaQuery.class.php
3.x/trunk/limb/dbal/src/query/lmbDeleteQuery.class.php
3.x/trunk/limb/dbal/src/query/lmbSelectQuery.class.php
3.x/trunk/limb/dbal/src/query/lmbTableRecordsQuery.class.php
3.x/trunk/limb/dbal/src/query/lmbTemplateQuery.class.php
3.x/trunk/limb/dbal/src/query/lmbUpdateQuery.class.php
3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/criteria/lmbSQLFieldCriteriaTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/lmbDBALTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/lmbSimpleDbTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbDeleteQueryTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbInsertQueryTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectQueryTest.class.php
3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbUpdateQueryTest.class.php
Log:
-- lmbSelectQueryDecorator removed
-- lmbSelectRawQuery added it copies previous lmbSelectQuery functionality
-- lmbSelectQuery extends lmbSelectRawQuery and accepts a table name in constructor instead of sql
-- lmbDBAL :: query(..) renamed into fetch(..)
-- lmbDBAL :: selectQuery($sql, $conn = null) added, it returns lmbSelectQuery instance
-- lmbDBAL :: updateQuery($sql, $conn = null) added, it return lmbUpdateQuery instance
-- lmbDBAL :: deleteQuery($sql, $conn = null) added, it returns lmbDeleteQuery instance
-- lmbDBAL :: db($conn = null) added, it returns lmbSimpleDb instance
-- lmbDBAL :: table($table, $conn = null) added, it returns lmbTableGateway instance
-- lmbDBAL :: newStatement($sql, $conn = null) added, it returns new statement object for current connection
-- lmbTableGateway doesn't fill $_table_info property at once, instead lazy getTableInfo() is used
-- all query classes return itself for better chaining
-- convenience methods aliases added to all query classes, e.g addCriteria($criteria) has an alias of where($criteria) an so on
-- lmbUpdateQuery :: set($values) method added
-- lmbSelectQuery quotes order fields
-- lmbSimpleDb doesn't return affected rows count after delete/update operation, use new countAffected() method instead
-- lmbSimpleDb methods return itself for better chaining
-- some other minor fixes and refactorings
Modified: 3.x/trunk/limb/dbal/src/lmbDBAL.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/lmbDBAL.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/lmbDBAL.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,19 +1,23 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
-lmb_require('limb/dbal/toolkit.inc.php');
-
+lmb_require('limb/dbal/toolkit.inc.php');
+lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
+lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
+lmb_require('limb/dbal/src/query/lmbUpdateQuery.class.php');
+lmb_require('limb/dbal/src/query/lmbDeleteQuery.class.php');
+
/**
* class lmbDBAL.
*
* @package dbal
* @version $Id$
- */
+ */
class lmbDBAL
{
static function setDefaultDSN($dsn)
@@ -31,11 +35,42 @@
return lmbToolkit :: instance()->createDbConnection($dsn);
}
- static function query($sql, $conn = null)
+ static function newStatement($sql, $conn = null)
{
if(!$conn)
$conn = lmbToolkit :: instance()->getDefaultDbConnection();
+ return $conn->newStatement($sql);
+ }
+ static function db($conn = null)
+ {
+ return new lmbSimpleDb($conn);
+ }
+
+ static function table($table, $conn = null)
+ {
+ return lmbToolkit :: instance()->createTableGateway($table, $conn);
+ }
+
+ static function selectQuery($table, $conn = null)
+ {
+ return new lmbSelectQuery($table, $conn);
+ }
+
+ static function updateQuery($table, $conn = null)
+ {
+ return new lmbUpdateQuery($table, $conn);
+ }
+
+ static function deleteQuery($table, $conn = null)
+ {
+ return new lmbDeleteQuery($table, $conn);
+ }
+
+ static function fetch($sql, $conn = null)
+ {
+ if(!$conn)
+ $conn = lmbToolkit :: instance()->getDefaultDbConnection();
$stmt = $conn->newStatement($sql);
return $stmt->getRecordSet();
}
@@ -44,7 +79,6 @@
{
if(!$conn)
$conn = lmbToolkit :: instance()->getDefaultDbConnection();
-
$conn->execute($sql);
}
}
Modified: 3.x/trunk/limb/dbal/src/lmbSimpleDb.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/lmbSimpleDb.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/lmbSimpleDb.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,32 +1,38 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbInsertQuery.class.php');
lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
lmb_require('limb/dbal/src/query/lmbUpdateQuery.class.php');
lmb_require('limb/dbal/src/query/lmbDeleteQuery.class.php');
-lmb_require('limb/dbal/src/criteria/lmbSQLFieldCriteria.class.php');
-
+lmb_require('limb/dbal/src/criteria/lmbSQLCriteria.class.php');
+
/**
* class lmbSimpleDb.
*
* @package dbal
* @version $Id$
- */
+ */
class lmbSimpleDb
{
protected $conn;
+ protected $stmt;
function __construct($conn)
{
$this->conn = $conn;
}
+ function getConnection()
+ {
+ return $this->conn;
+ }
+
function getType()
{
return $this->conn->getType();
@@ -67,11 +73,17 @@
return $rs->count();
}
+ function countAffected()
+ {
+ if($this->stmt)
+ return $this->stmt->getAffectedRowCount();
+ else
+ return 0;
+ }
+
function getSelectQuery($table)
{
- $query = new lmbSelectQuery(null, $this->conn);
- $query->addTable($table);
- return $query;
+ return new lmbSelectQuery($table, $this->conn);
}
function insert($table, $values, $primary_key = 'id')
@@ -107,9 +119,9 @@
foreach($values as $key => $value)
$query->addField($key, $value);
- $stmt = $query->getStatement($this->conn);
- $stmt->execute();
- return $stmt->getAffectedRowCount();
+ $this->stmt = $query->getStatement($this->conn);
+ $this->stmt->execute();
+ return $this;
}
function delete($table, $criteria = null)
@@ -119,9 +131,9 @@
if($criteria)
$query->addCriteria(lmbSQLCriteria :: objectify($criteria));
- $stmt = $query->getStatement($this->conn);
- $stmt->execute();
- return $stmt->getAffectedRowCount();
+ $this->stmt = $query->getStatement($this->conn);
+ $this->stmt->execute();
+ return $this;
}
function truncateDb()
@@ -129,26 +141,31 @@
$info = $this->conn->getDatabaseInfo();
foreach($info->getTableList() as $table)
$this->conn->newStatement("DELETE FROM $table")->execute();
+ return $this;
}
function disconnect()
{
$this->conn->disconnect();
+ return $this;
}
function begin()
{
$this->conn->beginTransaction();
+ return $this;
}
function commit()
{
$this->conn->commitTransaction();
+ return $this;
}
function rollback()
{
$this->conn->rollbackTransaction();
+ return $this;
}
}
Modified: 3.x/trunk/limb/dbal/src/lmbTableGateway.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/lmbTableGateway.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/lmbTableGateway.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,10 +1,10 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbInsertQuery.class.php');
lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
@@ -12,14 +12,14 @@
lmb_require('limb/dbal/src/query/lmbUpdateQuery.class.php');
lmb_require('limb/dbal/src/query/lmbDeleteQuery.class.php');
lmb_require('limb/dbal/src/drivers/lmbDbTypeInfo.class.php');
-lmb_require('limb/dbal/src/drivers/lmbDbCachedInfo.class.php');
-
+lmb_require('limb/dbal/src/drivers/lmbDbCachedInfo.class.php');
+
/**
* class lmbTableGateway.
*
* @package dbal
* @version $Id$
- */
+ */
class lmbTableGateway
{
protected $_db_table_name;
@@ -44,7 +44,6 @@
elseif(!$this->_db_table_name)
$this->_db_table_name = $this->_guessDbTableName();
- $this->_table_info = $this->_loadTableInfo();
$this->_constraints = $this->_defineConstraints();
$this->_primary_key_name = $this->_definePrimaryKeyName();
}
@@ -70,25 +69,38 @@
return array();
}
+ function getTableName()
+ {
+ return $this->_db_table_name;
+ }
+
function getTableInfo()
{
+ if(!$this->_table_info)
+ $this->_table_info = $this->_loadTableInfo();
+
return $this->_table_info;
}
+ function getConnection()
+ {
+ return $this->_conn;
+ }
+
function getColumnInfo($name)
{
if($this->hasColumn($name))
- return $this->_table_info->getColumn($name);
+ return $this->getTableInfo()->getColumn($name);
}
function hasColumn($name)
{
- return $this->_table_info->hasColumn($name);
+ return $this->getTableInfo()->hasColumn($name);
}
function getColumnNames()
{
- return $this->_table_info->getColumnList();
+ return $this->getTableInfo()->getColumnList();
}
function getConstraints()
@@ -101,7 +113,7 @@
if(!$this->hasColumn($column_name))
return false;
- return $this->_table_info->getColumn($column_name)->getType();
+ return $this->getTableInfo()->getColumn($column_name)->getType();
}
function getPrimaryKeyName()
@@ -111,7 +123,7 @@
function isAutoIncrement($field)
{
- return $this->_table_info->getColumn($field)->isAutoIncrement();
+ return $this->getTableInfo()->getColumn($field)->isAutoIncrement();
}
function getStatement()
@@ -169,13 +181,13 @@
$this->_stmt = $query->getStatement();
$this->_bindValuesToStatement($this->_stmt, $set);
- return $this->_stmt->execute();
+ $this->_stmt->execute();
}
else
{
$query->addRawField($set);
$this->_stmt = $query->getStatement();
- return $this->_stmt->execute();
+ $this->_stmt->execute();
}
}
@@ -242,8 +254,7 @@
function getSelectQuery($fields = array())
{
- $query = new lmbSelectQuery(null, $this->_conn);
- $query->addTable($this->_db_table_name);
+ $query = new lmbSelectQuery($this->_db_table_name, $this->_conn);
if(!$fields)
$fields = $this->getColumnsForSelect();
@@ -270,11 +281,6 @@
return $this->delete(new lmbSQLFieldCriteria($this->_primary_key_name, $id));
}
- function getTableName()
- {
- return $this->_db_table_name;
- }
-
protected function _mapTableNameToClass($table_name)
{
return lmb_camel_case($table_name);
@@ -292,7 +298,6 @@
if(!in_array($name, $exclude_columns))
$fields[$table_name . '.' . $name] = $prefix . $name;
}
-
return $fields;
}
Modified: 3.x/trunk/limb/dbal/src/query/lmbCriteriaQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbCriteriaQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbCriteriaQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,9 +2,9 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbTemplateQuery.class.php');
lmb_require('limb/dbal/src/criteria/lmbSQLCriteria.class.php');
@@ -23,8 +23,14 @@
function addCriteria($criteria)
{
$this->_criterias[] = lmbSQLCriteria :: objectify($criteria);
+ return $this;
}
+ function where($criteria)
+ {
+ return $this->addCriteria($criteria);
+ }
+
function getStatementValues()
{
return $this->_stmt_values;
Modified: 3.x/trunk/limb/dbal/src/query/lmbDeleteQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbDeleteQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbDeleteQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,9 +2,9 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbCriteriaQuery.class.php');
@@ -24,6 +24,11 @@
parent :: __construct("DELETE FROM %table% %where%", $conn);
}
+ function getTable()
+ {
+ return $this->_table;
+ }
+
protected function _getTableHint()
{
return $this->_conn->quoteIdentifier($this->_table);
Modified: 3.x/trunk/limb/dbal/src/query/lmbSelectQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbSelectQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbSelectQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,11 +2,11 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
-lmb_require('limb/dbal/src/query/lmbCriteriaQuery.class.php');
+lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
//TODO: use primitive lexer for parsing sql templates someday...
@@ -16,238 +16,12 @@
* @package dbal
* @version $Id$
*/
-class lmbSelectQuery extends lmbCriteriaQuery
+class lmbSelectQuery extends lmbSelectRawQuery
{
- protected $_fields = array();
- protected $_tables = array();
- protected $_left_join_constraints = array();
- protected $_order = array();
- protected $_having = array();
- protected $_group_by = array();
-
- function __construct($sql = null, $conn)
+ function __construct($table, $conn = null)
{
- if(is_null($sql))
- $sql = "SELECT %fields% FROM %tables% %left_join% %where% %group% %having% %order%";
-
- parent :: __construct($sql, $conn);
+ parent :: __construct(lmbSelectRawQuery :: DEFAULT_SQL_TEMPLATE, $conn);
+ $this->addTable($table);
}
-
- function addField($field, $alias = null)
- {
- $this->_fields[$field] = $alias;
- }
-
- function addTable($table, $alias = null)
- {
- $this->_tables[$table] = $alias;
- }
-
- function addOrder($field, $type='ASC')
- {
- $this->_order[] = "$field $type";
- }
-
- function addGroupBy($group)
- {
- $this->_group_by[] = $group;
- }
-
- function addHaving($criteria)
- {
- $this->_having[] = $criteria;
- }
-
- function addLeftJoin($table, $connect_by)
- {
- $this->_left_join_constraints[$table] = $connect_by;
- }
-
- function getRecordSet()
- {
- $stmt = $this->getStatement();
- return $stmt->getRecordSet();
- }
-
- protected function _getFieldsHint()
- {
- $fields = '';
- foreach($this->_fields as $field => $alias)
- {
- $fields .= $this->_conn->quoteIdentifier($field) .
- ($alias ? ' as ' . $this->_conn->quoteIdentifier($alias) : '') . ',';
- }
- $fields = rtrim($fields, ',');
-
- if($this->_selectFieldsExists())
- {
- if(count($this->_fields))
- return ',' . $fields;
- else
- return '';
- }
- elseif(count($this->_fields) == 0)
- return '*';
- else
- return $fields;
- }
-
- protected function _getTablesHint()
- {
- if(count($this->_tables) == 0)
- return '';
-
- $tables = '';
- foreach($this->_tables as $table => $alias)
- {
- $tables .= $this->_conn->quoteIdentifier($table) .
- ($alias ? ' ' . $this->_conn->quoteIdentifier($alias) : '') . ',';
- }
- $tables = rtrim($tables, ',');
-
- if($this->_selectTablesExists())
- $tables = ',' . $tables;
-
- return $tables;
- }
-
- protected function _getLeftJoinHint()
- {
- $join = array();
- foreach($this->_left_join_constraints as $table => $connect_by)
- {
- $foreign_key = $this->_conn->quoteIdentifier(key($connect_by));
- $alias_key = $this->_conn->quoteIdentifier(reset($connect_by));
- $join[] = "LEFT JOIN " . $this->_conn->quoteIdentifier($table) . " ON $foreign_key=$alias_key";
- }
-
- return implode(' ', $join);
- }
-
- protected function _getGroupHint()
- {
- if (count($this->_group_by) == 0)
- return '';
-
- $group = implode(',', array_map(array($this->_conn, 'quoteIdentifier'), $this->_group_by));
-
- if($this->_groupByClauseExists($group_by_args))
- {
- //primitive check if comma is required
- if($group_by_args)
- return ',' . $group;
- else
- return $group;
- }
- else
- return 'GROUP BY ' . $group;
- }
-
- protected function _getHavingHint()
- {
- if (count($this->_having) == 0)
- return '';
-
- if(!count($this->_group_by) && !$this->_groupByClauseExists())
- throw new lmbException('can not generate HAVING condition GROUP BY missing');
-
- $implode = array();
- foreach($this->_having as $criteria)
- {
- $implode[] = $criteria->toStatementString($this->_stmt_values);
- }
-
- $having = implode(' AND ', $implode);
-
- if($this->_havingClauseExists($having_args))
- {
- if($having_args)
- return 'AND ' . $having;
- else
- return $having;
- }
- else
- return 'HAVING ' . $having;
- }
-
- protected function _getOrderHint()
- {
- if (count($this->_order) == 0)
- return '';
-
- $order = implode(',', $this->_order);
-
- if($this->_orderByClauseExists($order_by_args))
- {
- //primitive check if comma is required
- if($order_by_args)
- return ',' . $order;
- else
- return $order;
- }
- else
- return 'ORDER BY ' . $order;
- }
-
- protected function _orderByClauseExists(&$args = '')
- {
- //!!!make it better later
- if(preg_match('~(?<=from).+order\s+by\s(.*)$~si', $this->_getNoHintsSQL(), $matches))
- {
- $args = trim($matches[1]);
- return true;
- }
-
- return false;
- }
-
- protected function _groupByClauseExists(&$args = '')
- {
- //!!!make it better later
- if(preg_match('~(?<=\Wfrom).+group\s+by\s(.*)$~si', $this->_getNoHintsSQL(), $matches))
- {
- $args = trim($matches[1]);
- return true;
- }
-
- return false;
- }
-
- protected function _havingClauseExists(&$args = '')
- {
- //!!!make it better later
- if(preg_match('~(?<=\Wgroup)\s+by\s+.+?having\s(.*)(order)?$~si', $this->_getNoHintsSQL(), $matches))
- {
- $args = trim($matches[1]);
- return true;
- }
-
- return false;
- }
-
- protected function _selectFieldsExists()
- {
- //!!!make it better later
- return preg_match('~^select\s+\S+.+?from~si', $this->_getNoHintsSQL());
- }
-
- protected function _selectTablesExists()
- {
- return preg_match('~(?<=\Wfrom)\s+\S+(where|order|group)?~si', $this->_getNoHintsSQL());
- }
-
- protected function _whereClauseExists(&$args = '')
- {
- //primitive check if WHERE was already in sql
- //!!!make it better later
- if(preg_match('~(?<=\Wfrom).+where\s+(.*)~si', $this->_getNoHintsSQL(), $matches))
- {
- if(preg_match('~([a-zA-Z].*)(group|order)?$~si', $matches[1], $args_matches))
- $args = $args_matches[1];
-
- return true;
- }
- return false;
- }
}
?>
Deleted: 3.x/trunk/limb/dbal/src/query/lmbSelectQueryDecorator.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbSelectQueryDecorator.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbSelectQueryDecorator.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,81 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
-
-/**
- * class lmbSelectQueryDecorator.
- *
- * @package dbal
- * @version $Id$
- */
-class lmbSelectQueryDecorator
-{
- protected $query;
-
- function __construct($query)
- {
- $this->query = $query;
- }
-
- function reset()
- {
- $this->query->reset();
- }
-
- function addField($field)
- {
- $this->query->addField($field);
- }
-
- function addTable($table)
- {
- $this->query->addTable($table);
- }
-
- function addOrder($field, $type='ASC')
- {
- $this->query->addOrder($field, $type);
- }
-
- function addGroupBy($group)
- {
- $this->query->addGroupBy($group);
- }
-
- function addLeftJoin($table, $connect_by)
- {
- $this->query->addLeftJoin($table, $connect_by);
- }
-
- function addCriteria($criteria)
- {
- $this->query->addCriteria($criteria);
- }
-
- function toString()
- {
- return $this->query->toString();
- }
-
- function getStatement()
- {
- return $this->query->getStatement();
- }
-
- function getRecordSet()
- {
- return $this->query->getRecordSet();
- }
-
- function getStatementValues()
- {
- return $this->query->getStatementValues();
- }
-}
-?>
Added: 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php (rev 0)
+++ 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -0,0 +1,329 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+lmb_require('limb/dbal/src/query/lmbCriteriaQuery.class.php');
+
+//TODO: use primitive lexer for parsing sql templates someday...
+
+/**
+ * class lmbSelectRawQuery.
+ *
+ * @package dbal
+ * @version $Id: lmbSelectRawQuery.class.php 6005 2007-06-19 21:14:49Z pachanga $
+ */
+class lmbSelectRawQuery extends lmbCriteriaQuery
+{
+ const DEFAULT_SQL_TEMPLATE = "SELECT %fields% FROM %tables% %left_join% %where% %group% %having% %order%";
+
+ protected $_fields = array();
+ protected $_tables = array();
+ protected $_left_join_constraints = array();
+ protected $_order = array();
+ protected $_having = array();
+ protected $_group_by = array();
+
+ function __construct($sql_or_conn = null, $conn = null)
+ {
+ if(is_object($sql_or_conn))
+ parent :: __construct(self :: DEFAULT_SQL_TEMPLATE, $sql_or_conn);
+ else
+ parent :: __construct($sql_or_conn, $conn);
+ }
+
+ function addField($field, $alias = null)
+ {
+ $this->_fields[$field] = $alias;
+ return $this;
+ }
+
+ function field($field, $alias = null)
+ {
+ return $this->addField($field, $alias);
+ }
+
+ function getFields()
+ {
+ return array_keys($this->_fields);
+ }
+
+ function addTable($table, $alias = null)
+ {
+ $this->_tables[] = array($table, $alias);
+ return $this;
+ }
+
+ function from($table, $alias = null)
+ {
+ return $this->addTable($table, $alias);
+ }
+
+ function getTables()
+ {
+ $tables = array();
+ foreach($this->_tables as $item)
+ $tables[] = $item[0];
+ return $tables;
+ }
+
+ function addOrder($field, $type='ASC')
+ {
+ $this->_order[] = $this->_conn->quoteIdentifier($field) . " $type";
+ return $this;
+ }
+
+ function order($field, $type='ASC')
+ {
+ return $this->addOrder($field, $type);
+ }
+
+ function getOrder()
+ {
+ return $this->_order;
+ }
+
+ function addGroupBy($group)
+ {
+ $this->_group_by[] = $group;
+ return $this;
+ }
+
+ function group($group)
+ {
+ return $this->addGroupBy($group);
+ }
+
+ function getGroupBy()
+ {
+ return $this->_group_by;
+ }
+
+ function addHaving($criteria)
+ {
+ $this->_having[] = lmbSQLCriteria :: objectify($criteria);
+ return $this;
+ }
+
+ function having($criteria)
+ {
+ return $this->addHaving($criteria);
+ }
+
+ function getHaving()
+ {
+ return $this->_having;
+ }
+
+ function addLeftJoin($table, $field, $connect_table, $connect_field)
+ {
+ $this->_left_join_constraints[$table] = array($table . '.' . $field => $connect_table . '.' . $connect_field);
+ return $this;
+ }
+
+ function join($table, $field, $connect_table, $connect_field)
+ {
+ return $this->addLeftJoin($table, $field, $connect_table, $connect_field);
+ }
+
+ function getJoins()
+ {
+ return $this->_left_join_constraints;
+ }
+
+ function getRecordSet()
+ {
+ $stmt = $this->getStatement();
+ return $stmt->getRecordSet();
+ }
+
+ function fetch()
+ {
+ return $this->getRecordSet();
+ }
+
+ protected function _getFieldsHint()
+ {
+ $fields = '';
+ foreach($this->_fields as $field => $alias)
+ {
+ $fields .= $this->_conn->quoteIdentifier($field) .
+ ($alias ? ' as ' . $this->_conn->quoteIdentifier($alias) : '') . ',';
+ }
+ $fields = rtrim($fields, ',');
+
+ if($this->_selectFieldsExists())
+ {
+ if(count($this->_fields))
+ return ',' . $fields;
+ else
+ return '';
+ }
+ elseif(count($this->_fields) == 0)
+ return '*';
+ else
+ return $fields;
+ }
+
+ protected function _getTablesHint()
+ {
+ if(count($this->_tables) == 0)
+ return '';
+
+ $tables = '';
+ foreach($this->_tables as $item)
+ {
+ $tables .= $this->_conn->quoteIdentifier($item[0]) .
+ ($item[1] ? ' ' . $this->_conn->quoteIdentifier($item[1]) : '') . ',';
+ }
+ $tables = rtrim($tables, ',');
+
+ if($this->_selectTablesExists())
+ $tables = ',' . $tables;
+
+ return $tables;
+ }
+
+ protected function _getLeftJoinHint()
+ {
+ $join = array();
+ foreach($this->_left_join_constraints as $table => $connect_by)
+ {
+ $foreign_key = $this->_conn->quoteIdentifier(key($connect_by));
+ $alias_key = $this->_conn->quoteIdentifier(reset($connect_by));
+ $join[] = "LEFT JOIN " . $this->_conn->quoteIdentifier($table) . " ON $foreign_key=$alias_key";
+ }
+
+ return implode(' ', $join);
+ }
+
+ protected function _getGroupHint()
+ {
+ if (count($this->_group_by) == 0)
+ return '';
+
+ $group = implode(',', array_map(array($this->_conn, 'quoteIdentifier'), $this->_group_by));
+
+ if($this->_groupByClauseExists($group_by_args))
+ {
+ //primitive check if comma is required
+ if($group_by_args)
+ return ',' . $group;
+ else
+ return $group;
+ }
+ else
+ return 'GROUP BY ' . $group;
+ }
+
+ protected function _getHavingHint()
+ {
+ if (count($this->_having) == 0)
+ return '';
+
+ if(!count($this->_group_by) && !$this->_groupByClauseExists())
+ throw new lmbException('can not generate HAVING condition GROUP BY missing');
+
+ $implode = array();
+ foreach($this->_having as $criteria)
+ {
+ $implode[] = $criteria->toStatementString($this->_stmt_values);
+ }
+
+ $having = implode(' AND ', $implode);
+
+ if($this->_havingClauseExists($having_args))
+ {
+ if($having_args)
+ return 'AND ' . $having;
+ else
+ return $having;
+ }
+ else
+ return 'HAVING ' . $having;
+ }
+
+ protected function _getOrderHint()
+ {
+ if (count($this->_order) == 0)
+ return '';
+
+ $order = implode(',', $this->_order);
+
+ if($this->_orderByClauseExists($order_by_args))
+ {
+ //primitive check if comma is required
+ if($order_by_args)
+ return ',' . $order;
+ else
+ return $order;
+ }
+ else
+ return 'ORDER BY ' . $order;
+ }
+
+ protected function _orderByClauseExists(&$args = '')
+ {
+ //!!!make it better later
+ if(preg_match('~(?<=from).+order\s+by\s(.*)$~si', $this->_getNoHintsSQL(), $matches))
+ {
+ $args = trim($matches[1]);
+ return true;
+ }
+
+ return false;
+ }
+
+ protected function _groupByClauseExists(&$args = '')
+ {
+ //!!!make it better later
+ if(preg_match('~(?<=\Wfrom).+group\s+by\s(.*)$~si', $this->_getNoHintsSQL(), $matches))
+ {
+ $args = trim($matches[1]);
+ return true;
+ }
+
+ return false;
+ }
+
+ protected function _havingClauseExists(&$args = '')
+ {
+ //!!!make it better later
+ if(preg_match('~(?<=\Wgroup)\s+by\s+.+?having\s(.*)(order)?$~si', $this->_getNoHintsSQL(), $matches))
+ {
+ $args = trim($matches[1]);
+ return true;
+ }
+
+ return false;
+ }
+
+ protected function _selectFieldsExists()
+ {
+ //!!!make it better later
+ return preg_match('~^select\s+\S+.+?from~si', $this->_getNoHintsSQL());
+ }
+
+ protected function _selectTablesExists()
+ {
+ return preg_match('~(?<=\Wfrom)\s+\S+(where|order|group)?~si', $this->_getNoHintsSQL());
+ }
+
+ protected function _whereClauseExists(&$args = '')
+ {
+ //primitive check if WHERE was already in sql
+ //!!!make it better later
+ if(preg_match('~(?<=\Wfrom).+where\s+(.*)~si', $this->_getNoHintsSQL(), $matches))
+ {
+ if(preg_match('~([a-zA-Z].*)(group|order)?$~si', $matches[1], $args_matches))
+ $args = $args_matches[1];
+
+ return true;
+ }
+ return false;
+ }
+}
+?>
Modified: 3.x/trunk/limb/dbal/src/query/lmbTableRecordsQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbTableRecordsQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbTableRecordsQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,11 +2,11 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
-lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
+lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
/**
* class lmbTableRecordsQuery.
@@ -14,7 +14,7 @@
* @package dbal
* @version $Id$
*/
-class lmbTableRecordsQuery extends lmbSelectQuery
+class lmbTableRecordsQuery extends lmbSelectRawQuery
{
function __construct($table, $conn)
{
Modified: 3.x/trunk/limb/dbal/src/query/lmbTemplateQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbTemplateQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbTemplateQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,9 +2,9 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
/**
@@ -20,12 +20,19 @@
protected $_conn;
protected $_hints;
- function __construct($template_sql, $conn)
+ function __construct($template_sql, $conn=null)
{
$this->_template_sql = $template_sql;
+ if(!is_object($conn))
+ $conn = lmbToolkit :: instance()->getDefaultDbConnection();
$this->_conn = $conn;
}
+ function getConnection()
+ {
+ return $this->_conn;
+ }
+
protected function _declareHints()
{
if($this->_hints !== null)
@@ -71,6 +78,11 @@
return $this->_conn->newStatement($this->toString());
}
+ function execute()
+ {
+ $this->getStatement()->execute();
+ }
+
protected function _getNoHintsSQL()
{
if($this->_no_hints_sql)
Modified: 3.x/trunk/limb/dbal/src/query/lmbUpdateQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbUpdateQuery.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/query/lmbUpdateQuery.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,9 +2,9 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbCriteriaQuery.class.php');
@@ -29,16 +29,50 @@
parent :: __construct("UPDATE %table% SET %fields% %where%", $conn);
}
+ function getTable()
+ {
+ return $this->_table;
+ }
+
function addField($field, $value = LIMB_UPDATE_QUERY_NON_VALUE)
{
$this->_fields[$field] = $value;
+ return $this;
}
+ function field($field, $value = LIMB_UPDATE_QUERY_NON_VALUE)
+ {
+ return $this->addField($field, $value);
+ }
+
+ function getFields()
+ {
+ return $this->_fields;
+ }
+
+ function set($values)
+ {
+ foreach($values as $field => $value)
+ $this->addField($field, $value);
+ return $this;
+ }
+
function addRawField($field)
{
$this->_raw_fields[] = $field;
+ return $this;
}
+ function rawField($field)
+ {
+ return $this->addRawField($field);
+ }
+
+ function getRawFields()
+ {
+ return $this->_raw_fields;
+ }
+
protected function _getTableHint()
{
return $this->_conn->quoteIdentifier($this->_table);
Modified: 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -10,6 +10,7 @@
lmb_require('limb/dbal/src/lmbDBAL.class.php');
lmb_require('limb/dbal/src/lmbDbDSN.class.php');
lmb_require('limb/dbal/src/drivers/lmbDbCachedInfo.class.php');
+lmb_require('limb/dbal/src/lmbTableGateway.class.php');
/**
* class lmbDbTools.
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/criteria/lmbSQLFieldCriteriaTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/criteria/lmbSQLFieldCriteriaTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/criteria/lmbSQLFieldCriteriaTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,13 +1,13 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
require_once('limb/dbal/tests/common.inc.php');
-lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
+lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
lmb_require('limb/dbal/src/criteria/lmbSQLFieldCriteria.class.php');
class lmbSQLFieldCriteriaTest extends UnitTestCase
@@ -18,7 +18,7 @@
function setUp()
{
$this->conn = new ConnectionTestStub();
- $this->query = new lmbSelectQuery('SELECT * FROM any_table WHERE %where%', $this->conn);
+ $this->query = new lmbSelectRawQuery('SELECT * FROM any_table WHERE %where%', $this->conn);
}
function testEqual()
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbDBALTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbDBALTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbDBALTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,10 +1,10 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/lmbDBAL.class.php');
lmb_require('limb/dbal/src/drivers/lmbDbConnection.interface.php');
@@ -43,20 +43,28 @@
$this->assertIsA($conn, 'lmbDbConnection');
}
+ function testNewStatement()
+ {
+ $this->toolkit->setDefaultDbConnection($this->conn);
+ $this->conn->expectOnce('newStatement', array($sql = 'SELECT 1=1'));
+ $this->conn->setReturnValue('newStatement', 'whatever', array($sql));
+ $this->assertEqual(lmbDBAL :: newStatement($sql), 'whatever');
+ }
+
function testExecute()
{
$this->conn->expectOnce('execute', array($sql = 'SELECT 1=1'));
lmbDBAL :: execute($sql, $this->conn);
}
- function testExecuteDefaultConnection()
+ function testExecuteUsingDefaultConnection()
{
$this->toolkit->setDefaultDbConnection($this->conn);
$this->conn->expectOnce('execute', array($sql = 'SELECT 1=1'));
lmbDBAL :: execute('SELECT 1=1');
}
- function testQuery()
+ function testFetch()
{
$stmt = new MockDbQueryStatement();
$this->conn->expectOnce('newStatement', array($sql = 'SELECT 1=1'));
@@ -64,11 +72,11 @@
$stmt->expectOnce('getRecordSet');
$stmt->setReturnValue('getRecordSet', 'result');
- $rs = lmbDBAL :: query($sql, $this->conn);
+ $rs = lmbDBAL :: fetch($sql, $this->conn);
$this->assertEqual($rs, 'result');
}
- function testQueryDefaultConnection()
+ function testFetchUsingDefaultConnection()
{
$this->toolkit->setDefaultDbConnection($this->conn);
$stmt = new MockDbQueryStatement();
@@ -77,8 +85,81 @@
$stmt->expectOnce('getRecordSet');
$stmt->setReturnValue('getRecordSet', 'result');
- $rs = lmbDBAL :: query($sql);
+ $rs = lmbDBAL :: fetch($sql);
$this->assertEqual($rs, 'result');
}
+
+ function testDbMethod()
+ {
+ $db = lmbDBAL :: db($this->conn);
+ $this->assertIsA($db, 'lmbSimpleDb');
+ $this->assertIdentical($db->getConnection(), $this->conn);
+ }
+
+ function testDbMethodUsingDefaultConnection()
+ {
+ $db = lmbDBAL :: db();
+ $this->assertIsA($db, 'lmbSimpleDb');
+ }
+
+ function testTableMethod()
+ {
+ $table = lmbDBAL :: table('test_db_table', $this->conn);
+ $this->assertIsA($table, 'lmbTableGateway');
+ $this->assertEqual($table->getTableName(), 'test_db_table');
+ $this->assertIdentical($this->conn, $table->getConnection());
+ }
+
+ function testTableMethodUsingDefaultConnection()
+ {
+ $table = lmbDBAL :: table('test_db_table');
+ $this->assertIsA($table, 'lmbTableGateway');
+ $this->assertEqual($table->getTableName(), 'test_db_table');
+ }
+
+ function testSelectQueryUsingDefaultConnection()
+ {
+ $query = lmbDBAL :: selectQuery('test_db_table');
+ $this->assertIsA($query, 'lmbSelectQuery');
+ $this->assertEqual($query->getTables(), array('test_db_table'));
+ }
+
+ function testSelectQuery()
+ {
+ $query = lmbDBAL :: selectQuery('test_db_table', $this->conn);
+ $this->assertIsA($query, 'lmbSelectQuery');
+ $this->assertEqual($query->getTables(), array('test_db_table'));
+ $this->assertIdentical($this->conn, $query->getConnection());
+ }
+
+ function testUpdateQuery()
+ {
+ $query = lmbDBAL :: updateQuery('test_db_table', $this->conn);
+ $this->assertIsA($query, 'lmbUpdateQuery');
+ $this->assertEqual($query->getTable(), 'test_db_table');
+ $this->assertIdentical($this->conn, $query->getConnection());
+ }
+
+ function testUpdateQueryUsingDefaultConnection()
+ {
+ $query = lmbDBAL :: updateQuery('test_db_table');
+ $this->assertIsA($query, 'lmbUpdateQuery');
+ $this->assertEqual($query->getTable(), 'test_db_table');
+ }
+
+ function testDeleteQuery()
+ {
+ $query = lmbDBAL :: deleteQuery('test_db_table', $this->conn);
+ $this->assertIsA($query, 'lmbDeleteQuery');
+ $this->assertEqual($query->getTable(), 'test_db_table');
+ $this->assertIdentical($this->conn, $query->getConnection());
+ }
+
+ function testDeleteQueryUsingDefaultConnection()
+ {
+ $query = lmbDBAL :: deleteQuery('test_db_table');
+ $this->assertIsA($query, 'lmbDeleteQuery');
+ $this->assertEqual($query->getTable(), 'test_db_table');
+ }
}
?>
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbSimpleDbTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbSimpleDbTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/lmbSimpleDbTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -74,7 +74,9 @@
$this->db->insert('test_db_table', array('title' => 'wow', 'description' => 'description'));
$this->db->insert('test_db_table', array('title' => 'wow', 'description' => 'description2'));
- $this->assertEqual($this->db->update('test_db_table', array('description' => 'new_description')), 2);
+ $this->assertEqual($this->db->countAffected(), 0);
+ $this->db->update('test_db_table', array('description' => 'new_description'));
+ $this->assertEqual($this->db->countAffected(), 2);
$stmt = $this->conn->newStatement("SELECT * FROM test_db_table");
$records = $stmt->getRecordSet();
@@ -94,12 +96,12 @@
$this->db->insert('test_db_table', array('title' => 'wow', 'description' => 'description2'));
$this->db->insert('test_db_table', array('title' => 'yo', 'description' => 'description3'));
- $res = $this->db->update('test_db_table',
- array('description' => 'new_description', 'title' => 'wow2'),
- new lmbSQLFieldCriteria('title', 'wow'));
+ $this->assertEqual($this->db->countAffected(), 0);
+ $this->db->update('test_db_table',
+ array('description' => 'new_description', 'title' => 'wow2'),
+ new lmbSQLFieldCriteria('title', 'wow'));
+ $this->assertEqual($this->db->countAffected(), 2);
- $this->assertEqual($res, 2);
-
$stmt = $this->conn->newStatement("SELECT * FROM test_db_table ORDER BY id");
$records = $stmt->getRecordSet();
@@ -147,7 +149,9 @@
$this->db->insert('test_db_table', $data[0]);
$this->db->insert('test_db_table', $data[1]);
- $this->assertEqual($this->db->delete('test_db_table'), 2);
+ $this->assertEqual($this->db->countAffected(), 0);
+ $this->db->delete('test_db_table');
+ $this->assertEqual($this->db->countAffected(), 2);
$stmt = $this->conn->newStatement("SELECT * FROM test_db_table");
$records = $stmt->getRecordSet();
@@ -165,8 +169,9 @@
$this->db->insert('test_db_table', $data[0]);
$this->db->insert('test_db_table', $data[1]);
- $this->assertEqual($this->db->delete('test_db_table',
- new lmbSQLFieldCriteria('description', 'description')), 1);
+ $this->assertEqual($this->db->countAffected(), 0);
+ $this->db->delete('test_db_table',new lmbSQLFieldCriteria('description', 'description'));
+ $this->assertEqual($this->db->countAffected(), 1);
$stmt = $this->conn->newStatement("SELECT * FROM test_db_table");
$records = $stmt->getRecordSet();
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbDeleteQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbDeleteQueryTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbDeleteQueryTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,9 +2,9 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/criteria/lmbSQLFieldCriteria.class.php');
lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
@@ -12,12 +12,12 @@
class lmbDeleteQueryTest extends UnitTestCase
{
- var $query;
- var $db;
+ protected $query;
+ protected $db;
function setUp()
{
- $toolkit = lmbToolkit :: save();
+ $toolkit = lmbToolkit :: instance();
$this->conn = $toolkit->getDefaultDbConnection();
$this->db = new lmbSimpleDb($this->conn);
@@ -47,7 +47,7 @@
$this->assertEqual($rs->count(), 0);
}
- function testDeleteFiltered()
+ function testDeleteWithCondition()
{
$this->db->insert('test_db_table', array('id' => 100));
$this->db->insert('test_db_table', array('id' => 101));
@@ -64,5 +64,19 @@
$this->assertEqual($arr[1]['id'], 102);
$this->assertEqual(sizeof($arr), 2);
}
+
+ function testChaining()
+ {
+ $this->db->insert('test_db_table', array('id' => 100));
+ $this->db->insert('test_db_table', array('id' => 101));
+
+ $query = new lmbDeleteQuery('test_db_table', $this->conn);
+ $query->where('id=100')->execute();
+
+ $rs = $this->db->select('test_db_table');
+ $arr = $rs->getArray();
+ $this->assertEqual($arr[0]['id'], 101);
+ $this->assertEqual(sizeof($arr), 1);
+ }
}
?>
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbInsertQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbInsertQueryTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbInsertQueryTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,10 +1,10 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/query/lmbInsertQuery.class.php');
lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
@@ -16,7 +16,7 @@
function setUp()
{
- $toolkit = lmbToolkit :: save();
+ $toolkit = lmbToolkit :: instance();
$this->conn = $toolkit->getDefaultDbConnection();
$this->db = new lmbSimpleDb($this->conn);
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectQueryTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectQueryTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -2,355 +2,20 @@
/*
* Limb PHP Framework
*
- * @link http://limb-project.com
+ * @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
-require_once('limb/dbal/tests/common.inc.php');
-lmb_require('limb/dbal/src/criteria/lmbSQLRawCriteria.class.php');
-lmb_require('limb/dbal/src/criteria/lmbSQLTableFieldCriteria.class.php');
lmb_require('limb/dbal/src/query/lmbSelectQuery.class.php');
-lmb_require('limb/dbal/src/drivers/lmbDbConnection.interface.php');
-lmb_require('limb/dbal/src/drivers/lmbDbStatement.interface.php');
-Mock :: generate('lmbDbConnection', 'MockConnection');
-Mock :: generate('lmbDbStatement', 'MockStatement');
-
class lmbSelectQueryTest extends UnitTestCase
{
- var $conn;
-
- function setUp()
+ function testConstruct()
{
- $this->conn = new ConnectionTestStub();
- }
+ $sql = new lmbSelectQuery('foo');
- function testSelect()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test', $this->conn);
-
- $this->assertEqual($sql->toString(), 'SELECT * FROM test');
+ $this->assertEqual($sql->getTables(), array('foo'));
}
- function testNoFields()
- {
- $sql = new lmbSelectQuery('SELECT %fields% FROM test', $this->conn);
-
- $this->assertEqual($sql->toString(), 'SELECT * FROM test');
- }
-
- function testAddFieldWithFields()
- {
- $sql = new lmbSelectQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
-
- $sql->addField('t1');
- $sql->addField('t2');
-
- $this->assertEqual($sql->toString(), "SELECT t3 \n,'t1','t2',t4 FROM test");
- }
-
- function testNoFieldsAdded()
- {
- $sql = new lmbSelectQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
-
- $this->assertEqual($sql->toString(), "SELECT t3 \n,t4 FROM test");
- }
-
- function testAddFieldNoFields()
- {
- $sql = new lmbSelectQuery('SELECT %fields% FROM test', $this->conn);
-
- $sql->addField('t1');
- $sql->addField('t2');
-
- $this->assertEqual($sql->toString(), "SELECT 't1','t2' FROM test");
- }
-
- function testAddFieldWithAlias()
- {
- $sql = new lmbSelectQuery('SELECT %fields% FROM test', $this->conn);
-
- $sql->addField('t1', 'a1');
- $sql->addField('t2', 'a2');
-
- $this->assertEqual($sql->toString(), "SELECT 't1' as 'a1','t2' as 'a2' FROM test");
- }
-
- function testNoAddTable()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test %tables%', $this->conn);
-
- $this->assertEqual($sql->toString(), 'SELECT * FROM test');
- }
-
- function testAddTable()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test \n\t%tables%", $this->conn);
-
- $sql->addTable('test2');
- $sql->addTable('test3');
-
- $this->assertEqual($sql->toString(), "SELECT * FROM test \n\t,'test2','test3'");
- }
-
- function testAddTableWithAlias()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test \n\t%tables%", $this->conn);
-
- $sql->addTable('test2', 't2');
- $sql->addTable('test3');
-
- $this->assertEqual($sql->toString(), "SELECT * FROM test \n\t,'test2' 't2','test3'");
- }
-
- function testAddLeftJoin()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test %left_join%', $this->conn);
-
- $sql->addLeftJoin('article', array('test.article_id' => 'article.id'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test LEFT JOIN 'article' ON 'test.article_id'='article.id'");
- }
-
- function testEmptyCondition()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test %where%', $this->conn);
-
- $this->assertEqual($sql->toString(),
- 'SELECT * FROM test');
- }
-
- function testAddCondition()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test WHERE \n%where%", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test WHERE \nc1=:c1:");
- }
-
- function testAddConditionNoWhereClause()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test \n%where%", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test \nWHERE c1=:c1:");
- }
-
- function testAddConditionNoHint()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test WHERE 1=1", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
- $this->assertEqual($sql->toString(), "SELECT * FROM test WHERE 1=1");
- }
-
- function testAddSeveralConditions()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test %where%', $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- 'SELECT * FROM test WHERE c1=:c1: AND c2=:c2:');
- }
-
- function testAddConditionToExistingConditions()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test WHERE t1=t1\n %where%", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test WHERE t1=t1\n AND c1=:c1: AND c2=:c2:");
- }
-
- function testAddConditionToExistingConditionsWithOrder()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test WHERE t1=t1\n\n %where% \n\tORDER BY t1", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test WHERE t1=t1\n\n AND c1=:c1: AND c2=:c2: \n\tORDER BY t1");
- }
-
- function testAddConditionToExistingConditionsWithGroup()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test WHERE t1=t1\n\n %where% \n\tGROUP BY t1", $this->conn);
-
- $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test WHERE t1=t1\n\n AND c1=:c1: AND c2=:c2: \n\tGROUP BY t1");
- }
-
- function testEmptyOrder()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test \n%order%", $this->conn);
-
- $this->assertEqual($sql->toString(),
- 'SELECT * FROM test');
- }
-
- function testAddOrderNoOrderClause()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test \n%order%", $this->conn);
-
- $sql->addOrder('t1');
- $sql->addOrder('t2', 'DESC');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test \nORDER BY t1 ASC,t2 DESC");
- }
-
- function testAddOrderWithOrderClause()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test ORDER BY\n %order%", $this->conn);
-
- $sql->addOrder('t1');
- $sql->addOrder('t2', 'DESC');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test ORDER BY\n t1 ASC,t2 DESC");
- }
-
- function testAddOrderWithOrderClause2()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test ORDER BY t0 DESC\n %order%", $this->conn);
-
- $sql->addOrder('t1');
- $sql->addOrder('t2', 'DESC');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test ORDER BY t0 DESC\n ,t1 ASC,t2 DESC");
- }
-
- function testAddOrderWithOrderClause3()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test ORDER BY t0 DESC\n %order%", $this->conn);
-
- $this->assertEqual($sql->toString(),
- 'SELECT * FROM test ORDER BY t0 DESC');
- }
-
- function testNoGroupsAdded()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test', $this->conn);
-
- $this->assertEqual($sql->toString(),
- 'SELECT * FROM test');
- }
-
- function testNoGroupsAdded2()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY t0 \n%group%", $this->conn);
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY t0");
- }
-
- function testAddGroupBy()
- {
- $sql = new lmbSelectQuery('SELECT * FROM test %group%', $this->conn);
-
- $sql->addGroupBy('t1');
- $sql->addGroupBy('t2');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY 't1','t2'");
- }
-
- function testAddGroupByWithGroupByClause()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY \n%group%", $this->conn);
-
- $sql->addGroupBy('t1');
- $sql->addGroupBy('t2');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY \n't1','t2'");
- }
-
- function testAddGroupByWithGroupByClause2()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY t0 \n%group%", $this->conn);
-
- $sql->addGroupBy('t1');
- $sql->addGroupBy('t2');
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY t0 \n,'t1','t2'");
- }
-
- function testAddHavingNoGroupBy()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test %having%", $this->conn);
-
- $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
-
- try
- {
- $sql->toString();
- $this->assertTrue(false);
- }
- catch(lmbException $e){}
- }
-
- function testAddHaving()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY id %having%", $this->conn);
-
- $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY id HAVING c1=:c1: AND c2=:c2:");
- }
-
- function testAddHavingToExistingHaving()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY id HAVING id=1 %having%", $this->conn);
-
- $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY id HAVING id=1 AND c1=:c1: AND c2=:c2:");
- }
-
- function testAddHavingWithExistingOrder()
- {
- $sql = new lmbSelectQuery("SELECT * FROM test GROUP BY id HAVING id=1 %having% ORDER BY id", $this->conn);
-
- $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
- $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
-
- $this->assertEqual($sql->toString(),
- "SELECT * FROM test GROUP BY id HAVING id=1 AND c1=:c1: AND c2=:c2: ORDER BY id");
- }
-
- function testGetStatement()
- {
- $conn = new MockConnection();
- $stmt = new MockStatement();
-
- $conn->expectOnce('newStatement');
- $stmt->expectOnce('set', array('p0t_id', 5));
- $conn->setReturnReference('newStatement', $stmt);
-
- $sql = new lmbSelectQuery('SELECT * FROM test %where%', $conn);
- $sql->addCriteria(new lmbSQLTableFieldCriteria('t.id', 5));
-
- $sql->getStatement();
- }
}
?>
Added: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php (rev 0)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -0,0 +1,394 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+require_once('limb/dbal/tests/common.inc.php');
+lmb_require('limb/dbal/src/criteria/lmbSQLRawCriteria.class.php');
+lmb_require('limb/dbal/src/criteria/lmbSQLTableFieldCriteria.class.php');
+lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
+lmb_require('limb/dbal/src/drivers/lmbDbConnection.interface.php');
+lmb_require('limb/dbal/src/drivers/lmbDbStatement.interface.php');
+
+Mock :: generate('lmbDbConnection', 'MockConnection');
+Mock :: generate('lmbDbStatement', 'MockStatement');
+
+class lmbSelectRawQueryTest extends UnitTestCase
+{
+ protected $conn;
+
+ function setUp()
+ {
+ //this stub uses ' quoting for simpler testing
+ $this->conn = new ConnectionTestStub();
+ }
+
+ function testSelect()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test', $this->conn);
+
+ $this->assertEqual($sql->toString(), 'SELECT * FROM test');
+ }
+
+ function testNoFields()
+ {
+ $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+
+ $this->assertEqual($sql->toString(), 'SELECT * FROM test');
+ }
+
+ function testAddFieldWithFields()
+ {
+ $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
+
+ $sql->addField('t1');
+ $sql->addField('t2');
+
+ $this->assertEqual($sql->toString(), "SELECT t3 \n,'t1','t2',t4 FROM test");
+ }
+
+ function testNoFieldsAdded()
+ {
+ $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
+
+ $this->assertEqual($sql->toString(), "SELECT t3 \n,t4 FROM test");
+ }
+
+ function testAddFieldNoFields()
+ {
+ $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+
+ $sql->addField('t1');
+ $sql->addField('t2');
+
+ $this->assertEqual($sql->toString(), "SELECT 't1','t2' FROM test");
+ }
+
+ function testAddFieldWithAlias()
+ {
+ $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+
+ $sql->addField('t1', 'a1');
+ $sql->addField('t2', 'a2');
+
+ $this->assertEqual($sql->toString(), "SELECT 't1' as 'a1','t2' as 'a2' FROM test");
+ }
+
+ function testNoAddTable()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %tables%', $this->conn);
+
+ $this->assertEqual($sql->toString(), 'SELECT * FROM test');
+ }
+
+ function testAddTable()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n\t%tables%", $this->conn);
+
+ $sql->addTable('test2');
+ $sql->addTable('test3');
+
+ $this->assertEqual($sql->toString(), "SELECT * FROM test \n\t,'test2','test3'");
+ }
+
+ function testAddTableWithAlias()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n\t%tables%", $this->conn);
+
+ $sql->addTable('test2', 't2');
+ $sql->addTable('test3');
+
+ $this->assertEqual($sql->toString(), "SELECT * FROM test \n\t,'test2' 't2','test3'");
+ }
+
+ function testAddSameTable()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n\t%tables%", $this->conn);
+
+ $sql->addTable('test2', 'a');
+ $sql->addTable('test2', 'b');
+
+ $this->assertEqual($sql->toString(), "SELECT * FROM test \n\t,'test2' 'a','test2' 'b'");
+ }
+
+ function testAddLeftJoin()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %left_join%', $this->conn);
+
+ $sql->addLeftJoin('article', 'id', 'test', 'article_id');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test LEFT JOIN 'article' ON 'article.id'='test.article_id'");
+ }
+
+ function testEmptyCondition()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %where%', $this->conn);
+
+ $this->assertEqual($sql->toString(),
+ 'SELECT * FROM test');
+ }
+
+ function testAddCondition()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test WHERE \n%where%", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test WHERE \nc1=:c1:");
+ }
+
+ function testAddConditionNoWhereClause()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n%where%", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test \nWHERE c1=:c1:");
+ }
+
+ function testAddConditionNoHint()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test WHERE 1=1", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+ $this->assertEqual($sql->toString(), "SELECT * FROM test WHERE 1=1");
+ }
+
+ function testAddSeveralConditions()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %where%', $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ 'SELECT * FROM test WHERE c1=:c1: AND c2=:c2:');
+ }
+
+ function testAddConditionToExistingConditions()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test WHERE t1=t1\n %where%", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test WHERE t1=t1\n AND c1=:c1: AND c2=:c2:");
+ }
+
+ function testAddConditionToExistingConditionsWithOrder()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test WHERE t1=t1\n\n %where% \n\tORDER BY t1", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test WHERE t1=t1\n\n AND c1=:c1: AND c2=:c2: \n\tORDER BY t1");
+ }
+
+ function testAddConditionToExistingConditionsWithGroup()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test WHERE t1=t1\n\n %where% \n\tGROUP BY t1", $this->conn);
+
+ $sql->addCriteria(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addCriteria(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test WHERE t1=t1\n\n AND c1=:c1: AND c2=:c2: \n\tGROUP BY t1");
+ }
+
+ function testEmptyOrder()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n%order%", $this->conn);
+
+ $this->assertEqual($sql->toString(),
+ 'SELECT * FROM test');
+ }
+
+ function testAddOrderNoOrderClause()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n%order%", $this->conn);
+
+ $sql->addOrder('t1');
+ $sql->addOrder('t2', 'DESC');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test \nORDER BY 't1' ASC,'t2' DESC");
+ }
+
+ function testAddOrderWithOrderClause()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test ORDER BY\n %order%", $this->conn);
+
+ $sql->addOrder('t1');
+ $sql->addOrder('t2', 'DESC');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test ORDER BY\n 't1' ASC,'t2' DESC");
+ }
+
+ function testAddOrderWithOrderClause2()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test ORDER BY t0 DESC\n %order%", $this->conn);
+
+ $sql->addOrder('t1');
+ $sql->addOrder('t2', 'DESC');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test ORDER BY t0 DESC\n ,'t1' ASC,'t2' DESC");
+ }
+
+ function testAddOrderWithOrderClause3()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test ORDER BY t0 DESC\n %order%", $this->conn);
+
+ $this->assertEqual($sql->toString(),
+ 'SELECT * FROM test ORDER BY t0 DESC');
+ }
+
+ function testNoGroupsAdded()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test', $this->conn);
+
+ $this->assertEqual($sql->toString(),
+ 'SELECT * FROM test');
+ }
+
+ function testNoGroupsAdded2()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY t0 \n%group%", $this->conn);
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY t0");
+ }
+
+ function testAddGroupBy()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %group%', $this->conn);
+
+ $sql->addGroupBy('t1');
+ $sql->addGroupBy('t2');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY 't1','t2'");
+ }
+
+ function testAddGroupByWithGroupByClause()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY \n%group%", $this->conn);
+
+ $sql->addGroupBy('t1');
+ $sql->addGroupBy('t2');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY \n't1','t2'");
+ }
+
+ function testAddGroupByWithGroupByClause2()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY t0 \n%group%", $this->conn);
+
+ $sql->addGroupBy('t1');
+ $sql->addGroupBy('t2');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY t0 \n,'t1','t2'");
+ }
+
+ function testAddHavingNoGroupBy()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test %having%", $this->conn);
+
+ $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
+
+ try
+ {
+ $sql->toString();
+ $this->assertTrue(false);
+ }
+ catch(lmbException $e){}
+ }
+
+ function testAddHaving()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY id %having%", $this->conn);
+
+ $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY id HAVING c1=:c1: AND c2=:c2:");
+ }
+
+ function testAddHavingToExistingHaving()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY id HAVING id=1 %having%", $this->conn);
+
+ $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY id HAVING id=1 AND c1=:c1: AND c2=:c2:");
+ }
+
+ function testAddHavingWithExistingOrder()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test GROUP BY id HAVING id=1 %having% ORDER BY id", $this->conn);
+
+ $sql->addHaving(new lmbSQLRawCriteria('c1=:c1:'));
+ $sql->addHaving(new lmbSQLRawCriteria('c2=:c2:'));
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test GROUP BY id HAVING id=1 AND c1=:c1: AND c2=:c2: ORDER BY id");
+ }
+
+ function testGetStatement()
+ {
+ $conn = new MockConnection();
+ $stmt = new MockStatement();
+
+ $conn->expectOnce('newStatement');
+ $stmt->expectOnce('set', array('p0t_id', 5));
+ $conn->setReturnReference('newStatement', $stmt);
+
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %where%', $conn);
+ $sql->addCriteria(new lmbSQLTableFieldCriteria('t.id', 5));
+
+ $sql->getStatement();
+ }
+
+ function testChaining()
+ {
+ $sql = new lmbSelectRawQuery($this->conn);
+ $string = $sql->from('test')->
+ from('test', 'test2')->
+ field('foo', 'f')->
+ join('test', 'id', 'test2', 'id')->
+ order('id', 'desc')->
+ group('id')->
+ having('id=1')->
+ where('id=2')->
+ toString();
+
+ $this->assertEqual($string,
+ "SELECT 'foo' as 'f' FROM 'test','test' 'test2' " .
+ "LEFT JOIN 'test' ON 'test.id'='test2.id' " .
+ "WHERE id=2 GROUP BY 'id' HAVING id=1 ORDER BY 'id' desc");
+ }
+
+ function testFetchUsingDefaultConnection()
+ {
+ $sql = new lmbSelectRawQuery('SELECT 1=1');
+ $rs = $sql->fetch();
+ $this->assertEqual($rs->count(), 1);
+ $this->assertEqual($rs[0], true);
+ }
+}
+?>
Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbUpdateQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbUpdateQueryTest.class.php 2007-07-02 06:34:26 UTC (rev 6038)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbUpdateQueryTest.class.php 2007-07-02 12:51:09 UTC (rev 6039)
@@ -1,10 +1,10 @@
<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
+ * @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
lmb_require('limb/dbal/src/criteria/lmbSQLFieldCriteria.class.php');
lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
@@ -17,7 +17,7 @@
function setUp()
{
- $toolkit = lmbToolkit :: save();
+ $toolkit = lmbToolkit :: instance();
$this->conn = $toolkit->getDefaultDbConnection();
$this->db = new lmbSimpleDb($this->conn);
@@ -109,7 +109,7 @@
$rs = $this->db->select('test_db_table');
$rs->rewind();
- $record = $rs->current();
+ $record = $rs->current(); //this one is not changed
$this->assertEqual($record->get('id'), 100);
$this->assertEqual($record->get('title'), '');
$this->assertEqual($record->get('description'), '');
@@ -120,5 +120,34 @@
$this->assertEqual($record->get('title'), $title);
$this->assertEqual($record->get('description'), $description);
}
+
+ function testChaining()
+ {
+ $this->db->insert('test_db_table', array('id' => 100));
+ $this->db->insert('test_db_table', array('id' => 101));
+
+ $description = 'Some description';
+ $title = 'Some title';
+
+ $query = new lmbUpdateQuery('test_db_table', $this->conn);
+ $query->set(array('description' => $description))->
+ field('title', $title)->
+ rawField('id = id + 10')->
+ where('id=101')->
+ execute();
+
+ $rs = $this->db->select('test_db_table');
+ $rs->rewind();
+ $record = $rs->current(); //this one is not changed
+ $this->assertEqual($record->get('id'), 100);
+ $this->assertEqual($record->get('title'), '');
+ $this->assertEqual($record->get('description'), '');
+
+ $rs->next();
+ $record = $rs->current();
+ $this->assertEqual($record->get('id'), 111);
+ $this->assertEqual($record->get('title'), $title);
+ $this->assertEqual($record->get('description'), $description);
+ }
}
?>
More information about the limb-svn
mailing list