<?php
require_once("../../../../config/config_dir_raiz.php");
$config = new Config();
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/Coluna_bd.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/Coluna_composta_bd.php");
require_once($config->diretorio_raiz()."/src/controller/Funcoes_bd.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/bd/Tabela_bdDAO.php");

class Coluna_bdDAO
{
	private $_funcoes_bd;
	private $_banco_atual;
	private $conexao;
	function __construct()
	{
		$this->conexao = Conexao::obterConexao();
		$this->_banco_atual = Conexao::getUtilizarBanco();
		$this->_funcoes_bd = new Funcoes_bd();
	}
	
	public function listarColunas($idTabela)
	{
		$lista_colunas_bd = array();
		$sql = "SELECT ID, DESCRICAO, AUTOINCREMENTAR, TABELA, COLUNA, INDICE, INVISIVEL, LEITURA, MASCARA,
		OBRIGATORIO, TABELA, TAMANHO, TIPO, TIPOCOLUNA, TIPOCOLUNAPRIMARIA, TIPOTABELA, VARFIXA, NAO_EXIBIR_TABELA, FILTRAR, NOVALINHA,
		COMPOSTA, COLUNA, COLUNA_ORIGEM, MULTI_REGISTROS
		FROM colunas WHERE TABELA = ".$idTabela;
		//echo $sql;
		$row_colunas = $this->_funcoes_bd->sql($sql);
		foreach ($row_colunas as $row_colunas)
		{
			$_colunas_bd = new Coluna_bd();
			$_colunas_bd->setId($row_colunas["ID"]);
			$_colunas_bd->setDescricao($row_colunas["DESCRICAO"]);
			$_colunas_bd->setInvisivel($row_colunas["INVISIVEL"]);
			$_colunas_bd->setColuna($row_colunas["COLUNA"]);
			$_colunas_bd->setTamanho($row_colunas["TAMANHO"]);
			$_colunas_bd->setTipo($row_colunas["TIPO"]);
			$_colunas_bd->setTabela($row_colunas["TABELA"]);
			$_colunas_bd->setMascara($row_colunas["MASCARA"]);
			$_colunas_bd->setIndice($row_colunas["INDICE"]);
			$_colunas_bd->setLeitura($row_colunas["LEITURA"]);
			$_colunas_bd->setObrigatorio($row_colunas["OBRIGATORIO"]);
			$_colunas_bd->setAutoIncrementar($row_colunas["AUTOINCREMENTAR"]);
			$_colunas_bd->setNaoExibirTabela($row_colunas["NAO_EXIBIR_TABELA"]);
			$_colunas_bd->setFiltrar($row_colunas["FILTRAR"]);
			$_colunas_bd->setNovaLinha($row_colunas["NOVALINHA"]);
			$_colunas_bd->setComposta($row_colunas["COMPOSTA"]);
			if ($row_colunas["TIPOCOLUNA"] != "")
			{	
				$_colunas_bd->setTipoColuna($this->listarColuna($row_colunas["TIPOCOLUNA"]));
			}
			else
			{
				$_colunas_bd->setTipoColuna( new Coluna_bd());
			}
			if ($row_colunas["TIPOCOLUNAPRIMARIA"] != "")
			{	
				$_colunas_bd->setTipoColunaPrimaria($this->listarColuna($row_colunas["TIPOCOLUNAPRIMARIA"]));
			}
			else
			{
				$_colunas_bd->setTipoColunaPrimaria( new Coluna_bd());
			}
			$_tabela_dbDAO = new Tabela_bdDAO();
			if ($row_colunas["TIPOTABELA"] != ""  )
			{	
				if ($row_colunas["TIPOTABELA"] != $idTabela)
				{	
					$_tabela_db = $_tabela_dbDAO->listarTabela($row_colunas["TIPOTABELA"]);
				}
				else
				{
					$_tabela_db = $_tabela_dbDAO->listarTabelaSemColunas($row_colunas["TIPOTABELA"]);
				}
			}
			else
			{
				$_tabela_db = new Tabela_bd();
			}	
			$_colunas_bd->setTipoTabela($_tabela_db);
			$this->listarComposta($_colunas_bd);
			if ($row_colunas["COLUNA_ORIGEM"] != "")
			{	
				$_colunas_bd->setColunaOrigem($this->listarColuna($row_colunas["COLUNA_ORIGEM"]));
			}
			else
			{
				$_colunas_bd->setColunaOrigem(new Coluna_bd());
			}
			$_colunas_bd->setMultiRegistros($row_colunas["MULTI_REGISTROS"]);
			array_push($lista_colunas_bd,$_colunas_bd);
		}	
		return $lista_colunas_bd;
	}
	
