acl/lib_acl_cpp/app/ndb/ctl_server/db_ctl.h

160 lines
4.3 KiB
C
Raw Normal View History

#pragma once
2014-11-19 00:25:21 +08:00
#include "db.h"
class acl::db_handle; // db_handle.hpp
class acl::locker; // locker.hpp
class db_driver;
class database;
class idx_host;
class dat_host;
struct NAME_TYPE;
struct DB_HOST;
struct DB_TBL;
struct TBL_IDX;
typedef enum
{
NAME_TYPE_DB = 0,
NAME_TYPE_TBL = 1,
NAME_TYPE_IDX = 2
} name_type_t;
enum
{
DB_CTL_OK = 0,
DB_CTL_ERR = 1,
};
class db_ctl
{
public:
db_ctl(void);
~db_ctl(void);
/**
*
2014-11-19 00:25:21 +08:00
*/
void load();
/**
* NULL
* @param dbname {const char*}
* @param dbuser {const char*}
* @param dbpass {const char*}
* @return {database*} NULL
2014-11-19 00:25:21 +08:00
*/
database* db_open(const char* dbname, const char* dbuser = NULL,
const char* dbpass = NULL);
/**
*
* @param dbname {const char*}
* @param dbuser {const char*}
* @param dbpass {const char*}
* @return {database*} NULL
2014-11-19 00:25:21 +08:00
*/
database* db_create(const char* dbname, const char* dbuser = NULL,
const char* dbpass = NULL);
/**
*
2014-11-19 00:25:21 +08:00
* @param {database*} db
*/
void db_close(database* db);
/**
*
* @param db {database*}
* @param tbl_name {const char*}
* @return {db_tbl*}
2014-11-19 00:25:21 +08:00
*/
db_tbl* db_add_tbl(database* db, const char* tbl_name);
/**
*
* @param tbl {db_tbl*}
* @param tbl_idx {const char*}
* @param idx_type {idx_type_t}
* @return {db_idx*}
2014-11-19 00:25:21 +08:00
*/
db_idx* db_add_idx(db_tbl* tbl, const char* tbl_idx, idx_type_t idx_type);
/**
*
* @param db {database*}
* @param tbl_name {const char*}
* @param tbl_idx {const char*}
* @param idx_type {idx_type_t}
* @return {db_idx*}
2014-11-19 00:25:21 +08:00
*/
db_idx* db_add_idx(database* db, const char* tbl_name,
const char* tbl_idx, idx_type_t idx_type);
protected:
/**
*
2014-11-19 00:25:21 +08:00
* @param db {database*}
* @return {bool}
*/
bool db_host_set(database* db);
private:
int errnum_;
db_driver* driver_;
acl::locker* lock_; // db_ctl 对象的互斥锁
acl::locker* ctl_conn_lock_; // ctl_conn_ 数据库连接的互斥锁
acl::db_handle* ctl_conn_; // 控制数据库的连接
std::map<std::string, database*> dbs_; // 数据库列表
std::vector<idx_host*> idx_hosts_; // 索引服务器列表
std::vector<dat_host*> dat_hosts_; // 数据服务器列表
2014-11-19 00:25:21 +08:00
std::list<NAME_TYPE*> names_;
std::list<DB_HOST*> db_hosts_;
std::list<DB_TBL*> db_tbls_;
std::list<TBL_IDX*> tbl_idxes_;
// 加载表 tbl_name_type
2014-11-19 00:25:21 +08:00
int load_names(void);
// 加载表 tbl_idx_host
2014-11-19 00:25:21 +08:00
int load_idx_hosts(void);
// 加载表 tbl_dat_host
2014-11-19 00:25:21 +08:00
int load_dat_hosts(void);
// 加载表 tbl_db_host
2014-11-19 00:25:21 +08:00
int load_db_hosts(void);
// 加载表 tbl_db_tbl
2014-11-19 00:25:21 +08:00
int load_db_tbls(void);
// 加载表 tbl_tbl_idx
2014-11-19 00:25:21 +08:00
int load_tbl_idxes(void);
// 从 NAME_TYPE 的集合中根据ID号及类型获得指定的 NAME_TYPE 结构对象
2014-11-19 00:25:21 +08:00
NAME_TYPE* get_name(unsigned int id, name_type_t type) const;
// 添加 NAME_TYPE对象至 names_ 集合中
2014-11-19 00:25:21 +08:00
void add_name(const char* name, unsigned int id, name_type_t type);
// 添加新的名字记录至数据库并返回其ID号
2014-11-19 00:25:21 +08:00
unsigned int db_add_name(const char* name, name_type_t type);
// 构建数据表关联信息
2014-11-19 00:25:21 +08:00
void build_db(void);
// 从数据库集合中根据ID号获得指定的数据库对象
2014-11-19 00:25:21 +08:00
database* get_db(unsigned int id) const;
// 从索引服务器集合中取得对应ID号的索引服务器对象
2014-11-19 00:25:21 +08:00
idx_host* get_idx_host(unsigned int id) const;
// 添加表结构对象至数据库对象中
2014-11-19 00:25:21 +08:00
void add_tbl(database* db, DB_TBL* tbl);
// 添加新的表记录对象至 db_tbls_ 集合中
2014-11-19 00:25:21 +08:00
void add_tbl(unsigned int id_db, unsigned int id_tbl,
long long int count);
};