Example #1
0
int checkCreateDB(char *nome){
    
    int id = -2;
    
    if(!existeArquivo("fs_database.dat")){//se o arquivo com os nomes dos bancos não existir ele é criado.
        grava_banco(nome);
        return 0;
    }
    
    //verificando se o nome do banco já existe em fs_database.dat
    id = busca(nome,1);//se encontrar o banco já cadastrado retorna seu id
   
    //retorno de funcao indicando sucesso
    if(id == -2)
    {
        grava_banco(nome);
    }  
    else
    {
        return -3;
    }
    
    return 0;
    
}
Example #2
0
int enviaNomeComando(conexao *conn,char *comando){
	byte *dados;
	size_t tamanho, restantes;
	Pacote p;

	if (!existeArquivo(comando))
		return 0;
	
	tamanho = strlen(comando);
	dados = (byte *)comando;
	
	if(tamanho <= MAX_TAM_DADOS){
		if (strstr (comando, "get ") != NULL)	
			criaPacote(&p,tamanho,G,dados);
		if (strstr (comando, "put ") != NULL)	
			criaPacote(&p,tamanho,P,dados);
		if (strstr (comando, "cd ") != NULL)	
			criaPacote(&p,tamanho,C,dados);
		if (strstr (comando, "ls") != NULL)	
			//criaPacote(&p,tamanho,L,(byte*)'0');
			criaPacote(&p,tamanho,L,dados);

	}else{
		printf ("Tamanho do comando muito grande!!\n");
		return 0;	
	}
		
	if (enviaPacote(conn,&p) == 0)
		return -1;
	
	return 1;
}
Example #3
0
//busca por nome do banco se estiver cadastrado retorna a id dele
int busca(char *str, int identificacao){//a identificacao indicara qual if será executado
	
    id_max = 0;

	int cod_retorno;
    FILE *file;
    db *database = (db *)malloc(sizeof(db));

    if (database == NULL)
    {
        printf("Out of memory.\n");
        abort();
    }
    
    if(!existeArquivo("fs_database.dat"))
        return -1;
    
    int cod = (cod_id_db(1)), cont = 1;

    file = fopen("fs_database.dat", "r");  
         
    if(file != NULL)
    {
       for(; cont < cod; cont++){
           
            fread(&database->cod,sizeof(int),1,file);
            fread(&database->nome,sizeof(char),TAM_NOME_BANCO,file);
            
            if (id_max < database->cod) id_max = database->cod;

            if(identificacao == 1)
            {
                if(!strcmp(str,database->nome))
                {
                    fclose(file);
                    cod_retorno = database->cod;
                    if(database != NULL)free(database);
                    return cod_retorno;
                }
            }
            if(identificacao == 2)
            {
                printf("\nDatabase: %s", database->nome);
            }
       }
    }
    else 
    {
        printf("\nCannot open fs_database!\n");
    }
    
    if(database != NULL)free(database);
    fclose(file);
    return -2;
}
Example #4
0
File: lelog.c Project: arnonvs/SOII
int main(int argc, char** argv){
    FILE *file;
    struct dados d;
    if((existeArquivo("logData.log")) == SUCESS){
        if((file = fopen("logData.log", "rb")) == NULL){
            printf("Nao possivel abrir arquivo!\n");
        }
        fseek(file, 0, SEEK_SET);
    }else{
        printf("Arquivo nao existe!");
        return FAIL;
    }
    while(fread(&d, sizeof(struct dados), 1, file) == 1){
        printf("Data: %d/%d/%d Hora: %d:%d:%d Comando %d: %s\n", d.t.dia, 
        d.t.mes, d.t.ano, d.t.hora, d.t.min, d.t.seg, d.id_comando, d.comando);
    }
    return SUCESS;
}
Example #5
0
/**
 * Imprime o nome dos banco de dados existentes.
 */
