diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-07-07 02:00:28 +0300 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-07-07 02:43:41 +0300 |
commit | e58d23067743641529348e4a1cc93cf1c73a85a5 (patch) | |
tree | 1098e75ffaa6e0d84a4c400217ec62e6c4a923d4 /src/Utils/Query.php | |
parent | 06c0a645e9d19b1f899c3883ae9b11e5c50bc31e (diff) | |
download | sql-parser-e58d23067743641529348e4a1cc93cf1c73a85a5.zip sql-parser-e58d23067743641529348e4a1cc93cf1c73a85a5.tar.gz sql-parser-e58d23067743641529348e4a1cc93cf1c73a85a5.tar.bz2 |
Improved fragments. New builders available. Refactored some fields.
New query utility to extract the name of the tables used in a statement.
TRUNCATE is being parsed now.
CREATE parsing and building has been improved.
Improved the definition of UPDATE and DELETE statements.
Fixed coding style. Improved documentation and tests.
Diffstat (limited to 'src/Utils/Query.php')
-rw-r--r-- | src/Utils/Query.php | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/Utils/Query.php b/src/Utils/Query.php index 5c4553d..d4c01af 100644 --- a/src/Utils/Query.php +++ b/src/Utils/Query.php @@ -12,6 +12,7 @@ use SqlParser\Lexer; use SqlParser\Parser; use SqlParser\Statement; use SqlParser\Token; +use SqlParser\Fragments\FieldFragment; use SqlParser\Statements\AlterStatement; use SqlParser\Statements\AnalyzeStatement; use SqlParser\Statements\CallStatement; @@ -23,10 +24,12 @@ use SqlParser\Statements\DropStatement; use SqlParser\Statements\ExplainStatement; use SqlParser\Statements\InsertStatement; use SqlParser\Statements\OptimizeStatement; +use SqlParser\Statements\RenameStatement; use SqlParser\Statements\RepairStatement; use SqlParser\Statements\ReplaceStatement; use SqlParser\Statements\SelectStatement; use SqlParser\Statements\ShowStatement; +use SqlParser\Statements\TruncateStatement; use SqlParser\Statements\UpdateStatement; /** @@ -437,6 +440,54 @@ class Query } /** + * Gets a list of all tables used in this statement. + * + * @param Statement $statement Statement to be scanned. + * + * @return array + */ + public static function getTables($statement) + { + $fields = array(); + + if (($statement instanceof InsertStatement) + || ($statement instanceof ReplaceStatement) + ) { + $fields = array($statement->into->dest); + } elseif ($statement instanceof UpdateStatement) { + $fields = $statement->tables; + } elseif (($statement instanceof SelectStatement) + || ($statement instanceof DeleteStatement) + ) { + $fields = $statement->from; + } elseif (($statement instanceof AlterStatement) + || ($statement instanceof TruncateStatement) + ) { + $fields = array($statement->table); + } elseif ($statement instanceof DropStatement) { + if (!$statement->options->has('TABLE')) { + // No tables are dropped. + return array(); + } + $fields = $statement->fields; + } elseif ($statement instanceof RenameStatement) { + foreach ($statement->renames as $rename) { + $fields[] = $rename->old; + } + } + + $ret = array(); + foreach ($fields as $field) { + if (!empty($field->table)) { + $field->expr = null; // Force rebuild. + $field->alias = null; // Aliases are not required. + $ret[] = FieldFragment::build($field); + } + } + return $ret; + } + + /** * Gets a specific clause. * * @param Statement $statement The parsed query that has to be modified. |