Example #1
0
 /**
  * @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;
 }