EXTRACT(field FROM interval) */ class Extract extends FunctionNode { private string $field; private $value; //private PathExpression $value; //private FunctionNode $value; //private DateDiffFunction $value; public function getSql(SqlWalker $sqlWalker) { return sprintf( 'EXTRACT(%s FROM %s)', $this->field, $this->value->dispatch($sqlWalker) ); } public function parse(Parser $parser) { $parser->match(Lexer::T_IDENTIFIER); $parser->match(Lexer::T_OPEN_PARENTHESIS); $parser->match(Lexer::T_IDENTIFIER); $this->field = $parser->getLexer()->token['value']; $parser->match(Lexer::T_FROM); //$this->value = $parser->ScalarExpression(); $this->value = $parser->ArithmeticPrimary(); $parser->match(Lexer::T_CLOSE_PARENTHESIS); } }