1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-05 08:40:30 +08:00
Files
fumidb/include/table.h
2022-05-03 17:36:09 +08:00

85 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _TABLE_H_
#define _TABLE_H_
#include <stdint.h>
#include "types.h"
// 创建表,可变参数为本表的一行的 types详见 types.h
// 如果 types 为外键,需要紧跟一个 uint64_t ptr
// 指示外键链接到的表位置
// 返回:
// NULL 失败,详见 errno
// table 指向表头的指针
void* create_table(int fd, const char* name, ...);
// 加载 ptr 位置的表
// 返回:
// NULL 失败,详见 errno
// table 指向表头的指针
void* load_table(int fd, uint64_t ptr);
// 获得表名长度包含结尾0
uint16_t get_table_name_length(void* table);
// 获得表名写入buflen(buf) >= len(name)
// 返回buf
char* get_table_name(void* table, char* buf);
// 为 pos 位置的列创建索引。不可用于 0 列,即 pk 列,因为 pk 必有索引
// 返回:
// NULL 失败,详见 errno
// index 指向索引头的指针
void* add_table_index(int fd, void* table, uint16_t pos);
// 删除 pos 位置的列的索引。不可用于 0 列,即 pk 列,因为 pk 必有索引
// 返回:
// 非 0 失败,详见 errno
// 0 成功
int remove_table_index(int fd, void* table, uint16_t pos);
// 插入一行,如果 pk 有值则替换
// 如果当前项有 nullable 属性,需要在此项之前
// 加一个 int isavailable标记本项是否有值
// 如果 isavailable==0后面不再跟有本项数据
// 如果 isavailable!=0则在后面附加数据
// 返回:
// 0 失败,详见 errno
// ptr 本行插入的位置
uint64_t insert_row(int fd, void* table, ...);
// 根据主键的匹配值查找行
// 如果主键不为 stringk 直接装填其值
// 否则k 是指向 string 的指针 (const char*)
// 返回:
// 0 失败,详见 errno
// ptr 行所在位置
uint64_t find_row_by_pk(int fd, void* table, key_t k);
// 根据任意匹配值遍历查找行
// 可变参数两两成对uint16_t pos + key_t val
// 如果 val 不为 string直接装填其值
// 否则,值是指向 string 的指针 (const char*)
// f 为遍历函数,入参为本行 ptr返回非 0 值中断遍历
// 返回:
// 非 0 失败,详见 errno
// 0 成功
int find_row_by(int fd, void* table, int (*f)(uint64_t), ...);
// 根据主键的匹配值删除行
// 如果主键不为 stringk 直接装填其值
// 否则k 是指向 string 的指针 (const char*)
// 返回:
// 非 0 失败,详见 errno
// 0 成功
int remove_row_by_pk(int fd, void* table, key_t k);
// 根据任意匹配值删除行
// 可变参数两两成对uint16_t pos + key_t val
// 如果 val 不为 string直接装填其值
// 否则,值是指向 string 的指针 (const char*)
// 返回:
// 非 0 失败,详见 errno
// 0 成功
int remove_row_by(int fd, void* table, ...);
#endif