From c584ea2c7cf7f8605e4c12b48d5455b39789afdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Sun, 4 Jan 2015 21:40:51 +0100 Subject: [PATCH] Add unaccent function map the extension unaccent from postgresql --- DependencyInjection/ChillMainExtension.php | 11 +++++ Doctrine/DQL/Unaccent.php | 53 ++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 Doctrine/DQL/Unaccent.php diff --git a/DependencyInjection/ChillMainExtension.php b/DependencyInjection/ChillMainExtension.php index 166a5cb47..2ee498070 100644 --- a/DependencyInjection/ChillMainExtension.php +++ b/DependencyInjection/ChillMainExtension.php @@ -60,5 +60,16 @@ class ChillMainExtension extends Extension implements PrependExtensionInterface 'resources' => array('ChillMainBundle:Form:fields.html.twig')) ); $container->prependExtensionConfig('twig', $twigConfig); + + //add DQL function to ORM (default entity_manager) + $container->prependExtensionConfig('doctrine', array( + 'orm' => array( + 'dql' => array( + 'string_functions' => array( + 'unaccent' => 'Chill\MainBundle\Doctrine\DQL\Unaccent' + ) + ) + ) + )); } } diff --git a/Doctrine/DQL/Unaccent.php b/Doctrine/DQL/Unaccent.php new file mode 100644 index 000000000..251c722a1 --- /dev/null +++ b/Doctrine/DQL/Unaccent.php @@ -0,0 +1,53 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\MainBundle\Doctrine\DQL; + +use Doctrine\ORM\Query\AST\Functions\FunctionNode; +use Doctrine\ORM\Query\Lexer; + +/** + * Unaccent string using postgresql extension unaccent : + * http://www.postgresql.org/docs/current/static/unaccent.html + * + * Usage : StringFunction UNACCENT(string) + * + * @author Julien Fastré + */ +class Unaccent extends FunctionNode +{ + private $string; + + public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) + { + return 'UNACCENT(' . $this->string->dispatch($sqlWalker) .")"; + } + + public function parse(\Doctrine\ORM\Query\Parser $parser) + { + $parser->match(Lexer::T_IDENTIFIER); + $parser->match(Lexer::T_OPEN_PARENTHESIS); + + $this->string = $parser->StringPrimary(); + + $parser->match(Lexer::T_CLOSE_PARENTHESIS); + } + +}