Loading config/module.config.php +4 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace UnicaenOracle; use Doctrine\DBAL\Driver\OCI8\Driver as OCI8; use Doctrine\DBAL\Event\Listeners\OracleSessionInit; use UnicaenOracle\ORM\Query\Functions\Chr; use UnicaenOracle\ORM\Query\Functions\CompriseEntre; use UnicaenOracle\ORM\Query\Functions\Convert; use UnicaenOracle\ORM\Query\Functions\Replace; Loading @@ -21,6 +22,9 @@ return [ 'CHR' => Chr::class, 'CONVERT' => Convert::class, 'REPLACE' => Replace::class, // fonctions du package UNICAEN_ORACLE 'compriseEntre' => CompriseEntre::class, ], ], ], Loading src/UnicaenOracle/ORM/Query/Functions/CompriseEntre.php 0 → 100644 +51 −0 Original line number Diff line number Diff line <?php namespace UnicaenOracle\ORM\Query\Functions; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\Lexer; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\SqlWalker; class CompriseEntre extends FunctionNode { public $histoCreation; public $histoDestruction; public $dateObs; public function getSql(SqlWalker $sqlWalker) { $sql = sprintf('UNICAEN_ORACLE.COMPRISE_ENTRE(%s, %s', $this->histoCreation->dispatch($sqlWalker), $this->histoDestruction->dispatch($sqlWalker)); if ($this->dateObs){ $sql .= ','.$this->dateObs->dispatch($sqlWalker); } $sql .= ')'; return $sql; } /** * NB: le format DQL attendu est "compriseEntre" * (et non pas "UNICAEN_ORACLE.COMPRISE_ENTRE"). * * @param Parser $parser */ public function parse(Parser $parser) { $lexer = $parser->getLexer(); $parser->match(Lexer::T_IDENTIFIER); $parser->match(Lexer::T_OPEN_PARENTHESIS); $this->histoCreation = $parser->ArithmeticPrimary(); if(Lexer::T_COMMA === $lexer->lookahead['type']){ $parser->match(Lexer::T_COMMA); $this->histoDestruction = $parser->ArithmeticPrimary(); } if(Lexer::T_COMMA === $lexer->lookahead['type']){ $parser->match(Lexer::T_COMMA); $this->dateObs = $parser->ArithmeticPrimary(); } $parser->match(Lexer::T_CLOSE_PARENTHESIS); } } No newline at end of file Loading
config/module.config.php +4 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace UnicaenOracle; use Doctrine\DBAL\Driver\OCI8\Driver as OCI8; use Doctrine\DBAL\Event\Listeners\OracleSessionInit; use UnicaenOracle\ORM\Query\Functions\Chr; use UnicaenOracle\ORM\Query\Functions\CompriseEntre; use UnicaenOracle\ORM\Query\Functions\Convert; use UnicaenOracle\ORM\Query\Functions\Replace; Loading @@ -21,6 +22,9 @@ return [ 'CHR' => Chr::class, 'CONVERT' => Convert::class, 'REPLACE' => Replace::class, // fonctions du package UNICAEN_ORACLE 'compriseEntre' => CompriseEntre::class, ], ], ], Loading
src/UnicaenOracle/ORM/Query/Functions/CompriseEntre.php 0 → 100644 +51 −0 Original line number Diff line number Diff line <?php namespace UnicaenOracle\ORM\Query\Functions; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\Lexer; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\SqlWalker; class CompriseEntre extends FunctionNode { public $histoCreation; public $histoDestruction; public $dateObs; public function getSql(SqlWalker $sqlWalker) { $sql = sprintf('UNICAEN_ORACLE.COMPRISE_ENTRE(%s, %s', $this->histoCreation->dispatch($sqlWalker), $this->histoDestruction->dispatch($sqlWalker)); if ($this->dateObs){ $sql .= ','.$this->dateObs->dispatch($sqlWalker); } $sql .= ')'; return $sql; } /** * NB: le format DQL attendu est "compriseEntre" * (et non pas "UNICAEN_ORACLE.COMPRISE_ENTRE"). * * @param Parser $parser */ public function parse(Parser $parser) { $lexer = $parser->getLexer(); $parser->match(Lexer::T_IDENTIFIER); $parser->match(Lexer::T_OPEN_PARENTHESIS); $this->histoCreation = $parser->ArithmeticPrimary(); if(Lexer::T_COMMA === $lexer->lookahead['type']){ $parser->match(Lexer::T_COMMA); $this->histoDestruction = $parser->ArithmeticPrimary(); } if(Lexer::T_COMMA === $lexer->lookahead['type']){ $parser->match(Lexer::T_COMMA); $this->dateObs = $parser->ArithmeticPrimary(); } $parser->match(Lexer::T_CLOSE_PARENTHESIS); } } No newline at end of file