diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-06-25 19:37:04 +0300 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-06-25 23:02:05 +0300 |
commit | 1254db42ba8d1967c6e2d71cc4711f933ef853d0 (patch) | |
tree | c130476953adca99d9ea2d666a9ca073ec76498c /src/Utils | |
parent | 8bfff84044f750d32e2c8e4a7c6ec668d435d409 (diff) | |
download | sql-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.php | 7 | ||||
-rw-r--r-- | src/Utils/Query.php | 131 | ||||
-rw-r--r-- | src/Utils/Routine.php | 5 | ||||
-rw-r--r-- | src/Utils/Table.php | 19 |
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(); |