#pragma once #include "acl_cpp/acl_cpp_define.hpp" #include struct ACL_HTABLE; namespace acl { class hsclient; class locker; class ACL_CPP_API hspool { public: /** * 构造函数 * @param addr_rw {const char*} handlersocket 插件在 Mysql 上的监听地址, * 格式为:ip:port,注:该地址是 handlersocket 的读写地址 * @param addr_rd {const char*} handlersocket 插件在 Mysql 上的监听地址, * 格式为:ip:port,注:该地址是 handlersocket 的只读地址 * @param cache_enable {bool} 是否内部自动启用行对象缓存机制 * @param retry_enable {bool} 当因为网络原因而出错时是否需要进行重试 */ hspool(const char* addr_rw, const char* addr_rd = NULL, bool cache_enable = true, bool retry_enable = true); ~hspool(); /** * 从连接池中获得连接对象 * @param dbn {const char*} 数据库名称 * @param tbl {const char*} 数据库表名 * @param idx {const char*} 索引字段名 * @param flds {const char*} 要打开的数据字段名集合,格式为 * 由分隔符 ",; \t" 分隔的字段名称,如:user_id,user_name,user_mail * @param readonly {bool} 是否仅以只读方式打开 */ hsclient* peek(const char* dbn, const char* tbl, const char* idx, const char* flds, bool readonly = false); /** * 归还连接对象 * @param client {hsclient*} */ void put(hsclient* client); private: char* addr_rw_; char* addr_rd_; bool cache_enable_; bool retry_enable_; std::list pool_; locker* locker_; }; } // namespace acl