summaryrefslogtreecommitdiffstats
path: root/src/Utils/Query.php
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-07-07 02:00:28 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-07-07 02:43:41 +0300
commite58d23067743641529348e4a1cc93cf1c73a85a5 (patch)
tree1098e75ffaa6e0d84a4c400217ec62e6c4a923d4 /src/Utils/Query.php
parent06c0a645e9d19b1f899c3883ae9b11e5c50bc31e (diff)
downloadsql-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.php51
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.