-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdatabase.h
150 lines (99 loc) · 3.71 KB
/
database.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
#ifndef DATABASE_SRC_H_
#define DATABASE_SRC_H_
#include <stdio.h>
#include "tokenizer.h"
#define MODULES_TB_ID 1
#define LEVELS_TB_ID 2
#define STATUSSES_TB_ID 3
#define TABLE_COLUMNS_MAX_SIZE 6
typedef struct Modules {
int id;
char name[30];
int mem_level_number;
int level_cell_number;
int del_flag;
} modules_tb;
typedef struct Levels {
int mem_level_number;
int cells_number;
int protect_flag;
} levels_tb;
typedef struct Statusses {
int event_id;
int module_id;
int new_module_status;
char status_date_change[11];
char status_time_change[9];
} statusses_tb;
typedef struct Entity {
union {
modules_tb *module;
levels_tb *level;
statusses_tb *status;
};
int curr_table;
} tb_entity;
////////////////// QUERIES /////////////////////
#define SELECT_QUERY_ID 1
#define INSERT_QUERY_ID 2
#define UPDATE_QUERY_ID 3
#define DELETE_QUERY_ID 4
// select id, name from modules (group by id)
typedef struct SelectQuery {
int columns[TABLE_COLUMNS_MAX_SIZE];
int table_id;
} select_q;
// insert into modules (id, name) (12, "new module")
typedef struct InsertQuery {
int table_id;
int columns[TABLE_COLUMNS_MAX_SIZE];
token_t **values;
} insert_q;
// update modules set id = 12, name = "updated module"
typedef struct UpdateQuery {
int table_id;
int columns[TABLE_COLUMNS_MAX_SIZE];
token_t **values;
} update_q;
// delete from modules where id = 2
typedef struct DeleteQuery {
int table_id;
int columns[TABLE_COLUMNS_MAX_SIZE];
token_t **values;
} delete_q;
typedef struct Query {
union {
select_q *select_query;
insert_q *insert_query;
update_q *update_query;
delete_q *delete_query;
};
int query_id;
} query_t;
query_t *new_query(int query_id);
void free_query(query_t *query);
select_q *new_select_query(int columns[TABLE_COLUMNS_MAX_SIZE], int table_id);
insert_q *new_insert_query(int table_id, int columns[TABLE_COLUMNS_MAX_SIZE], int size, token_t **values);
update_q *new_update_query(int table_id, int columns[TABLE_COLUMNS_MAX_SIZE], int size, token_t **values);
delete_q *new_delete_query(int table_id, int columns[TABLE_COLUMNS_MAX_SIZE], int size, token_t **values);
//////////////////////////////////////////////////////
void select(select_q *query);
void insert(insert_q *query);
void update(update_q *query);
void delete(delete_q *query);
void select_from_database_statusses(int columns[TABLE_COLUMNS_MAX_SIZE]);
void insert_from_database_statusses(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void update_from_database_statusses(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void delete_from_database_statusses(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void select_from_database_modules(int columns[TABLE_COLUMNS_MAX_SIZE]);
void insert_from_database_modules(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void update_from_database_modules(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void delete_from_database_modules(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void select_from_database_levels(int columns[TABLE_COLUMNS_MAX_SIZE]);
void insert_from_database_levels(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void update_from_database_levels(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void delete_from_database_levels(int columns[TABLE_COLUMNS_MAX_SIZE], token_t** values);
void rewriting_file_in_insert1(levels_tb* tmp_db, levels_tb* swap_db, FILE* file);
void rewriting_file_in_insert2(statusses_tb* tmp_db, statusses_tb* swap_db, FILE* file);
void rewriting_file_in_insert3(modules_tb tmp_db, modules_tb swap_db, FILE* file);
#endif // DATABASE_SRC_H_