Exemple #1
0
int showTupleBuffer(struct page *buffer, struct CAMPOS *campos, char *meta, int pg, int rg){
	//mostra o registro de número "rg" da página "pg" do bufffer
    int k, i, tam = tamTupla(campos,meta), qt=qtCampos(meta,campos[0].id);
    char *linha = NULL;
	int error;
	if(pg < 0 || pg > BP)
		return PAGE_INVALIDA;
	else if(buffer[pg].nrec == 0)
			return EMPTY_PAGE;
    if(buffer[pg].position != 0){
        for(i = 0; i< qt; i++)
            printf("%-20s", campos[i].nome);
        printf("\n--------------------------------------------------------------------------------------------\n");
        for(k = 0; k < buffer[pg].nrec; k ++){
            if(k == rg){
                linha = strcop(buffer[pg].data, k, tam); //Função que devolve uma string para a impressão da tupla
                if(!linha){
					return OUT_OF_MEMORY;
				}
                error = leTupla(campos, meta, linha); //Mostra a string
                if(error != OKAY)
					return error;
				printf("\n\n");
                return OKAY;
            }
        }
        return TUPLE_NOT_FOUND;
    }
    return GENERIC_ERROR;

}
Exemple #2
0
void leTupla(struct CAMPOS *campos, char *meta, char *linha){ //Lê uma tupla da memória

    char *auxStr; //Variável auxiliar para leitura de stringd

    if(linha == NULL)
        return;

    int qtdCampos, j, k=0 ; // k é a posição do byte dentro da tupla
    qtdCampos = qtCampos(meta);

    for(j=0 ; j<qtdCampos; j++){
        if(j!=0)
            printf(" | ");
        if(campos[j].tipo == 'S'){
            auxStr = linha + k;    //acesso a posição de inínio de uma string
            printf("%-20s", auxStr);
            k += campos[j].tamanho;     //Atualição de leitura do número de bytes para char
        }else if(campos[j].tipo == 'D'){
            double *n = (double *)&linha[k];
            printf("%-20.2f", *n);
            k += sizeof(double);   //Atualição de leitura do número de bytes para double
        }else if(campos[j].tipo == 'I'){
            int *n = (int *)&linha[k];
            printf("%-20d", *n);
            k += sizeof(int);   //Atualição de leitura do número de bytes para int
        }
    }
    printf("\n");

}
Exemple #3
0
int tamTupla(struct CAMPOS *campos, char *meta){// Retorna o tamanho total da tupla da tabela.

    int qtdCampos = qtCampos(meta), i, tamanhoGeral = 0;

    if(qtdCampos){ // Lê o primeiro inteiro que representa a quantidade de campos da tabela.
		for(i = 0; i < qtdCampos; i++)
			tamanhoGeral += campos[i].tamanho ; // Soma os tamanhos de cada campo da tabela.
	}

	return tamanhoGeral;
}
Exemple #4
0
int tamTupla(struct CAMPOS *campos, char *meta){
	// Retorna o tamanho total da tupla da tabela.

    int qtdCampos, i, tamanhoGeral = 0;
    qtdCampos = qtCampos(meta, campos[0].id);
    if(!(qtdCampos)){
		return GENERIC_ERROR;
	}

   for(i = 0; i < qtdCampos; i++)
		tamanhoGeral += campos[i].tamanho ; // Soma os tamanhos de cada campo da tabela.

	return tamanhoGeral;
}
Exemple #5
0
void showTupleBuffer(struct page *buffer, struct CAMPOS *campos, char *meta, int pg, int rg){
//mostra o registro de número "rg" da página "pg" do bufffer
    int k, i, tam = tamTupla(campos,meta), qt=qtCampos(meta);
    char *linha = NULL;

    if(buffer[pg].position != 0){
        for(i = 0; i< qt; i++)
            printf("%-25s", campos[i].nome);
        printf("\n--------------------------------------------------------------------------------------------\n");
        for(k = 0; k < buffer[pg].nrec; k ++){
            if(k == rg){
                linha = strcop(buffer[pg].data, k, tam); //Função que devolve uma string para a impressão da tupla
                leTupla(campos, meta, linha); //Mostra a string
                return;
            }
        }
        printf("Posição inválida!\n");
    }

}
Exemple #6
0
int leMetaDados(struct CAMPOS **campos,char *fs_coluna, struct OBJ *table){

	FILE *metadados;
	*campos = NULL;
	int i, j = 0, tam;
	char c;
	int error;
	int qtdCampos; 
	if(!table->id){
		return TABLE_NOT_FOUND;
	}
	
	qtdCampos = qtCampos(fs_coluna, table->id);
	
	if(!(qtdCampos)){
		error = qtdCampos;
		return error;
	}
		
	
	metadados = fopen(fs_coluna, "r");  // Abre os metadados armazenados em fs_coluna
	if(!(metadados)){
		
		return FS_COLUNA_NOT_FOUND;
	}
		

	int posi = positionOnFile(fs_coluna, table->id);
	if((posi) < 0){
		return GENERIC_ERROR;
	}
   fseek(metadados, posi, SEEK_CUR);
	
    if(qtdCampos) // Lê o primeiro inteiro que representa a quantidade de campos da tabela.
    {
	   int t;
	  
	   *campos =(struct CAMPOS *)malloc(sizeof(struct CAMPOS)*qtdCampos);
	   // Cria uma estrutura para armazenar os dados dos campos.
	   if(!(*campos)){
		    
		    return OUT_OF_MEMORY;
		}
	   for( i = 0; i < qtdCampos ; i ++) // Laço para ler o nome, tipo e tamanho de cada campo.
	   {
		   
		   (*campos)->id = table->id;
		   fread(&t, sizeof(int),1,metadados);
		   fread(&c, sizeof(char),1,metadados);
			while (c != '\0') // Laço para ler o nome do campo.
			{
				(*campos)->nome[j] = c;
				fread(&c, sizeof(char),1,metadados);
				j++;
			}
			fseek(metadados, TAM_NOME - j -1, SEEK_CUR);
			fread(&c, 1, 1, metadados); // Lê o tipo do campo.
			(*campos)->tipo = c;
			fread(&tam , sizeof(int), 1, metadados); // Lê o tamanho do campo.
			(*campos)->tamanho = tam;
			j = 0;
			(*campos)++;
		}
	   fclose(metadados);// Fecha o arquivo meta
	   (*campos) -= i;

	   return OKAY;
    }

	return GENERIC_ERROR;
}
Exemple #7
0
struct CAMPOS *leMetaDados(char *fs_coluna, int id){
	
