<?php

/**
 * Goweb Sitemanager 5 Framework
 * 
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Db
 * @subpackage Model
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */

/**
 * Interface de definicao de assinaturas de metodos para abstracao de base de dados.
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Db
 * @subpackage Model
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */
interface Goweb_Db_Model_Adapter_Interface {

    /**
     * Retorna o SQL respeitante e remocao de uma tabela.
     * 
     * @return  string           String SQL
     */
    public function getDropTable($ifExists = false);

    /**
     * Retorna o SQL respeitante e criacao de uma col.
     *
     * @param   string           O nome da tabela
     * @return  string           String SQL
     */
    public function getAddCol($table);

    /**
     * Retorna o SQL respeitante e alteracao de uma col.
     *
     * @param   string           O nome da tabela
     * @return  string           String SQL
     */
    public function getChangeCol($table);

    /**
     * Retorna o SQL respeitante e alteracao de uma col mantendo o seu nome.
     *
     * @param   string           O nome da tabela
     * @return  string           String SQL
     */
    public function getModifyCol($table);
    
    /**
     * Retorna o SQL respeitante e remocao de uma col.
     *
     * @param   string           O nome da tabela
     * @return  string           String SQL
     */
    public function getDropCol($table);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Auto.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getAuto($params);
    
    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Boolean.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getBoolean($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Char.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getChar($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Text.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getText($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Date.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getDate($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Datetime.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getDatetime($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Time.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getTime($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo File.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getFile($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Filepath.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getFilepath($params);
    
    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Float.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getFloat($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Image.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getImage($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Integer.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */    
    public function getInteger($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo SmallInteger.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getSmallInteger($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo IpAddress.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getIpAddress($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo Url.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getUrl($params);

    /**
     * Retorna o SQL respeitante e definicao de campos do tipo ForeignKey.
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getForeignKey($params);
    
    /**
     * Retorna o SQL respeitante e definicao de campos do tipo SelectFill
     * 
     * @param   array   $params  Paremetros de configuracao
     * @return  string           String SQL
     */
    public function getSelectFill($params);

    /**
     * Retorna o SQL respeitante e definicao do cabecalho da criacao de tabelas.
     * 
     * @param   string   $tableName  Nome da tabela
     * @return  string               String SQL
     */
    public function getCreateStart($tableName);

    /**
     * Retorna o SQL respeitante e definicao do rodape da criacao de tabelas.
     * 
     * @return  string               String SQL
     */    
    public function getCreateEnd();
}
