/** * @covers ::whereFunc */ public function testWhereFunc() { $b = new WhereBuilder(); $b->root('Author'); $b->whereFunc(DB::avg('age'), '>', 30); $components = $b->build(); $expr = new FuncExpr('age', 'AVG'); $expr->setValue(['age']); $where = [['type' => 'Basic', 'table' => '_', 'cols' => [$expr], 'op' => '>', 'val' => 30, 'logic' => 'AND', 'not' => false]]; $this->assertEquals($where, $components['where']); }
protected function _processFunctionExpression(FuncExpr $expr) { list($table, $cols) = $this->_processExtendedAttribute($expr->getAttribute()); if ($expr->getAttribute()) { $expr->setValue($cols); } return array($table, array($expr)); }
/** * @covers Compiler::column */ public function testWhereBasicWithAFuncExpr() { $c = new BaseCompiler(); $c->useTableAlias = true; $expr = new FuncExpr('articles/author/age', 'AVG'); $expr->setValue(['age']); $components['where'][] = ['type' => 'Basic', 'table' => 'articles.author', 'cols' => [$expr], 'op' => '>', 'val' => 25, 'logic' => 'AND', 'not' => false]; $expr = new FuncExpr('readers/age', 'AVG'); $expr->setValue(['age']); $components['where'][] = ['type' => 'Attribute', 'lTable' => 'author', 'lCols' => ['age'], 'op' => '<', 'rTable' => 'readers', 'rCols' => [$expr], 'logic' => 'AND']; $expected = 'WHERE AVG(`articles.author`.`age`) > ? AND `author`.`age` < AVG(`readers`.`age`)'; $this->assertEquals($expected, $c->compileWhere($components)); }