initial commit
[namibia] / module / Utility / src / Utility / DoctrineFunction / UnixTimestamp.php
1 <?php
2
3 namespace UVd\DoctrineFunction;
4
5 use Doctrine\ORM\Query\Lexer;
6 use Doctrine\ORM\Query\AST\Functions\FunctionNode;
7
8 /**
9  * UnixTimestamp
10  * 
11  * Allows Doctrine 2.0 Query Language to execute a MySQL UNIX_FORMAT function
12  * You must boostrap this function in your ORM as a DQLFunction.
13  * 
14  * 
15  * UNIX_TIMESTAMP(TIMESTAMP) : @link http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp
16  * 
17  * 
18  * PLEASE REMEMBER TO CHECK YOUR NAMESPACE
19  * 
20  * @link labs.ultravioletdesign.co.uk
21  * @author Rob Squires <rob@ultravioletdesign.co.uk>
22  * 
23  * 
24  */
25 class UnixTimestamp extends FunctionNode {
26
27     /*
28      * holds the timestamp of the UNIX_TIMESTAMP DQL statement
29      * @var mixed
30      */
31     protected $dateExpression;
32     
33
34
35     /**
36      * getSql - allows ORM  to inject a UNIX_TIMESTAMP() statement into an SQL string being constructed
37      * @param \Doctrine\ORM\Query\SqlWalker $sqlWalker
38      * @return void 
39      */
40     public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
41     {
42         return 'UNIX_TIMESTAMP(' .
43                 $sqlWalker->walkArithmeticExpression($this->dateExpression) .
44                 ')';
45
46     }
47
48     /**
49      * parse - allows DQL to breakdown the DQL string into a processable structure
50      * @param \Doctrine\ORM\Query\Parser $parser 
51      */
52     public function parse(\Doctrine\ORM\Query\Parser $parser)
53     {
54
55         $parser->match(Lexer::T_IDENTIFIER);
56         $parser->match(Lexer::T_OPEN_PARENTHESIS);
57         
58         $this->dateExpression = $parser->ArithmeticExpression();
59
60         $parser->match(Lexer::T_CLOSE_PARENTHESIS);
61
62
63     }
64
65 }
66
67