/** * @param $arguments * @return SimpleExpression * @throws \Yaoi\Sql\Exception */ public static function createFromFuncArguments($arguments) { if (empty($arguments)) { return new static(); } if ($arguments[0] instanceof Expression) { return $arguments[0]; } if ($arguments[0] instanceof Symbol) { return new self('?', $arguments[0]); } if ($arguments[0] instanceof Database\Definition\Column) { return new self('?', $arguments[0]); } if ($arguments[0] instanceof Database\Definition\Table) { return new self('?', $arguments[0]); } if ($arguments[0] instanceof Closure) { $expression = $arguments[0](); if (!$expression instanceof Expression) { throw new \Yaoi\Sql\Exception('Closure should return ' . get_called_class(), \Yaoi\Sql\Exception::CLOSURE_MISTYPE); } return $expression; } if ($arguments[0] instanceof Database\Definition\Columns) { $columns = $arguments[0]; $arguments = array(':columns', array('columns' => array())); foreach ($columns->getArray() as $column) { if ($column instanceof Database\Definition\Column) { $arguments[1]['columns'][] = $column; } } } $expression = new self(); $expression->setFromFuncArguments($arguments); return $expression; }