1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-06 14:16:39 +02:00

Merge pull request #70 from DragonJake/cli-enhancements

DibiResult::dump() a obarvování v CLI módu
This commit is contained in:
David Grudl
2012-12-04 05:50:44 -08:00
2 changed files with 74 additions and 21 deletions

View File

@@ -620,12 +620,17 @@ class dibi
$sql = wordwrap($sql, 100);
$sql = preg_replace("#([ \t]*\r?\n){2,}#", "\n", $sql);
if (PHP_SAPI === 'cli') {
echo trim($sql) . "\n\n";
} else {
// syntax highlight
$highlighter = "#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|(?<=[\\s,(])($keywords1)(?=[\\s,)])|(?<=[\\s,(=])($keywords2)(?=[\\s,)=])#is";
if (PHP_SAPI === 'cli') {
if (substr(getenv('TERM'), 0, 5) === 'xterm') {
$sql = preg_replace_callback($highlighter, array('dibi', 'cliHighlightCallback'), $sql);
}
echo trim($sql) . "\n\n";
} else {
$sql = htmlSpecialChars($sql);
$sql = preg_replace_callback("#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|(?<=[\\s,(])($keywords1)(?=[\\s,)])|(?<=[\\s,(=])($keywords2)(?=[\\s,)=])#is", array('dibi', 'highlightCallback'), $sql);
$sql = preg_replace_callback($highlighter, array('dibi', 'highlightCallback'), $sql);
echo '<pre class="dump">', trim($sql), "</pre>\n";
}
}
@@ -654,4 +659,21 @@ class dibi
return '<strong style="color:green">' . $matches[4] . '</strong>';
}
private static function cliHighlightCallback($matches)
{
if (!empty($matches[1])) // comment
return "\033[1;30m" . $matches[1] . "\033[0m";
if (!empty($matches[2])) // error
return "\033[1;31m" . $matches[2] . "\033[0m";
if (!empty($matches[3])) // most important keywords
return "\033[1;34m" . $matches[3] . "\033[0m";
if (!empty($matches[4])) // other keywords
return "\033[1;32m" . $matches[4] . "\033[0m";
}
}

View File

@@ -636,13 +636,43 @@ class DibiResult extends DibiObject implements IDataSource
/**
* Displays complete result set as HTML table for debug purposes.
* Displays complete result set as HTML or text table for debug purposes.
* @return void
*/
final public function dump()
{
$i = 0;
$this->seek(0);
if (PHP_SAPI === 'cli') {
$hasColors = (substr(getenv('TERM'), 0, 5) === 'xterm');
$maxLen = 0;
while ($row = $this->fetch()) {
if ($i === 0) {
foreach ($row as $col => $foo) {
$len = mb_strlen($col);
if ($len > $maxLen) $maxLen = $len;
}
}
if ($hasColors) {
echo "\033[1;37m#row: $i\033[0m\n";
} else {
echo "#row: $i\n";
}
foreach ($row as $col => $val) {
$spaces = $maxLen - mb_strlen($col) + 2;
echo "$col" . str_repeat(" ", $spaces) . "$val\n";
}
echo "\n";
$i++;
}
if ($i === 0) echo "empty result set\n";
echo "\n";
} else {
while ($row = $this->fetch()) {
if ($i === 0) {
echo "\n<table class=\"dump\">\n<thead>\n\t<tr>\n\t\t<th>#row</th>\n";
@@ -669,5 +699,6 @@ class DibiResult extends DibiObject implements IDataSource
echo "</tbody>\n</table>\n";
}
}
}
}