private static function _evaluateExprForRowset($rowset, Kwf_Model_Select_Expr_Interface $expr) { if ($expr instanceof Kwf_Model_Select_Expr_Count) { if ($expr->getField() != '*') { $f = $expr->getField(); $values = array(); foreach ($rowset as $r) { if (!is_null($r->{$f})) { $values[] = $r->{$f}; } } if ($expr->getDistinct()) { $values = array_unique($values); } return count($values); } else { return $rowset->count(); } } else { if ($expr instanceof Kwf_Model_Select_Expr_Sum) { $f = $expr->getField(); $ret = 0; foreach ($rowset as $r) { $ret += $r->{$f}; } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_Max) { $f = $expr->getField(); $ret = $rowset->current()->{$f}; foreach ($rowset as $r) { $ret = max($ret, $r->{$f}); } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_Min) { $f = $expr->getField(); $ret = $rowset->current()->{$f}; foreach ($rowset as $r) { $ret = min($ret, $r->{$f}); } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_GroupConcat) { $f = $expr->getField(); $ret = array(); foreach ($rowset as $r) { $ret[] = $r->{$f}; } return implode($expr->getSeparator(), $ret); } else { if ($expr instanceof Kwf_Model_Select_Expr_Field) { if (!count($rowset)) { return null; } $f = $expr->getField(); return $rowset->current()->{$f}; } else { throw new Kwf_Exception_NotYetImplemented("support for " . get_class($expr) . " is not yet implemented"); } } } } } } }
private static function _evaluateExprForRowset($rowset, Kwf_Model_Select_Expr_Interface $expr) { if ($expr instanceof Kwf_Model_Select_Expr_Count) { if ($expr->getField() != '*') { $f = $expr->getField(); $values = array(); foreach ($rowset as $r) { if (!is_null($r->{$f})) { $values[] = $r->{$f}; } } if ($expr->getDistinct()) { $values = array_unique($values); } return count($values); } else { return $rowset->count(); } } else { if ($expr instanceof Kwf_Model_Select_Expr_Sum) { $f = $expr->getField(); $ret = 0; foreach ($rowset as $r) { $ret += $r->{$f}; } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_Max) { $f = $expr->getField(); if (!count($rowset)) { return null; } $ret = $rowset->current()->{$f}; foreach ($rowset as $r) { $ret = max($ret, $r->{$f}); } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_Min) { $f = $expr->getField(); if (!count($rowset)) { return null; } $ret = $rowset->current()->{$f}; foreach ($rowset as $r) { $ret = min($ret, $r->{$f}); } return $ret; } else { if ($expr instanceof Kwf_Model_Select_Expr_GroupConcat) { $f = $expr->getField(); $orderField = $expr->getOrderField(); $ret = array(); if ($orderField) { $orderFieldValue = $orderField['field']; $orderFieldDirection = $orderField['direction'] == 'DESC' ? SORT_DESC : SORT_ASC; $rowData = array(); foreach ($rowset as $r) { $rowData[] = array($f => $r->{$f}, $orderFieldValue => $r->{$orderFieldValue}); } $orderFieldValues = array(); foreach ($rowData as $key => $data) { $orderFieldValues[$key] = $data[$orderFieldValue]; } array_multisort($orderFieldValues, $orderFieldDirection, $rowData); foreach ($rowData as $r) { $ret[] = $r[$f]; } } else { foreach ($rowset as $r) { $ret[] = $r->{$f}; } } return implode($expr->getSeparator(), $ret); } else { if ($expr instanceof Kwf_Model_Select_Expr_Field) { if (!count($rowset)) { return null; } $f = $expr->getField(); return $rowset->current()->{$f}; } else { throw new Kwf_Exception_NotYetImplemented("support for " . get_class($expr) . " is not yet implemented"); } } } } } } }