/** * Adds a new WHERE or HAVING restriction depends on the given parameters. * * @param mixed $restriction The restriction to add. * @param string $condition The condition. * Can be FilterUtility::CONDITION_OR or FilterUtility::CONDITION_AND. * @param bool $isComputed Specifies whether the restriction should be added to the HAVING part of a query. */ public function addRestriction($restriction, $condition, $isComputed = false) { $restriction = $this->qbTools->replaceAliasesWithFields($restriction); if ($condition === FilterUtility::CONDITION_OR) { if ($isComputed) { $this->qb->orHaving($restriction); } else { $this->qb->orWhere($restriction); } } else { if ($isComputed) { $this->qb->andHaving($restriction); } else { $this->qb->andWhere($restriction); } } }
/** * @param string $groupByPart * * @return array */ protected function getSelectFieldFromGroupByPart($groupByPart) { $expressions = []; if (strpos($groupByPart, ',') !== false) { $groupByParts = explode(',', $groupByPart); foreach ($groupByParts as $part) { $expressions = array_merge($expressions, $this->getSelectFieldFromGroupByPart($part)); } } else { $groupByPart = trim($groupByPart); $groupByPart = $this->qbTools->replaceAliasesWithFields($groupByPart); $expressions[] = $groupByPart; } return $expressions; }
/** * @dataProvider aliasConditionDataProvider * @param string $condition * @param string $expected */ public function testReplaceAliasesWithFields($condition, $expected) { $selects = array($this->getSelectMock(array('e.data as eData')), $this->getSelectMock(array('someTable.field aS alias1')), $this->getSelectMock(array('someTable.field2 AS alias2'))); $tools = new QueryBuilderTools($selects); $this->assertEquals($expected, $tools->replaceAliasesWithFields($condition)); }