protected
function
_compile_conditions(
array
$conditions
,
$parameters
)
{
$last_logic
=
'$and'
;
$tmp_query_list
=
array
();
$query
=
array
();
$tmp_query
= &
$query
;
$condition_num
= 0;
$multikey_mod
= false;
foreach
(
$conditions
as
$group
)
{
foreach
(
$group
as
$logic
=>
$condition
)
{
$logic
=
'$'
.
strtolower
(
$logic
);
if
(
$condition
===
'('
)
{
$tmp_query_list
[] =
array
();
unset(
$tmp_query
);
$tmp_query
=&
$tmp_query_list
[
count
(
$tmp_query_list
)-1];
$last_logic_list
[] =
$last_logic
;
$last_logic
=
'$and'
;
}
elseif
(
$condition
===
')'
)
{
# 关闭一个组
$last_logic
=
array_pop
(
$last_logic_list
);
# 将最后一个移除
$tmp_query2
=
array_pop
(
$tmp_query_list
);
$c
=
count
(
$tmp_query_list
);
unset(
$tmp_query
);
if
(
$c
)
{
$tmp_query
=&
$tmp_query_list
[
$c
-1];
}
else
{
$tmp_query
=&
$query
;
}
Database_Driver_Mongo::_compile_paste_data(
$tmp_query
,
$tmp_query2
,
$last_logic
,
$logic
);
unset(
$tmp_query2
,
$c
);
}
else
{
list (
$column
,
$op
,
$value
) =
$condition
;
$tmp_option
= Database_Driver_Mongo::_compile_set_data(
$op
,
$value
,
$parameters
);
Database_Driver_Mongo::_compile_paste_data(
$tmp_query
,
$tmp_option
,
$last_logic
,
$logic
,
$column
);
$last_logic
=
$logic
;
}
}
}
return
$query
;
}