. */ /** * Atom = string | integer | float | input_parameter * * @package Doctrine * @subpackage Query * @author Guilherme Blanco * @author Janne Vanhala * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link http://www.phpdoctrine.org * @since 1.0 * @version $Revision$ */ class Doctrine_Query_Production_Atom extends Doctrine_Query_Production { protected $_type; protected $_value; public function syntax($paramHolder) { // Atom = string | integer | float | input_parameter switch ($this->_parser->lookahead['type']) { case Doctrine_Query_Token::T_STRING: $this->_parser->match(Doctrine_Query_Token::T_STRING); $this->_type = 'string'; break; case Doctrine_Query_Token::T_INTEGER: $this->_parser->match(Doctrine_Query_Token::T_INTEGER); $this->_type = 'integer'; break; case Doctrine_Query_Token::T_FLOAT: $this->_parser->match(Doctrine_Query_Token::T_FLOAT); $this->_type = 'float'; break; case Doctrine_Query_Token::T_INPUT_PARAMETER: $this->_parser->match(Doctrine_Query_Token::T_INPUT_PARAMETER); $this->_type = 'param'; break; default: $this->_parser->syntaxError('string, number or parameter (? or :)'); break; } $this->_value = $this->_parser->token['value']; } public function buildSql() { $conn = $this->_em->getConnection(); switch ($this->_type) { case 'param': return $this->_value; case 'string': //FIXME: Remove the quotes from _value! Should the scanner do that or where? // 'mystring' => mystring. Otherwise 'mystring' is the content (with quotes)! // Eg: select ... from ... where f.foo = 'bar' // => $conn->quote('bar',...), CURRENTLY: $conn->quote("'bar'",...) // This fix looks a bit ugly or ... ? Should this happen earlier? Syntax? // Scanner? if (strpos($this->_value, "'") === 0) { $this->_value = substr($this->_value, 1, strlen($this->_value) - 2); } return $conn->quote($this->_value, $this->_type); default: return $conn->quote($this->_value, $this->_type); } } /** * Visitor support. * * @param object $visitor */ public function accept($visitor) { $visitor->visitAtom($this); } /* Getters */ public function getType() { return $this->_type; } public function getValue() { return $this->_value; } }