- code re-formatting + small improvements

release-0.6
alecpl 14 years ago
parent 3978cbf4cd
commit a004bb8cbe

@ -226,7 +226,7 @@ class rcube_contacts extends rcube_addressbook
foreach ($fields as $col) {
if ($col == 'ID' || $col == $this->primary_key) {
$ids = !is_array($value) ? explode(',', $value) : $value;
$ids = join(',', array_map(array($this->db, 'quote'), $ids));
$ids = $this->db->array2list($ids, 'integer');
$add_where[] = 'c.' . $this->primary_key.' IN ('.$ids.')';
}
else if ($strict)
@ -437,7 +437,7 @@ class rcube_contacts extends rcube_addressbook
if (!is_array($ids))
$ids = explode(',', $ids);
$ids = join(',', array_map(array($this->db, 'quote'), $ids));
$ids = $this->db->array2list($ids, 'integer');
// flag record as deleted
$this->db->query(
@ -589,7 +589,7 @@ class rcube_contacts extends rcube_addressbook
if (!is_array($ids))
$ids = explode(',', $ids);
$ids = join(',', array_map(array($this->db, 'quote'), $ids));
$ids = $this->db->array2list($ids, 'integer');
$sql_result = $this->db->query(
"DELETE FROM ".get_table_name('contactgroupmembers').

@ -42,11 +42,10 @@ class rcube_mdb2
var $db_handle = 0; // Connection handle
var $db_error = false;
var $db_error_msg = '';
var $debug_mode = false;
var $a_query_results = array('dummy');
var $last_res_id = 0;
private $debug_mode = false;
private $a_query_results = array('dummy');
private $last_res_id = 0;
private $tables;
@ -77,7 +76,7 @@ class rcube_mdb2
* @return object PEAR database handle
* @access private
*/
function dsn_connect($dsn)
private function dsn_connect($dsn)
{
// Use persistent connections if available
$db_options = array(
@ -85,7 +84,7 @@ class rcube_mdb2
'emulate_prepared' => $this->debug_mode,
'debug' => $this->debug_mode,
'debug_handler' => 'mdb2_debug_handler',
'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL);
'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_null);
if ($this->db_provider == 'pgsql') {
$db_options['disable_smart_seqname'] = true;
@ -94,16 +93,15 @@ class rcube_mdb2
$dbh = MDB2::connect($dsn, $db_options);
if (MDB2::isError($dbh))
{
$this->db_error = TRUE;
if (MDB2::isError($dbh)) {
$this->db_error = true;
$this->db_error_msg = $dbh->getMessage();
raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__,
'file' => __FILE__, 'message' => $dbh->getUserInfo()), TRUE, FALSE);
raise_error(array('code' => 500, 'type' => 'db',
'line' => __LINE__, 'file' => __FILE__,
'message' => $dbh->getUserInfo()), true, false);
}
else if ($this->db_provider=='sqlite')
{
else if ($this->db_provider == 'sqlite') {
$dsn_array = MDB2::parseDSN($dsn);
if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
$this->_sqlite_create_database($dbh, $this->sqlite_initials);
@ -116,8 +114,7 @@ class rcube_mdb2
/**
* Connect to appropiate databse
* depending on the operation
* Connect to appropiate database depending on the operation
*
* @param string Connection mode (r|w)
* @access public
@ -127,8 +124,7 @@ class rcube_mdb2
$this->db_mode = $mode;
// Already connected
if ($this->db_connected)
{
if ($this->db_connected) {
// no replication, current connection is ok
if ($this->db_dsnw == $this->db_dsnr)
return;
@ -142,10 +138,7 @@ class rcube_mdb2
return;
}
if ($mode=='r')
$dsn = $this->db_dsnr;
else
$dsn = $this->db_dsnw;
$dsn = ($mode == 'r') ? $this->db_dsnr : $this->db_dsnw;
$this->db_handle = $this->dsn_connect($dsn);
$this->db_connected = true;
@ -156,12 +149,12 @@ class rcube_mdb2
* Activate/deactivate debug mode
*
* @param boolean True if SQL queries should be logged
* @access public
*/
function set_debug($dbg = true)
{
$this->debug_mode = $dbg;
if ($this->db_connected)
{
if ($this->db_connected) {
$this->db_handle->setOption('debug', $dbg);
$this->db_handle->setOption('emulate_prepared', $dbg);
}
@ -172,10 +165,11 @@ class rcube_mdb2
* Getter for error state
*
* @param boolean True on error
* @access public
*/
function is_error()
{
return $this->db_error ? $this->db_error_msg : FALSE;
return $this->db_error ? $this->db_error_msg : false;
}
@ -183,10 +177,11 @@ class rcube_mdb2
* Connection state checker
*
* @param boolean True if in connected state
* @access public
*/
function is_connected()
{
return PEAR::isError($this->db_handle) ? false : true;
return PEAR::isError($this->db_handle) ? false : $this->db_connected;
}
@ -201,7 +196,7 @@ class rcube_mdb2
function query()
{
if (!$this->is_connected())
return NULL;
return null;
$params = func_get_args();
$query = array_shift($params);
@ -241,13 +236,10 @@ class rcube_mdb2
* @return number Query handle identifier
* @access private
*/
function _query($query, $offset, $numrows, $params)
private function _query($query, $offset, $numrows, $params)
{
// Read or write ?
if (strtolower(substr(trim($query),0,6))=='select')
$mode='r';
else
$mode='w';
$mode = (strtolower(substr(trim($query),0,6)) == 'select') ? 'r' : 'w';
$this->db_connect($mode);
@ -259,21 +251,18 @@ class rcube_mdb2
if (empty($params))
$result = $mode == 'r' ? $this->db_handle->query($query) : $this->db_handle->exec($query);
else
{
else {
$params = (array)$params;
$q = $this->db_handle->prepare($query, null, $mode=='w' ? MDB2_PREPARE_MANIP : null);
if ($this->db_handle->isError($q))
{
$this->db_error = TRUE;
if ($this->db_handle->isError($q)) {
$this->db_error = true;
$this->db_error_msg = $q->userinfo;
raise_error(array('code' => 500, 'type' => 'db',
'line' => __LINE__, 'file' => __FILE__,
'message' => $this->db_error_msg), TRUE, TRUE);
'message' => $this->db_error_msg), true, true);
}
else
{
else {
$result = $q->execute($params);
$q->free();
}
@ -289,18 +278,18 @@ class rcube_mdb2
* If no query handle is specified, the last query will be taken as reference
*
* @param number Optional query handle identifier
* @return mixed Number of rows or FALSE on failure
* @return mixed Number of rows or false on failure
* @access public
*/
function num_rows($res_id=NULL)
function num_rows($res_id=null)
{
if (!$this->db_handle)
return FALSE;
return false;
if ($result = $this->_get_result($res_id))
return $result->numRows();
else
return FALSE;
return false;
}
@ -308,13 +297,13 @@ class rcube_mdb2
* Get number of affected rows for the last query
*
* @param number Optional query handle identifier
* @return mixed Number of rows or FALSE on failure
* @return mixed Number of rows or false on failure
* @access public
*/
function affected_rows($res_id = null)
{
if (!$this->db_handle)
return FALSE;
return false;
return (int) $this->_get_result($res_id);
}
@ -325,13 +314,13 @@ class rcube_mdb2
* For Postgres databases, a sequence name is required
*
* @param string Table name (to find the incremented sequence)
* @return mixed ID or FALSE on failure
* @return mixed ID or false on failure
* @access public
*/
function insert_id($table = '')
{
if (!$this->db_handle || $this->db_mode == 'r')
return FALSE;
return false;
if ($table) {
if ($this->db_provider == 'pgsql')
@ -353,10 +342,10 @@ class rcube_mdb2
* If no query handle is specified, the last query will be taken as reference
*
* @param number Optional query handle identifier
* @return mixed Array with col values or FALSE on failure
* @return mixed Array with col values or false on failure
* @access public
*/
function fetch_assoc($res_id=NULL)
function fetch_assoc($res_id=null)
{
$result = $this->_get_result($res_id);
return $this->_fetch_row($result, MDB2_FETCHMODE_ASSOC);
@ -368,10 +357,10 @@ class rcube_mdb2
* If no query handle is specified, the last query will be taken as reference
*
* @param number Optional query handle identifier
* @return mixed Array with col values or FALSE on failure
* @return mixed Array with col values or false on failure
* @access public
*/
function fetch_array($res_id=NULL)
function fetch_array($res_id=null)
{
$result = $this->_get_result($res_id);
return $this->_fetch_row($result, MDB2_FETCHMODE_ORDERED);
@ -383,13 +372,13 @@ class rcube_mdb2
*
* @param object Query result handle
* @param number Fetch mode identifier
* @return mixed Array with col values or FALSE on failure
* @return mixed Array with col values or false on failure
* @access private
*/
function _fetch_row($result, $mode)
private function _fetch_row($result, $mode)
{
if ($result === FALSE || PEAR::isError($result) || !$this->is_connected())
return FALSE;
if ($result === false || PEAR::isError($result) || !$this->is_connected())
return false;
return $result->fetchRow($mode);
}
@ -399,6 +388,8 @@ class rcube_mdb2
* Wrapper for the SHOW TABLES command
*
* @return array List of all tables of the current database
* @access public
* @since 0.4-beta
*/
function list_tables()
{
@ -419,20 +410,20 @@ class rcube_mdb2
* Formats input so it can be safely used in a query
*
* @param mixed Value to quote
* @param string Type of data
* @return string Quoted/converted string for use in query
* @access public
*/
function quote($input, $type = null)
{
// handle int directly for better performance
if ($type == 'integer')
return intval($input);
// create DB handle if not available
if (!$this->db_handle)
$this->db_connect('r');
// escape pear identifier chars
$rep_chars = array('?' => '\?',
'!' => '\!',
'&' => '\&');
return $this->db_handle->quote($input, $type);
}
@ -467,6 +458,7 @@ class rcube_mdb2
return $this->db_handle->quoteIdentifier($str);
}
/**
* Escapes a string
*
@ -492,8 +484,7 @@ class rcube_mdb2
*/
function now()
{
switch($this->db_provider)
{
switch($this->db_provider) {
case 'mssql':
case 'sqlsrv':
return "getdate()";
@ -507,8 +498,9 @@ class rcube_mdb2
/**
* Return list of elements for use with SQL's IN clause
*
* @param string Input array
* @return string Elements list string
* @param array Input array
* @param string Type of data
* @return string Comma-separated list of quoted values for use in query
* @access public
*/
function array2list($arr, $type = null)
@ -516,11 +508,10 @@ class rcube_mdb2
if (!is_array($arr))
return $this->quote($arr, $type);
$res = array();
foreach ($arr as $item)
$res[] = $this->quote($item, $type);
foreach ($arr as $idx => $item)
$arr[$idx] = $this->quote($item, $type);
return implode(',', $res);
return implode(',', $arr);
}
@ -533,11 +524,9 @@ class rcube_mdb2
*/
function unixtimestamp($field)
{
switch($this->db_provider)
{
switch($this->db_provider) {
case 'pgsql':
return "EXTRACT (EPOCH FROM $field)";
break;
case 'mssql':
case 'sqlsrv':
@ -558,8 +547,7 @@ class rcube_mdb2
*/
function fromunixtime($timestamp)
{
switch($this->db_provider)
{
switch($this->db_provider) {
case 'mysqli':
case 'mysql':
case 'sqlite':
@ -582,8 +570,7 @@ class rcube_mdb2
function ilike($column, $value)
{
// TODO: use MDB2's matchPattern() function
switch($this->db_provider)
{
switch($this->db_provider) {
case 'pgsql':
return $this->quote_identifier($column).' ILIKE '.$this->quote($value);
default:
@ -647,18 +634,17 @@ class rcube_mdb2
* @return mixed Handle ID
* @access private
*/
function _add_result($res)
private function _add_result($res)
{
// sql error occured
if (PEAR::isError($res))
{
$this->db_error = TRUE;
if (PEAR::isError($res)) {
$this->db_error = true;
$this->db_error_msg = $res->getMessage();
raise_error(array('code' => 500, 'type' => 'db',
'line' => __LINE__, 'file' => __FILE__,
'message' => $res->getMessage() . " Query: "
. substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)),
TRUE, FALSE);
true, false);
}
$res_id = sizeof($this->a_query_results);
@ -673,19 +659,19 @@ class rcube_mdb2
* If no ID is specified, the last resource handle will be returned
*
* @param number Handle ID
* @return mixed Resource handle or FALSE on failure
* @return mixed Resource handle or false on failure
* @access private
*/
function _get_result($res_id=NULL)
private function _get_result($res_id = null)
{
if ($res_id==NULL)
if ($res_id == null)
$res_id = $this->last_res_id;
if (isset($this->a_query_results[$res_id]))
if (!PEAR::isError($this->a_query_results[$res_id]))
return $this->a_query_results[$res_id];
return FALSE;
return false;
}
@ -696,7 +682,7 @@ class rcube_mdb2
* @param string File path to use for DB creation
* @access private
*/
function _sqlite_create_database($dbh, $file_name)
private function _sqlite_create_database($dbh, $file_name)
{
if (empty($file_name) || !is_string($file_name))
return;
@ -706,7 +692,8 @@ class rcube_mdb2
if (strlen($data))
if (!sqlite_exec($dbh->connection, $data, $error) || MDB2::isError($dbh))
raise_error(array('code' => 500, 'type' => 'db',
'line' => __LINE__, 'file' => __FILE__, 'message' => $error), TRUE, FALSE);
'line' => __LINE__, 'file' => __FILE__,
'message' => $error), true, false);
}
@ -716,26 +703,28 @@ class rcube_mdb2
*
* @access private
*/
function _sqlite_prepare()
private function _sqlite_prepare()
{
include_once('include/rcube_sqlite.inc');
// we emulate via callback some missing MySQL function
sqlite_create_function($this->db_handle->connection, "from_unixtime", "rcube_sqlite_from_unixtime");
sqlite_create_function($this->db_handle->connection, "unix_timestamp", "rcube_sqlite_unix_timestamp");
sqlite_create_function($this->db_handle->connection, "now", "rcube_sqlite_now");
sqlite_create_function($this->db_handle->connection, "md5", "rcube_sqlite_md5");
sqlite_create_function($this->db_handle->connection,
'from_unixtime', 'rcube_sqlite_from_unixtime');
sqlite_create_function($this->db_handle->connection,
'unix_timestamp', 'rcube_sqlite_unix_timestamp');
sqlite_create_function($this->db_handle->connection,
'now', 'rcube_sqlite_now');
sqlite_create_function($this->db_handle->connection,
'md5', 'rcube_sqlite_md5');
}
} // end class rcube_db
/* this is our own debug handler for the MDB2 connection */
function mdb2_debug_handler(&$db, $scope, $message, $context = array())
{
if ($scope != 'prepare')
{
if ($scope != 'prepare') {
$debug_output = $scope . '('.$db->db_index.'): ' . $message;
write_log('sql', $debug_output);
}

Loading…
Cancel
Save