From 4518342eca8d40f1c25ff877e00379c1e878035f Mon Sep 17 00:00:00 2001 From: svncommit Date: Thu, 27 Oct 2005 13:24:13 +0000 Subject: more mdb2 integration --- index.php | 12 +- program/include/rcube_mdb2.inc | 36 +--- program/lib/MDB2/Driver/Reverse/Common.php | 284 +++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+), 39 deletions(-) create mode 100755 program/lib/MDB2/Driver/Reverse/Common.php diff --git a/index.php b/index.php index fe930feb3..c80100a33 100644 --- a/index.php +++ b/index.php @@ -42,17 +42,19 @@ */ // define global vars -$INSTALL_PATH = dirname($_SERVER['SCRIPT_FILENAME']); +$INSTALL_PATH = './'; $OUTPUT_TYPE = 'html'; $JS_OBJECT_NAME = 'rcmail'; +$CURRENT_PATH = dirname($_SERVER['SCRIPT_FILENAME']); -if ($INSTALL_PATH!='') - $INSTALL_PATH .= '/'; +if ($CURRENT_PATH!='') + $CURRENT_PATH.='/'; +// set environment first // RC include folders MUST be included FIRST to avoid other // possible not compatible libraries (i.e PEAR) to be included // instead the ones provided by RC -ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$INSTALL_PATH.'program'.PATH_SEPARATOR.$INSTALL_PATH.'program/lib'.PATH_SEPARATOR.ini_get('include_path')); +ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$CURRENT_PATH.'program'.PATH_SEPARATOR.$CURRENT_PATH.'program/lib'.PATH_SEPARATOR.ini_get('include_path')); ini_set('session.name', 'sessid'); ini_set('session.use_cookies', 1); @@ -141,7 +143,7 @@ else if ($_action=='logout' && isset($_SESSION['user_id'])) } // check session cookie and auth string -else if ($_action!='login' && $sess_auth && $_SESSION['user_id']) +else if ($_action!='login' && $_auth && $sess_auth) { if ($_auth !== $sess_auth || $_auth != rcmail_auth_hash($_SESSION['client_id'], $_SESSION['auth_time']) || ($CONFIG['session_lifetime'] && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < mktime())) diff --git a/program/include/rcube_mdb2.inc b/program/include/rcube_mdb2.inc index 53590aa0b..4637bede9 100755 --- a/program/include/rcube_mdb2.inc +++ b/program/include/rcube_mdb2.inc @@ -55,7 +55,7 @@ class rcube_db function dsn_connect($dsn) { // Use persistent connections if available - $dbh = MDB2::factory($dsn, array('persistent' => TRUE)); + $dbh = MDB2::factory($dsn, array('persistent' => $true)); if (PEAR::isError($dbh)) raise_error(array('code' => 500, @@ -104,37 +104,21 @@ class rcube_db // Query database function query() - { - $params = func_get_args(); - $query = array_shift($params); - - return $this->_query($query, 0, 0, $params); - } - - function limitquery() - { - $params = func_get_args(); - $query = array_shift($params); - $offset = array_shift($params); - $numrows = array_shift($params); - - return $this->_query($query, $offset, $numrows, $params); - } function _query($query, $offset, $numrows, $params) @@ -153,7 +137,7 @@ class rcube_db $this->db_handle->row_offset = $offset; $this->db_handle->row_limit = $numrows; - $result = $this->db_handle->query($query); + $result = $this->db_handle->query($query,$params); if (PEAR::isError($result)) raise_error(array('code' => 500, @@ -210,39 +194,23 @@ class rcube_db } function quoteIdentifier ( $str ) - { - if (!$this->db_handle) - $this->db_connect('r'); - - return $this->db_handle->quoteIdentifier($str); - } function unixtimestamp($field) - { - switch($this->db_provider) - { - case 'pgsql': - return "EXTRACT (EPOCH FROM $field)"; - break; - default: - return "UNIX_TIMESTAMP($field)"; - } - } function _add_result($res, $query) diff --git a/program/lib/MDB2/Driver/Reverse/Common.php b/program/lib/MDB2/Driver/Reverse/Common.php new file mode 100755 index 000000000..0abf69bda --- /dev/null +++ b/program/lib/MDB2/Driver/Reverse/Common.php @@ -0,0 +1,284 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id$ +// + +/** + * @package MDB2 + * @category Database + */ + +/** + * These are constants for the tableInfo-function + * they are bitwised or'ed. so if there are more constants to be defined + * in the future, adjust MDB2_TABLEINFO_FULL accordingly + */ + +define('MDB2_TABLEINFO_ORDER', 1); +define('MDB2_TABLEINFO_ORDERTABLE', 2); +define('MDB2_TABLEINFO_FULL', 3); + +/** + * Base class for the schema reverse engineering module that is extended by each MDB2 driver + * + * @package MDB2 + * @category Database + * @author Lukas Smith + */ +class MDB2_Driver_Reverse_Common extends MDB2_Module_Common +{ + // }}} + // {{{ getTableFieldDefinition() + + /** + * get the stucture of a field into an array + * + * @param string $table name of table that should be used in method + * @param string $fields name of field that should be used in method + * @return mixed data array on success, a MDB2 error on failure + * @access public + */ + function getTableFieldDefinition($table, $field) + { + $db =& $this->getDBInstance(); + if (PEAR::isError($db)) { + return $db; + } + + return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, + 'getTableFieldDefinition: table field definition is not supported'); + } + + // }}} + // {{{ getTableIndexDefinition() + + /** + * get the stucture of an index into an array + * + * @param string $table name of table that should be used in method + * @param string $index name of index that should be used in method + * @return mixed data array on success, a MDB2 error on failure + * @access public + */ + function getTableIndexDefinition($table, $index) + { + $db =& $this->getDBInstance(); + if (PEAR::isError($db)) { + return $db; + } + + return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, + 'getTableIndexDefinition: getting index definition is not supported'); + } + + // }}} + // {{{ getSequenceDefinition() + + /** + * get the stucture of a sequence into an array + * + * @param string $sequence name of sequence that should be used in method + * @return mixed data array on success, a MDB2 error on failure + * @access public + */ + function getSequenceDefinition($sequence) + { + $db =& $this->getDBInstance(); + if (PEAR::isError($db)) { + return $db; + } + + $start = $db->currId($sequence); + if (PEAR::isError($start)) { + return $start; + } + if ($db->supports('current_id')) { + $start++; + } else { + $db->warnings[] = 'database does not support getting current + sequence value, the sequence value was incremented'; + } + $definition = array(); + if ($start != 1) { + $definition = array('start' => $start); + } + return $definition; + } + + // }}} + // {{{ tableInfo() + + /** + * Returns information about a table or a result set + * + * The format of the resulting array depends on which $mode + * you select. The sample output below is based on this query: + *
+     *    SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId
+     *    FROM tblFoo
+     *    JOIN tblBar ON tblFoo.fldId = tblBar.fldId
+     * 
+ * + * + * + * The flags element contains a space separated list + * of extra information about the field. This data is inconsistent + * between DBMS's due to the way each DBMS works. + * + primary_key + * + unique_key + * + multiple_key + * + not_null + * + * Most DBMS's only provide the table and flags + * elements if $result is a table name. The following DBMS's + * provide full information from queries: + * + fbsql + * + mysql + * + * If the 'portability' option has MDB2_PORTABILITY_FIX_CASE + * turned on, the names of tables and fields will be lower or upper cased. + * + * @param object|string $result MDB2_result object from a query or a + * string containing the name of a table. + * While this also accepts a query result + * resource identifier, this behavior is + * deprecated. + * @param int $mode either unused or one of the tableInfo modes: + * MDB2_TABLEINFO_ORDERTABLE, + * MDB2_TABLEINFO_ORDER or + * MDB2_TABLEINFO_FULL (which does both). + * These are bitwise, so the first two can be + * combined using |. + * + * @return array an associative array with the information requested. + * A MDB2_Error object on failure. + * + * @see MDB2_Driver_Common::setOption() + */ + function tableInfo($result, $mode = null) + { + $db =& $this->getDBInstance(); + if (PEAR::isError($db)) { + return $db; + } + + return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null, + 'tableInfo: method not implemented'); + } +} +?> \ No newline at end of file -- cgit v1.2.3