SqlParser\Tools\TestGenerator::generate PHP Method

generate() public static method

Generates a test's data.
public static generate ( string $query, string $type = 'parser' ) : array
$query string The query to be analyzed.
$type string Test's type (may be `lexer` or `parser`).
return array
    public static function generate($query, $type = 'parser')
    {
        /**
         * Lexer used for tokenizing the query.
         *
         * @var Lexer $lexer
         */
        $lexer = new Lexer($query);
        /**
         * Parsed used for analyzing the query.
         * A new instance of parser is generated only if the test requires.
         *
         * @var Parser $parser
         */
        $parser = $type === 'parser' ? new Parser($lexer->list) : null;
        /**
         * Lexer's errors.
         *
         * @var array $lexerErrors
         */
        $lexerErrors = array();
        /**
         * Parser's errors.
         *
         * @var array $parserErrors
         */
        $parserErrors = array();
        // Both the lexer and the parser construct exception for errors.
        // Usually, exceptions contain a full stack trace and other details that
        // are not required.
        // The code below extracts only the relevant information.
        // Extracting lexer's errors.
        if (!empty($lexer->errors)) {
            foreach ($lexer->errors as $err) {
                $lexerErrors[] = array($err->getMessage(), $err->ch, $err->pos, $err->getCode());
            }
            $lexer->errors = array();
        }
        // Extracting parser's errors.
        if (!empty($parser->errors)) {
            foreach ($parser->errors as $err) {
                $parserErrors[] = array($err->getMessage(), $err->token, $err->getCode());
            }
            $parser->errors = array();
        }
        return array('query' => $query, 'lexer' => $lexer, 'parser' => $parser, 'errors' => array('lexer' => $lexerErrors, 'parser' => $parserErrors));
    }