44 lines
1.2 KiB
PHP
44 lines
1.2 KiB
PHP
<?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;
|
|
}
|
|
}
|