#pragma once class acl::locker; class db_tbl; class idx_host; class database; // 索引字段的类型 typedef enum { IDX_TYPE_STR = 0, // 字符串类型 IDX_TYPE_BOOL, // 布尔类型 IDX_TYPE_INT16, // 16位整数 IDX_TYPE_INT32, // 32位整数 IDX_TYPE_INT64 // 64位整数 } idx_type_t; /** * 数据库表对象中的索引对象 */ class db_idx { public: /** * 表索引对象构造函数 * @param tbl {db_tbl*} 表对象 * @param name {const char*} 索引名称 * @param id {unsigned int} 索引对应的ID号 * @param type {idx_type_t} 索引字段的数据类型 */ db_idx(db_tbl* tbl, const char* name, unsigned int id, idx_type_t type); ~db_idx(); const char* get_name() const { return name_; } unsigned int get_id() const { return id_; } db_tbl* get_tbl() const { return tbl_; } idx_type_t get_type() const { return type_; } protected: private: db_tbl* tbl_; // 所属的数据表对象 char* name_; // 索引名 unsigned int id_; // 索引ID号 idx_type_t type_; // 索引字段的数据类型 }; class db_tbl { public: /** * 表对象构造函数 * @param db {database*} 数据库对象 * @param name {const char*} 数据表名 * @param id {unsigned int} 数据表对应的ID号 */ db_tbl(database* db, const char* name, unsigned int id); ~db_tbl(); const char* get_name() const { return name_; } unsigned int get_id() const { return id_; } database* get_db() const { return db_; } void add_idx(db_idx* idx); private: database* db_; // 所属的数据库对象 char* name_; // 数据表名 unsigned int id_; // 数据表的ID号 std::list idxes_; // 表索引集合 }; class database { public: /** * 数据库对象构造函数 * @param name {const char*} 数据库名称 * @param id {unsigned int} 数据库对应的ID号 */ database(const char* name, unsigned int id); ~database(); const char* get_name() const { return name_; } unsigned int get_id() const { return id_; } void add_tbl(db_tbl*); void add_idx_host(idx_host* host); protected: private: char* name_; // 数据库名 unsigned int id_; // 数据库的ID号 std::map tables_; // 数据表集合 std::vector idx_hosts_; // 所对应的索引服务器的集合 acl::locker* lock_; // 数据库锁 };