<?php 
 
namespace SQLTools\Command; 
 
 
use SQLTools\Base\ICommand; 
use SQLTools\Entity\Field; 
 
class CreateTable implements ICommand { 
 
    private $table; 
 
    private $isTemporary; 
    private $createIfNotExists; 
 
    private $fields; 
    private $engine; 
    private $charset; 
 
    public function __construct($table=null, array $fields = array(), $engine = "InnoDB", 
                                $charset="utf8_unicode_ci", $isTemporary=false, $createIfNotExists = false) 
    { 
        $this->table = $table; 
        $this->fields = $fields; 
        $this->engine = $engine; 
        $this->charset = $charset; 
        $this->isTemporary = $isTemporary; 
        $this->createIfNotExists = $createIfNotExists; 
    } 
 
    public function getSql() 
    { 
        $sql = "CREATE "; 
        if ($this->isTemporary) 
            $sql .= "TEMPORARY "; 
 
        if ($this->createIfNotExists) 
            $sql .= "IF NOT EXISTS "; 
 
        $sql .= "TABLE `" . $this->table . "` (\n"; 
 
        $sql .= $this->generateFields(); 
 
        $sql .= ") ENGINE=" . $this->engine . " COLLATE=" . $this->charset . ";\n"; 
 
        return $sql; 
    } 
 
    private function generateFields() 
    { 
        $fields = array(); 
        $keys = array(); 
        /** 
         * @var Field $field 
         */ 
        foreach($this->fields as $field) 
        { 
            $fields[] = $field->__toString(); 
            if ($field->isPrimary()) 
            { 
                $keys[] = 'PRIMARY KEY ('.$field->getField().')'; 
            } 
            if ($field->isKey()) 
            { 
                $keys[] = 'KEY ('.$field->getField().')'; 
            } 
 
        } 
 
        return implode(",\n", array_merge($fields, $keys)); 
 
    } 
 
    /** 
     * @param mixed $charset 
     */ 
    public function setCharset($charset) 
    { 
        $this->charset = $charset; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getCharset() 
    { 
        return $this->charset; 
    } 
 
    /** 
     * @param mixed $createIfNotExists 
     */ 
    public function setCreateIfNotExists($createIfNotExists) 
    { 
        $this->createIfNotExists = $createIfNotExists; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getCreateIfNotExists() 
    { 
        return $this->createIfNotExists; 
    } 
 
    /** 
     * @param mixed $engine 
     */ 
    public function setEngine($engine) 
    { 
        $this->engine = $engine; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getEngine() 
    { 
        return $this->engine; 
    } 
 
    /** 
     * @param mixed $fields 
     */ 
    public function setFields($fields) 
    { 
        $this->fields = $fields; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getFields() 
    { 
        return $this->fields; 
    } 
 
    /** 
     * @param mixed $isTemporary 
     */ 
    public function setIsTemporary($isTemporary) 
    { 
        $this->isTemporary = $isTemporary; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getIsTemporary() 
    { 
        return $this->isTemporary; 
    } 
 
    /** 
     * @param mixed $table 
     */ 
    public function setTable($table) 
    { 
        $this->table = $table; 
    } 
 
    /** 
     * @return mixed 
     */ 
    public function getTable() 
    { 
        return $this->table; 
    } 
 
} 
 
 |