	public function listarColuna($id)
	{
	
		$sql = "SELECT ID, DESCRICAO, AUTOINCREMENTAR, TABELA, COLUNA, INDICE, INVISIVEL, LEITURA, MASCARA,
		OBRIGATORIO, TABELA, TAMANHO, TIPO, TIPOCOLUNA,TIPOCOLUNAPRIMARIA, TIPOTABELA, VARFIXA, NAO_EXIBIR_TABELA, FILTRAR, NOVALINHA,
		COMPOSTA, COLUNA_ORIGEM, MULTI_REGISTROS
		FROM colunas where id =".$id;
		$_colunas_bd = new Coluna_bd();
		$row_colunas = $this->_funcoes_bd->sql($sql);
		foreach ($row_colunas as $row_colunas)
		{
			$_colunas_bd->setId($row_colunas["ID"]);
			$_colunas_bd->setDescricao($row_colunas["DESCRICAO"]);
			$_colunas_bd->setInvisivel($row_colunas["INVISIVEL"]);
			$_colunas_bd->setColuna($row_colunas["COLUNA"]);
			$_colunas_bd->setTamanho($row_colunas["TAMANHO"]);
			$_colunas_bd->setTipo($row_colunas["TIPO"]);
			$_colunas_bd->setTabela($row_colunas["TABELA"]);
			$_colunas_bd->setMascara($row_colunas["MASCARA"]);
			$_colunas_bd->setIndice($row_colunas["INDICE"]);
			$_colunas_bd->setLeitura($row_colunas["LEITURA"]);
			$_colunas_bd->setObrigatorio($row_colunas["OBRIGATORIO"]);
			$_colunas_bd->setAutoIncrementar($row_colunas["AUTOINCREMENTAR"]);
			$_colunas_bd->setNaoExibirTabela($row_colunas["NAO_EXIBIR_TABELA"]);
			$_colunas_bd->setFiltrar($row_colunas["FILTRAR"]);
			$_colunas_bd->setNovaLinha($row_colunas["NOVALINHA"]);
			$_colunas_bd->setComposta($row_colunas["COMPOSTA"]);
			if ($row_colunas["TIPOCOLUNA"] != "")
			{	
				$_colunas_bd->setTipoColuna($this->listarColuna($row_colunas["TIPOCOLUNA"]));
			}
			else
			{
				$_colunas_bd->setTipoColuna( new Coluna_bd());
			}
			if ($row_colunas["TIPOCOLUNAPRIMARIA"] != "")
			{	
				$_colunas_bd->setTipoColunaPrimaria($this->listarColuna($row_colunas["TIPOCOLUNAPRIMARIA"]));
			}
			else
			{
				$_colunas_bd->setTipoColunaPrimaria( new Coluna_bd());
			}
			$_tabela_dbDAO = new Tabela_bdDAO();
			if ($row_colunas["TIPOTABELA"] != "")
			{	
				$_tabela_db = $_tabela_dbDAO->listarTabela($row_colunas["TIPOTABELA"]);
			}
			else
			{
				$_tabela_db = new Tabela_bd();
			}	
			$_colunas_bd->setTipoTabela($_tabela_db);
			$this->listarComposta($_colunas_bd);
			if ($row_colunas["COLUNA_ORIGEM"] != "")
			{	
				$_colunas_bd->setColunaOrigem($this->listarColuna($row_colunas["COLUNA_ORIGEM"]));
			}
			else
			{
				$_colunas_bd->setColunaOrigem(new Coluna_bd());
			}
			$_colunas_bd->setMultiRegistros($row_colunas["MULTI_REGISTROS"]);
			
		}	
		return $_colunas_bd;
	}
	
	
	public function listaColunaSimples($id)
	{
	
		$sql = "SELECT ID, DESCRICAO, AUTOINCREMENTAR, TABELA, COLUNA, INDICE, INVISIVEL, LEITURA, MASCARA,
		OBRIGATORIO, TABELA, TAMANHO, TIPO, TIPOCOLUNA,TIPOCOLUNAPRIMARIA, TIPOTABELA, VARFIXA, NAO_EXIBIR_TABELA, FILTRAR, NOVALINHA,
		COMPOSTA, COLUNA_ORIGEM, MULTI_REGISTROS
		FROM colunas where id =".$id;
		$_colunas_bd = new Coluna_bd();
		$row_colunas = $this->_funcoes_bd->sql($sql);
		foreach ($row_colunas as $row_colunas)
		{
			$_colunas_bd->setId($row_colunas["ID"]);
			$_colunas_bd->setDescricao($row_colunas["DESCRICAO"]);
			$_colunas_bd->setInvisivel($row_colunas["INVISIVEL"]);
			$_colunas_bd->setColuna($row_colunas["COLUNA"]);
			$_colunas_bd->setTamanho($row_colunas["TAMANHO"]);
			$_colunas_bd->setTipo($row_colunas["TIPO"]);
			$_colunas_bd->setTabela($row_colunas["TABELA"]);
			$_colunas_bd->setMascara($row_colunas["MASCARA"]);
			$_colunas_bd->setIndice($row_colunas["INDICE"]);
			$_colunas_bd->setLeitura($row_colunas["LEITURA"]);
			$_colunas_bd->setObrigatorio($row_colunas["OBRIGATORIO"]);
			$_colunas_bd->setAutoIncrementar($row_colunas["AUTOINCREMENTAR"]);
			$_colunas_bd->setNaoExibirTabela($row_colunas["NAO_EXIBIR_TABELA"]);
			$_colunas_bd->setFiltrar($row_colunas["FILTRAR"]);
			$_colunas_bd->setNovaLinha($row_colunas["NOVALINHA"]);
			$_colunas_bd->setComposta($row_colunas["COMPOSTA"]);
			if ($row_colunas["TIPOCOLUNA"] != "")
			{	
				$_colunas_bd->setTipoColuna($this->listaColunaSimples($row_colunas["TIPOCOLUNA"]));
			}
			else
			{
				$_colunas_bd->setTipoColuna( new Coluna_bd());
			}
			if ($row_colunas["TIPOCOLUNAPRIMARIA"] != "")
			{	
				$_colunas_bd->setTipoColunaPrimaria($this->listaColunaSimples($row_colunas["TIPOCOLUNAPRIMARIA"]));
			}
			else
			{
				$_colunas_bd->setTipoColunaPrimaria( new Coluna_bd());
			}
			$_tabela_dbDAO = new Tabela_bdDAO();
			if ($row_colunas["TIPOTABELA"] != "")
			{	
				$_tabela_db = $_tabela_dbDAO->listarTabela($row_colunas["TIPOTABELA"]);
			}
			else
			{
				$_tabela_db = new Tabela_bd();
			}	
			$_colunas_bd->setTipoTabela($_tabela_db);
			//$this->listarComposta($_colunas_bd);
			if ($row_colunas["COLUNA_ORIGEM"] != "")
			{	
				$_colunas_bd->setColunaOrigem($this->listaColunaSimples($row_colunas["COLUNA_ORIGEM"]));
			}
			else
			{
				$_colunas_bd->setColunaOrigem(new Coluna_bd());
			}
			$_colunas_bd->setMultiRegistros($row_colunas["MULTI_REGISTROS"]);
			
		}	
		return $_colunas_bd;
	}
	
