From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vendor/doctrine/orm/src/Query/Lexer.php | 150 ++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 vendor/doctrine/orm/src/Query/Lexer.php (limited to 'vendor/doctrine/orm/src/Query/Lexer.php') diff --git a/vendor/doctrine/orm/src/Query/Lexer.php b/vendor/doctrine/orm/src/Query/Lexer.php new file mode 100644 index 0000000..c446675 --- /dev/null +++ b/vendor/doctrine/orm/src/Query/Lexer.php @@ -0,0 +1,150 @@ + + */ +class Lexer extends AbstractLexer +{ + /** + * Creates a new query scanner object. + * + * @param string $input A query string. + */ + public function __construct(string $input) + { + $this->setInput($input); + } + + /** + * {@inheritDoc} + */ + protected function getCatchablePatterns(): array + { + return [ + '[a-z_][a-z0-9_]*\:[a-z_][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // aliased name + '[a-z_\\\][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // identifier or qualified name + '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers + "'(?:[^']|'')*'", // quoted strings + '\?[0-9]*|:[a-z_][a-z0-9_]*', // parameters + ]; + } + + /** + * {@inheritDoc} + */ + protected function getNonCatchablePatterns(): array + { + return ['\s+', '--.*', '(.)']; + } + + protected function getType(string &$value): TokenType + { + $type = TokenType::T_NONE; + + switch (true) { + // Recognize numeric values + case is_numeric($value): + if (str_contains($value, '.') || stripos($value, 'e') !== false) { + return TokenType::T_FLOAT; + } + + return TokenType::T_INTEGER; + + // Recognize quoted strings + case $value[0] === "'": + $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2)); + + return TokenType::T_STRING; + + // Recognize identifiers, aliased or qualified names + case ctype_alpha($value[0]) || $value[0] === '_' || $value[0] === '\\': + $name = 'Doctrine\ORM\Query\TokenType::T_' . strtoupper($value); + + if (defined($name)) { + $type = constant($name); + + if ($type->value > 100) { + return $type; + } + } + + if (str_contains($value, '\\')) { + return TokenType::T_FULLY_QUALIFIED_NAME; + } + + return TokenType::T_IDENTIFIER; + + // Recognize input parameters + case $value[0] === '?' || $value[0] === ':': + return TokenType::T_INPUT_PARAMETER; + + // Recognize symbols + case $value === '.': + return TokenType::T_DOT; + + case $value === ',': + return TokenType::T_COMMA; + + case $value === '(': + return TokenType::T_OPEN_PARENTHESIS; + + case $value === ')': + return TokenType::T_CLOSE_PARENTHESIS; + + case $value === '=': + return TokenType::T_EQUALS; + + case $value === '>': + return TokenType::T_GREATER_THAN; + + case $value === '<': + return TokenType::T_LOWER_THAN; + + case $value === '+': + return TokenType::T_PLUS; + + case $value === '-': + return TokenType::T_MINUS; + + case $value === '*': + return TokenType::T_MULTIPLY; + + case $value === '/': + return TokenType::T_DIVIDE; + + case $value === '!': + return TokenType::T_NEGATE; + + case $value === '{': + return TokenType::T_OPEN_CURLY_BRACE; + + case $value === '}': + return TokenType::T_CLOSE_CURLY_BRACE; + + // Default + default: + // Do nothing + } + + return $type; + } +} -- cgit v1.2.3