offset, $this->defaultValue)) { return 'LAG(' . $sqlWalker->walkAggregateExpression($this->aggregateExpression) . ', ' . $sqlWalker->walkArithmeticPrimary($this->offset) . ', ' . $sqlWalker->walkSimpleArithmeticExpression($this->defaultValue) . ')'; } if (isset($this->offset)) { return 'LAG(' . $sqlWalker->walkAggregateExpression($this->aggregateExpression) . ', ' . $sqlWalker->walkArithmeticPrimary($this->offset) . ')'; } return 'LAG(' . $sqlWalker->walkAggregateExpression($this->aggregateExpression) . ')'; } public function parse(Parser $parser): void { $lexer = $parser->getLexer(); $parser->match(Lexer::T_IDENTIFIER); $parser->match(Lexer::T_OPEN_PARENTHESIS); $this->aggregateExpression = $parser->StringExpression(); if (!$lexer->isNextToken(Lexer::T_CLOSE_PARENTHESIS)) { $parser->match(Lexer::T_COMMA); $this->offset = $parser->ArithmeticPrimary(); } if (!$lexer->isNextToken(Lexer::T_CLOSE_PARENTHESIS)) { $parser->match(Lexer::T_COMMA); $this->defaultValue = $parser->SimpleArithmeticExpression(); } $parser->match(Lexer::T_CLOSE_PARENTHESIS); } }