SqlParser\Components\DataType::parse PHP Метод

parse() публичный статический Метод

public static parse ( Parser $parser, TokensList $list, array $options = [] ) : DataType
$parser SqlParser\Parser The parser that serves as context.
$list SqlParser\TokensList The list of tokens that are being parsed.
$options array Parameters for parsing.
Результат DataType
    public static function parse(Parser $parser, TokensList $list, array $options = array())
    {
        $ret = new DataType();
        /**
         * The state of the parser.
         *
         * Below are the states of the parser.
         *
         *      0 -------------------[ data type ]--------------------> 1
         *
         *      1 ----------------[ size and options ]----------------> 2
         *
         * @var int $state
         */
        $state = 0;
        for (; $list->idx < $list->count; ++$list->idx) {
            /**
             * Token parsed at this moment.
             *
             * @var Token $token
             */
            $token = $list->tokens[$list->idx];
            // Skipping whitespaces and comments.
            if ($token->type === Token::TYPE_WHITESPACE || $token->type === Token::TYPE_COMMENT) {
                continue;
            }
            if ($state === 0) {
                $ret->name = strtoupper($token->value);
                if ($token->type !== Token::TYPE_KEYWORD || !($token->flags & Token::FLAG_KEYWORD_DATA_TYPE)) {
                    $parser->error(__('Unrecognized data type.'), $token);
                }
                $state = 1;
            } elseif ($state === 1) {
                if ($token->type === Token::TYPE_OPERATOR && $token->value === '(') {
                    $parameters = ArrayObj::parse($parser, $list);
                    ++$list->idx;
                    $ret->parameters = $ret->name === 'ENUM' || $ret->name === 'SET' ? $parameters->raw : $parameters->values;
                }
                $ret->options = OptionsArray::parse($parser, $list, static::$DATA_TYPE_OPTIONS);
                ++$list->idx;
                break;
            }
        }
        if (empty($ret->name)) {
            return null;
        }
        --$list->idx;
        return $ret;
    }

Usage Example

 /**
  * Parses a parameter of a routine.
  *
  * @param string $param Parameter's definition.
  *
  * @return array
  */
 public static function getReturnType($param)
 {
     $lexer = new Lexer($param);
     // A dummy parser is used for error reporting.
     $type = DataType::parse(new Parser(), $lexer->list);
     if ($type === null) {
         return array('', '', '', '', '');
     }
     $options = array();
     foreach ($type->options->options as $opt) {
         $options[] = is_string($opt) ? $opt : $opt['value'];
     }
     return array('', '', $type->name, implode(',', $type->parameters), implode(' ', $options));
 }
All Usage Examples Of SqlParser\Components\DataType::parse