@@ 2384-2402 (lines=19) @@ | ||
2381 | * |
|
2382 | * @return \Doctrine\ORM\Query\AST\ConditionalExpression |
|
2383 | */ |
|
2384 | public function ConditionalExpression() |
|
2385 | { |
|
2386 | $conditionalTerms = []; |
|
2387 | $conditionalTerms[] = $this->ConditionalTerm(); |
|
2388 | ||
2389 | while ($this->lexer->isNextToken(Lexer::T_OR)) { |
|
2390 | $this->match(Lexer::T_OR); |
|
2391 | ||
2392 | $conditionalTerms[] = $this->ConditionalTerm(); |
|
2393 | } |
|
2394 | ||
2395 | // Phase 1 AST optimization: Prevent AST\ConditionalExpression |
|
2396 | // if only one AST\ConditionalTerm is defined |
|
2397 | if (count($conditionalTerms) == 1) { |
|
2398 | return $conditionalTerms[0]; |
|
2399 | } |
|
2400 | ||
2401 | return new AST\ConditionalExpression($conditionalTerms); |
|
2402 | } |
|
2403 | ||
2404 | /** |
|
2405 | * ConditionalTerm ::= ConditionalFactor {"AND" ConditionalFactor}* |
|
@@ 2409-2427 (lines=19) @@ | ||
2406 | * |
|
2407 | * @return \Doctrine\ORM\Query\AST\ConditionalTerm |
|
2408 | */ |
|
2409 | public function ConditionalTerm() |
|
2410 | { |
|
2411 | $conditionalFactors = []; |
|
2412 | $conditionalFactors[] = $this->ConditionalFactor(); |
|
2413 | ||
2414 | while ($this->lexer->isNextToken(Lexer::T_AND)) { |
|
2415 | $this->match(Lexer::T_AND); |
|
2416 | ||
2417 | $conditionalFactors[] = $this->ConditionalFactor(); |
|
2418 | } |
|
2419 | ||
2420 | // Phase 1 AST optimization: Prevent AST\ConditionalTerm |
|
2421 | // if only one AST\ConditionalFactor is defined |
|
2422 | if (count($conditionalFactors) == 1) { |
|
2423 | return $conditionalFactors[0]; |
|
2424 | } |
|
2425 | ||
2426 | return new AST\ConditionalTerm($conditionalFactors); |
|
2427 | } |
|
2428 | ||
2429 | /** |
|
2430 | * ConditionalFactor ::= ["NOT"] ConditionalPrimary |