Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
20.00% covered (danger)
20.00%
1 / 5
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CastAsDateTime
20.00% covered (danger)
20.00%
1 / 5
50.00% covered (danger)
50.00%
1 / 2
4.05
0.00% covered (danger)
0.00%
0 / 1
 parse
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getSql
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Satag\AmicronEntityBundle\DQL;
6
7use Doctrine\ORM\Query\AST\Functions\FunctionNode;
8use Doctrine\ORM\Query\Parser;
9use Doctrine\ORM\Query\SqlWalker;
10use Doctrine\ORM\Query\TokenType;
11
12/**
13 * Firebird DQL function: CAST_AS_DATETIME(expr)
14 *
15 * Generates: CAST(<expr> AS TIMESTAMP)
16 *
17 * Usage in DQL:
18 *   SELECT CAST_AS_DATETIME(e.createdAtRaw) FROM ...
19 */
20final class CastAsDateTime extends FunctionNode
21{
22    private mixed $dateExpression = null;
23
24    public function parse(Parser $parser): void
25    {
26        $parser->match(TokenType::T_IDENTIFIER);
27        $parser->match(TokenType::T_OPEN_PARENTHESIS);
28        $this->dateExpression = $parser->ArithmeticPrimary();
29        $parser->match(TokenType::T_CLOSE_PARENTHESIS);
30    }
31
32    public function getSql(SqlWalker $sqlWalker): string
33    {
34        return 'CAST(' . $sqlWalker->walkArithmeticPrimary($this->dateExpression) . ' AS TIMESTAMP)';
35    }
36}