	FILE *metadados;
	int qtdCampos, i, j = 0, tam;
	char c;
	
	if(!id){
		}
		
	
	qtdCampos = qtCampos(fs_coluna, id);// printf("qt : %d",qtdCampos);
	
	metadados = fopen(fs_coluna, "r"); // Abre os metadados armazenados em meta

	if (metadados == NULL)
       exit(0);
    if(qtdCampos) // Lê o primeiro inteiro que representa a quantidade de campos da tabela.
    {
	   int t;
	   
	   struct CAMPOS *campos=(struct CAMPOS *)malloc(sizeof(struct CAMPOS)*qtdCampos); // Cria uma estrutura para armazenar os dados dos campos.
	   for( i = 0; i < qtdCampos ; i ++) // Laço para ler o nome, tipo e tamanho de cada campo.
	   {
		   campos[i].id = id;
		   fread(&t, sizeof(int),1,metadados);
		   fread(&c, sizeof(char),1,metadados);
			while (c != '\0') // Laço para ler o nome do campo.
			{
				campos[i].nome[j] = c;
				fread(&c, sizeof(char),1,metadados);
				j++;
			}
			fseek(metadados, TAM_NOME - j -1, SEEK_CUR);
			fread(&c, 1, 1, metadados); // Lê o tipo do campo.
			campos[i].tipo = c;
			fread(&tam , sizeof(int), 1, metadados); // Lê o tamanho do campo.
			campos[i].tamanho = tam;
			j = 0;
			//fseek(metadados,0,SEEK_END);
			//long pos = ftell(metadados); //pega o tamanho do arquivo
			
			//printf("t : %d e %d", pos,qtdCampos);

	   }
	   fclose(metadados);// Fecha o arquivo meta
	   
	  /* printf("\nid: %d \n", campos[0].id);
		puts(campos[0].nome);
		printf("TIPO  %c\n", campos[0].tipo);
		printf("TAAMM: %d\n", campos[0].tamanho);
		
		
	   printf("\nid: %d \n", campos[1].id);
		puts(campos[1].nome);
		printf("TIPO  %c\n", campos[1].tipo);
		printf("TAAMM: %d\n", campos[1].tamanho);
		
		printf("\nid: %d \n", campos[2].id);
		puts(campos[2].nome);
		printf("TIPO  %c\n", campos[2].tipo);
		printf("TAAMM: %d\n", campos[2].tamanho);*/
		/*int tf = *CAMPOS_TAM ;
		
		printf("TAMANHO  : %d e %d", tf,qtdCampos);*/
	   return campos;
    }

	return NULL;
}