. */ Doctrine::autoload('Doctrine_Expression_Driver'); /** * Doctrine_Expression_Mysql * * @package Doctrine * @subpackage Expression * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.org * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_Expression_Mysql extends Doctrine_Expression_Driver { /** * returns the regular expression operator * * @return string */ public function regexp() { return 'RLIKE'; } /** * return string to call a function to get random value inside an SQL statement * * @return string to generate float between 0 and 1 */ public function random() { return 'RAND()'; } /** * build a pattern matching string * * EXPERIMENTAL * * WARNING: this function is experimental and may change signature at * any time until labelled as non-experimental * * @access public * * @param array $pattern even keys are strings, odd are patterns (% and _) * @param string $operator optional pattern operator (LIKE, ILIKE and maybe others in the future) * @param string $field optional field name that is being matched against * (might be required when emulating ILIKE) * * @return string SQL pattern */ public function matchPattern($pattern, $operator = null, $field = null) { $match = ''; if ( ! is_null($operator)) { $field = is_null($field) ? '' : $field.' '; $operator = strtoupper($operator); switch ($operator) { // case insensitive case 'ILIKE': $match = $field.'LIKE '; break; // case sensitive case 'LIKE': $match = $field.'LIKE BINARY '; break; default: throw new Doctrine_Expression_Mysql_Exception('not a supported operator type:'. $operator); } } $match.= "'"; foreach ($pattern as $key => $value) { if ($key % 2) { $match .= $value; } else { $match .= $this->conn->escapePattern($this->conn->escape($value)); } } $match.= "'"; $match.= $this->patternEscapeString(); return $match; } /** * Returns global unique identifier * * @return string to get global unique identifier */ public function guid() { return 'UUID()'; } /** * Returns a series of strings concatinated * * concat() accepts an arbitrary number of parameters. Each parameter * must contain an expression or an array with expressions. * * @param string|array(string) strings that will be concatinated. */ public function concat() { $args = func_get_args(); return 'CONCAT(' . join(', ', (array) $args) . ')'; } }