forked from laisborin/bufferpoll_BDII
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Leia-me[Instrucoes].txt
95 lines (64 loc) · 4.63 KB
/
Leia-me[Instrucoes].txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Universidade Federal da Fronteira Sul – UFFS
Curso: Ciência da Computação
Componente Curricular: Banco de Dados II
Professor: Dr. Denio Duarte
Alunos: Gabrielle Almeida de Souza e Lais Borin
Introdução
Trabalho desenvolvido para o componente curricular de Banco de Dados II, sua finalidade é implementar a criação de tabelas, bem como a inclusão de tuplas em disco e remoção de tuplas do buffer complementando o que ja havia sido feito anteriormente.
Sobre o dicionário de dados e o esquema:
Por definição, o dicionário de dados está no aquivo fs_object.dat e o esquema em fs_schema.dat, os mesmos serão criados no diretório raiz da pasta dos fontes.
São carregados na memória pelas funçõe leObjeto(nTabela) e leSchema(objeto) e tem a seguinte estrutura:
struct fs_objects { // Estrutura usada para carregar fs_object.dat
char nome[20];
int cod;
char nArquivo[20];
int qtdCampos;
};
typedef struct tp_table{ // Estrutura usada para carregar fs_schema.dat
char nome[TAMANHO_NOME_CAMPO];
char tipo;
int tam;
struct tp_table *next;
}tp_table;
O arquivo fs_object.dat organiza-se da seguinte forma:
20B que representam o nome da tabela;
1B que representam o código da tabela;
20B que representa o nome do arquivo onde estão as tuplas da tabela;
4B que representa a quantidade de campos da tabela.
O arquivo fs_schema.dat organiza-se da seguinte forma:
4B que representam o codigo da tabela; (Código que representa a tabela em fs_objects.dat)
40B que representam o nome do campo;
1B que representa o tipo do campo;
4B que representa o tamanho do campo.
Caso os arquivos fs_object.dat e fs_schema.dat não existam ainda, quando chamada, a função finalizaTabela(...) criará os mesmos adicionando os dados da tabela criada.
Sobre a criação e inserção em tabelas:
Para criar uma tabela é necessário uma estrutura do tipo 'table'. Esta estrutura armazenará os dados da tabela a ser criada.
Após a criação de uma istância de 'table' é necessário iniciá-la com o nome da tabla a ser criada usando a função iniciaTabela(nomeTabela):
table *t = NULL;
t = iniciaTabela("Pessoa");
A partir da iniciação da tabela, pode-se adicionar os campos utilizando a função adicionaCampo(t, nomeCampo, tipoCampo, tamanhoCampo):
t = adicionaCampo(t, "Nome", 'S', 20); // Cria um campo de nome 'Nome' do tipo string e de tamanho 20
t = adicionaCampo(t, "Idade", 'I', 4); // Cria um campo de nome 'Idade' do tipo inteiro e de tamanho 4
Agora, para a tabela ser finalmente adicionada ao dicionário de dados e ao esquema, chama-se a função finalizaTabela(t);
Criada a tabela, pode-se inserir os dados.
Quanto da inserção, é necessário criar uma estrutura do tipo 'column' que criará uma lista encadeada de valores a serem adicionados a tabela.
Para adicionar uma tupla na tabela, é preciso inserir valor por valor de cada campo chamando a função insereValor(c, nomeCampo, valorCampo):
column *c = NULL;
c = insereValor(c, "Nome", "Joana");
c = insereValor(c, "Idade", "40");
OBS: A inserção dos dados deve ocorrer na sequência de criação de campo, sendo que não é possível realizar a inserção incompleta de uma tupla
Assim, com os dados já adicionados na tabela, basta chamar a função finalizaInsert(nomeTabela, c) para gravar as tuplas no arquivo nomeTabela.dat, que armazena os dados referente a esta tabela:
finalizaInsert("Pessoa", c);
Sobre inserir uma tupla no buffer:
Para adicionar uma tupla no buffer, realize o seguinte tendo já o bufferpoll, o esquema e o objeto devidamete inicializados:
colocaTuplaBuffer(bufferpoll, 0, esquema, objeto); // Onde '0' é tupla a ser adicionada, relativa a ordem de inserção em sua tabela
Sobre excluir uma tupla do buffer e recuperar uma página do buffer:
Para excluir uma tupla e obter a mesma para impressão, basta chamar a função com o buffer, esquema, a página a excluir uma tupla e a tupla a ser excluida:
column *tuplaE = excluirTuplaBuffer(buffer, esquema, objeto, 0, 2); // '2' é a posição da tupla relativa a página do buffer
Para recuperar uma página do buffer, bem como obter esta página, basta chamar a função com o buffer, o esquema e o número da página a ser recuperada, como segue:
column *pagina = getPage(bufferpoll, esquema, objeto, 0);
A estrutura do tipo 'column' foi criada com o objetivo de armazenar os dados das tabelas, bem como para promover possíveis impressões de dados.
Da compilação:
$ gcc *.c -o prog -Wall
$ ./prog <Nome da Tabela>
----------------------------------------------------------------------------------------------------------------------------------------------