Exemplo n.º 1
0
 /**
  * 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;
         }
     }
 }