diff --git a/src/Builder/Traits/GroupByTrait.php b/src/Builder/Traits/GroupByTrait.php index 92e1ff2..8ca2fe7 100644 --- a/src/Builder/Traits/GroupByTrait.php +++ b/src/Builder/Traits/GroupByTrait.php @@ -11,28 +11,7 @@ public function groupBy($fields) /** * @var $this IStatement */ - - $groupClause = new GroupByClause(); - if(func_num_args() > 1) - { - foreach(func_get_args() as $field) - { - $groupClause->addField($field); - } - } - else if(is_array($fields)) - { - foreach($fields as $field) - { - $groupClause->addField($field); - } - } - else - { - $groupClause->addField($fields); - } - - $this->addClause($groupClause); + $this->addClause(GroupByClause::create(...func_get_args())); return $this; } } diff --git a/src/Clause/GroupByClause.php b/src/Clause/GroupByClause.php index 0939f5e..d6a8db4 100644 --- a/src/Clause/GroupByClause.php +++ b/src/Clause/GroupByClause.php @@ -10,4 +10,28 @@ public function getAction() { return 'GROUP BY'; } + + public static function create($fields) + { + $groupClause = new static(); + if(func_num_args() > 1) + { + foreach(func_get_args() as $field) + { + $groupClause->addField($field); + } + } + else if(is_array($fields)) + { + foreach($fields as $field) + { + $groupClause->addField($field); + } + } + else + { + $groupClause->addField($fields); + } + return $groupClause; + } } diff --git a/src/Clause/SelectClause.php b/src/Clause/SelectClause.php index ea2736d..73b7df3 100644 --- a/src/Clause/SelectClause.php +++ b/src/Clause/SelectClause.php @@ -12,6 +12,16 @@ class SelectClause implements IClause protected $_expressions = []; protected $_distinct = false; + public static function create(...$fields) + { + $select = new static(); + foreach($fields as $field) + { + $select->addField($field); + } + return $select; + } + public function setDistinct($distinct = true) { $this->_distinct = $distinct; diff --git a/tests/Clause/SelectClauseTest.php b/tests/Clause/SelectClauseTest.php index 45f0b2c..b2161ff 100644 --- a/tests/Clause/SelectClauseTest.php +++ b/tests/Clause/SelectClauseTest.php @@ -96,4 +96,13 @@ public function testGettersAndSetters() $this->setExpectedException("InvalidArgumentException"); $clause->setExpressions([$field, $now, 'abc']); } + + public function testStatic() + { + $clause = SelectClause::create('first'); + $clause->setDistinct(true); + $this->assertEquals('SELECT DISTINCT first', QueryAssembler::stringify($clause)); + + $this->assertEquals('SELECT *', QueryAssembler::stringify(SelectClause::create())); + } }