void listaBancos() 
{
    FILE *file;
    db *database = (db *)malloc(sizeof(db));

    if (database == NULL)
    {
        printf("Out of memory.\n");
        abort();
    }
    
    if(!existeArquivo("fs_database.dat")) {
        printf("No database created.\n");
    }
    
    int quant_db = (cod_id_db(1)), cont = 1;

    file = fopen("fs_database.dat", "r");  
         
    if(file != NULL)
    {
       for(; cont < quant_db; cont++){
           
            fread(&database->cod,sizeof(int),1,file);
            fread(&database->nome,sizeof(char),TAM_NOME_BANCO,file);

            printf("%s\n", database->nome);
       }
    }
    else 
    {
        printf("\nCannot open fs_database!\n");
    }
    
    if(database != NULL)free(database);
    fclose(file);
}
Example #6
0
int main (int argc, char** argv){
    int i = 1;
    FILE *file;
    struct tm *pt;
    struct dados d;

    if((existeArquivo("logData.log")) == FAIL){
        if((file = fopen("logData.log", "wb")) == NULL){
            printf("Nao possivel criar arquivo!\n");
            return FAIL;
        }
    }else{
        if((file = fopen("logData.log", "rb+")) == NULL){
            printf("Nao possivel abrir arquivo!\n");
            return FAIL;
        }
        fseek(file, 0, SEEK_END);
    }

    while(strcmp(d.comando, "exit") != SUCESS){
        printf("$ ");
        gets(d.comando);
        system(d.comando);
        d.id_comando = i;
        pt = pegaTempo();
        copiaTempo(&d, pt);
        if(fwrite(&d, sizeof(struct dados), 1, file) == 1){
            printf("Elemento gravado com sucesso!\n");
        }else{
            printf("Nao foi possivel gravar elemento!\n");
        }
    }

    fclose(file);
    
	return SUCESS;
}
Example #7
0
void shell()
{
	current_database = -1;
	char entrada[1000], nomeBD[TAM_NOME_BANCO];
    int resultado = 0, codDB = -1;
    nomeBD[0]='\0';

    char *current_db_name = strdup(">");//inicializa com nenhum banco conectado
	char *start;
    
    start = strdup("dbms-start");//este comando posteriormente como start do banco, no momento ele é automatico
	printf("\nWelcome to the DBMS Interface.\nType 'help' '\\h' for help.\n\n");	

	/**
	 * ****************************
	 * 
	 *   Comandos do shell
	 *
	 * ****************************
	 */
	using_history ();//função para usar o histórico
	read_history (".history_file");

	while(1)
	{
		int nTokens;

		strcpy(entrada, readline(current_db_name));

		/**
		 * Adiciona ao histórico
		 */
		if (entrada[0])
        {
			char *expansion;
			int result;

			result = history_expand (entrada, &expansion);
			if (result)
			fprintf (stderr, "%s", expansion);

			if (result < 0 || result == 2)
			{
			  free (expansion);
			  continue;
			}

			add_history (expansion);
			strncpy (entrada, expansion, sizeof (entrada) - 1);
			free (expansion);

			write_history (".history_file");//adiciona no histórico
        }

		char **tokens = tokenize( trim_white_space(remove_newline(entrada)),' ',&nTokens);
		
		/**
		 * Opção para criar tabela e banco de dados
		 */
		if (strcmp(strtolower(tokens[0]),"create")==0)
		{
			if(strcmp(strtolower(tokens[1]),"table")==0)
			{
				if (current_database == -1)
				{
					printf("Not connected to any database.\n");
					continue;
				}
				createTable(entrada,current_database);
			}
			else if(strcmp(strtolower(tokens[1]),"database")==0)
			{
				if (nTokens >= 5)
				{
					printf("Invalid command. Type help to show de interface usage.\n");
					continue;
				}
				if (strlen(tokens[2]) > TAM_NOME_BANCO )
				{
					printf("Database name too big.\n");
					continue;
				}

				resultado = checkCreateDB( remove_semicolon(tokens[2]) );//verifica a existência do nome e grava-o no arquivo
				
				if(resultado==-1) 
				{
					printf("Error creating database file.\n");
				}
				if(resultado==-3) 
				{
					printf("Database exists.\n");
				}
				else
				{
					printf("Database created successfully.\n");
				}
			} 
			else
			{
				printf("Invalid command. Type help to show de interface usage.\n");
				continue;
			}   
		}
		/**
		 * Conecta ao banco de dados passado como parâmetro
		 */
		else if(strcmp(strtolower(tokens[0]),"\\c") == 0){
				
			if (nTokens != 2)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");

				continue;
			}
			char *name_db = remove_semicolon(tokens[1]);
			codDB = busca(name_db,1); //função chamada para conecção no banco, retorna o codigo do banco ao conectar
		
			if (codDB >= 0)
			{
				strcpy(nomeBD, name_db);  //passa o nome do bd, para a variavel mostrar ao usuario qual o banco conectado
				free(current_db_name);
				
				current_db_name = (char*) malloc (sizeof(char)*(strlen(name_db)+3));

				if (current_db_name == NULL)
				{
					printf("Out of memory.\nAborting...\n");
				}

				strcpy(current_db_name,name_db);
				current_database = codDB;

				strcat(current_db_name,"=#");
				current_db_name[strlen(current_db_name)] = '\0'; 
			}
			else
			{
				printf("No such database '%s'.\n", name_db);
				continue;
			}
		}
		/**
		 * Insere tuplas em uma tabela
		 */
		else if(strcmp(strtolower(tokens[0]),"insert")==0)
		{
			if (current_database == -1)
			{
				printf("Not connected to any database.\n");
				continue;
			}
			
			insert(entrada,current_database);
		}
		/**
		 * Imprime as tabelas do banco de dados atual
		 * ou o esquema de uma tabela
		 */
		else if(strcmp(strtolower(tokens[0]),"\\d")==0)
		{
			if (current_database == -1)
			{
				printf("Not connected to any database.\n");
				continue;
			}
			if (nTokens >= 3)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");

				continue;
			}
			else if (nTokens == 1)
			{
				//imprime tabelas do banco de dados
				listaTabelas(current_database);
			}
			else
			{
				//imprime o esquema de uma tabela
				char *t = table_name_real(remove_semicolon(tokens[1]),current_database);

				if(!verificaNomeTabela(t)){
			        printf("Invalid table name.\n");
					free(t);
			        continue;			    
			    }

				struct fs_objects objeto = leObjeto(t);//para verificar se a tabela esta no banco 						
				

				show_schema(objeto,tokens[1]);

				free(t);
			}
		   
		} 
		/**
		 * Comando temporário para imprimir tabela
		 */
		else if (strcmp(strtolower(tokens[0]),"select")==0)
		{
			if (current_database == -1)
			{
				printf("Not connected to any database.\n");
				continue;
			}
			
			selectTable(entrada,current_database);
		}
		/**
		 * Imprime os registros da tabela passada
		 */
		else if (strcmp(strtolower(tokens[0]),"show")==0)
		{
			if (nTokens != 2)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");

				continue;
			}
			if (current_database == -1)
			{
				printf("Not connected to any database.\n");
				continue;
			}
			if (verificaNomeTabela(table_name_real(remove_semicolon(tokens[1]),current_database) ) == 0 )
			{
				printf("Table %s doesn't exist.\n",remove_semicolon(tokens[1]));
				continue;
			}

			char *t = table_name_real(remove_semicolon(tokens[1]),current_database);

			char *file = table_name_real(remove_semicolon(tokens[1]),current_database);
			strcat(file,".dat");
			
			if (existeArquivo(file) == 0)
			{
				printf("Table is empty.\n" );
				continue;
			}

			imprime(t);
			free(file);
			free(t);
		}  
		/**
		 * Lista os bancos existentes
		 */
		else if(strcmp(strtolower(tokens[0]),"\\l")==0)
		{
			if (nTokens != 1)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");

				continue;
			}
			//LISTA os bancos existentes
			listaBancos();
		}   
		/**
		 * Opção para deletar o banco de dados e tabelas
		 */
		else if(strcmp(strtolower(tokens[0]),"drop")==0)
		{
			if (nTokens != 3)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");

				continue;
			}
			else if(strcmp(strtolower(tokens[1]),"table") == 0){
				
				if (current_database == -1)
				{
					printf("Not connected to any database.\n");
					continue;
				}
				if (verificaNomeTabela(table_name_real(remove_semicolon(tokens[2]),current_database) ) == 0 )
				{
					printf("Table %s doesn't exist.\n",remove_semicolon(tokens[2]));
					continue;
				}
				
				char *t = table_name_real(remove_semicolon(tokens[2]),current_database);
				char *exist = table_name_real(remove_semicolon(tokens[2]),current_database);
			
				int ok = excluirTabela(t);

				if (ok == SUCCESS)
				{
					printf("Table deleted successfully.\n");
				}

				free(exist);
				free(t);
			}
			else if(strcmp(strtolower(tokens[1]),"database") == 0){
				
				char *exist = table_name_real(remove_semicolon(tokens[2]),current_database);
				strcat(exist,".dat");
				
				if (existeArquivo(exist) != 0)
				{
					printf("The database is not empty for drop, there are existing tables.\n" );
					continue;
				}
				
				exist = remove_semicolon(tokens[2]);
				codDB = busca(exist,1);
				
				if(codDB == current_database)
				{
                	printf("Cannot drop the currently open database.\n");
                    continue;
				}

				int drop = dropDatabase(remove_semicolon(tokens[2]));

				if(drop == 1)printf("Database deleted successfully.\n");
                
                free(exist);
			}
		}
		/**
		 * Ajuda ao usuário com exemplos da sintaxe dos comandos
		 */
		else if (strcmp(strtolower(tokens[0]),"help")==0 || strcmp(strtolower(tokens[0]),"\\h")==0)
		{
			if (nTokens != 1)
			{
				printf("Invalid number of arguments. Type help to show the interface usage.\n");
			}

			help();
		}
		/**
		 * Imprime mensagem de copyright
		 */
		else if(strcmp(strtolower(remove_semicolon(tokens[0])),"\\copyright")==0)
		{
			printf("\nDatabase Management System\n");
			printf("\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose, without fee, and without a written agreement\nis hereby granted, provided that the above copyright notice and this\nparagraph and the following two paragraphs appear in all copies.\n");
			printf("\nTHIS SOFTWARE IS BEING DEVELOPED BY STUDENTS OF DATABASE II CLASS AT UNIVERSIDADE FEDERAL DA FRONTEIRA SUL.\n\n");	
		}
		/**
		 * Comando de saída
		 */
		else if(strcmp(strtolower(remove_semicolon(tokens[0])),"exit")==0)
		{
			break;
		} 
		else if(strcmp(strtolower(remove_semicolon(tokens[0])),"quit")==0)
		{
			break;
		}
		else if(strcmp(strtolower(remove_semicolon(tokens[0])),"bye")==0)
		{
			break;
		}
		else if(strcmp(strtolower(remove_semicolon(tokens[0])),"\\q")==0)
		{
			break;
		}
		else
		{
			printf("Invalid command. Type help to show the interface usage.\n");
			continue;
		}
	}  

	free(start);
	free(current_db_name);
}
Example #8
0
void example()
{
	int ok = checkCreateDB("UFFS");//cria banco caso não exista

	current_database = busca("UFFS",1);

	if (!ok)
	{	
	    int nrTabelas = 3;
	    int nTabela[nrTabelas];
	    table  *tab[nrTabelas]; 
	    column *colunas;
	    int object, schema;
	    
	    object      = existeArquivo("fs_object.dat");
	    schema      = existeArquivo("fs_schema.dat");
	   
	    nTabela[0]  = existeArquivo(table_name_real("Aluno",current_database));
	    
	    nTabela[1]  = existeArquivo(table_name_real("Inst",current_database));

	    nTabela[2]  = existeArquivo(table_name_real("Inscri",current_database));


        if(!nTabela[0]){ 
    		
            tab[0] = iniciaTabela(table_name_real("Aluno",current_database));                //Cria a tabela 
            tab[0] = adicionaCampo(tab[0], "CPF"     , 'I', (sizeof(int))   ,PK,"","");     //Cria os atributos
            tab[0] = adicionaCampo(tab[0], "Nome"    , 'S', 20              ,NPK,"","");        
            tab[0] = adicionaCampo(tab[0], "Endereco", 'S', 20              ,NPK,"","");
            tab[0] = adicionaCampo(tab[0], "Peso"    , 'D', (sizeof(double)),NPK,"","");
            finalizaTabela(tab[0],current_database);
            
         }
         if(!nTabela[1]){   
         	
            tab[1] = iniciaTabela(table_name_real("Inst",current_database)); 
            tab[1] = adicionaCampo(tab[1], "CodInst"  , 'I', (sizeof(int))   ,PK , "","");
            tab[1] = adicionaCampo(tab[1], "Nome"     , 'S', 20              ,NPK, "","");
            tab[1] = adicionaCampo(tab[1], "Endereco" , 'S', 20              ,NPK, "","");
            tab[1] = adicionaCampo(tab[1], "Reitor"   , 'S', 10              ,NPK, "","");
            finalizaTabela(tab[1],current_database);
        }
        if(!nTabela[2]){
        	
            tab[2] = iniciaTabela(table_name_real("Inscri",current_database)); 
            tab[2] = adicionaCampo(tab[2], "CodMat"     , 'I', (sizeof(int))  ,PK, "","");
            tab[2] = adicionaCampo(tab[2], "CPF"        , 'I', (sizeof(int))  ,FK, table_name_real("Aluno",current_database),"CPF");
            tab[2] = adicionaCampo(tab[2], "CodInst"    , 'I', (sizeof(int))  ,FK , table_name_real("Inst",current_database),"CodInst");
            tab[2] = adicionaCampo(tab[2], "Curso"   , 'S',  20  ,NPK,"","");
            finalizaTabela(tab[2],current_database);
        }
         
         //Inserção de tuplas na tabela1   
        colunas = NULL;     
        colunas = insereValor(tab[0],colunas, "CPF", "123456");
        colunas = insereValor(tab[0],colunas, "Nome", "Rogerio");
        colunas = insereValor(tab[0],colunas, "Endereco", "Rua Marechal");
        colunas = insereValor(tab[0],colunas, "Peso", "81.4");
        finalizaInsert(table_name_real("Aluno",current_database), colunas); 
        
        colunas = NULL;     
        colunas = insereValor(tab[0],colunas, "CPF", "654321");
        colunas = insereValor(tab[0],colunas, "Nome", "Ricardo");
        colunas = insereValor(tab[0],colunas, "Endereco", "RuaClevela");
        colunas = insereValor(tab[0],colunas, "Peso", "88.9");
        finalizaInsert(table_name_real("Aluno",current_database), colunas); 

        colunas = NULL;     
        colunas = insereValor(tab[0],colunas, "CPF", "1234567");
        colunas = insereValor(tab[0],colunas, "Nome", "Natan");
        colunas = insereValor(tab[0],colunas, "Endereco", "RuaDelmi");
        colunas = insereValor(tab[0],colunas, "Peso", "58.9");
        finalizaInsert(table_name_real("Aluno",current_database), colunas); 
            
        
        //Inserção de tuplas na tabela2 
        colunas = NULL;
        colunas = insereValor(tab[1],colunas, "CodInst", "111");
        colunas = insereValor(tab[1],colunas, "Nome", "UFFS");
        colunas = insereValor(tab[1],colunas, "Endereco", "RuadeTerra");
        colunas = insereValor(tab[1],colunas, "Reitor", "MandaChuva");
        finalizaInsert(table_name_real("Inst",current_database), colunas);
        
        colunas = NULL;
        colunas = insereValor(tab[1],colunas, "CodInst", "222");
        colunas = insereValor(tab[1],colunas, "Nome", "CEFET");
        colunas = insereValor(tab[1],colunas, "Endereco", "RuadePedra");
        colunas = insereValor(tab[1],colunas, "Reitor", "MandaVento");
        finalizaInsert(table_name_real("Inst",current_database), colunas);

        colunas = NULL;
        colunas = insereValor(tab[1],colunas, "CodInst", "333");
        colunas = insereValor(tab[1],colunas, "Nome", "UNOESC");
        colunas = insereValor(tab[1],colunas, "Endereco", "RuadeAsfal");
        colunas = insereValor(tab[1],colunas, "Reitor", "MandaAgua");
        finalizaInsert(table_name_real("Inst",current_database), colunas);
        
        
        
        //Inserção de tupla na tabela3
        colunas = NULL;
        colunas = insereValor(tab[2],colunas, "CodMat", "1401");
        colunas = insereValor(tab[2],colunas, "CPF", "123456");
        colunas = insereValor(tab[2],colunas, "CodInst", "333");
        colunas = insereValor(tab[2],colunas, "Curso", "CC");
        finalizaInsert(table_name_real("Inscri",current_database), colunas);
        
        colunas = NULL;
        colunas = insereValor(tab[2],colunas, "CodMat", "1402");
        colunas = insereValor(tab[2],colunas, "CPF", "654321");
        colunas = insereValor(tab[2],colunas, "CodInst", "222");
        colunas = insereValor(tab[2],colunas, "Curso", "CC");
        finalizaInsert(table_name_real("Inscri",current_database), colunas);
        
        colunas = NULL;
        colunas = insereValor(tab[2],colunas, "CodMat", "1403");
        colunas = insereValor(tab[2],colunas, "CPF", "1234567");
        colunas = insereValor(tab[2],colunas, "CodInst", "111");
        colunas = insereValor(tab[2],colunas, "Curso", "ADM");
        finalizaInsert(table_name_real("Inscri",current_database), colunas);
	}
  
    current_database = -1;//não existe nenhum banco logado
}