summaryrefslogtreecommitdiffstats
path: root/src/Utils
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-06-25 19:37:04 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-06-25 23:02:05 +0300
commit1254db42ba8d1967c6e2d71cc4711f933ef853d0 (patch)
treec130476953adca99d9ea2d666a9ca073ec76498c /src/Utils
parent8bfff84044f750d32e2c8e4a7c6ec668d435d409 (diff)
downloadsql-parser-1254db42ba8d1967c6e2d71cc4711f933ef853d0.zip
sql-parser-1254db42ba8d1967c6e2d71cc4711f933ef853d0.tar.gz
sql-parser-1254db42ba8d1967c6e2d71cc4711f933ef853d0.tar.bz2
Added query utilities.
Included basic support for ANALYZE, BACKUP, CHECK, CHECKSUM, OPTIMIZE, REPAIR and RESTORE statements. Better parsing for fields, SELECT statement, INTO keyword. Improved contexts (included functions). Improved documentation. Refactoring and coding style fixes.
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();