/** * Debug handler for query execution * * @param string Function name from which this function is called. * @param string Execution time in ms of the query * @param array In-data of various kinds. * @return void * @access private */ public function debugHandler($function, $execTime, $inData) { // we don't want to log our own log/debug SQL $script = substr(PATH_thisScript, strlen(PATH_site)); if (substr($script, -strlen('dbal/mod1/index.php')) != 'dbal/mod1/index.php' && !strstr($inData['args'][0], 'tx_dbal_debuglog')) { $data = array(); $errorFlag = 0; $joinTable = ''; if ($this->sql_error()) { $data['sqlError'] = $this->sql_error(); $errorFlag |= 1; } // if lastQuery is empty (for whatever reason) at least log inData.args if (empty($this->lastQuery)) { $query = implode(' ', $inData['args']); } else { $query = $this->lastQuery; } if ($this->conf['debugOptions']['numberRows']) { switch ($function) { case 'exec_INSERTquery': case 'exec_UPDATEquery': case 'exec_DELETEquery': $data['numberRows'] = $this->sql_affected_rows(); break; case 'exec_SELECTquery': $data['numberRows'] = $inData['numberRows']; break; } } if ($this->conf['debugOptions']['backtrace']) { $backtrace = debug_backtrace(); unset($backtrace[0]); // skip this very method :) $data['backtrace'] = array_slice($backtrace, 0, $this->conf['debugOptions']['backtrace']); } switch ($function) { case 'exec_INSERTquery': case 'exec_UPDATEquery': case 'exec_DELETEquery': $this->debug_log($query, $execTime, $data, $joinTable, $errorFlag, $script); break; case 'exec_SELECTquery': // Get explain data: if ($this->conf['debugOptions']['EXPLAIN'] && t3lib_div::inList('adodb,native', $inData['handlerType'])) { $data['EXPLAIN'] = $this->debug_explain($this->lastQuery); } // Check parsing of Query: if ($this->conf['debugOptions']['parseQuery']) { $parseResults = array(); $parseResults['SELECT'] = $this->SQLparser->debug_parseSQLpart('SELECT', $inData['args'][1]); $parseResults['FROM'] = $this->SQLparser->debug_parseSQLpart('FROM', $inData['args'][0]); $parseResults['WHERE'] = $this->SQLparser->debug_parseSQLpart('WHERE', $inData['args'][2]); $parseResults['GROUPBY'] = $this->SQLparser->debug_parseSQLpart('SELECT', $inData['args'][3]); // Using select field list syntax $parseResults['ORDERBY'] = $this->SQLparser->debug_parseSQLpart('SELECT', $inData['args'][4]); // Using select field list syntax foreach ($parseResults as $k => $v) { if (!strlen($parseResults[$k])) { unset($parseResults[$k]); } } if (count($parseResults)) { $data['parseError'] = $parseResults; $errorFlag |= 2; } } // Checking joinTables: if ($this->conf['debugOptions']['joinTables']) { if (count(explode(',', $inData['ORIG_from_table'])) > 1) { $joinTable = $inData['args'][0]; } } // Logging it: $this->debug_log($query, $execTime, $data, $joinTable, $errorFlag, $script); if (!empty($inData['args'][2])) { $this->debug_WHERE($inData['args'][0], $inData['args'][2], $script); } break; } } }