forked from Trindad/dbms-interface
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon.h
156 lines (125 loc) · 6.03 KB
/
common.h
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include "erros.h"
/**
* Funções genéricas, utilizadas para a manipulação do banco
*/
#define SIZE 512 // Tamanho da página.
#define PAGES 1024 // Número de páginas.
#define TAMANHO_NOME_ARQUIVO 20 // Tamanho do nome do arquivo.
#define TAMANHO_NOME_DATABASE 30 // Tamanho do nome do arquivo.
#define TAMANHO_NOME_CAMPO 40 // Tamanho do nome dos campos de uma tabela.
#define TAMANHO_NOME_TABELA 20 // Tamanho do nome da tabela.
// Union's utilizados na conversão de variáveis do tipo inteiro e double.
union c_double{
double dnum;
char double_cnum[sizeof(double)];
};
union c_int{
int num;
char cnum[sizeof(int)];
};
struct fs_objects { // Estrutura usada para carregar fs_objects.dat
char nome[TAMANHO_NOME_TABELA]; // Nome da tabela.
int cod; // Código da tabela.
char nArquivo[TAMANHO_NOME_ARQUIVO];// Nome do arquivo onde estão armazenados os dados da tabela.
int qtdCampos; // Quantidade de campos da tabela.
// fs_database bd; //banco de dados ao qual o objeto pertence
};
typedef struct tp_table{ // Estrutura usada para carregar fs_schema.dat
char nome[TAMANHO_NOME_CAMPO]; // Nome do Campo. 40bytes
char tipo; // Tipo do Campo. 1bytes
int tam; // Tamanho do Campo. 4bytes
int chave; // Tipo da chave 4bytes
char tabelaApt[TAMANHO_NOME_TABELA]; //Nome da Tabela Apontada 20bytes
char attApt[TAMANHO_NOME_CAMPO]; //Nome do Atributo Apontado 40bytes
struct tp_table *next; // Encadeamento para o próximo campo.
struct fs_objects objetos; //objetos que pertence a um esquema
}tp_table;
typedef struct column{ // Estrutura utilizada para inserir em uma tabela, excluir uma tupla e retornar valores de uma página.
char tipoCampo; // Tipo do Campo.
char nomeCampo[TAMANHO_NOME_CAMPO]; //Nome do Campo.
char *valorCampo; // Valor do Campo.
struct column *next; // Encadeamento para o próximo campo.
}column;
typedef struct table{ // Estrutura utilizada para criar uma tabela.
char nome[TAMANHO_NOME_TABELA]; // Nome da tabela.
tp_table *esquema; // Esquema de campos da tabela.
}table;
typedef struct tp_buffer{ // Estrutura utilizada para armazenar o buffer.
unsigned char db; //Dirty bit
unsigned char pc; //Pin counter
unsigned int nrec; //Número de registros armazenados na página.
char data[SIZE]; // Dados
unsigned int position; // Próxima posição válida na página.
}tp_buffer;
int existeArquivo(char* filename);
/* ----------------------------------------------------------------------------------------------
Objetivo: Verificação de existência de um arquivo.
Parametros: Nome do arquivo.
Retorno: INT 1 (existe) , 0 (não existe).
---------------------------------------------------------------------------------------------*/
int TrocaArquivosObj(char *nomeTabela, char *linha);
/* ----------------------------------------------------------------------------------------------
Objetivo: Verifica se o nome da tabela 'nomeTabela' está nos primeiros bytes de 'linha'
Parametros: Nome da tabela, char linha.
Retorno: INT(1 - Está contido, 0 - Não está)
---------------------------------------------------------------------------------------------*/
int procuraObjectArquivo(char *nomeTabela);
/* ----------------------------------------------------------------------------------------------
Objetivo: Copia todas as informações menos a tabela com nome NomeTabela, que será removida.
Parametros: Nome da tabela que será removida do object.dat.
Retorno: INT
SUCCESS,
ERRO_ABRIR_ARQUIVO
---------------------------------------------------------------------------------------------*/
struct fs_objects leObjeto(char *nTabela);
/*
Esta função busca, no arquivo fs_object.dat, pelo nome da tabela retornando as informações que
estão no dicionário em uma estrutura fs_objects. Caso o nome da tabela não exista, o programa
aborta.
*nTabela - Nome da tabela a ser buscado no dicionário de dados
*/
tp_table *leSchema (struct fs_objects objeto);
/*
Esta função busca, no arquivo fs_schema.dat, pelas informações do objeto, carregando o esquema
da tabela que é retornadado em tp_table.
Caso o nome da tabela não exista, o programa aborta
*objeto - Objeto, já previamente inicializado em leObjeto(nTabela), que contém as informações
sobre uma determinada tabela.
*/
int procuraSchemaArquivo(struct fs_objects objeto);
/* ----------------------------------------------------------------------------------------------
Objetivo: Copia todas as informações menos a tabela do objeto, que será removida.
Parametros: Objeto que será removido do schema.
Retorno: INT
SUCCESS,
ERRO_REMOVER_ARQUIVO_SCHEMA
---------------------------------------------------------------------------------------------*/
void show_schema(struct fs_objects objeto,char *name_table);
/* ----------------------------------------------------------------------------------------------
Objetivo:
Parametros:
Retorno:
---------------------------------------------------------------------------------------------*/
/**
* Funções para conversões
*/
int pot10(int n);
int strtam(char n[]);
int convertI(char u[]);
double get_decimal(char u[]);
double get_inteiro(char v[]);
double convertD(char u[]);
int *tamanho_maximo_campo(struct fs_objects objeto);//verifica o tamanho máximo dos campos para imprimir formatado o esquema
extern int verificaNomeTabela(char *nomeTabela);
/*
Esta função verifica se um nome de tabela já está inserido no dicionario.
Retorna:
-> 1 se o nome existe no dicionario;
-> 0 se existe no dicionário.
*nomeTabela - Nome de uma tabela, a qual deseja-se saber se existe no dicionario.
*/
extern int quantidadeTabelas();