00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00032 unset($MCONF);
00033 require ('conf.php');
00034 require ($BACK_PATH.'init.php');
00035 require ($BACK_PATH.'template.php');
00036 $LANG->includeLLFile('EXT:dbal/mod1/locallang.xml');
00037 require_once (PATH_t3lib.'class.t3lib_scbase.php');
00038 $BE_USER->modAccess($MCONF,1);
00039
00040
00049 class tx_dbal_module1 extends t3lib_SCbase {
00050
00056 function menuConfig() {
00057 $this->MOD_MENU = Array (
00058 'function' => Array (
00059 0 => $GLOBALS['LANG']->getLL('Debug_log'),
00060 'info' => $GLOBALS['LANG']->getLL('Cached_info'),
00061 'sqlcheck' => $GLOBALS['LANG']->getLL('SQL_check'),
00062 )
00063 );
00064 parent::menuConfig();
00065 }
00066
00072 function main() {
00073 global $BACK_PATH,$BE_USER;
00074
00075
00076 $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name']);
00077
00078
00079 $this->doc = t3lib_div::makeInstance('noDoc');
00080 $this->doc->backPath = $BACK_PATH;
00081 $this->doc->form='<form action="" method="post">';
00082 $this->doc->docType = 'xhtml_trans';
00083
00084
00085 $this->doc->JScode = $this->doc->wrapScriptTags('
00086 script_ended = 0;
00087 function jumpToUrl(URL) {
00088 window.location.href = URL;
00089 }
00090 ');
00091
00092
00093 $this->content.=$this->doc->startPage($GLOBALS['LANG']->getLL('title'));
00094 $this->content.=$this->doc->header($GLOBALS['LANG']->getLL('title'));
00095 $this->content.=$this->doc->spacer(5);
00096 $this->content.=$this->doc->section('',$this->doc->funcMenu('',t3lib_BEfunc::getFuncMenu(0,'SET[function]',$this->MOD_SETTINGS['function'],$this->MOD_MENU['function'])));
00097
00098
00099 switch($this->MOD_SETTINGS['function']) {
00100 case 'info':
00101 $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('Cached_info'), $this->printCachedInfo());
00102 break;
00103 case 'sqlcheck':
00104 $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('SQL_check'), $this->printSqlCheck());
00105 break;
00106 case 0:
00107 $this->content.= $this->doc->section($GLOBALS['LANG']->getLL('Debug_log'), $this->printLogMgm());
00108 break;
00109 }
00110
00111
00112 if ($BE_USER->mayMakeShortcut()) {
00113 $this->content.=$this->doc->spacer(20).$this->doc->section('',$this->doc->makeShortcutIcon('id',implode(',',array_keys($this->MOD_MENU)),$this->MCONF['name']));
00114 }
00115
00116 $this->content.=$this->doc->spacer(10);
00117 }
00118
00124 function printContent() {
00125 global $SOBE;
00126
00127 $this->content.=$this->doc->middle();
00128 $this->content.=$this->doc->endPage();
00129 echo $this->content;
00130 }
00131
00137 function printSqlCheck() {
00138 $input = t3lib_div::_GP('tx_dbal');
00139
00140 $out = '
00141 <form name="sql_check" action="index.php" method="post" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'">
00142 <script type="text/javascript">
00143
00144 function updateQryForm(s) {
00145 document.getElementById(\'tx-dbal-result\').style.display = \'none\';
00146 switch(s) {
00147 case \'SELECT\':
00148 document.getElementById(\'tx-dbal-qryupdate\').style.display = \'none\';
00149 document.getElementById(\'tx-dbal-qryfields\').style.display = \'table-row\';
00150 document.getElementById(\'tx-dbal-qryinsertvalues\').style.display = \'none\';
00151 document.getElementById(\'tx-dbal-qryupdatevalues\').style.display = \'none\';
00152 document.getElementById(\'tx-dbal-qryfrom\').style.display = \'table-row\';
00153 document.getElementById(\'tx-dbal-qryinto\').style.display = \'none\';
00154 document.getElementById(\'tx-dbal-qrywhere\').style.display = \'table-row\';
00155 document.getElementById(\'tx-dbal-qrygroup\').style.display = \'table-row\';
00156 document.getElementById(\'tx-dbal-qryorder\').style.display = \'table-row\';
00157 document.getElementById(\'tx-dbal-qrylimit\').style.display = \'table-row\';
00158 break;
00159 case \'INSERT\':
00160 document.getElementById(\'tx-dbal-qryupdate\').style.display = \'none\';
00161 document.getElementById(\'tx-dbal-qryfields\').style.display = \'none\';
00162 document.getElementById(\'tx-dbal-qryinsertvalues\').style.display = \'table-row\';
00163 document.getElementById(\'tx-dbal-qryupdatevalues\').style.display = \'none\';
00164 document.getElementById(\'tx-dbal-qryfrom\').style.display = \'none\';
00165 document.getElementById(\'tx-dbal-qryinto\').style.display = \'table-row\';
00166 document.getElementById(\'tx-dbal-qrywhere\').style.display = \'table-row\';
00167 document.getElementById(\'tx-dbal-qrygroup\').style.display = \'table-row\';
00168 document.getElementById(\'tx-dbal-qryorder\').style.display = \'table-row\';
00169 document.getElementById(\'tx-dbal-qrylimit\').style.display = \'table-row\';
00170 break;
00171 case \'UPDATE\':
00172 document.getElementById(\'tx-dbal-qryupdate\').style.display = \'table-row\';
00173 document.getElementById(\'tx-dbal-qryfields\').style.display = \'none\';
00174 document.getElementById(\'tx-dbal-qryinsertvalues\').style.display = \'none\';
00175 document.getElementById(\'tx-dbal-qryupdatevalues\').style.display = \'table-row\';
00176 document.getElementById(\'tx-dbal-qryfrom\').style.display = \'none\';
00177 document.getElementById(\'tx-dbal-qryinto\').style.display = \'none\';
00178 document.getElementById(\'tx-dbal-qryupdate\').style.display = \'table-row\';
00179 document.getElementById(\'tx-dbal-qrywhere\').style.display = \'table-row\';
00180 document.getElementById(\'tx-dbal-qrygroup\').style.display = \'none\';
00181 document.getElementById(\'tx-dbal-qryorder\').style.display = \'none\';
00182 document.getElementById(\'tx-dbal-qrylimit\').style.display = \'none\';
00183 break;
00184 case \'DELETE\':
00185 document.getElementById(\'tx-dbal-qryupdate\').style.display = \'none\';
00186 document.getElementById(\'tx-dbal-qryfields\').style.display = \'none\';
00187 document.getElementById(\'tx-dbal-qryinsertvalues\').style.display = \'none\';
00188 document.getElementById(\'tx-dbal-qryupdatevalues\').style.display = \'none\';
00189 document.getElementById(\'tx-dbal-qryfrom\').style.display = \'table-row\';
00190 document.getElementById(\'tx-dbal-qryinto\').style.display = \'none\';
00191 document.getElementById(\'tx-dbal-qrywhere\').style.display = \'table-row\';
00192 document.getElementById(\'tx-dbal-qrygroup\').style.display = \'none\';
00193 document.getElementById(\'tx-dbal-qryorder\').style.display = \'none\';
00194 document.getElementById(\'tx-dbal-qrylimit\').style.display = \'none\';
00195 break;
00196 }
00197 }
00198
00199 </script>
00200 <table>
00201 <tr class="tableheader bgColor5"><th colspan="2">Easy SQL check</th></tr>
00202 <tr><td colspan="2">
00203 <select name="tx_dbal[QUERY]"size="1" onchange="updateQryForm(this.options[this.selectedIndex].value)">
00204 <option value="SELECT" '.($input['QUERY']=='SELECT'? 'selected="selected"' : '').'>SELECT</option>
00205 <option value="INSERT" '.($input['QUERY']=='INSERT'? 'selected="selected"' : '').'>INSERT</option>
00206 <option value="UPDATE" '.($input['QUERY']=='UPDATE'? 'selected="selected"' : '').'>UPDATE</option>
00207 <option value="DELETE" '.($input['QUERY']=='DELETE' ? 'selected="selected"' : '').'>DELETE</option>
00208 </select>
00209 </td></tr>
00210 <tr id="tx-dbal-qryupdate" style="display:none;"><td></td><td><input name="tx_dbal[UPDATE]" value="'.$input['UPDATE'].'" type="text" size="30" maxsize="100" /></td></tr>
00211 <tr id="tx-dbal-qryfields"><td></td><td><input name="tx_dbal[FIELDS]" value="'.$input['FIELDS'].'" type="text" size="30" maxsize="100" /></td></tr>
00212 <tr id="tx-dbal-qryinsertvalues" style="display:none;"><td></td><td><textarea name="tx_dbal[INSERTVALUES]" cols="30" rows="4">'.$input['INSERTVALUES'].'</textarea></td></tr>
00213 <tr id="tx-dbal-qryupdatevalues" style="display:none;"><th>SET</th><td><textarea name="tx_dbal[UPDATEVALUES]" cols="30" rows="4">'.$input['UPDATEVALUES'].'</textarea></td></tr>
00214 <tr id="tx-dbal-qryfrom"><th>FROM</th><td><input name="tx_dbal[FROM]" value="'.$input['FROM'].'" type="text" size="30" maxsize="100" /></td></tr>
00215 <tr id="tx-dbal-qryinto" style="display:none;"><th>INTO</th><td><input name="tx_dbal[INTO]" value="'.$input['INTO'].'" type="text" size="30" maxsize="100" /></td></tr>
00216 <tr id="tx-dbal-qrywhere"><th>WHERE</th><td><input name="tx_dbal[WHERE]" value="'.$input['WHERE'].'" type="text" size="30" maxsize="100" /></td></tr>
00217 <tr id="tx-dbal-qrygroup"><th>GROUP BY</th><td><input name="tx_dbal[GROUP]" value="'.$input['GROUP'].'" type="text" size="30" maxsize="100" /></td></tr>
00218 <tr id="tx-dbal-qryorder"><th>ORDER BY</th><td><input name="tx_dbal[ORDER]" value="'.$input['ORDER'].'" type="text" size="30" maxsize="100" /></td></tr>
00219 <tr id="tx-dbal-qrylimit"><th>LIMIT</th><td><input name="tx_dbal[LIMIT]" value="'.$input['LIMIT'].'" type="text" size="30" maxsize="100" /></td></tr>
00220 <tr><td></td><td style="text-align:right;"><input type="submit" value="CHECK" /></td></tr>
00221 <script type="text/javascript">
00222
00223 updateQryForm(\''.$input['QUERY'].'\');
00224
00225 </script>
00226 ';
00227
00228 $out .= '<tr id="tx-dbal-result" class="bgColor4"><th>Result:</th><td>';
00229 switch($input['QUERY']) {
00230 case 'SELECT':
00231 $qry = $GLOBALS['TYPO3_DB']->SELECTquery($input['FIELDS'],$input['FROM'],$input['WHERE'],$input['GROUP'],$input['ORDER'],$input['LIMIT']);
00232 break;
00233 case 'INSERT':
00234 $qry = $GLOBALS['TYPO3_DB']->INSERTquery($input['INTO'],$this->createFieldsValuesArray($input['INSERTVALUES']));
00235 break;
00236 case 'UPDATE':
00237 $qry = $GLOBALS['TYPO3_DB']->UPDATEquery($input['UPDATE'],$input['WHERE'],$this->createFieldsValuesArray($input['UPDATEVALUES']));
00238 break;
00239 case 'DELETE':
00240 $qry = $GLOBALS['TYPO3_DB']->DELETEquery($input['FROM'],$input['WHERE']);
00241 break;
00242 }
00243 $out .= '<pre>'.htmlspecialchars($qry).'</pre></td></tr>';
00244
00245 $out .= '
00246 <tr class="tableheader bgColor5"><th colspan="2">RAW SQL check</th></tr>
00247 <tr><td colspan="2" style="text-align:right;"><textarea name="tx_dbal[RAWSQL]" cols="60" rows="5">'.$input['RAWSQL'].'</textarea><br /><input type="submit" value="CHECK" /></td></tr>';
00248 if(!empty($input['RAWSQL'])) {
00249 $out .= '<tr class="bgColor4">';
00250 $parseResult = $GLOBALS['TYPO3_DB']->SQLparser->parseSQL($input['RAWSQL']);
00251 if (is_array($parseResult)) {
00252 $newQuery = $GLOBALS['TYPO3_DB']->SQLparser->compileSQL($parseResult);
00253 $testResult = $GLOBALS['TYPO3_DB']->SQLparser->debug_parseSQLpartCompare($input['RAWSQL'], $newQuery);
00254 if (!is_array($testResult)) {
00255 $out .= '<td colspan="2">'.$newQuery;
00256 } else {
00257 $out .= '<td colspan="2">'.htmlspecialchars($testResult[0]).'</td></tr>
00258 <tr><th>Error:</th><td style="border:2px solid #f00;">Input query did not match the parsed and recompiled query exactly (not observing whitespace):<br />'.htmlspecialchars($testResult[1]);
00259 }
00260 } else {
00261 $out .= '<th>Result:</th><td style="border:2px solid #f00;">'.$parseResult;
00262 }
00263 $out .='</td></tr>';
00264 }
00265
00266 $out .='</table></form>';
00267 return $out;
00268 }
00269
00279 function createFieldsValuesArray($in) {
00280 $ret = array();
00281 $in = explode(chr(10),$in);
00282 foreach ($in as $v) {
00283 $fv = explode('=',$v);
00284 $ret[$fv[0]] = $fv[1];
00285 }
00286
00287 return $ret;
00288 }
00289
00299 function printCachedInfo() {
00300
00301 if((string)t3lib_div::_GP('cmd') == 'clear') {
00302 $GLOBALS['TYPO3_DB']->clearCachedFieldInfo();
00303 $GLOBALS['TYPO3_DB']->cacheFieldInfo();
00304 }
00305
00306 $out = '<table border="1" cellspacing="0"><caption>auto_increment</caption><tbody><tr><th>Table</th><th>Field</th></tr>';
00307 ksort($GLOBALS['TYPO3_DB']->cache_autoIncFields);
00308 foreach($GLOBALS['TYPO3_DB']->cache_autoIncFields as $table => $field) {
00309 $out .= '<tr>';
00310 $out .= '<td>'.$table.'</td>';
00311 $out .= '<td>'.$field.'</td>';
00312 $out .= '</tr>';
00313 }
00314 $out .= '</tbody></table>';
00315 $out .= $this->doc->spacer(5);
00316 $out .= '<table border="1" cellspacing="0"><caption>Primary keys</caption><tbody><tr><th>Table</th><th>Field(s)</th></tr>';
00317 ksort($GLOBALS['TYPO3_DB']->cache_primaryKeys);
00318 foreach($GLOBALS['TYPO3_DB']->cache_primaryKeys as $table => $field) {
00319 $out .= '<tr>';
00320 $out .= '<td>'.$table.'</td>';
00321 $out .= '<td>'.$field.'</td>';
00322 $out .= '</tr>';
00323 }
00324 $out .= '</tbody></table>';
00325 $out .= $this->doc->spacer(5);
00326 $out .= '<table border="1" cellspacing="0"><caption>Field types</caption><tbody><tr><th colspan="4">Table</th></tr><tr><th>Field</th><th>Type</th><th>Metatype</th><th>NOT NULL</th></th></tr>';
00327 ksort($GLOBALS['TYPO3_DB']->cache_fieldType);
00328 foreach($GLOBALS['TYPO3_DB']->cache_fieldType as $table => $fields) {
00329 $out .= '<th colspan="4">'.$table.'</th>';
00330 foreach($fields as $field => $data) {
00331 $out .= '<tr>';
00332 $out .= '<td>'.$field.'</td>';
00333 $out .= '<td>'.$data['type'].'</td>';
00334 $out .= '<td>'.$data['metaType'].'</td>';
00335 $out .= '<td>'.$data['notnull'].'</td>';
00336 $out .= '</tr>';
00337 }
00338 }
00339 $out .= '</tbody></table>';
00340
00341 $menu = '<a href="index.php?cmd=clear">CLEAR DATA</a><hr />';
00342
00343 return $menu.$out;
00344 }
00345
00353 function printLogMgm() {
00354
00355
00356 $GLOBALS['TYPO3_DB']->debug = FALSE;
00357
00358
00359 $cmd = (string)t3lib_div::_GP('cmd');
00360 switch($cmd) {
00361 case 'flush':
00362 $res = $GLOBALS['TYPO3_DB']->exec_DELETEquery('tx_dbal_debuglog','');
00363 $res = $GLOBALS['TYPO3_DB']->exec_DELETEquery('tx_dbal_debuglog_where','');
00364 $outStr = 'Log FLUSHED!';
00365 break;
00366 case 'joins':
00367 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('table_join,exec_time,query,script','tx_dbal_debuglog','table_join!=\'\'', 'table_join,script,exec_time,query');
00368
00369
00370 $tableIndex = array();
00371 $tRows = array();
00372 $tRows[] = '
00373 <tr>
00374 <td>Execution time</td>
00375 <td>Table joins</td>
00376 <td>Script</td>
00377 <td>Query</td>
00378 </tr>';
00379
00380 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00381 $tableArray = $GLOBALS['TYPO3_DB']->SQLparser->parseFromTables($row['table_join']);
00382
00383
00384 foreach($tableArray as $a) {
00385 foreach($tableArray as $b) {
00386 if ($b['table']!=$a['table']) {
00387 $tableIndex[$a['table']][$b['table']]=1;
00388 }
00389 }
00390 }
00391
00392
00393 $tRows[] = '
00394 <tr>
00395 <td>'.htmlspecialchars($row['exec_time']).'</td>
00396 <td>'.htmlspecialchars($row['table_join']).'</td>
00397 <td>'.htmlspecialchars($row['script']).'</td>
00398 <td>'.htmlspecialchars($row['query']).'</td>
00399 </tr>';
00400 }
00401
00402
00403 $outStr.= '<h4>Direct joins:</h4>'.t3lib_div::view_array($tableIndex);
00404
00405
00406
00407 foreach($tableIndex as $priTable => $a) {
00408 foreach($tableIndex as $tableN => $v) {
00409 foreach($v as $tableP => $vv) {
00410 if ($tableP == $priTable) {
00411 $tableIndex[$priTable] = array_merge($v, $a);
00412 }
00413 }
00414 }
00415 }
00416 $outStr.= '<h4>Total dependencies:</h4>'.t3lib_div::view_array($tableIndex);
00417
00418
00419 $outStr.= '
00420 <table border="1" cellspacing="0">'.implode('',$tRows).'
00421 </table>';
00422 break;
00423 case 'errors':
00424
00425 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('serdata,exec_time,query,script','tx_dbal_debuglog','errorFlag>0','','tstamp DESC');
00426
00427
00428 $tRows = array();
00429 $tRows[] = '
00430 <tr>
00431 <td>Execution time</td>
00432 <td>Error data</td>
00433 <td>Script</td>
00434 <td>Query</td>
00435 </tr>';
00436
00437 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00438
00439 $tRows[] = '
00440 <tr>
00441 <td>'.htmlspecialchars($row['exec_time']).'</td>
00442 <td>'.t3lib_div::view_array(unserialize($row['serdata'])).'</td>
00443 <td>'.htmlspecialchars($row['script']).'</td>
00444 <td>'.htmlspecialchars($row['query']).'</td>
00445 </tr>';
00446 }
00447
00448
00449 $outStr.= '
00450 <table border="1" cellspacing="0">'.implode('',$tRows).'
00451 </table>';
00452 break;
00453 case 'parsing':
00454 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('query,serdata','tx_dbal_debuglog','errorFlag&2=2');
00455 $tRows = array();
00456 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00457
00458 $tRows[] = '
00459 <tr>
00460 <td>'.htmlspecialchars($row['query']).'</td>
00461 </tr>';
00462 }
00463
00464
00465 $outStr.= '
00466 <table border="1" cellspacing="0">'.implode('',$tRows).'
00467 </table>';
00468 break;
00469 case 'where':
00470 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('tstamp,script,tablename,whereclause','tx_dbal_debuglog_where','','','tstamp DESC');
00471 $tRows = array();
00472 $tRows[] = '
00473 <tr>
00474 <td>Time</td>
00475 <td>Script</td>
00476 <td>Table</td>
00477 <td>WHERE clause</td>
00478 </tr>';
00479 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00480 $tRows[] = '
00481 <tr>
00482 <td>'.t3lib_BEfunc::datetime($row['tstamp']).'</td>
00483 <td>'.htmlspecialchars($row['script']).'</td>
00484 <td>'.htmlspecialchars($row['tablename']).'</td>
00485 <td>'.str_replace(array('\'\'','""','IS NULL','IS NOT NULL'), array('<span style="background-color:#ff0000;color:#ffffff;padding:2px;font-weight:bold;">\'\'</span>','<span style="background-color:#ff0000;color:#ffffff;padding:2px;font-weight:bold;">""</span>','<span style="background-color:#00ff00;color:#ffffff;padding:2px;font-weight:bold;">IS NULL</span>','<span style="background-color:#00ff00;color:#ffffff;padding:2px;font-weight:bold;">IS NOT NULL</span>'), htmlspecialchars($row['whereclause'])).'</td>
00486 </tr>';
00487 }
00488
00489 $outStr = '
00490 <table border="1" cellspacing="0">'.implode('',$tRows).'
00491 </table>';
00492 break;
00493 default:
00494
00495
00496 $specTime = t3lib_div::_GP('specTime');
00497
00498 if ($specTime) {
00499 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_dbal_debuglog','tstamp='.intval($specTime));
00500 $tRows = array();
00501 $tRows[] = '
00502 <tr>
00503 <td>Execution time</td>
00504 <td>Error</td>
00505 <td>Table joins</td>
00506 <td>Data</td>
00507 <td>Query</td>
00508 </tr>';
00509 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00510 $tRows[] = '
00511 <tr>
00512 <td>'.htmlspecialchars($row['exec_time']).'</td>
00513 <td>'.($row['errorFlag'] ? 1 : 0).'</td>
00514 <td>'.htmlspecialchars($row['table_join']).'</td>
00515 <td>'.t3lib_div::view_array(unserialize($row['serdata'])).'</td>
00516 <td>'.str_replace(array('\'\'','""','IS NULL','IS NOT NULL'), array('<span style="background-color:#ff0000;color:#ffffff;padding:2px;font-weight:bold;">\'\'</span>','<span style="background-color:#ff0000;color:#ffffff;padding:2px;font-weight:bold;">""</span>','<span style="background-color:#00ff00;color:#ffffff;padding:2px;font-weight:bold;">IS NULL</span>','<span style="background-color:#00ff00;color:#ffffff;padding:2px;font-weight:bold;">IS NOT NULL</span>'), htmlspecialchars($row['query'])).'</td>
00517 </tr>';
00518 }
00519 } else {
00520 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('tstamp,script, SUM(exec_time) as calc_sum, count(*) AS qrycount, MAX(errorFlag) as error','tx_dbal_debuglog','','tstamp,script','tstamp DESC');
00521 $tRows = array();
00522 $tRows[] = '
00523 <tr>
00524 <td>Time</td>
00525 <td># of queries</td>
00526 <td>Error</td>
00527 <td>Time (ms)</td>
00528 <td>Script</td>
00529 </tr>';
00530 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00531 $tRows[] = '
00532 <tr>
00533 <td>'.t3lib_BEfunc::datetime($row['tstamp']).'</td>
00534 <td>'.htmlspecialchars($row['qrycount']).'</td>
00535 <td>'.($row['error'] ? '<strong style="color:#f00">ERR</strong>' : '').'</td>
00536 <td>'.htmlspecialchars($row['calc_sum']).'</td>
00537 <td><a href="index.php?specTime='.intval($row['tstamp']).'">'.htmlspecialchars($row['script']).'</a></td>
00538 </tr>';
00539 }
00540 }
00541 $outStr = '
00542 <table border="1" cellspacing="0">'.implode('',$tRows).'
00543 </table>';
00544
00545 break;
00546 }
00547
00548 $menu = '
00549 <a href="index.php?cmd=flush">FLUSH LOG</a> -
00550 <a href="index.php?cmd=joins">JOINS</a> -
00551 <a href="index.php?cmd=errors">ERRORS</a> -
00552 <a href="index.php?cmd=parsing">PARSING</a> -
00553 <a href="index.php">LOG</a> -
00554 <a href="index.php?cmd=where">WHERE</a> -
00555
00556 <a href="'.htmlspecialchars(t3lib_div::linkThisScript()).'" target="tx_debuglog">[New window]</a>
00557 <hr />
00558 ';
00559 return $menu.$outStr;
00560 }
00561 }
00562
00563 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/mod1/index.php']) {
00564 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/mod1/index.php']);
00565 }
00566
00567
00568
00569
00570
00571 $SOBE = t3lib_div::makeInstance('tx_dbal_module1');
00572 $SOBE->init();
00573 $SOBE->main();
00574 $SOBE->printContent();
00575 ?>