diff options
author | thomascube <thomas@roundcube.net> | 2008-03-19 14:36:47 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2008-03-19 14:36:47 +0000 |
commit | 9814721e8ddee4e26cc58cd47301e5d741048a22 (patch) | |
tree | 7ae2e67066ba35fe6aa61d1501eefaafc37ee040 | |
parent | 0714b7e09d9a4f26d76bf5ccbe05c356a961f4a2 (diff) |
Enable SQL logging (set 'sql_debug' config param to true); Switch to emulated prepare mode for better performance
-rw-r--r-- | program/include/main.inc | 1 | ||||
-rw-r--r-- | program/include/rcube_db.inc | 12 | ||||
-rw-r--r-- | program/include/rcube_mdb2.inc | 33 |
3 files changed, 43 insertions, 3 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index f3d0e263b..247cdf1a9 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -74,6 +74,7 @@ function rcmail_startup($task='mail') $DB = new $dbclass($CONFIG['db_dsnw'], $CONFIG['db_dsnr'], $CONFIG['db_persistent']); $DB->sqlite_initials = $INSTALL_PATH.'SQL/sqlite.initial.sql'; + $DB->set_debug((bool)$CONFIG['sql_debug']); $DB->db_connect('w'); // use database for storing session data diff --git a/program/include/rcube_db.inc b/program/include/rcube_db.inc index 4c3e9fc62..63c6759b9 100644 --- a/program/include/rcube_db.inc +++ b/program/include/rcube_db.inc @@ -153,8 +153,18 @@ class rcube_db $this->db_handle = $this->dsn_connect($dsn); $this->db_connected = $this->db_handle ? TRUE : FALSE; } + + + /** + * Activate/deactivate debug mode + * (not implemented) + */ + function set_debug($dbg = true) + { - + } + + /** * Getter for error state * diff --git a/program/include/rcube_mdb2.inc b/program/include/rcube_mdb2.inc index 63d156a08..98eaf7e43 100644 --- a/program/include/rcube_mdb2.inc +++ b/program/include/rcube_mdb2.inc @@ -48,6 +48,7 @@ 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; @@ -94,8 +95,11 @@ class rcube_mdb2 function dsn_connect($dsn) { // Use persistent connections if available - $dbh = MDB2::connect($dsn, - array('persistent' => $this->db_pconn, + $dbh = MDB2::connect($dsn, array( + 'emulate_prepared' => true, + 'persistent' => $this->db_pconn, + 'debug' => $this->debug_mode, + 'debug_handler' => 'mdb2_debug_handler', 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL)); if (MDB2::isError($dbh)) @@ -156,6 +160,18 @@ class rcube_mdb2 } + /** + * Activate/deactivate debug mode + * + * @param boolean True if SQL queries should be logged + */ + function set_debug($dbg = true) + { + $this->debug_mode = $dbg; + if ($this->db_connected) + $this->db_handle->setOption('debug', $dbg); + } + /** * Getter for error state @@ -569,4 +585,17 @@ class rcube_mdb2 } // 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') + { + $debug_output = $scope . '('.$db->db_index.'): '; + $debug_output .= $message . $db->getOption('log_line_break'); + write_log('sqllog', $debug_output); + } +} + + ?> |