summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2008-03-19 14:36:47 +0000
committerthomascube <thomas@roundcube.net>2008-03-19 14:36:47 +0000
commit9814721e8ddee4e26cc58cd47301e5d741048a22 (patch)
tree7ae2e67066ba35fe6aa61d1501eefaafc37ee040
parent0714b7e09d9a4f26d76bf5ccbe05c356a961f4a2 (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.inc1
-rw-r--r--program/include/rcube_db.inc12
-rw-r--r--program/include/rcube_mdb2.inc33
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);
+ }
+}
+
+
?>