diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-06-26 01:48:46 +0300 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-06-26 01:48:46 +0300 |
commit | 4ab1342a38db10cc4d58ba8952c5f245fcc484b9 (patch) | |
tree | 977a2c501d1485c175e7df93a64275e18805c7b1 /src/Utils/Query.php | |
parent | 1254db42ba8d1967c6e2d71cc4711f933ef853d0 (diff) | |
download | sql-parser-4ab1342a38db10cc4d58ba8952c5f245fcc484b9.zip sql-parser-4ab1342a38db10cc4d58ba8952c5f245fcc484b9.tar.gz sql-parser-4ab1342a38db10cc4d58ba8952c5f245fcc484b9.tar.bz2 |
Improved query's utilities.
Fixed an issue in contexts.
Updated tests.
Diffstat (limited to 'src/Utils/Query.php')
-rw-r--r-- | src/Utils/Query.php | 88 |
1 files changed, 79 insertions, 9 deletions
diff --git a/src/Utils/Query.php b/src/Utils/Query.php index 0bd56d8..c308344 100644 --- a/src/Utils/Query.php +++ b/src/Utils/Query.php @@ -2,10 +2,11 @@ namespace SqlParser\Utils; +use SqlParser\Parser; use SqlParser\Statement; use SqlParser\Statements\AlterStatement; use SqlParser\Statements\AnalyzeStatement; -use SqlParser\Statement\CallStatement; +use SqlParser\Statements\CallStatement; use SqlParser\Statements\CheckStatement; use SqlParser\Statements\ChecksumStatement; use SqlParser\Statements\CreateStatement; @@ -45,29 +46,54 @@ class Query * Gets an array with flags this statement has. * * @param Statement $statement + * @param bool $all If `false`, false values will not be included. * * @return array */ - public static function getFlags($statement) + public static function getFlags($statement, $all = false) { $flags = array(); - // TODO: 'union', 'join', 'offset' + if ($all) { + $flags = array( + 'distinct' => false, + 'drop_database' => false, + 'is_affected' => false, + 'is_analyse' => false, + 'is_count' => false, + 'is_delete' => false, + 'is_explain' => false, + 'is_export' => false, + 'is_func' => false, + 'is_group' => false, + 'is_insert' => false, + 'is_maint' => false, + 'is_procedure' => false, + 'is_replace' => false, + 'is_select' => false, + 'is_show' => false, + 'is_subquery' => false, + 'join' => false, + 'offset' => false, + 'reload' => false, + 'select_from' => false, + 'union' => false + ); + } + // TODO: 'union', 'join', 'offset' if (($statement instanceof AlterStatement) || ($statement instanceof CreateStatement) ) { $flags['reload'] = true; - } else if ($statement instanceof AnalyzeStatement) { - $flags['is_maint'] = true; - $flags['is_analyze'] = true; - } else if ($statement instanceof CallStatement) { - $flags['is_procedure'] = true; - } else if (($statement instanceof CheckStatement) + } else if (($statement instanceof AnalyzeStatement) + || ($statement instanceof CheckStatement) || ($statement instanceof ChecksumStatement) || ($statement instanceof OptimizeStatement) || ($statement instanceof RepairStatement) ) { $flags['is_maint'] = true; + } else if ($statement instanceof CallStatement) { + $flags['is_procedure'] = true; } else if ($statement instanceof DeleteStatement) { $flags['is_delete'] = true; $flags['is_affected'] = true; @@ -88,6 +114,7 @@ class Query $flags['is_affected'] = true; $flags['is_replace'] = true; } else if ($statement instanceof SelectStatement) { + $flags['is_select'] = true; if (!empty($statement->from)) { $flags['select_from'] = true; @@ -119,6 +146,12 @@ class Query $flags['is_subquery'] = true; } } + + if ((!empty($statement->procedure)) + && ($statement->procedure->name === 'ANALYSE') + ) { + $flags['is_analyse'] = true; + } } else if ($statement instanceof ShowStatement) { $flags['is_show'] = true; } else if ($statement instanceof UpdateStatement) { @@ -128,4 +161,41 @@ class Query return $flags; } + /** + * Parses a query and gets all information about it. + * + * @param string $query + * + * @return array + */ + public static function getAll($query) + { + $parser = new Parser($query); + + if (!isset($parser->statements[0])) { + return array(); + } + + $statement = $parser->statements[0]; + + $ret = static::getFlags($statement, true); + + $ret['parser'] = $parser; + $ret['statement'] = $statement; + + if ($statement instanceof SelectStatement) { + $ret['tables'] = array(); + foreach ($statement->expr as $expr) { + if (!empty($expr->table)) { + $ret['tables'][] = array( + $expr->table, + !empty($expr->database) ? $expr->database : null + ); + } + } + } + + return $ret; + } + } |