summaryrefslogtreecommitdiffstats
path: root/modules/database/classes/driver
diff options
context:
space:
mode:
Diffstat (limited to 'modules/database/classes/driver')
-rw-r--r--modules/database/classes/driver/mysql/db.php214
-rw-r--r--modules/database/classes/driver/mysql/query.php5
-rw-r--r--modules/database/classes/driver/mysql/result.php90
-rw-r--r--modules/database/classes/driver/pdo/db.php228
-rw-r--r--modules/database/classes/driver/pdo/query.php443
-rw-r--r--modules/database/classes/driver/pdo/result.php90
6 files changed, 537 insertions, 533 deletions
diff --git a/modules/database/classes/driver/mysql/db.php b/modules/database/classes/driver/mysql/db.php
index 88df9b8..1d49acf 100644
--- a/modules/database/classes/driver/mysql/db.php
+++ b/modules/database/classes/driver/mysql/db.php
@@ -7,120 +7,120 @@
class DB_Mysql_Driver extends DB
{
- /**
- * Mysqli database connection object
- * @var mysqli
- * @access public
- * @link http://php.net/manual/en/class.mysqli.php
- */
- public $conn;
+ /**
+ * Mysqli database connection object
+ * @var mysqli
+ * @access public
+ * @link http://php.net/manual/en/class.mysqli.php
+ */
+ public $conn;
- /**
- * Type of the database, mysql.
- * @var string
- * @access public
- */
- public $db_type = 'mysql';
+ /**
+ * Type of the database, mysql.
+ * @var string
+ * @access public
+ */
+ public $db_type = 'mysql';
- /**
- * Initializes database connection
- *
- * @param string $config Name of the connection to initialize
- * @return void
- * @access public
- */
- public function __construct($config)
- {
- $this->conn = mysqli_connect(
- Config::get("database.{$config}.host", 'localhost'), Config::get("database.{$config}.user", ''), Config::get("database.{$config}.password", ''), Config::get("database.{$config}.db")
- );
- $this->conn->set_charset("utf8");
- }
+ /**
+ * Initializes database connection
+ *
+ * @param string $config Name of the connection to initialize
+ * @return void
+ * @access public
+ */
+ public function __construct($config)
+ {
+ $this->conn = mysqli_connect(
+ Config::get("database.{$config}.host", 'localhost'), Config::get("database.{$config}.user", ''), Config::get("database.{$config}.password", ''), Config::get("database.{$config}.db")
+ );
+ $this->conn->set_charset("utf8");
+ }
- /**
- * Gets column names for the specified table
- *
- * @param string $table Name of the table to get columns from
- * @return array Array of column names
- * @throw Exception if table doesn't exist
- * @access public
- */
- public function list_columns($table)
- {
- $columns = array();
- $table_desc = $this->execute("DESCRIBE `$table`");
- Debug::log($table_desc);
- if (!$table_desc->valid())
- {
- throw new Exception("Table '{$table}' doesn't exist");
- }
- foreach ($table_desc as $column)
- {
- $columns[] = $column->Field;
- }
+ /**
+ * Gets column names for the specified table
+ *
+ * @param string $table Name of the table to get columns from
+ * @return array Array of column names
+ * @throw Exception if table doesn't exist
+ * @access public
+ */
+ public function list_columns($table)
+ {
+ $columns = array();
+ $table_desc = $this->execute("DESCRIBE `$table`");
+ Debug::log($table_desc);
+ if (!$table_desc->valid())
+ {
+ throw new Exception("Table '{$table}' doesn't exist");
+ }
+ foreach ($table_desc as $column)
+ {
+ $columns[] = $column->Field;
+ }
- return $columns;
- }
+ return $columns;
+ }
- /**
- * Builds a new Query implementation
- *
- * @param string $type Query type. Available types: select,update,insert,delete,count
- * @return Query_Mysql_Driver Returns a Mysqli implementation of a Query.
- * @access public
- * @see Query_Database
- */
- public function build_query($type)
- {
- return new Query_Mysql_Driver($this, $type);
- }
+ /**
+ * Builds a new Query implementation
+ *
+ * @param string $type Query type. Available types: select,update,insert,delete,count
+ * @return Query_Mysql_Driver Returns a Mysqli implementation of a Query.
+ * @access public
+ * @see Query_Database
+ */
+ public function build_query($type)
+ {
+ return new Query_Mysql_Driver($this, $type);
+ }
- /**
- * Gets the id of the last inserted row.
- *
- * @return mixed Row id
- * @access public
- */
- public function get_insert_id()
- {
- return $this->conn->insert_id;
- }
+ /**
+ * Gets the id of the last inserted row.
+ *
+ * @return mixed Row id
+ * @access public
+ */
+ public function get_insert_id()
+ {
+ return $this->conn->insert_id;
+ }
- /**
- * Executes a prepared statement query
- *
- * @param string $query A prepared statement query
- * @param array $params Parameters for the query
- * @return Result_Mysql_Driver Mysqli implementation of a database result
- * @access public
- * @throws Exception If the query resulted in an error
- * @see Database_Result
- */
- public function execute($query, $params = array())
- {
- $cursor = $this->conn->prepare($query);
- if (!$cursor)
- {
- throw new Exception("Database error: {$this->conn->error} \n in query:\n{$query}");
- }
- $types = '';
- $bind = array();
- $refs = array();
- if (!empty($params))
- {
- foreach ($params as $key => $param)
- {
- $refs[$key] = is_array($param) ? $param[0] : $param;
- $bind[] = &$refs[$key];
- $types .= is_array($param) ? $param[1] : 's';
- }
- array_unshift($bind, $types);
+ /**
+ * Executes a prepared statement query
+ *
+ * @param string $query A prepared statement query
+ * @param array $params Parameters for the query
+ * @return Result_Mysql_Driver Mysqli implementation of a database result
+ * @access public
+ * @throws Exception If the query resulted in an error
+ * @see Database_Result
+ */
+ public function execute($query, $params = array())
+ {
+ $cursor = $this->conn->prepare($query);
+ if (!$cursor)
+ {
+ throw new Exception("Database error: {$this->conn->error} \n in query:\n{$query}");
+ }
+ $types = '';
+ $bind = array();
+ $refs = array();
+ if (!empty($params))
+ {
+ foreach ($params as $key => $param)
+ {
+ $refs[$key] = is_array($param) ? $param[0] : $param;
+ $bind[] = &$refs[$key];
+ $types .= is_array($param) ? $param[1] : 's';
+ }
+ array_unshift($bind, $types);
- call_user_func_array(array($cursor, 'bind_param'), $bind);
- }
- $cursor->execute();
- $res = $cursor->get_result();
- return new Result_Mysql_Driver($res);
- }
+ call_user_func_array(array($cursor, 'bind_param'), $bind);
+ }
+ $cursor->execute();
+ $res = $cursor->get_result();
+ return new Result_Mysql_Driver($res);
+ }
} \ No newline at end of file
diff --git a/modules/database/classes/driver/mysql/query.php b/modules/database/classes/driver/mysql/query.php
index 803f932..b880338 100644
--- a/modules/database/classes/driver/mysql/query.php
+++ b/modules/database/classes/driver/mysql/query.php
@@ -4,4 +4,7 @@
* Mysqli implementation of the database Query
* @package Database
*/
-class Query_Mysql_Driver extends Query_PDO_Driver {} \ No newline at end of file
+class Query_Mysql_Driver extends Query_PDO_Driver
+{
+
+}
diff --git a/modules/database/classes/driver/mysql/result.php b/modules/database/classes/driver/mysql/result.php
index e9de4a5..2927192 100644
--- a/modules/database/classes/driver/mysql/result.php
+++ b/modules/database/classes/driver/mysql/result.php
@@ -7,52 +7,52 @@
class Result_Mysql_Driver extends Result_Database
{
- /**
- * Initializes new result object
- *
- * @param mysqli_result $result Mysqli Result
- * @return void
- * @access public
- * @link http://php.net/manual/en/class.mysqli-result.php
- */
- public function __construct($result)
- {
- $this->_result = $result;
- }
+ /**
+ * Initializes new result object
+ *
+ * @param mysqli_result $result Mysqli Result
+ * @return void
+ * @access public
+ * @link http://php.net/manual/en/class.mysqli-result.php
+ */
+ public function __construct($result)
+ {
+ $this->_result = $result;
+ }
- /**
- * Throws exception if rewind is attempted.
- *
- * @return void
- * @access public
- * @throws Exception If rewind is attempted
- */
- public function rewind()
- {
- if ($this->_position > 0)
- {
- throw new Exception('Mysqli result cannot be rewound for unbuffered queries.');
- }
- }
+ /**
+ * Throws exception if rewind is attempted.
+ *
+ * @return void
+ * @access public
+ * @throws Exception If rewind is attempted
+ */
+ public function rewind()
+ {
+ if ($this->_position > 0)
+ {
+ throw new Exception('Mysqli result cannot be rewound for unbuffered queries.');
+ }
+ }
- /**
- * Iterates to the next row in the result set
- *
- * @return void
- * @access public
- */
- public function next()
- {
- $this->check_fetched();
- $this->_row = $this->_result->fetch_object();
- if ($this->_row)
- {
- $this->_position++;
- }
- else
- {
- $this->_result->free();
- }
- }
+ /**
+ * Iterates to the next row in the result set
+ *
+ * @return void
+ * @access public
+ */
+ public function next()
+ {
+ $this->check_fetched();
+ $this->_row = $this->_result->fetch_object();
+ if ($this->_row)
+ {
+ $this->_position++;
+ }
+ else
+ {
+ $this->_result->free();
+ }
+ }
} \ No newline at end of file
diff --git a/modules/database/classes/driver/pdo/db.php b/modules/database/classes/driver/pdo/db.php
index 5b81d66..5a920ec 100644
--- a/modules/database/classes/driver/pdo/db.php
+++ b/modules/database/classes/driver/pdo/db.php
@@ -7,125 +7,125 @@
class DB_PDO_Driver extends DB
{
- /**
- * Connection object
- * @var PDO
- * @access public
- * @link http://php.net/manual/en/class.pdo.php
- */
- public $conn;
+ /**
+ * Connection object
+ * @var PDO
+ * @access public
+ * @link http://php.net/manual/en/class.pdo.php
+ */
+ public $conn;
- /**
- * Type of the database, e.g. mysql, pgsql etc.
- * @var string
- * @access public
- */
- public $db_type;
+ /**
+ * Type of the database, e.g. mysql, pgsql etc.
+ * @var string
+ * @access public
+ */
+ public $db_type;
- /**
- * Initializes database connection
- *
- * @param string $config Name of the connection to initialize
- * @return void
- * @access public
- */
- public function __construct($config)
- {
- $this->conn = new PDO(
- Config::get("database.{$config}.connection"), Config::get("database.{$config}.user", ''), Config::get("database.{$config}.password", '')
- );
- $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $this->db_type = strtolower(str_replace('PDO_', '', $this->conn->getAttribute(PDO::ATTR_DRIVER_NAME)));
- if ($this->db_type != 'sqlite')
- {
- $this->conn->exec("SET NAMES utf8");
- }
- }
+ /**
+ * Initializes database connection
+ *
+ * @param string $config Name of the connection to initialize
+ * @return void
+ * @access public
+ */
+ public function __construct($config)
+ {
+ $this->conn = new PDO(
+ Config::get("database.{$config}.connection"), Config::get("database.{$config}.user", ''), Config::get("database.{$config}.password", '')
+ );
+ $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ $this->db_type = strtolower(str_replace('PDO_', '', $this->conn->getAttribute(PDO::ATTR_DRIVER_NAME)));
+ if ($this->db_type != 'sqlite')
+ {
+ $this->conn->exec("SET NAMES utf8");
+ }
+ }
- /**
- * Builds a new Query implementation
- *
- * @param string $type Query type. Available types: select,update,insert,delete,count
- * @return Query_PDO_Driver Returns a PDO implementation of a Query.
- * @access public
- * @see Query_Database
- */
- public function build_query($type)
- {
- return new Query_PDO_Driver($this, $type);
- }
+ /**
+ * Builds a new Query implementation
+ *
+ * @param string $type Query type. Available types: select,update,insert,delete,count
+ * @return Query_PDO_Driver Returns a PDO implementation of a Query.
+ * @access public
+ * @see Query_Database
+ */
+ public function build_query($type)
+ {
+ return new Query_PDO_Driver($this, $type);
+ }
- /**
- * Gets the id of the last inserted row.
- *
- * @return mixed Row id
- * @access public
- */
- public function get_insert_id()
- {
- if ($this->db_type == 'pgsql')
- {
- return $this->execute('SELECT lastval() as id')->current()->id;
- }
- return $this->conn->lastInsertId();
- }
+ /**
+ * Gets the id of the last inserted row.
+ *
+ * @return mixed Row id
+ * @access public
+ */
+ public function get_insert_id()
+ {
+ if ($this->db_type == 'pgsql')
+ {
+ return $this->execute('SELECT lastval() as id')->current()->id;
+ }
+ return $this->conn->lastInsertId();
+ }
- /**
- * Gets column names for the specified table
- *
- * @param string $table Name of the table to get columns from
- * @return array Array of column names
- * @access public
- */
- public function list_columns($table)
- {
- $columns = array();
- if ($this->db_type == 'mysql')
- {
- $table_desc = $this->execute("DESCRIBE `$table`");
- foreach ($table_desc as $column)
- {
- $columns[] = $column->Field;
- }
- }
- if ($this->db_type == 'pgsql')
- {
- $table_desc = $this->execute("select column_name from information_schema.columns where table_name = '{$table}' and table_catalog=current_database();");
- foreach ($table_desc as $column)
- {
- $columns[] = $column->column_name;
- }
- }
- if ($this->db_type == 'sqlite')
- {
- $table_desc = $this->execute("PRAGMA table_info('$table')");
- foreach ($table_desc as $column)
- {
- $columns[] = $column->name;
- }
- }
- return $columns;
- }
+ /**
+ * Gets column names for the specified table
+ *
+ * @param string $table Name of the table to get columns from
+ * @return array Array of column names
+ * @access public
+ */
+ public function list_columns($table)
+ {
+ $columns = array();
+ if ($this->db_type == 'mysql')
+ {
+ $table_desc = $this->execute("DESCRIBE `$table`");
+ foreach ($table_desc as $column)
+ {
+ $columns[] = $column->Field;
+ }
+ }
+ if ($this->db_type == 'pgsql')
+ {
+ $table_desc = $this->execute("select column_name from information_schema.columns where table_name = '{$table}' and table_catalog=current_database();");
+ foreach ($table_desc as $column)
+ {
+ $columns[] = $column->column_name;
+ }
+ }
+ if ($this->db_type == 'sqlite')
+ {
+ $table_desc = $this->execute("PRAGMA table_info('$table')");
+ foreach ($table_desc as $column)
+ {
+ $columns[] = $column->name;
+ }
+ }
+ return $columns;
+ }
- /**
- * Executes a prepared statement query
- *
- * @param string $query A prepared statement query
- * @param array $params Parameters for the query
- * @return Result_PDO_Driver PDO implementation of a database result
- * @access public
- * @throws Exception If the query resulted in an error
- * @see Database_Result
- */
- public function execute($query, $params = array())
- {
- $cursor = $this->conn->prepare($query);
- if (!$cursor->execute($params))
- {
- $error = $cursor->errorInfo();
- throw new Exception("Database error:\n".$error[2]." \n in query:\n{$query}");
- }
- return new Result_PDO_Driver($cursor);
- }
+ /**
+ * Executes a prepared statement query
+ *
+ * @param string $query A prepared statement query
+ * @param array $params Parameters for the query
+ * @return Result_PDO_Driver PDO implementation of a database result
+ * @access public
+ * @throws Exception If the query resulted in an error
+ * @see Database_Result
+ */
+ public function execute($query, $params = array())
+ {
+ $cursor = $this->conn->prepare($query);
+ if (!$cursor->execute($params))
+ {
+ $error = $cursor->errorInfo();
+ throw new Exception("Database error:\n".$error[2]." \n in query:\n{$query}");
+ }
+ return new Result_PDO_Driver($cursor);
+ }
} \ No newline at end of file
diff --git a/modules/database/classes/driver/pdo/query.php b/modules/database/classes/driver/pdo/query.php
index d78316d..5d82cbf 100644
--- a/modules/database/classes/driver/pdo/query.php
+++ b/modules/database/classes/driver/pdo/query.php
@@ -7,96 +7,96 @@
class Query_PDO_Driver extends Query_Database
{
- /**
- * Type of the database, e.g. mysql, pgsql etc.
- * @var string
- * @access public
- */
- protected $_db_type;
+ /**
+ * Type of the database, e.g. mysql, pgsql etc.
+ * @var string
+ * @access public
+ */
+ protected $_db_type;
- /**
- * Character to use for quoting fields
- * @var string
- * @access public
- */
- protected $_quote;
+ /**
+ * Character to use for quoting fields
+ * @var string
+ * @access public
+ */
+ protected $_quote;
- /**
- * Creates a new query object, checks which driver we are using and set the character used for quoting
- *
- * @param DB $db Database connection
- * @param string $type Query type. Available types: select, update, insert, delete, count
- * @return void
- * @access public
- * @see Query_Database::__construct()
- */
- public function __construct($db, $type)
- {
- parent::__construct($db, $type);
- $this->_db_type = $this->_db->db_type;
- $this->_quote = $this->_db_type == 'mysql' ? '`' : '"';
- }
+ /**
+ * Creates a new query object, checks which driver we are using and set the character used for quoting
+ *
+ * @param DB $db Database connection
+ * @param string $type Query type. Available types: select, update, insert, delete, count
+ * @return void
+ * @access public
+ * @see Query_Database::__construct()
+ */
+ public function __construct($db, $type)
+ {
+ parent::__construct($db, $type);
+ $this->_db_type = $this->_db->db_type;
+ $this->_quote = $this->_db_type == 'mysql' ? '`' : '"';
+ }
- /**
- * Puts quotes around a string
- *
- * @param string $str String to be enclosed in quotes
- * @return string String surrounded with quotes
- * @access protected
- */
- protected function quote($str)
- {
- return $this->_quote.$str.$this->_quote;
- }
+ /**
+ * Puts quotes around a string
+ *
+ * @param string $str String to be enclosed in quotes
+ * @return string String surrounded with quotes
+ * @access protected
+ */
+ protected function quote($str)
+ {
+ return $this->_quote.$str.$this->_quote;
+ }
- /**
- * If a string is passed escapes a field by enclosing it in specified quotes.
- * If you pass an Expression_Database object the value will be inserted into the query unescaped
- *
- * @param mixed $field Field to be escaped or an Expression_Database object
- * if the field must not be escaped
- * @return string Escaped field representation
- * @access public
- * @see Expression_Database
- */
- public function escape_field($field)
- {
- if (is_object($field) && get_class($field) == 'Expression_Database')
- {
- return $field->value;
- }
- $field = explode('.', $field);
- if (count($field) == 1)
- {
- array_unshift($field, $this->last_alias());
- }
- $str = $this->quote($field[0]).'.';
- if (trim($field[1]) == '*')
- {
- return $str.'*';
- }
- return $str.$this->quote($field[1]);
- }
+ /**
+ * If a string is passed escapes a field by enclosing it in specified quotes.
+ * If you pass an Expression_Database object the value will be inserted into the query unescaped
+ *
+ * @param mixed $field Field to be escaped or an Expression_Database object
+ * if the field must not be escaped
+ * @return string Escaped field representation
+ * @access public
+ * @see Expression_Database
+ */
+ public function escape_field($field)
+ {
+ if (is_object($field) && get_class($field) == 'Expression_Database')
+ {
+ return $field->value;
+ }
+ $field = explode('.', $field);
+ if (count($field) == 1)
+ {
+ array_unshift($field, $this->last_alias());
+ }
+ $str = $this->quote($field[0]).'.';
+ if (trim($field[1]) == '*')
+ {
+ return $str.'*';
+ }
+ return $str.$this->quote($field[1]);
+ }
- /**
- * Replaces the value with ? and appends it to the parameters array
- * If you pass an Expression_Database object the value will be inserted into the query unescaped
- * @param mixed $val Value to be escaped or an Expression_Database object
- * if the value must not be escaped
- * @param array &$params Reference to parameters array
- * @return string Escaped value representation
- * @access public
- */
- public function escape_value($val,&$params)
- {
+ /**
+ * Replaces the value with ? and appends it to the parameters array
+ * If you pass an Expression_Database object the value will be inserted into the query unescaped
+ * @param mixed $val Value to be escaped or an Expression_Database object
+ * if the value must not be escaped
+ * @param array &$params Reference to parameters array
+ * @return string Escaped value representation
+ * @access public
+ */
+ public function escape_value($val, &$params)
+ {
if ($val instanceof Expression_Database)
- {
+ {
return $val->value;
- }
+ }
if ($val instanceof Query_Database)
- {
- return $this->subquery($val,$params);
- }
+ {
+ return $this->subquery($val, $params);
+ }
$params[] = $val;
return '?';
}
@@ -106,295 +106,296 @@ class Query_PDO_Driver extends Query_Database
*
* @param Query_Database $query Query builder for the subquery
* @param array &$params Reference to parameters array
- * @return string Subquery SQL
- * @access public
+ * @return string Subquery SQL
+ * @access public
*/
- protected function subquery($query, &$params) {
+ protected function subquery($query, &$params)
+ {
$query = $query->query();
$params = array_merge($params, $query[1]);
return "({$query[0]}) ";
}
-
+
/**
* Gets the SQL for a table to select from
*
* @param string|Expression_Database|Query_Database|array $table Table representation
* @param array &$params Reference to parameters array
* @param string &alias Alias for this table
- * @return string Table SQL
- * @access public
+ * @return string Table SQL
+ * @access public
*/
- public function escape_table($table, &$params) {
- $alias=null;
- if (is_array($table)) {
+ public function escape_table($table, &$params)
+ {
+ $alias = null;
+ if (is_array($table))
+ {
$alias = $table[1];
$table = $table[0];
}
-
- if (is_string($table)){
+
+ if (is_string($table))
+ {
$table = $this->quote($table);
if ($alias != null)
$table.= " AS {$alias}";
return $table;
}
-
+
if ($alias == null)
$alias = $this->last_alias();
-
- if($table instanceof Query_Database)
- return "{$this->subquery($table,$params)} AS {$alias}";
-
- if($table instanceof Expression_Database)
+
+ if ($table instanceof Query_Database)
+ return "{$this->subquery($table, $params)} AS {$alias}";
+
+ if ($table instanceof Expression_Database)
return "({$table->value}) AS {$alias}";
-
+
throw new Exception("Parameter type {get_class($table)} cannot be used as a table");
}
- /**
- * Builds a query and fills the $params array with parameter values
- *
- * @return array An array with a prepared query string and an array of parameters
- * @access public
- */
+ /**
+ * Builds a query and fills the $params array with parameter values
+ *
+ * @return array An array with a prepared query string and an array of parameters
+ * @access public
+ */
public function query()
- {
-
+ {
+
$query = '';
$params = array();
-
+
if ($this->_type == 'insert')
- {
+ {
$query .= "INSERT INTO {$this->quote($this->_table)} ";
if (empty($this->_data) && $this->_db_type == 'pgsql')
- {
+ {
$query.= "DEFAULT VALUES ";
}
- else
- {
+ else
+ {
$columns = '';
$values = '';
$first = true;
- foreach($this->_data as $key => $val)
- {
+ foreach ($this->_data as $key => $val)
+ {
if (!$first)
- {
+ {
$values .= ', ';
$columns .= ', ';
}
- else
- {
+ else
+ {
$first = false;
}
$columns .= $this->quote($key);
- $values .= $this->escape_value($val,$params);
+ $values .= $this->escape_value($val, $params);
}
$query .= "({$columns}) VALUES({$values})";
}
- }
- else
- {
+ }
+ else
+ {
if ($this->_type == 'select')
- {
+ {
$query .= "SELECT ";
- if ($this->_fields==null)
- {
+ if ($this->_fields == null)
+ {
$query .= "* ";
}
- else
- {
+ else
+ {
$first = true;
foreach ($this->_fields as $f)
- {
+ {
if (!$first)
- {
+ {
$query .= ", ";
}
- else
- {
+ else
+ {
$first = false;
}
if (is_array($f))
- {
+ {
$query .= "{$this->escape_field($f[0])} AS {$f[1]} ";
}
- else
- {
+ else
+ {
$query .= "{$this->escape_field($f)} ";
}
}
}
- $query .= "FROM {$this->escape_table($this->_table,$params)} ";
+ $query .= "FROM {$this->escape_table($this->_table, $params)} ";
}
if ($this->_type == 'count')
- {
- $query .= "SELECT COUNT(*) as {$this->quote('count')} FROM {$this->escape_table($this->_table,$params)} ";
+ {
+ $query .= "SELECT COUNT(*) as {$this->quote('count')} FROM {$this->escape_table($this->_table, $params)} ";
}
-
+
if ($this->_type == 'delete')
- {
- if ($this->_db_type!='sqlite')
- {
+ {
+ if ($this->_db_type != 'sqlite')
+ {
$query .= "DELETE {$this->last_alias()}.* FROM {$this->quote($this->_table)} ";
}
- else
- {
+ else
+ {
if (!empty($this->_joins))
- {
+ {
throw new Exception("SQLite doesn't support deleting a table with JOIN in the query");
- }
+ }
$query .= "DELETE FROM {$this->quote($this->_table)} ";
}
}
- if ($this->_type=='update')
- {
+ if ($this->_type == 'update')
+ {
$query .= "UPDATE {$this->quote($this->_table)} SET ";
$first = true;
- foreach ($this->_data as $key=>$val){
+ foreach ($this->_data as $key => $val)
+ {
if (!$first)
- {
+ {
$query.=", ";
}
- else
- {
- $first=false;
+ else
+ {
+ $first = false;
}
- $query .= "{$this->quote($key)} = {$this->escape_value($val,$params)}";
+ $query .= "{$this->quote($key)} = {$this->escape_value($val, $params)}";
}
$query .= " ";
}
-
+
foreach ($this->_joins as $join)
- {
+ {
$table = $join[0];
- $table = $this->escape_table($table,$params);
- $query .= strtoupper($join[1])." JOIN {$table} ON {$this->get_condition_query($join[2],$params,true,true)} ";
+ $table = $this->escape_table($table, $params);
+ $query .= strtoupper($join[1])." JOIN {$table} ON {$this->get_condition_query($join[2], $params, true, true)} ";
}
if (!empty($this->_conditions))
- {
- $query .= "WHERE {$this->get_condition_query($this->_conditions,$params,true)} ";
+ {
+ $query .= "WHERE {$this->get_condition_query($this->_conditions, $params, true)} ";
}
- if (($this->_type == 'select' || $this->_type == 'count') && $this->_group_by!=null)
- {
+ if (($this->_type == 'select' || $this->_type == 'count') && $this->_group_by != null)
+ {
$query .= "GROUP BY {$this->escape_field($this->_group_by)} ";
}
- if (($this->_type == 'select' || $this->_type == 'count') && !empty($this->_having))
- {
- $query .= "HAVING {$this->get_condition_query($this->_having,$params,true)} ";
+ if (($this->_type == 'select' || $this->_type == 'count') && !empty($this->_having))
+ {
+ $query .= "HAVING {$this->get_condition_query($this->_having, $params, true)} ";
}
-
+
if ($this->_type == 'select' && !empty($this->_orderby))
- {
+ {
$query .= "ORDER BY ";
$first = true;
foreach ($this->_orderby as $order)
- {
+ {
if (!$first)
- {
+ {
$query .= ',';
}
- else
- {
+ else
+ {
$first = false;
}
$query .= $this->escape_field($order[0])." ";
if (isset($order[1]))
- {
+ {
$dir = strtoupper($order[1]);
$query .= $dir." ";
}
}
}
-
+
if (count($this->_union) > 0 && ($this->_type == 'select'))
- {
+ {
$query = "({$query}) ";
foreach ($this->_union as $union)
- {
- $query .= $union[1]?"UNION ALL ":"UNION ";
+ {
+ $query .= $union[1] ? "UNION ALL " : "UNION ";
if (is_subclass_of($union[0], 'Query_Database'))
- {
- $query .= $this->subquery($union[0],$params);
+ {
+ $query .= $this->subquery($union[0], $params);
}
- elseif(is_subclass_of($union[0], 'Expression_Database'))
- {
+ elseif (is_subclass_of($union[0], 'Expression_Database'))
+ {
$query .= "({$union[0]->value}) ";
}
- else
- {
+ else
+ {
throw new Exception("You can only use query builder instances or DB::expr for unions");
}
}
}
-
+
if ($this->_type != 'count')
- {
+ {
if ($this->_limit != null)
- {
+ {
$query .= "LIMIT {$this->_limit} ";
- }
+ }
if ($this->_offset != null)
- {
+ {
$query .= "OFFSET {$this->_offset} ";
- }
+ }
}
-
}
-
- return array($query,$params);
- }
+ return array($query, $params);
+ }
- /**
- * Recursively parses conditions array into a query string
- *
- * @param array $p Element of the cobditions array
- * @param array &$params Reference to parameters array
- * @param boolean $skip_first_operator Flag to skip the first logical operator in a query
- * to prevent AND or OR to be at the beginning of the query
- * @param boolean $value_is_field Flag if the the value in the logical operations should
- * be treated as a field. E.g. for joins where the fields are
- * compared between themselves and not with actual values
- * @return string String representation of the conditions
- * @access public
- * @throws Exception If condition cannot be parsed
- */
- public function get_condition_query($p,&$params,$skip_first_operator,$value_is_field = false)
- {
+ /**
+ * Recursively parses conditions array into a query string
+ *
+ * @param array $p Element of the cobditions array
+ * @param array &$params Reference to parameters array
+ * @param boolean $skip_first_operator Flag to skip the first logical operator in a query
+ * to prevent AND or OR to be at the beginning of the query
+ * @param boolean $value_is_field Flag if the the value in the logical operations should
+ * be treated as a field. E.g. for joins where the fields are
+ * compared between themselves and not with actual values
+ * @return string String representation of the conditions
+ * @access public
+ * @throws Exception If condition cannot be parsed
+ */
+ public function get_condition_query($p, &$params, $skip_first_operator, $value_is_field = false)
+ {
if (isset($p['field']))
- {
+ {
if ($value_is_field)
- {
+ {
$param = $this->escape_field($p['value']);
}
- else
- {
+ else
+ {
$param = $this->escape_value($p['value'], $params);
}
return $this->escape_field($p['field']).' '.$p['operator'].' '.$param;
}
if (isset($p['logic']))
- {
+ {
return ($skip_first_operator ? '' : strtoupper($p['logic']).' ')
- .$this->get_condition_query($p['conditions'], $params, false, $value_is_field);
+ .$this->get_condition_query($p['conditions'], $params, false, $value_is_field);
}
-
+
$conds = '';
$skip = $skip_first_operator || (count($p) > 1);
- foreach($p as $q)
- {
- $conds .= $this->get_condition_query($q,$params,$skip,$value_is_field).' ';
+ foreach ($p as $q)
+ {
+ $conds .= $this->get_condition_query($q, $params, $skip, $value_is_field).' ';
$skip = false;
}
if (count($p) > 1 && !$skip_first_operator)
- {
+ {
return "( ".$conds.")";
- }
+ }
return $conds;
throw new Exception("Cannot parse condition:\n".var_export($p, true));
}
-
-
} \ No newline at end of file
diff --git a/modules/database/classes/driver/pdo/result.php b/modules/database/classes/driver/pdo/result.php
index d64c479..fda813c 100644
--- a/modules/database/classes/driver/pdo/result.php
+++ b/modules/database/classes/driver/pdo/result.php
@@ -7,52 +7,52 @@
class Result_PDO_Driver extends Result_Database
{
- /**
- * Initializes new result object
- *
- * @param PDOStatement $stmt PDO Statement
- * @return void
- * @access public
- * @link http://php.net/manual/en/class.pdostatement.php
- */
- public function __construct($stmt)
- {
- $this->_result = $stmt;
- }
+ /**
+ * Initializes new result object
+ *
+ * @param PDOStatement $stmt PDO Statement
+ * @return void
+ * @access public
+ * @link http://php.net/manual/en/class.pdostatement.php
+ */
+ public function __construct($stmt)
+ {
+ $this->_result = $stmt;
+ }
- /**
- * Throws exception if rewind is attempted.
- *
- * @return void
- * @access public
- * @throws Exception If rewind is attempted
- */
- public function rewind()
- {
- if ($this->_position > 0)
- {
- throw new Exception('PDO statement cannot be rewound for unbuffered queries');
- }
- }
+ /**
+ * Throws exception if rewind is attempted.
+ *
+ * @return void
+ * @access public
+ * @throws Exception If rewind is attempted
+ */
+ public function rewind()
+ {
+ if ($this->_position > 0)
+ {
+ throw new Exception('PDO statement cannot be rewound for unbuffered queries');
+ }
+ }
- /**
- * Iterates to the next row in the result set
- *
- * @return void
- * @access public
- */
- public function next()
- {
- $this->check_fetched();
- $this->_row = $this->_result->fetchObject();
- if ($this->_row)
- {
- $this->_position++;
- }
- else
- {
- $this->_result->closeCursor();
- }
- }
+ /**
+ * Iterates to the next row in the result set
+ *
+ * @return void
+ * @access public
+ */
+ public function next()
+ {
+ $this->check_fetched();
+ $this->_row = $this->_result->fetchObject();
+ if ($this->_row)
+ {
+ $this->_position++;
+ }
+ else
+ {
+ $this->_result->closeCursor();
+ }
+ }
} \ No newline at end of file