mirror of
https://github.com/doctrine/orm.git
synced 2026-03-25 23:42:19 +01:00
* Add TokenType class Co-authored-by: Alexander M. Turek <me@derrabus.de> * Deprecated Lexer constants in favour of TokenType * Replace all Lexer::T_ occurrences with TokenType::T_ * Add upgrade note * Fixed import Lexer => TokenType * Fixed deprecation phpdoc * Replaced int value with matching constant of TokenType * Update src/Query/Lexer.php --------- Co-authored-by: Alexander M. Turek <me@derrabus.de>
66 lines
2.0 KiB
PHP
66 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Doctrine\ORM\Query\AST\Functions;
|
|
|
|
use Doctrine\ORM\Query\AST\Node;
|
|
use Doctrine\ORM\Query\AST\SimpleArithmeticExpression;
|
|
use Doctrine\ORM\Query\Parser;
|
|
use Doctrine\ORM\Query\SqlWalker;
|
|
use Doctrine\ORM\Query\TokenType;
|
|
|
|
/**
|
|
* "SUBSTRING" "(" StringPrimary "," SimpleArithmeticExpression "," SimpleArithmeticExpression ")"
|
|
*
|
|
* @link www.doctrine-project.org
|
|
*/
|
|
class SubstringFunction extends FunctionNode
|
|
{
|
|
/** @var Node */
|
|
public $stringPrimary;
|
|
|
|
/** @var SimpleArithmeticExpression */
|
|
public $firstSimpleArithmeticExpression;
|
|
|
|
/** @var SimpleArithmeticExpression|null */
|
|
public $secondSimpleArithmeticExpression = null;
|
|
|
|
/** @inheritDoc */
|
|
public function getSql(SqlWalker $sqlWalker)
|
|
{
|
|
$optionalSecondSimpleArithmeticExpression = null;
|
|
if ($this->secondSimpleArithmeticExpression !== null) {
|
|
$optionalSecondSimpleArithmeticExpression = $sqlWalker->walkSimpleArithmeticExpression($this->secondSimpleArithmeticExpression);
|
|
}
|
|
|
|
return $sqlWalker->getConnection()->getDatabasePlatform()->getSubstringExpression(
|
|
$sqlWalker->walkStringPrimary($this->stringPrimary),
|
|
$sqlWalker->walkSimpleArithmeticExpression($this->firstSimpleArithmeticExpression),
|
|
$optionalSecondSimpleArithmeticExpression
|
|
);
|
|
}
|
|
|
|
/** @inheritDoc */
|
|
public function parse(Parser $parser)
|
|
{
|
|
$parser->match(TokenType::T_IDENTIFIER);
|
|
$parser->match(TokenType::T_OPEN_PARENTHESIS);
|
|
|
|
$this->stringPrimary = $parser->StringPrimary();
|
|
|
|
$parser->match(TokenType::T_COMMA);
|
|
|
|
$this->firstSimpleArithmeticExpression = $parser->SimpleArithmeticExpression();
|
|
|
|
$lexer = $parser->getLexer();
|
|
if ($lexer->isNextToken(TokenType::T_COMMA)) {
|
|
$parser->match(TokenType::T_COMMA);
|
|
|
|
$this->secondSimpleArithmeticExpression = $parser->SimpleArithmeticExpression();
|
|
}
|
|
|
|
$parser->match(TokenType::T_CLOSE_PARENTHESIS);
|
|
}
|
|
}
|