[Memcached_DataObject] Check if it is possible to sort efficiently
This commit is contained in:
parent
25f67a1ce9
commit
ad6955e7ff
|
@ -87,7 +87,7 @@ class Memcached_DataObject extends Safe_DataObject
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($skipNulls) {
|
if ($skipNulls) {
|
||||||
foreach ($keyVals as $key=>$val) {
|
foreach ($keyVals as $key => $val) {
|
||||||
if (is_null($val)) {
|
if (is_null($val)) {
|
||||||
unset($keyVals[$key]);
|
unset($keyVals[$key]);
|
||||||
}
|
}
|
||||||
|
@ -97,11 +97,32 @@ class Memcached_DataObject extends Safe_DataObject
|
||||||
$obj->whereAddIn($keyCol, $keyVals, $colType);
|
$obj->whereAddIn($keyCol, $keyVals, $colType);
|
||||||
|
|
||||||
// Since we're inputting straight to a query: format and escape
|
// Since we're inputting straight to a query: format and escape
|
||||||
foreach ($keyVals as $key=>$val) {
|
foreach ($keyVals as $key => $val) {
|
||||||
settype($val, $colType);
|
settype($val, $colType);
|
||||||
$keyVals[$key] = $obj->escape($val);
|
$keyVals[$key] = $obj->escape($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if values are ordered, makes sorting in SQL easier
|
||||||
|
$prev_val = reset($keyVals);
|
||||||
|
$order_asc = $order_desc = true;
|
||||||
|
foreach ($keyVals as $val) {
|
||||||
|
if ($val < $prev_val) {
|
||||||
|
$order_asc = false;
|
||||||
|
}
|
||||||
|
if ($val > $prev_val) {
|
||||||
|
$order_desc = false;
|
||||||
|
}
|
||||||
|
if ($order_asc === false && $order_desc === false) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$prev_val = $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($order_asc) {
|
||||||
|
$obj->orderBy($keyCol);
|
||||||
|
} elseif ($order_desc) {
|
||||||
|
$obj->orderBy("{$keyCol} DESC");
|
||||||
|
} else {
|
||||||
switch (common_config('db', 'type')) {
|
switch (common_config('db', 'type')) {
|
||||||
case 'pgsql':
|
case 'pgsql':
|
||||||
// "position" will make sure we keep the desired order
|
// "position" will make sure we keep the desired order
|
||||||
|
@ -122,6 +143,7 @@ class Memcached_DataObject extends Safe_DataObject
|
||||||
default:
|
default:
|
||||||
throw new ServerException('Unknown DB type selected.');
|
throw new ServerException('Unknown DB type selected.');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$obj->find();
|
$obj->find();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user