Файл: framework/db/schema/mysql/CMysqlCommandBuilder.php
Строк: 61
<?php
/**
* CMysqlCommandBuilder class file.
*
* @author Carsten Brandt <mail@cebe.cc>
* @link http://www.yiiframework.com/
* @copyright 2008-2013 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* CMysqlCommandBuilder provides basic methods to create query commands for tables.
*
* @author Carsten Brandt <mail@cebe.cc>
* @package system.db.schema.mysql
* @since 1.1.13
*/
class CMysqlCommandBuilder extends CDbCommandBuilder
{
/**
* Alters the SQL to apply JOIN clause.
* This method handles the mysql specific syntax where JOIN has to come before SET in UPDATE statement
* and for DELETE where JOIN has to be after FROM part.
* @param string $sql the SQL statement to be altered
* @param string $join the JOIN clause (starting with join type, such as INNER JOIN)
* @return string the altered SQL statement
*/
public function applyJoin($sql,$join)
{
if($join=='')
return $sql;
if(strpos($sql,'UPDATE')===0 && ($pos=strpos($sql,'SET'))!==false)
return substr($sql,0,$pos).$join.' '.substr($sql,$pos);
elseif(strpos($sql,'DELETE FROM ')===0)
{
$tableName=substr($sql,12);
return "DELETE {$tableName} FROM {$tableName} ".$join;
}
else
return $sql.' '.$join;
}
/**
* Alters the SQL to apply LIMIT and OFFSET.
* @param string $sql SQL query string without LIMIT and OFFSET.
* @param integer $limit maximum number of rows, -1 to ignore limit.
* @param integer $offset row offset, -1 to ignore offset.
* @return string SQL with LIMIT and OFFSET
*/
public function applyLimit($sql,$limit,$offset)
{
// Ugly, but this is how MySQL recommends doing it: https://dev.mysql.com/doc/refman/5.0/en/select.html
if($limit<=0 && $offset>0)
$limit=PHP_INT_MAX;
return parent::applyLimit($sql,$limit,$offset);
}
}