<?php
namespace App\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
/**
* @author Cosmin-Romeo TANASE <[email protected]>
*/
class SumIfWithinLastXHours extends FunctionNode
{
private $expr = [];
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticFactor();
$parser->match(Lexer::T_COMMA);
$this->intervalExpression = $parser->ArithmeticFactor();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return sprintf(
'SUM(IF((%s>DATE_SUB(NOW(), INTERVAL %s HOUR)), 1, 0))',
$sqlWalker->walkArithmeticTerm($this->date),
$sqlWalker->walkArithmeticTerm($this->intervalExpression)
);
}
}