构建SQL语句
null Driver_Database_Driver_Mongo::compile( )
public function compile($builder, $type = 'selete')
{
$where = array();
if (! empty($builder['where']))
{
$where = $this->_compile_conditions($builder['where'], $builder['parameters']);
}
if ($type=='insert')
{
$sql = array
(
'type' => 'insert',
'table' => $builder['table'],
'options' => array
(
'safe' => true,
),
);
if (count($builder['values'])>1)
{
# 批量插入
$sql['type'] = 'batchinsert';
foreach ($builder['columns'] as $field)
{
foreach ($builder['values'] as $k=>$v)
{
$data[$k][$field] = $builder['values'][$k][$field];
}
}
$sql['data'] = $data;
}
else
{
# 单条插入
foreach ($builder['columns'] as $field)
{
$data[$field] = $builder['values'][0][$field];
}
$sql['data'] = $data;
}
}
elseif ($type == 'update')
{
$sql = array
(
'type' => 'update',
'table' => $builder['table'],
'where' => $where,
'options' => array
(
'multiple' => true,
'safe' => true,
),
);
foreach ($builder['set'] as $item)
{
if ($item[2]=='+')
{
$op = '$inc';
}
elseif ($item[2]=='-')
{
$item[1] = - $item[1];
$op = '$inc';
}
else
{
$op = '$set';
}
$sql['data'][$op][$item[0]] = $item[1];
}
}
elseif ($type == 'delete')
{
$sql = array
(
'type' => 'remove',
'table' => $builder['table'],
'where' => $where,
);
}
else
{
$sql = array
(
'type' => $type,
'table' => $builder['from'][0],
'where' => $where,
'limit' => $builder['limit'],
'skip' => $builder['offset'],
);
if ($builder['distinct'])
{
$sql['distinct'] = $builder['distinct'];
}
// 查询
if ($builder['select'])
{
foreach ($builder['select'] as $item)
{
if (is_string($item))
{
$item = trim($item);
if (preg_match('#^(.*) as (.*)$#i', $item , $m))
{
$s[$m[1]] = $m[2];
$sql['select_as'][$m[1]] = $m[2];
}
else
{
$s[$item] = 1;
}
}
elseif (is_object($item))
{
if ($item instanceof Database_Expression)
{
$v = $item->value();
if ($v==='COUNT(1) AS `total_row_count`')
{
$sql['total_count'] = true;
}
else
{
$s[$v] = 1;
}
}
elseif (method_exists($item, '__toString'))
{
$s[(string)$item] = 1;
}
}
}
$sql['select'] = $s;
}
// 排序
if ($builder['order_by'])
{
foreach ($builder['order_by'] as $item)
{
$sql['sort'][$item[0]] = $item[1]=='DESC'?-1:1;
}
}
// group by
if ($builder['group_by'])
{
$sql['group_by'] = $builder['group_by'];
}
// 高级查询条件
if ($builder['select_adv'])
{
$sql['select_adv'] = $builder['select_adv'];
// 分组统计
if (!$builder['group_by'])
{
$sql['group_by'] = array('0');
}
}
}
return $sql;
}