/** * Builds SQL from filters (WHERE or HAVING parts) * * @param array $filters Array of Ucc\Data\Filter\Filter objects * @param array $fieldMap Array representing filed map * @param boolean $singleTable Marker to indicate single table queries. * @return string */ public static function getFilterSql($filters = array(), $fieldMap = array(), $singleTable = false) { $ret = array('paramiters' => array()); $havingFilters = array(); $whereFilters = array(); $table = ''; // Check if filters is a single filter if (is_a($filters, 'Ucc\\Data\\Filter\\Filter')) { $filters = array($filters); } foreach ($filters as $i => $filter) { // get Criterions $criterions = $filter->getCriterions(); $havingFilter = new Data_Filter(); $whereFilter = new Data_Filter(); foreach ($criterions as $criterion) { if (isset($fieldMap[$criterion->key()])) { // Get table name from field map $table = $fieldMap[$criterion->key()]; // Check for wildecard } elseif (isset($fieldMap['*'])) { $table = $fieldMap['*']; } if (!$singleTable || $singleTable === $table) { // Allow pseudo tables 'HAVING' if ($table == 'having') { $havingFilter->addCriterion($criterion); } else { $whereFilter->addCriterion($criterion); } } } $havingCriterions = $havingFilter->getCriterions(); if (!empty($havingCriterions)) { $havingFilters[$i] = $havingFilter; } $whereFilters[$i] = $whereFilter; } $where = Filter::filtersToSqlClause($whereFilters, $fieldMap); $having = Filter::filtersToSqlClause($havingFilters, $fieldMap); $whereStatemet = $where->getStatement(); $havingStatement = $having->getStatement(); if (!empty($whereStatemet) && $whereStatemet != '()') { $ret['where'] = 'WHERE ' . $whereStatemet; $ret['paramiters'] = array_merge($ret['paramiters'], $where->getParameters()); } if (!empty($havingStatement)) { $ret['having'] = 'HAVING ' . $havingStatement; $ret['paramiters'] = array_merge($ret['paramiters'], $having->getParameters()); } return $ret; }
public function testGetCriterions() { $filter = new Filter(); $this->assertTrue(is_array($filter->getCriterions())); }