<?PHP
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */

<?php
/*
 * Pontifical Catholic University of Rio de Janeiro
 * Author: Marcos Villas
 * Created on 06/09/2009
 * Local variables start with $DC_
 */

function defineColunas (&$DC_array, $DC_tabela) {

	// carrega arquivo de conex�o
	include "begin.php";
	
	// defina $DC_debug com TRUE para ver os valores capturados no output padr�o
	// $DC_debug = true;

	// define query para busca, no cat�logo do PostgreSQL,  do tamanho das colunas das tabelas informadas 
	$DC_query = "
	SELECT pg_attribute.attname, pg_attribute.atttypmod, pg_attribute.attnotnull, pg_type.typname
	FROM pg_class, pg_attribute, pg_type
	WHERE pg_class.relname = '" . $DC_tabela . "'
	AND pg_class.oid = pg_attribute.attrelid
	AND pg_type.oid = pg_attribute.atttypid
	AND pg_attribute.attnum > 0";

	// executa a query
	$DC_result = pg_query ($dbh, $DC_query);

	// verifica a execu��o do comando
	if (!$DC_result) {
		echo "Erro MaxLength 1 <br>";
		die("Query: " . pg_last_error());
		exit();
		header('location:index.php?msn=3');
	} # if

	// mostra resultado
	while ($DC_row = pg_fetch_array($DC_result)) {

		// define o nome da coluna
		$DC_atributo_nome = $DC_tabela . "." . $DC_row['attname'];
		
		// define se a coluna adminte valor nulo ou n�o
		switch ($DC_row['attnotnull']) {
			case "t":
				$DC_atributo_notnull = true;
				break;
			case "f":
				$DC_atributo_notnull = false;
				break;
		} # switch
			
		
		// define o tamanho da coluna, de acordo com o seu tipo
		$DC_atributo_tipo = $DC_row['typname'];
		switch ($DC_atributo_tipo) {
			case "bpchar":
			case "varchar":
				$DC_atributo_tamanho = $DC_row['atttypmod'] - 4;
				break;
			case "int4": # integer -2147483648 to +2147483647
				$DC_atributo_tamanho = 10;
				break;
			case "int2": # smallint -32768 to +32767
				$DC_atributo_tamanho = 5; 
				break;
			case "date":
				$DC_atributo_tamanho = 10; # dd/mm/aaaa
				break;
			case "timestamp":
				$DC_atributo_tamanho = 19; # dd/mm/aaaa hh:mm:ss
				break;
			default:
				$DC_atributo_tamanho = $DC_row['atttypmod'];
				break;
		}# switch
		
		// se debug ativo mostra o que foi capturado
		if ($DC_debug) {
			echo $DC_atributo_nome;
			echo " :: ";
			echo $DC_atributo_tamanho;
			echo " :: ";
			echo $DC_atributo_tipo;
			echo " :: ";
			echo $DC_atributo_notnull;
			echo "<br>";
		} # if
		
		// atribui valores aos arrays
		$DC_array [$DC_atributo_nome]['tamanho'] = $DC_atributo_tamanho;
		$DC_array [$DC_atributo_nome]['tipo']  = $DC_atributo_tipo;
		$DC_array [$DC_atributo_nome]['notnull']  = $DC_atributo_notnull;
		
	} # while

	return true;

} # end function
?>
