public function testMergeHaving() { $this->queryBuilder->having('score', 5, SelectQueryBuilder::LESS_THAN); $qb = new SelectQueryBuilder(); $qb->openHaving(SelectQueryBuilder::LOGICAL_OR)->having('price', 9, SelectQueryBuilder::NOT_EQUALS, null)->closeHaving(); $this->queryBuilder->mergeHaving($qb); $expected = array(array('column' => 'score', 'value' => 5, 'operator' => '<', 'connector' => 'AND'), array('bracket' => '(', 'connector' => 'OR'), array('column' => 'price', 'value' => 9, 'operator' => '!=', 'connector' => 'AND'), array('bracket' => ')', 'connector' => NULL)); $this->assertEquals($expected, $this->queryBuilder->getHavingParts()); }
/** * Merges the given QueryBuilder's HAVINGs into this QueryBuilder. * * @param \SQL\SelectQueryBuilder $QueryBuilder to merge * * @return \SQL\SelectQueryBuilder the current QueryBuilder */ public function mergeHaving(SelectQueryBuilder $QueryBuilder) { foreach ($QueryBuilder->getHavingParts() as $currentHaving) { // Handle open/close brackets differently than other criteria. if (array_key_exists('bracket', $currentHaving)) { if (strcmp($currentHaving['bracket'], self::BRACKET_OPEN) == 0) { $this->openHaving($currentHaving['connector']); } else { $this->closeHaving(); } } else { $this->having($currentHaving['column'], $currentHaving['value'], $currentHaving['operator'], $currentHaving['connector']); } } return $this; }