summaryrefslogtreecommitdiffstats
path: root/src/Utils/Query.php
diff options
context:
space:
mode:
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.