summaryrefslogtreecommitdiff
path: root/vendor/doctrine/orm/src/Query/Lexer.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/doctrine/orm/src/Query/Lexer.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/doctrine/orm/src/Query/Lexer.php')
-rw-r--r--vendor/doctrine/orm/src/Query/Lexer.php150
1 files changed, 150 insertions, 0 deletions
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 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Query;
6
7use Doctrine\Common\Lexer\AbstractLexer;
8
9use function constant;
10use function ctype_alpha;
11use function defined;
12use function is_numeric;
13use function str_contains;
14use function str_replace;
15use function stripos;
16use function strlen;
17use function strtoupper;
18use function substr;
19
20/**
21 * Scans a DQL query for tokens.
22 *
23 * @extends AbstractLexer<TokenType, string>
24 */
25class Lexer extends AbstractLexer
26{
27 /**
28 * Creates a new query scanner object.
29 *
30 * @param string $input A query string.
31 */
32 public function __construct(string $input)
33 {
34 $this->setInput($input);
35 }
36
37 /**
38 * {@inheritDoc}
39 */
40 protected function getCatchablePatterns(): array
41 {
42 return [
43 '[a-z_][a-z0-9_]*\:[a-z_][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // aliased name
44 '[a-z_\\\][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // identifier or qualified name
45 '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers
46 "'(?:[^']|'')*'", // quoted strings
47 '\?[0-9]*|:[a-z_][a-z0-9_]*', // parameters
48 ];
49 }
50
51 /**
52 * {@inheritDoc}
53 */
54 protected function getNonCatchablePatterns(): array
55 {
56 return ['\s+', '--.*', '(.)'];
57 }
58
59 protected function getType(string &$value): TokenType
60 {
61 $type = TokenType::T_NONE;
62
63 switch (true) {
64 // Recognize numeric values
65 case is_numeric($value):
66 if (str_contains($value, '.') || stripos($value, 'e') !== false) {
67 return TokenType::T_FLOAT;
68 }
69
70 return TokenType::T_INTEGER;
71
72 // Recognize quoted strings
73 case $value[0] === "'":
74 $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2));
75
76 return TokenType::T_STRING;
77
78 // Recognize identifiers, aliased or qualified names
79 case ctype_alpha($value[0]) || $value[0] === '_' || $value[0] === '\\':
80 $name = 'Doctrine\ORM\Query\TokenType::T_' . strtoupper($value);
81
82 if (defined($name)) {
83 $type = constant($name);
84
85 if ($type->value > 100) {
86 return $type;
87 }
88 }
89
90 if (str_contains($value, '\\')) {
91 return TokenType::T_FULLY_QUALIFIED_NAME;
92 }
93
94 return TokenType::T_IDENTIFIER;
95
96 // Recognize input parameters
97 case $value[0] === '?' || $value[0] === ':':
98 return TokenType::T_INPUT_PARAMETER;
99
100 // Recognize symbols
101 case $value === '.':
102 return TokenType::T_DOT;
103
104 case $value === ',':
105 return TokenType::T_COMMA;
106
107 case $value === '(':
108 return TokenType::T_OPEN_PARENTHESIS;
109
110 case $value === ')':
111 return TokenType::T_CLOSE_PARENTHESIS;
112
113 case $value === '=':
114 return TokenType::T_EQUALS;
115
116 case $value === '>':
117 return TokenType::T_GREATER_THAN;
118
119 case $value === '<':
120 return TokenType::T_LOWER_THAN;
121
122 case $value === '+':
123 return TokenType::T_PLUS;
124
125 case $value === '-':
126 return TokenType::T_MINUS;
127
128 case $value === '*':
129 return TokenType::T_MULTIPLY;
130
131 case $value === '/':
132 return TokenType::T_DIVIDE;
133
134 case $value === '!':
135 return TokenType::T_NEGATE;
136
137 case $value === '{':
138 return TokenType::T_OPEN_CURLY_BRACE;
139
140 case $value === '}':
141 return TokenType::T_CLOSE_CURLY_BRACE;
142
143 // Default
144 default:
145 // Do nothing
146 }
147
148 return $type;
149 }
150}