	public function salvarColuna($_colunas_bd,$_tabela_db)
	{
		$inputs = array();		
		$criarColuna = "";
		$add_chave_primaria = "";
		$auto_incrementar = "";
		if($_colunas_bd->getComposta() == null or $_colunas_bd->getComposta() == "")
		{
			$_colunas_bd->setComposta(0);
		}
		switch ($this->_banco_atual)
		{
			case "mysql": 
			
				if ($_colunas_bd->getAutoIncrementar() == "1")
				{
					$auto_incrementar = "AUTO_INCREMENT";
				}
				switch ($_colunas_bd->getIndice())
				{
					case "PRIMARY":
						//$add_chave_primaria= " NOT NULL ";//.$auto_incrementar." PRIMARY KEY";
					break;	
				}		
						
				switch ($_colunas_bd->getTipo())
				{
					case "md5":
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." ADD ".$_colunas_bd->getColuna()." varchar(45)";
					break;
					case "data":
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." ADD ".$_colunas_bd->getColuna()." DATETIME ";
					break;	
					case "tabela":
						$coluna_primary = new Coluna_bd();
						/*$listaColunas = $_colunas_bd->getTipoTabela()->getLista_colunas();
						//$ultimaColuna = 
						foreach ($listaColunas as $colunaAtual)
						{
							if ($colunaAtual->getIndice() == "PRIMARY")
							{
								$coluna_primary = $colunaAtual;
							}	
							
						}*/
						$coluna_primary = $_colunas_bd->getTipoColunaPrimaria();
						
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." ADD ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipoColuna()->getTipo()."(".$_colunas_bd->getTipoColuna()->getTamanho().") ";
							
														
												
					break;
					default:
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." ADD ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipo()."(".$_colunas_bd->getTamanho().")";
						
				}	
					
				$criarColuna .= $add_chave_primaria;
				
			break;			
		}
		
		try
		{
			$this->_funcoes_bd->executarSql($criarColuna,$inputs);
			//adiciona as chaves primárias
			switch ($_colunas_bd->getIndice())
			{
				case "PRIMARY":
					$strColunas = "";
					$colunasParaAddPrimaria = $this->listarColunas($_colunas_bd->getTabela());
					if (count($colunasParaAddPrimaria) > 0 )
					{	
						
						$ultimaColuna = $colunasParaAddPrimaria[count($colunasParaAddPrimaria)-1];
						foreach($colunasParaAddPrimaria as $colunaAtual)
						{
							if ($colunaAtual->getIndice() == "PRIMARY")
							{
								$strColunas .= $colunaAtual->getColuna();
								$strColunas .= ",";
							}
								
						}	
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." DROP PRIMARY KEY , ADD PRIMARY KEY (".$strColunas." ".$_colunas_bd->getColuna().") ";
					}
					else
					{		
						$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()."  ADD PRIMARY KEY ( ".$_colunas_bd->getColuna().") ";
						try
						{
							$this->_funcoes_bd->executarSql($criarColuna,$inputs);
						}
						catch (Exception $e)
						{
								throw new Exception($e->getMessage());
						}
						if ($_colunas_bd->getTipo() != "tabela")
						{	
							$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." CHANGE COLUMN ".$_colunas_bd->getColuna()." ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipo()."(".$_colunas_bd->getTamanho().")  " .$auto_incrementar;
						}
						else
						{
							$criarColuna= "ALTER TABLE ".$_tabela_db->getTabela()." CHANGE COLUMN ".$_colunas_bd->getColuna()." ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipoColunaPrimaria()->getTipo()."(".$_colunas_bd->getTipoColunaPrimaria()->getTamanho().")  " .$auto_incrementar;
						}
					}	
					$this->_funcoes_bd->executarSql($criarColuna,$inputs);
					//$add_chave_primaria= " ALTER TABLE doc  DROP PRIMARY KEY , ADD PRIMARY KEY (cod2, codigo); ";//.$auto_incrementar." PRIMARY KEY";					
				break;	
			}
			switch ($_colunas_bd->getTipo())
			{
				case "tabela":
					$sqlfk = 'fk_'.$_colunas_bd->getTipoTabela()->getTabela().'_'.$_colunas_bd->getTipoColuna()->getColuna().'_'.$_tabela_db->getTabela().'_'.$_colunas_bd->getColuna().'';
					if (strlen($sqlfk) > 64)
					{
						$sqlfk = substr($sqlfk,0,64);
					}
					$criarColuna = 'ALTER TABLE '.$_tabela_db->getTabela() . ' ADD CONSTRAINT  '.$sqlfk.'
						FOREIGN KEY ('.$_colunas_bd->getColuna().') REFERENCES '.$_colunas_bd->getTipoTabela()->getTabela().'('.$coluna_primary->getColuna().') ON DELETE RESTRICT ON UPDATE RESTRICT';
					try
					{		
						$this->_funcoes_bd->executarSql($criarColuna,$inputs);
					}
					catch (Exception $e)
					{
							throw new Exception($e->getMessage());
					}
						
				break;
				
			}	
			array_push($inputs, array('campo'=>':TABELA', 'valor'=>$_colunas_bd->getTabela()));
			array_push($inputs, array('campo'=>':DESCRICAO', 'valor'=>$_colunas_bd->getDescricao()));
			array_push($inputs, array('campo'=>':COLUNA', 'valor'=>$_colunas_bd->getColuna()));
			array_push($inputs, array('campo'=>':TIPO', 'valor'=>$_colunas_bd->getTipo()));
			array_push($inputs, array('campo'=>':TAMANHO', 'valor'=>$_colunas_bd->getTamanho()));
			array_push($inputs, array('campo'=>':MASCARA', 'valor'=>$_colunas_bd->getMascara()));
			array_push($inputs, array('campo'=>':INDICE', 'valor'=>$_colunas_bd->getIndice()));
			array_push($inputs, array('campo'=>':TIPOCOLUNA', 'valor'=>$_colunas_bd->getTipoColuna()->getId()));
			array_push($inputs, array('campo'=>':TIPOCOLUNAPRIMARIA', 'valor'=>$_colunas_bd->getTipoColunaPrimaria()->getId()));
			array_push($inputs, array('campo'=>':TIPOTABELA', 'valor'=>$_colunas_bd->getTipoTabela()->getId()));
			array_push($inputs, array('campo'=>':LEITURA', 'valor'=>$_colunas_bd->getLeitura()));
			array_push($inputs, array('campo'=>':OBRIGATORIO', 'valor'=>$_colunas_bd->getObrigatorio()));
			array_push($inputs, array('campo'=>':NOVALINHA', 'valor'=>$_colunas_bd->getNovaLinha()));
			if ($_colunas_bd->getAutoIncrementar() == "")
			{
				$_colunas_bd->setAutoIncrementar( "0");
			}	
			array_push($inputs, array('campo'=>':AUTOINCREMENTAR', 'valor'=>$_colunas_bd->getAutoIncrementar()));
			array_push($inputs, array('campo'=>':NAO_EXIBIR_TABELA', 'valor'=>$_colunas_bd->getNaoExibirTabela()));
			array_push($inputs, array('campo'=>':FILTRAR', 'valor'=>$_colunas_bd->getFiltrar()));
			array_push($inputs, array('campo'=>':COMPOSTA', 'valor'=>$_colunas_bd->getComposta()));
			array_push($inputs, array('campo'=>':INVISIVEL', 'valor'=>$_colunas_bd->getInvisivel()));
			array_push($inputs, array('campo'=>':COLUNA_ORIGEM', 'valor'=>$_colunas_bd->getColunaOrigem()));
			array_push($inputs, array('campo'=>':MULTI_REGISTROS', 'valor'=>$_colunas_bd->getMultiRegistros()));
			
			$sql = "INSERT INTO colunas( TABELA, DESCRICAO, COLUNA, TIPO, TAMANHO, MASCARA, INDICE, TIPOCOLUNA, TIPOCOLUNAPRIMARIA, TIPOTABELA, LEITURA, OBRIGATORIO, AUTOINCREMENTAR, NAO_EXIBIR_TABELA, FILTRAR, NOVALINHA, COMPOSTA,
			INVISIVEL, COLUNA_ORIGEM, MULTI_REGISTROS) 
			VALUES (:TABELA, :DESCRICAO, :COLUNA, :TIPO, :TAMANHO, :MASCARA, :INDICE, :TIPOCOLUNA, :TIPOCOLUNAPRIMARIA, :TIPOTABELA, :LEITURA, :OBRIGATORIO, :AUTOINCREMENTAR, :NAO_EXIBIR_TABELA, :FILTRAR, :NOVALINHA, :COMPOSTA,
			:INVISIVEL, :COLUNA_ORIGEM, :MULTI_REGISTROS)";
			return $this->_funcoes_bd->executarSql($sql,$inputs);
			
		}
		catch (Exception $e)
		{
			throw new Exception($e->getMessage()." ".$criarColuna);
		}
		
		
	}
	public function atualizarColuna($_colunas_bd)
	{
		
		$auto_incrementar = "";
		if ($_colunas_bd->getAutoIncrementar() == "1")
		{
			$auto_incrementar = "AUTO_INCREMENT";
		}
		
				
		$inputs = array();		
		$criarTabela = "";
		$tabelaAtual = "";
		$tipoTabela = "";
		switch ($this->_banco_atual)
		{
			case "mysql": 
				$sql = "SELECT  t.TABELA, c.COLUNA, c.TAMANHO, tipoTabela.TABELA DESCTIPOTABELA FROM tabelas t 
				join colunas c on c.TABELA = t.ID
				left join tabelas tipoTabela on tipoTabela.ID = c.TIPOTABELA
				where c.id =".$_colunas_bd->getId();
				$row_colunas = $this->_funcoes_bd->sql($sql);
				foreach ($row_colunas as $row_colunas)
				{
					$tabelaAtual = $row_colunas["TABELA"];
					$tipoTabela = $row_colunas["DESCTIPOTABELA"];
					switch ($_colunas_bd->getTipo())
					{
						case "md5":
							$criarTabela= "ALTER TABLE ".$row_colunas["TABELA"]." CHANGE COLUMN ".$row_colunas["COLUNA"]." ".$_colunas_bd->getColuna()." varchar(45)  ";
						break;
						case "data":
							$criarTabela= "ALTER TABLE ".$row_colunas["TABELA"]." CHANGE COLUMN ".$row_colunas["COLUNA"]." ".$_colunas_bd->getColuna()." DATETIME  ";
						break;
						case "TINYINT":
							$criarTabela= "ALTER TABLE ".$row_colunas["TABELA"]." CHANGE COLUMN ".$row_colunas["COLUNA"]." ".$_colunas_bd->getColuna()." TINYINT  ";
						break;
						case "tabela":
							$criarTabela= "ALTER TABLE ".$row_colunas["TABELA"]." CHANGE COLUMN ".$row_colunas["COLUNA"]." ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipoColuna()->getTipo()."(".$_colunas_bd->getTipoColuna()->getTamanho().")  ";
						break;
						default:
							$criarTabela= "ALTER TABLE ".$row_colunas["TABELA"]." CHANGE COLUMN ".$row_colunas["COLUNA"]." ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipo()."(".$_colunas_bd->getTamanho().")  ";
					}	
					
				}	
				$criarTabela .= $auto_incrementar;
			break;			
		}
		
		try
		{
			$this->_funcoes_bd->executarSql($criarTabela,$inputs);
			//adiciona as chaves primárias
			if ($_colunas_bd->getComposta() != '1' and ! $_colunas_bd->getColunaOrigem() instanceof Coluna_bd )
			{	
				//echo "aaaaaaaaa";
				switch ($_colunas_bd->getIndice())
				{
					
					case "PRIMARY":
						if ($_colunas_bd->getTipo() == "tabela")
						{
							try
							{
								$sqlfk = 'fk_'.$tipoTabela.'_'.$_colunas_bd->getTipoColuna()->getColuna().'_'.$tabelaAtual.'_'.$_colunas_bd->getColuna();
								if (strlen($sqlfk) > 64)
								{
									$sqlfk = substr($sqlfk,0,64);
								}
								$excluirFk = ' ALTER TABLE '.$tabelaAtual.' DROP FOREIGN KEY '.$sqlfk ;	
								$this->_funcoes_bd->executarSql($excluirFk,array());
							}
							catch (Exception $e)
							{
								throw new Exception($e->getMessage(). " - ".$excluirFk);
							}
						}
						$strColunas = "";
						$colunasParaAddPrimaria = $this->listarColunas($_colunas_bd->getTabela());
						if (count($colunasParaAddPrimaria) > 0 )
						{	
							
							$ultimaColuna = $colunasParaAddPrimaria[count($colunasParaAddPrimaria)-1];
							foreach($colunasParaAddPrimaria as $colunaAtual)
							{
								if ($colunaAtual->getIndice() == "PRIMARY" and $colunaAtual->getColuna() != $_colunas_bd->getColuna())
								{
									$strColunas .= $colunaAtual->getColuna();
									$strColunas .= ",";
								}
									
							}	
							$criarColuna= "ALTER TABLE ".$tabelaAtual." DROP PRIMARY KEY , ADD PRIMARY KEY (".$strColunas." ".$_colunas_bd->getColuna().") ";
							try
							{
								$this->_funcoes_bd->executarSql($criarColuna,$inputs);
							}
							catch (Exception $e)
							{
									throw new Exception($e->getMessage().$criarColuna);
							}

						}
						else
						{		
							$criarColuna= "ALTER TABLE ".$tabelaAtual."  ADD PRIMARY KEY ( ".$_colunas_bd->getColuna().") ";
							try
							{
								$this->_funcoes_bd->executarSql($criarColuna,$inputs);
							}
							catch (Exception $e)
							{
									throw new Exception($e->getMessage());
							}
							//$criarColuna= "ALTER TABLE ".$tabelaAtual." CHANGE COLUMN ".$_colunas_bd->getColuna()." ".$_colunas_bd->getColuna()." ".$_colunas_bd->getTipo()."(".$_colunas_bd->getTamanho().")  " .$auto_incrementar;
						}	
						//$this->_funcoes_bd->executarSql($criarColuna,$inputs);
						
						if ($_colunas_bd->getTipo() == "tabela")
						{	
							$coluna_primary = $_colunas_bd->getTipoColunaPrimaria();
							$sqlfk = 'fk_'.$tipoTabela.'_'.$_colunas_bd->getTipoColuna()->getColuna().'_'.$tabelaAtual.'_'.$_colunas_bd->getColuna().'';
							if (strlen($sqlfk) > 64)
							{
								$sqlfk = substr($sqlfk,0,64);
							}
							$criarColuna = 'ALTER TABLE '.$tabelaAtual . ' ADD CONSTRAINT  '.$sqlfk.'
							 FOREIGN KEY ('.$_colunas_bd->getColuna().') REFERENCES '.$tipoTabela.'('.$coluna_primary->getColuna().') ON DELETE RESTRICT ON UPDATE RESTRICT';
							try
							{		
								$this->_funcoes_bd->executarSql($criarColuna,$inputs);
							}
							catch (Exception $e)
							{
									throw new Exception($e->getMessage().$criarColuna);
							}
							
						}
						//$add_chave_primaria= " ALTER TABLE doc  DROP PRIMARY KEY , ADD PRIMARY KEY (cod2, codigo); ";//.$auto_incrementar." PRIMARY KEY";					
					break;	
				}
			}
			$sql = "update colunas SET COLUNA = :COLUNA, DESCRICAO = :DESCRICAO, MASCARA = :MASCARA, LEITURA = :LEITURA,
			OBRIGATORIO = :OBRIGATORIO, AUTOINCREMENTAR = :AUTOINCREMENTAR, NAO_EXIBIR_TABELA = :NAO_EXIBIR_TABELA, FILTRAR = :FILTRAR,
			INDICE = :INDICE, NOVALINHA = :NOVALINHA, TIPOCOLUNA = :TIPOCOLUNA, TIPOCOLUNAPRIMARIA = :TIPOCOLUNAPRIMARIA, COMPOSTA = :COMPOSTA,
			MULTI_REGISTROS = :MULTI_REGISTROS, TAMANHO = :TAMANHO
			WHERE ID = :ID";
			$inputs = array();
			array_push($inputs, array('campo'=>':COLUNA', 'valor'=>$_colunas_bd->getColuna()));
			array_push($inputs, array('campo'=>':DESCRICAO', 'valor'=>$_colunas_bd->getDescricao()));
			array_push($inputs, array('campo'=>':MASCARA', 'valor'=>$_colunas_bd->getMascara()));
			array_push($inputs, array('campo'=>':ID', 'valor'=>$_colunas_bd->getId()));
			array_push($inputs, array('campo'=>':LEITURA', 'valor'=>$_colunas_bd->getLeitura()));
			array_push($inputs, array('campo'=>':OBRIGATORIO', 'valor'=>$_colunas_bd->getObrigatorio()));
			array_push($inputs, array('campo'=>':NAO_EXIBIR_TABELA', 'valor'=>$_colunas_bd->getNaoExibirTabela()));	
			array_push($inputs, array('campo'=>':FILTRAR', 'valor'=>$_colunas_bd->getFiltrar()));	
			array_push($inputs, array('campo'=>':INDICE', 'valor'=>$_colunas_bd->getIndice()));
			array_push($inputs, array('campo'=>':NOVALINHA', 'valor'=>$_colunas_bd->getNovaLinha()));
			array_push($inputs, array('campo'=>':TIPOCOLUNA', 'valor'=>$_colunas_bd->getTipoColuna()->getId()));
			array_push($inputs, array('campo'=>':TIPOCOLUNAPRIMARIA', 'valor'=>$_colunas_bd->getTipoColunaPrimaria()->getId()));
			array_push($inputs, array('campo'=>':TAMANHO', 'valor'=>$_colunas_bd->getTamanho()));
			
			if ($_colunas_bd->getAutoIncrementar() == "")
			{
				$_colunas_bd->setAutoIncrementar("0");
			}	
			array_push($inputs, array('campo'=>':AUTOINCREMENTAR', 'valor'=>$_colunas_bd->getAutoIncrementar()));
			array_push($inputs, array('campo'=>':COMPOSTA', 'valor'=>$_colunas_bd->getComposta()));
			array_push($inputs, array('campo'=>':MULTI_REGISTROS', 'valor'=>$_colunas_bd->getMultiRegistros()));
			return $this->_funcoes_bd->executarSql($sql,$inputs);
		}
		catch (Exception $e)
		{
			throw new Exception($e->getMessage());
		}
		
		
	}
	public function excluirColuna($_colunas_bd,$_tabela_db)
	{		
			
			if ($_colunas_bd->getTipo() == "tabela")
			{
				try
				{
					$sqlfk = 'fk_'.$_colunas_bd->getTipoTabela()->getTabela().'_'.$_colunas_bd->getTipoColuna()->getColuna().'_'.$_tabela_db->getTabela().'_'.$_colunas_bd->getColuna();
					if (strlen($sqlfk) > 64)
					{
						$sqlfk = substr($sqlfk,0,64);
					}
					$excluirFk = ' ALTER TABLE '.$_tabela_db->getTabela().' DROP FOREIGN KEY '.$sqlfk ;	
					$this->_funcoes_bd->executarSql($excluirFk,array());
				}
				catch (Exception $e)
				{
					throw new Exception($e->getMessage(). " - ".$excluirFk);
				}
			}
			
			$excluirTabela = ' ALTER TABLE '.$_tabela_db->getTabela().' DROP '.$_colunas_bd->getColuna();		
			try
			{
				$this->_funcoes_bd->executarSql($excluirTabela,array());
				$sql = "DELETE FROM colunas WHERE ID = :ID";
				$inputs = array();
				array_push($inputs, array('campo'=>':ID', 'valor'=>$_colunas_bd->getId()));			
				return $this->_funcoes_bd->executarSql($sql,$inputs);
			}
			catch (Exception $e)
			{
				throw new Exception($e->getMessage());
			}
	}
	
	public function listarComposta($colunaPrimaria)
	{
		$lista_colunas_bd = array();
		$sql = "SELECT id, coluna_primaria, coluna_estrangeira, coluna_origem FROM colunas_composta WHERE coluna_origem = ".$colunaPrimaria->getId()." order by coluna_primaria";
		//echo $sql;
		$row_colunas = $this->_funcoes_bd->sql($sql);
		foreach ($row_colunas as $row_colunas)
		{
			//if ($row_colunas['coluna_origem'] != $colunaPrimaria->getId() and  $row_colunas['coluna_estrangeira'] != $colunaPrimaria->getId())
			//{
				$coluna_composta_bd = new Coluna_composta_bd();
				$coluna_composta_bd->setColunaOrigem($colunaPrimaria);
				if ($row_colunas['coluna_primaria'] != $colunaPrimaria->getId())
				{	
					$coluna_composta_bd->setColunaPrimaria($this->listaColunaSimples($row_colunas['coluna_primaria']));
				}
				else
				{
					$coluna_composta_bd->setColunaPrimaria($colunaPrimaria);
				}
				if ($row_colunas['coluna_estrangeira'] != $colunaPrimaria->getId())
				{	
					$coluna_composta_bd->setColunaEstrangeira($this->listaColunaSimples($row_colunas['coluna_estrangeira']));
				}
				else
				{
					$coluna_composta_bd->setColunaEstrangeira($colunaPrimaria);
				}
				array_push($lista_colunas_bd, $coluna_composta_bd);
				$colunaPrimaria->addColunaComposta($coluna_composta_bd);
			//}	
		}	
		return $lista_colunas_bd;
	}
	
	public function excluirComposta($_coluna_bd)
	{
		$sql = "DELETE FROM colunas_composta WHERE coluna_origem = ".$_coluna_bd->getId();
		$inputs = array();		
		$this->_funcoes_bd->executarSql($sql,$inputs);
	}	
}