diff options
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(); |