mirror of
https://github.com/fumiama/fumidb.git
synced 2026-06-10 21:24:12 +08:00
add types
This commit is contained in:
@@ -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 字段
|
||||
|
||||
@@ -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
6
include/table.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef _TABLE_H_
|
||||
#define _TABLE_H_
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
38
include/types.h
Normal file
38
include/types.h
Normal 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
16
include/types/int8.h
Normal 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
|
||||
Reference in New Issue
Block a user