SqlParser\Utils\Query::getFlags PHP 메소드

getFlags() 공개 정적인 메소드

Gets an array with flags this statement has.
public static getFlags ( Statement | null $statement, boolean $all = false ) : array
$statement SqlParser\Statement | null The statement to be processed.
$all boolean If `false`, false values will not be included.
리턴 array
    public static function getFlags($statement, $all = false)
    {
        $flags = array();
        if ($all) {
            $flags = array('distinct' => false, 'drop_database' => false, 'group' => false, 'having' => false, 'is_affected' => false, 'is_analyse' => false, 'is_count' => false, 'is_delete' => false, 'is_explain' => false, 'is_export' => false, 'is_func' => false, 'is_group' => false, 'is_insert' => false, 'is_maint' => false, 'is_procedure' => false, 'is_replace' => false, 'is_select' => false, 'is_show' => false, 'is_subquery' => false, 'join' => false, 'limit' => false, 'offset' => false, 'order' => false, 'querytype' => false, 'reload' => false, 'select_from' => false, 'union' => false);
        }
        if ($statement instanceof AlterStatement) {
            $flags['querytype'] = 'ALTER';
            $flags['reload'] = true;
        } elseif ($statement instanceof CreateStatement) {
            $flags['querytype'] = 'CREATE';
            $flags['reload'] = true;
        } elseif ($statement instanceof AnalyzeStatement) {
            $flags['querytype'] = 'ANALYZE';
            $flags['is_maint'] = true;
        } elseif ($statement instanceof CheckStatement) {
            $flags['querytype'] = 'CHECK';
            $flags['is_maint'] = true;
        } elseif ($statement instanceof ChecksumStatement) {
            $flags['querytype'] = 'CHECKSUM';
            $flags['is_maint'] = true;
        } elseif ($statement instanceof OptimizeStatement) {
            $flags['querytype'] = 'OPTIMIZE';
            $flags['is_maint'] = true;
        } elseif ($statement instanceof RepairStatement) {
            $flags['querytype'] = 'REPAIR';
            $flags['is_maint'] = true;
        } elseif ($statement instanceof CallStatement) {
            $flags['querytype'] = 'CALL';
            $flags['is_procedure'] = true;
        } elseif ($statement instanceof DeleteStatement) {
            $flags['querytype'] = 'DELETE';
            $flags['is_delete'] = true;
            $flags['is_affected'] = true;
        } elseif ($statement instanceof DropStatement) {
            $flags['querytype'] = 'DROP';
            $flags['reload'] = true;
            if ($statement->options->has('DATABASE') || $statement->options->has('SCHEMA')) {
                $flags['drop_database'] = true;
            }
        } elseif ($statement instanceof ExplainStatement) {
            $flags['querytype'] = 'EXPLAIN';
            $flags['is_explain'] = true;
        } elseif ($statement instanceof InsertStatement) {
            $flags['querytype'] = 'INSERT';
            $flags['is_affected'] = true;
            $flags['is_insert'] = true;
        } elseif ($statement instanceof ReplaceStatement) {
            $flags['querytype'] = 'REPLACE';
            $flags['is_affected'] = true;
            $flags['is_replace'] = true;
            $flags['is_insert'] = true;
        } elseif ($statement instanceof SelectStatement) {
            $flags['querytype'] = 'SELECT';
            $flags['is_select'] = true;
            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;
            }
            $expressions = $statement->expr;
            if (!empty($statement->join)) {
                foreach ($statement->join as $join) {
                    $expressions[] = $join->expr;
                }
            }
            foreach ($expressions as $expr) {
                if (!empty($expr->function)) {
                    if ($expr->function === 'COUNT') {
                        $flags['is_count'] = true;
                    } elseif (in_array($expr->function, static::$FUNCTIONS)) {
                        $flags['is_func'] = true;
                    }
                }
                if (!empty($expr->subquery)) {
                    $flags['is_subquery'] = true;
                }
            }
            if (!empty($statement->procedure) && $statement->procedure->name === 'ANALYSE') {
                $flags['is_analyse'] = true;
            }
            if (!empty($statement->group)) {
                $flags['group'] = true;
            }
            if (!empty($statement->having)) {
                $flags['having'] = true;
            }
            if (!empty($statement->union)) {
                $flags['union'] = true;
            }
            if (!empty($statement->join)) {
                $flags['join'] = true;
            }
        } elseif ($statement instanceof ShowStatement) {
            $flags['querytype'] = 'SHOW';
            $flags['is_show'] = true;
        } elseif ($statement instanceof UpdateStatement) {
            $flags['querytype'] = 'UPDATE';
            $flags['is_affected'] = true;
        }
        if ($statement instanceof SelectStatement || $statement instanceof UpdateStatement || $statement instanceof DeleteStatement) {
            if (!empty($statement->limit)) {
                $flags['limit'] = true;
            }
            if (!empty($statement->order)) {
                $flags['order'] = true;
            }
        }
        return $flags;
    }

Usage Example

예제 #1
0
 public function testGetAll()
 {
     $query = 'SELECT *, actor.actor_id, sakila2.film.*
         FROM sakila2.city, sakila2.film, actor';
     $parser = new Parser($query);
     $this->assertEquals(array_merge(Query::getFlags($parser->statements[0], true), array('parser' => $parser, 'statement' => $parser->statements[0], 'select_expr' => array('*'), 'select_tables' => array(array('actor', null), array('film', 'sakila2')))), Query::getAll($query));
     $query = 'SELECT * FROM sakila.actor, film';
     $parser = new Parser($query);
     $this->assertEquals(array_merge(Query::getFlags($parser->statements[0], true), array('parser' => $parser, 'statement' => $parser->statements[0], 'select_expr' => array('*'), 'select_tables' => array(array('actor', 'sakila'), array('film', null)))), Query::getAll($query));
 }
All Usage Examples Of SqlParser\Utils\Query::getFlags