mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-28 21:46:10 +02:00
58 lines
1.3 KiB
PHP
58 lines
1.3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Format a SQL Query for better readable output in HTML or Plaintext.
|
||
|
* Its a simple string parser, not a full tokenizer - so formatting
|
||
|
* is not aware of the SQL syntax. This means we have to be conservative
|
||
|
* with modifying the SQL string.
|
||
|
*
|
||
|
* @package sapphire
|
||
|
* @subpackage parsers
|
||
|
* @author Ingo Schommer, Silverstripe Ltd. (<firstname>@silverstripe.com)
|
||
|
* @usedby Database->databaseError()
|
||
|
*/
|
||
|
class SQLFormatter extends Object {
|
||
|
|
||
|
protected static $newline_before_tokens = array(
|
||
|
'SELECT',
|
||
|
'UPDATE',
|
||
|
'INSERT',
|
||
|
'DELETE',
|
||
|
'FROM',
|
||
|
'INNER JOIN',
|
||
|
'FULL JOIN',
|
||
|
'LEFT JOIN',
|
||
|
'RIGHT JOIN',
|
||
|
'WHERE',
|
||
|
'ORDER BY',
|
||
|
'GROUP BY',
|
||
|
'LIMIT',
|
||
|
);
|
||
|
|
||
|
public function formatPlain($sql) {
|
||
|
$sql = $this->addNewlines($sql, false);
|
||
|
|
||
|
return $sql;
|
||
|
}
|
||
|
|
||
|
public function formatHTML($sql) {
|
||
|
$sql = $this->addNewlines($sql, true);
|
||
|
|
||
|
return $sql;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Newlines for tokens defined in $newline_before_tokens.
|
||
|
* Case-sensitive, only applies to uppercase SQL to avoid
|
||
|
* messing with possible content fragments in the query.
|
||
|
*/
|
||
|
protected function addNewlines($sql, $useHtmlFormatting = false) {
|
||
|
foreach(self::$newline_before_tokens as $token) {
|
||
|
$breakToken = ($useHtmlFormatting) ? "<br />\n" : "\n";
|
||
|
$sql = preg_replace('/[^\n](' . $token . ')/', $breakToken . '$1', $sql);
|
||
|
}
|
||
|
|
||
|
return $sql;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
?>
|