f8/cpp/dbpool.h
aozhiwei 0d0645b296 1
2018-11-24 10:02:13 +08:00

39 lines
1.4 KiB
C++

#pragma once
typedef std::vector<std::vector<std::string>> DataSet;
typedef void (*AsyncDBOnOkFunc)(a8::XParams& param, const DataSet* data_set);
typedef void (*AsyncDBOnErrorFunc)(a8::XParams& param, int error_code, const std::string& error_msg);
struct AsyncQueryRequest;
class DBThread;
class DBPool : public a8::Singleton<DBPool>
{
private:
DBPool() {};
friend class a8::Singleton<DBPool>;
public:
void Init();
void UnInit();
void SetThreadNum(int thread_num);
//执行异步并行查询
void ExecAsyncQuery(a8::XObject conn_info, const char* querystr, std::initializer_list<a8::XValue> args,
a8::XParams param, AsyncDBOnOkFunc on_ok, AsyncDBOnErrorFunc on_error, long long hash_code);
//执行异步并行sql
void ExecAsyncScript(a8::XObject conn_info, const char* querystr, std::initializer_list<a8::XValue> args,
a8::XParams param, AsyncDBOnOkFunc on_ok, AsyncDBOnErrorFunc on_error, long long hash_code);
private:
AsyncQueryRequest* GetAsyncQueryRequest(long long seqid);
void AsyncSqlOnOk(long long seqid, DataSet* data_set);
void AsyncSqlOnError(long long seqid, int errcode, const std::string& errmsg);
private:
long long curr_seqid_ = 0;
std::map<long long, AsyncQueryRequest*> async_query_hash_;
unsigned short exec_async_query_msgid_ = 0;
std::vector<DBThread*> db_thread_pool_;
};