DBTable.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef DBTABLE_H
  2. #define DBTABLE_H
  3. //定义支持复制、事务处理的,多索引记录的数据表类
  4. #include "db.h"
  5. #define MAX_INDEX 16
  6. #define MAX_TABLE_NAME 256
  7. typedef int (*GetIndexFunc)(DB *, const DBT *, const DBT *, DBT *);
  8. class ZDBTable {
  9. DB *primary_db; //存放主键-数据的数据库
  10. DB *index_db[MAX_INDEX]; //存放索引-主键的数据库
  11. GetIndexFunc get_index_funcs[MAX_INDEX]; //从数据中获得二级key的的函数列表
  12. bool is_index_unique[MAX_INDEX]; //索引是否唯一
  13. int index_number; //二级索引数目
  14. char table_name[MAX_TABLE_NAME];
  15. DBC *dbcp; //目前考虑单线程,使用一个CURSOR
  16. protected:
  17. char env_path[MAX_TABLE_NAME];
  18. DB_ENV *dbenv; //数据库环境
  19. char *_search(bool bKey, const char *key_ptr, int key_size, int &size, int index); //搜索指定记录
  20. char *_next(bool bKey, int &size); //下一个记录
  21. public:
  22. ZDBTable(const char *path, const char *name); //环境目录和数据表的名字
  23. virtual ~ZDBTable();
  24. int addIndex(GetIndexFunc func, bool isUnique = false); //增加二级索引
  25. bool open(); //打开数据表
  26. void close(); //关闭数据表
  27. bool commit(); //基于事务的提交
  28. //基本记录操作
  29. bool add(const char *key_ptr, int key_size, const char *data_ptr, int data_size);
  30. char *search(const char *key_ptr, int key_size, int &size, int index = -1){
  31. return _search(false, key_ptr, key_size, size, index); //搜索指定记录
  32. }
  33. char *next(int &size) { //下一个记录
  34. return _next(false, size);
  35. }
  36. char *search_key(const char *key_ptr, int key_size, int &size, int index = -1) { //搜索指定记录,返回主键值
  37. return _search(true, key_ptr, key_size, size, index); //搜索指定记录
  38. }
  39. char *next_key(int &size) { //下一个记录,返回主键值
  40. return _next(true, size);
  41. }
  42. bool remove(const char *key_ptr, int key_size, int index = -1);
  43. };
  44. #endif