summaryrefslogtreecommitdiffstats
path: root/src/Utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/Utils')
-rw-r--r--src/Utils/Misc.php7
-rw-r--r--src/Utils/Query.php131
-rw-r--r--src/Utils/Routine.php5
-rw-r--r--src/Utils/Table.php19
4 files changed, 155 insertions, 7 deletions
diff --git a/src/Utils/Misc.php b/src/Utils/Misc.php
index 4332ae0..55ae33b 100644
--- a/src/Utils/Misc.php
+++ b/src/Utils/Misc.php
@@ -3,6 +3,7 @@
namespace SqlParser\Utils;
use SqlParser\Statement;
+use SqlParser\Statements\SelectStatement;
/**
* Miscellaneous utilities.
@@ -19,12 +20,12 @@ class Misc
/**
* Gets a list of all aliases and their original names.
*
- * @param Statement $tree The tree that was generated after parsing.
- * @param string $database The name of the database.
+ * @param SelectStatement $tree The tree that was generated after parsing.
+ * @param string $database The name of the database.
*
* @return array
*/
- public static function getAliases(Statement $tree, $database)
+ public static function getAliases($tree, $database)
{
if ((empty($tree->from)) || (empty($tree->expr))) {
return array();
diff --git a/src/Utils/Query.php b/src/Utils/Query.php
new file mode 100644
index 0000000..0bd56d8
--- /dev/null
+++ b/src/Utils/Query.php
@@ -0,0 +1,131 @@
+<?php
+
+namespace SqlParser\Utils;
+
+use SqlParser\Statement;
+use SqlParser\Statements\AlterStatement;
+use SqlParser\Statements\AnalyzeStatement;
+use SqlParser\Statement\CallStatement;
+use SqlParser\Statements\CheckStatement;
+use SqlParser\Statements\ChecksumStatement;
+use SqlParser\Statements\CreateStatement;
+use SqlParser\Statements\DeleteStatement;
+use SqlParser\Statements\DropStatement;
+use SqlParser\Statements\ExplainStatement;
+use SqlParser\Statements\InsertStatement;
+use SqlParser\Statements\OptimizeStatement;
+use SqlParser\Statements\RepairStatement;
+use SqlParser\Statements\ReplaceStatement;
+use SqlParser\Statements\SelectStatement;
+use SqlParser\Statements\ShowStatement;
+use SqlParser\Statements\UpdateStatement;
+
+/**
+ * Statement utilities.
+ *
+ * @category Routines
+ * @package SqlParser
+ * @subpackage Utils
+ * @author Dan Ungureanu <udan1107@gmail.com>
+ * @license http://opensource.org/licenses/GPL-2.0 GNU Public License
+ */
+class Query
+{
+
+ /**
+ * Functions that set the flag `is_func`.
+ *
+ * @var array
+ */
+ public static $FUNCTIONS = array(
+ 'SUM','AVG','STD','STDDEV','MIN','MAX','BIT_OR','BIT_AND'
+ );
+
+ /**
+ * Gets an array with flags this statement has.
+ *
+ * @param Statement $statement
+ *
+ * @return array
+ */
+ public static function getFlags($statement)
+ {
+ $flags = array();
+ // 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)
+ || ($statement instanceof ChecksumStatement)
+ || ($statement instanceof OptimizeStatement)
+ || ($statement instanceof RepairStatement)
+ ) {
+ $flags['is_maint'] = true;
+ } else if ($statement instanceof DeleteStatement) {
+ $flags['is_delete'] = true;
+ $flags['is_affected'] = true;
+ } else if ($statement instanceof DropStatement) {
+ $flags['reload'] = true;
+
+ if (($statement->options->has('DATABASE')
+ || ($statement->options->has('SCHEMA')))
+ ) {
+ $flags['drop_database'] = true;
+ }
+ } else if ($statement instanceof ExplainStatement) {
+ $flags['is_explain'] = true;
+ } else if ($statement instanceof InsertStatement) {
+ $flags['is_affected'] = true;
+ $flags['is_insert'] = true;
+ } else if ($statement instanceof ReplaceStatement) {
+ $flags['is_affected'] = true;
+ $flags['is_replace'] = true;
+ } else if ($statement instanceof SelectStatement) {
+
+ if (!empty($statement->from)) {
+ $flags['select_from'] = true;
+ }
+
+ if ($statement->options->has('DISTINCT')) {
+ $flags['distinct'] = true;
+ }
+
+ if ((!empty($statement->group)) || (!empty($statement->having))) {
+ $flags['is_group'] = true;
+ }
+
+ if ((!empty($statement->into))
+ && ($statement->into->type === 'OUTFILE')
+ ) {
+ $flags['is_export'] = true;
+ }
+
+ foreach ($statement->expr as $expr) {
+ if (!empty($expr->function)) {
+ if ($expr->function === 'COUNT') {
+ $flags['is_count'] = true;
+ } else if (in_array($expr->function, static::$FUNCTIONS)) {
+ $flags['is_func'] = true;
+ }
+ }
+ if (!empty($expr->subquery)) {
+ $flags['is_subquery'] = true;
+ }
+ }
+ } else if ($statement instanceof ShowStatement) {
+ $flags['is_show'] = true;
+ } else if ($statement instanceof UpdateStatement) {
+ $flags['is_affected'] = true;
+ }
+
+ return $flags;
+ }
+
+}
diff --git a/src/Utils/Routine.php b/src/Utils/Routine.php
index 740ace3..76d3d71 100644
--- a/src/Utils/Routine.php
+++ b/src/Utils/Routine.php
@@ -7,6 +7,7 @@ use SqlParser\Parser;
use SqlParser\Statement;
use SqlParser\Fragments\DataTypeFragment;
use SqlParser\Fragments\ParamDefFragment;
+use SqlParser\Statements\CreateStatement;
/**
* Routine utilities.
@@ -89,11 +90,11 @@ class Routine
/**
* Gets the parameters of a routine from the parse tree.
*
- * @param Statement $tree The tree that was generated after parsing.
+ * @param CreateStatement $tree The tree that was generated after parsing.
*
* @return array
*/
- public static function getParameters(Statement $tree)
+ public static function getParameters($tree)
{
$retval = array(
'num' => 0,
diff --git a/src/Utils/Table.php b/src/Utils/Table.php
index 7be3eac..6bc83a5 100644
--- a/src/Utils/Table.php
+++ b/src/Utils/Table.php
@@ -7,6 +7,7 @@ use SqlParser\Parser;
use SqlParser\Statement;
use SqlParser\Fragments\DataTypeFragment;
use SqlParser\Fragments\ParamDefFragment;
+use SqlParser\Statements\CreateStatement;
/**
* Table utilities.
@@ -20,7 +21,14 @@ use SqlParser\Fragments\ParamDefFragment;
class Table
{
- public static function getForeignKeys(Statement $tree)
+ /**
+ * Gets the foreign keys of the table.
+ *
+ * @param CreateStatement $tree
+ *
+ * @return array
+ */
+ public static function getForeignKeys($tree)
{
if ((empty($tree->fields)) || (!$tree->options->has('TABLE'))) {
return array();
@@ -63,7 +71,14 @@ class Table
return $ret;
}
- public static function getFields(Statement $tree)
+ /**
+ * Gets fields of the table.
+ *
+ * @param CreateStatement $tree
+ *
+ * @return array
+ */
+ public static function getFields($tree)
{
if ((empty($tree->fields)) || (!$tree->options->has('TABLE'))) {
return array();