diff --git a/src/Dibi/Bridges/Nette/Panel.php b/src/Dibi/Bridges/Nette/Panel.php
index 14c19329..51d83f2f 100644
--- a/src/Dibi/Bridges/Nette/Panel.php
+++ b/src/Dibi/Bridges/Nette/Panel.php
@@ -65,7 +65,7 @@ class DibiNettePanel extends DibiObject implements Nette\Diagnostics\IBarPanel
if ($e instanceof DibiException && $e->getSql()) {
return [
'tab' => 'SQL',
- 'panel' => dibi::dump($e->getSql(), TRUE),
+ 'panel' => DibiHelpers::dump($e->getSql(), TRUE),
];
}
}
@@ -104,7 +104,7 @@ class DibiNettePanel extends DibiObject implements Nette\Diagnostics\IBarPanel
$backup = [$event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime];
$event->connection->onEvent = NULL;
$cmd = is_string($this->explain) ? $this->explain : ($event->connection->getConfig('driver') === 'oracle' ? 'EXPLAIN PLAN FOR' : 'EXPLAIN');
- $explain = dibi::dump($event->connection->nativeQuery("$cmd $event->sql"), TRUE);
+ $explain = DibiHelpers::dump($event->connection->nativeQuery("$cmd $event->sql"), TRUE);
} catch (DibiException $e) {
}
list($event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime) = $backup;
@@ -117,7 +117,7 @@ class DibiNettePanel extends DibiObject implements Nette\Diagnostics\IBarPanel
$s .= "
explain";
}
- $s .= '
' . dibi::dump(strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql, TRUE);
+ $s .= ' | ' . DibiHelpers::dump(strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql, TRUE);
if ($explain) {
$s .= " {$explain} ";
}
diff --git a/src/Dibi/Bridges/Tracy/Panel.php b/src/Dibi/Bridges/Tracy/Panel.php
index fde26208..ff9fd0f4 100644
--- a/src/Dibi/Bridges/Tracy/Panel.php
+++ b/src/Dibi/Bridges/Tracy/Panel.php
@@ -9,6 +9,7 @@ namespace Dibi\Bridges\Tracy;
use dibi;
use Tracy;
+use DibiHelpers;
/**
@@ -67,7 +68,7 @@ class Panel extends \DibiObject implements Tracy\IBarPanel
if ($e instanceof \DibiException && $e->getSql()) {
return [
'tab' => 'SQL',
- 'panel' => dibi::dump($e->getSql(), TRUE),
+ 'panel' => DibiHelpers::dump($e->getSql(), TRUE),
];
}
}
@@ -107,7 +108,7 @@ class Panel extends \DibiObject implements Tracy\IBarPanel
$backup = [$event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime];
$event->connection->onEvent = NULL;
$cmd = is_string($this->explain) ? $this->explain : ($event->connection->getConfig('driver') === 'oracle' ? 'EXPLAIN PLAN FOR' : 'EXPLAIN');
- $explain = dibi::dump($event->connection->nativeQuery("$cmd $event->sql"), TRUE);
+ $explain = DibiHelpers::dump($event->connection->nativeQuery("$cmd $event->sql"), TRUE);
} catch (\DibiException $e) {
}
list($event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime) = $backup;
@@ -120,7 +121,7 @@ class Panel extends \DibiObject implements Tracy\IBarPanel
$s .= " explain";
}
- $s .= ' | ' . dibi::dump(strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql, TRUE);
+ $s .= ' | ' . DibiHelpers::dump(strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql, TRUE);
if ($explain) {
$s .= " {$explain} ";
}
diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php
index b9924880..2bf98358 100644
--- a/src/Dibi/Connection.php
+++ b/src/Dibi/Connection.php
@@ -260,12 +260,12 @@ class DibiConnection extends DibiObject
{
$args = func_get_args();
try {
- dibi::dump($this->translateArgs($args));
+ DibiHelpers::dump($this->translateArgs($args));
return TRUE;
} catch (DibiException $e) {
if ($e->getSql()) {
- dibi::dump($e->getSql());
+ DibiHelpers::dump($e->getSql());
} else {
echo get_class($e) . ': ' . $e->getMessage() . (PHP_SAPI === 'cli' ? "\n" : ' ');
}
diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php
index 929e7f28..97e142b2 100644
--- a/src/Dibi/Helpers.php
+++ b/src/Dibi/Helpers.php
@@ -12,6 +12,85 @@
class DibiHelpers
{
+ /**
+ * Prints out a syntax highlighted version of the SQL command or DibiResult.
+ * @param string|DibiResult
+ * @param bool return output instead of printing it?
+ * @return string
+ */
+ public static function dump($sql = NULL, $return = FALSE)
+ {
+ ob_start();
+ if ($sql instanceof DibiResult) {
+ $sql->dump();
+
+ } else {
+ if ($sql === NULL) {
+ $sql = dibi::$sql;
+ }
+
+ static $keywords1 = 'SELECT|(?:ON\s+DUPLICATE\s+KEY)?UPDATE|INSERT(?:\s+INTO)?|REPLACE(?:\s+INTO)?|DELETE|CALL|UNION|FROM|WHERE|HAVING|GROUP\s+BY|ORDER\s+BY|LIMIT|OFFSET|FETCH\s+NEXT|SET|VALUES|LEFT\s+JOIN|INNER\s+JOIN|TRUNCATE|START\s+TRANSACTION|BEGIN|COMMIT|ROLLBACK(?:\s+TO\s+SAVEPOINT)?|(?:RELEASE\s+)?SAVEPOINT';
+ static $keywords2 = 'ALL|DISTINCT|DISTINCTROW|IGNORE|AS|USING|ON|AND|OR|IN|IS|NOT|NULL|LIKE|RLIKE|REGEXP|TRUE|FALSE';
+
+ // insert new lines
+ $sql = " $sql ";
+ $sql = preg_replace("#(?<=[\\s,(])($keywords1)(?=[\\s,)])#i", "\n\$1", $sql);
+
+ // reduce spaces
+ $sql = preg_replace('#[ \t]{2,}#', ' ', $sql);
+
+ $sql = wordwrap($sql, 100);
+ $sql = preg_replace("#([ \t]*\r?\n){2,}#", "\n", $sql);
+
+ // 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, function ($m) {
+ if (!empty($m[1])) { // comment
+ return "\033[1;30m" . $m[1] . "\033[0m";
+
+ } elseif (!empty($m[2])) { // error
+ return "\033[1;31m" . $m[2] . "\033[0m";
+
+ } elseif (!empty($m[3])) { // most important keywords
+ return "\033[1;34m" . $m[3] . "\033[0m";
+
+ } elseif (!empty($m[4])) { // other keywords
+ return "\033[1;32m" . $m[4] . "\033[0m";
+ }
+ }, $sql);
+ }
+ echo trim($sql) . "\n\n";
+
+ } else {
+ $sql = htmlSpecialChars($sql);
+ $sql = preg_replace_callback($highlighter, function ($m) {
+ if (!empty($m[1])) { // comment
+ return '' . $m[1] . '';
+
+ } elseif (!empty($m[2])) { // error
+ return '' . $m[2] . '';
+
+ } elseif (!empty($m[3])) { // most important keywords
+ return '' . $m[3] . '';
+
+ } elseif (!empty($m[4])) { // other keywords
+ return '' . $m[4] . '';
+ }
+ }, $sql);
+ echo '', trim($sql), " \n\n";
+ }
+ }
+
+ if ($return) {
+ return ob_get_clean();
+ } else {
+ ob_end_flush();
+ }
+ }
+
+
/** @internal */
public static function escape($driver, $value, $type)
{
diff --git a/src/Dibi/dibi.php b/src/Dibi/dibi.php
index 51f08263..477492c3 100644
--- a/src/Dibi/dibi.php
+++ b/src/Dibi/dibi.php
@@ -51,9 +51,6 @@ class dibi
/** @var DibiConnection Current connection */
private static $connection;
- /** @var array @see addHandler */
- private static $handlers = [];
-
/** @var string Last SQL command @see dibi::query() */
public static $sql;
@@ -459,74 +456,7 @@ class dibi
*/
public static function dump($sql = NULL, $return = FALSE)
{
- ob_start();
- if ($sql instanceof DibiResult) {
- $sql->dump();
-
- } else {
- if ($sql === NULL) {
- $sql = self::$sql;
- }
-
- static $keywords1 = 'SELECT|(?:ON\s+DUPLICATE\s+KEY)?UPDATE|INSERT(?:\s+INTO)?|REPLACE(?:\s+INTO)?|DELETE|CALL|UNION|FROM|WHERE|HAVING|GROUP\s+BY|ORDER\s+BY|LIMIT|OFFSET|FETCH\s+NEXT|SET|VALUES|LEFT\s+JOIN|INNER\s+JOIN|TRUNCATE|START\s+TRANSACTION|BEGIN|COMMIT|ROLLBACK(?:\s+TO\s+SAVEPOINT)?|(?:RELEASE\s+)?SAVEPOINT';
- static $keywords2 = 'ALL|DISTINCT|DISTINCTROW|IGNORE|AS|USING|ON|AND|OR|IN|IS|NOT|NULL|LIKE|RLIKE|REGEXP|TRUE|FALSE';
-
- // insert new lines
- $sql = " $sql ";
- $sql = preg_replace("#(?<=[\\s,(])($keywords1)(?=[\\s,)])#i", "\n\$1", $sql);
-
- // reduce spaces
- $sql = preg_replace('#[ \t]{2,}#', ' ', $sql);
-
- $sql = wordwrap($sql, 100);
- $sql = preg_replace("#([ \t]*\r?\n){2,}#", "\n", $sql);
-
- // 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, function ($m) {
- if (!empty($m[1])) { // comment
- return "\033[1;30m" . $m[1] . "\033[0m";
-
- } elseif (!empty($m[2])) { // error
- return "\033[1;31m" . $m[2] . "\033[0m";
-
- } elseif (!empty($m[3])) { // most important keywords
- return "\033[1;34m" . $m[3] . "\033[0m";
-
- } elseif (!empty($m[4])) { // other keywords
- return "\033[1;32m" . $m[4] . "\033[0m";
- }
- }, $sql);
- }
- echo trim($sql) . "\n\n";
-
- } else {
- $sql = htmlSpecialChars($sql);
- $sql = preg_replace_callback($highlighter, function ($m) {
- if (!empty($m[1])) { // comment
- return '' . $m[1] . '';
-
- } elseif (!empty($m[2])) { // error
- return '' . $m[2] . '';
-
- } elseif (!empty($m[3])) { // most important keywords
- return '' . $m[3] . '';
-
- } elseif (!empty($m[4])) { // other keywords
- return '' . $m[4] . '';
- }
- }, $sql);
- echo '', trim($sql), " \n\n";
- }
- }
-
- if ($return) {
- return ob_get_clean();
- } else {
- ob_end_flush();
- }
+ return DibiHelpers::dump($sql, $return);
}
}
|