1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-10 21:24:12 +08:00

add types

This commit is contained in:
源文雨
2022-05-01 21:16:17 +08:00
parent eda10fba91
commit 67b9176615
17 changed files with 310 additions and 26 deletions

View File

@@ -3,19 +3,33 @@
#include <stdint.h>
#define HEADERSZ 256
// 初始化并写入数据库文件头
// 返回:
// 0 成功
// 1 write 失败
// EOF lseek 失败
int init_file_header_page(int fd);
// 获得数据库版本
uint16_t get_db_version(int fd);
// 设置 ptr of unused blk 字段
// 返回:
// 0 成功
// 1 write 失败
// EOF lseek 失败
int set_first_unused_block(int fd, uint64_t ptr);
// 获得 ptr of unused blk 字段
uint64_t get_first_unused_block(int fd);
// 设置 ptr of next table 字段
// 返回:
// 0 成功
// 1 write 失败
// EOF lseek 失败
int set_first_table(int fd, uint64_t ptr);
// 获得 ptr of next table 字段

View File

@@ -16,6 +16,12 @@
// page 指针
void* alloc_page(int fd);
// 获取 ptr 处的页
// 返回:
// NULL 错误,参见 errno
// page 指针
void* get_page(int fd, uint64_t ptr);
// 刷新一页
// 返回:
// EOF lseek 错误,参见 errno
@@ -44,6 +50,12 @@ int free_page(int fd, void* page);
// blk 指针
void* alloc_block(int fd, uint16_t size);
// 获取 ptr 处的块
// 返回:
// NULL 错误,参见 errno
// blk 指针
void* get_block(int fd, uint16_t size, uint64_t ptr);
// 刷新 block 到文件
// 返回:
// EOF lseek 错误或 size 过大,参见 errno

6
include/table.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef _TABLE_H_
#define _TABLE_H_
#endif

38
include/types.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef _TYPES_H_
#define _TYPES_H_
#include <stdint.h>
#include <errno.h>
#define TYPE_INT8 0
#define TYPE_INT16 1
#define TYPE_INT32 2
#define TYPE_INT64 3
#define TYPE_FLOAT 4
#define TYPE_DOUBLE 5
#define TYPE_STRING 6
#define TYPE_BINARY 7
#define EXTYPE_NULL 0x00
#define EXTYPE_UNIQUE 0x40
#define EXTYPE_NONNULL 0x80
#define EXTYPE_FOREIGNKEY 0xc0
typedef uint8_t type_t;
typedef uint64_t key_t;
// 为类型 type 创建索引
// 返回:索引头节点的指针 index
uint64_t create_index(int fd, type_t t);
// 插入一条索引
int insert_item(int fd, type_t t, uint64_t index, key_t k, uint64_t ptr);
// 使用索引查找目标
// 返回ptr
uint64_t find_item_by_key(int fd, type_t t, uint64_t index, key_t k);
// 使用索引删除项
int remove_item_by_key(int fd, type_t t, uint64_t index, key_t k);
#endif

16
include/types/int8.h Normal file
View File

@@ -0,0 +1,16 @@
#ifndef _TYPE_INT8_H_
#define _TYPE_INT8_H_
#include "../types.h"
#define INT8_INDEX_SZ (256*8)
uint64_t create_int8_index(int fd);
int insert_int8_item(int fd, uint64_t index, key_t k, uint64_t ptr);
uint64_t find_item_by_int8_key(int fd, uint64_t index, key_t k);
int remove_item_by_int8_key(int fd, uint64_t index, key_t k);
#endif