Skip to content

Commit 6b17c2e

Browse files
author
unknown
committed
MySQL preprocessing is thread safe; DB interface consistency
1 parent c8bc910 commit 6b17c2e

9 files changed

+549
-497
lines changed

src/db/DBThreadPool.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ void DBTask::dbi(DB_Interface * dbi)
2525

2626
//------------------------------------------------
2727

28-
DBSqlTask::DBSqlTask(std::shared_ptr<SqlPrepare> pre):
29-
_pre(pre)
28+
DBSqlTask::DBSqlTask(std::shared_ptr<SqlPrepare> pre, std::shared_ptr <SqlResultSet> result):
29+
_pre(pre), _result(result)
3030
{
3131

3232
}
@@ -39,7 +39,8 @@ DBSqlTask::~DBSqlTask()
3939
void DBSqlTask::process()
4040
{
4141
_ret = _pre->prepare(static_cast<DBInterfaceMysql *>(_dbi)->mysql());
42-
if (_ret >= 0) _ret = _pre->execute();
42+
DBResult* result = (DBResult*)(_result.get());
43+
if (_ret >= 0) _ret = _pre->execute(result);
4344
if (_ret < 0)
4445
{
4546
_errno = _dbi->getErrno();
@@ -53,7 +54,7 @@ void DBSqlTask::complete()
5354
if (_ret < 0) str = _error.c_str();
5455
if (backfunc)
5556
{
56-
backfunc(_errno, str, _pre);
57+
backfunc(_errno, str, _result);
5758
backfunc = nullptr;
5859
}
5960
}

src/db/DBThreadPool.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class DB_Interface;
2525
class RedisCommand;
2626
class RedisResult;
2727
class SqlPrepare;
28+
class SqlResultSet;
2829

2930
class DBTask : public Task
3031
{
@@ -44,15 +45,16 @@ class DBTask : public Task
4445
class DBSqlTask : public DBTask
4546
{
4647
public:
47-
DBSqlTask(std::shared_ptr<SqlPrepare> pre);
48+
DBSqlTask(std::shared_ptr<SqlPrepare> pre, std::shared_ptr <SqlResultSet> result);
4849
~DBSqlTask();
4950

5051
virtual void process();
5152
virtual void complete();
5253
public:
53-
std::function<void(int32, const char*, std::shared_ptr<SqlPrepare>)> backfunc;
54+
std::function<void(int32, const char*, std::shared_ptr<SqlResultSet>)> backfunc;
5455
private:
5556
std::shared_ptr<SqlPrepare> _pre;
57+
std::shared_ptr <SqlResultSet> _result;
5658
};
5759

5860
class DBRedisTask : public DBTask

src/db/DB_Interface_mysql.cpp

+22-1
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,25 @@ bool DBInterfaceMysql::ping() {
111111

112112
MYSQL * DBInterfaceMysql::mysql() {
113113
return &mMysql_;
114-
}
114+
}
115+
116+
117+
namespace MySQL
118+
{
119+
int threadSafe()
120+
{
121+
return mysql_thread_safe();
122+
}
123+
void libraryInit()
124+
{
125+
mysql_library_init(-1, nullptr, nullptr);
126+
}
127+
void libraryEnd()
128+
{
129+
mysql_library_end();
130+
}
131+
char const* getLibraryVersion()
132+
{
133+
return MYSQL_SERVER_VERSION;
134+
}
135+
};

src/db/DB_Interface_mysql.h

+8
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,12 @@ class DBInterfaceMysql : public DB_Interface
2929
std::string m_pswd;
3030
};
3131

32+
namespace MySQL
33+
{
34+
int threadSafe();
35+
void libraryInit();
36+
void libraryEnd();
37+
char const* getLibraryVersion();
38+
};
39+
3240
#endif

0 commit comments

Comments
 (0)