9#if __DCL_HAVE_ALLOC_DEBUG
10#undef __DCL_ALLOC_LEVEL
11#define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
23#define __DCL_TRACE0_N __DCL_TRACE0
24#define __DCL_TRACE1_N __DCL_TRACE1
25#define __DCL_TRACE2_N __DCL_TRACE2
26#define __DCL_TRACE3_N __DCL_TRACE3
27#define __DCL_TRACE4_N __DCL_TRACE4
29#define __DCL_TRACE0_N(fmt)
30#define __DCL_TRACE1_N(fmt, arg)
31#define __DCL_TRACE2_N(fmt, arg1, arg2)
32#define __DCL_TRACE3_N(fmt, arg1, arg2, arg3)
33#define __DCL_TRACE4_N(fmt, arg1, arg2, arg3, arg4)
41#define __SET_ERROR_HANDLE(_error) \
42 setErrorHandle(_error, __THIS_FILE__, __LINE__)
43#define __SET_ERROR_MSG(_msg) \
44 setErrorMessage(_msg, __THIS_FILE__, __LINE__)
49 : Connection(_serverTitle)
51 Connection::__canTransact =
true;
53 __storeResult =
false;
89 if (__mysql ==
NULL && (__mysql = mysql_init(
NULL)) ==
NULL) {
94 ListedByteStringToByteStringMap map;
95 Connection::splitConnStr(_conns, _connslen, map);
97 ByteString _APPLICATION = map[
"APPLICATION"];
98 if (!_APPLICATION.isEmpty()) {
99 mysql_options(
connHandle(), MYSQL_READ_DEFAULT_GROUP, _APPLICATION.data());
102 ByteString _USER = map[
"USER"];
103 ByteString _PASSWORD = map[
"PASSWORD"];
104 ByteString _SERVER = map[
"SERVER"];
105 ByteString _DATABASE = map[
"DATABASE"];
106 ByteString _PORT = map[
"PORT"];
107 ByteString _UNIX_SOCKET = map[
"UNIX_SOCKET"];
108 __storeResult = map.find(
"STORE_RESULT") != map.end();
110 unsigned int port = 0;
111 if (!_PORT.isEmpty()) {
113 unsigned long n = strtoul(_PORT.data(), &endptr, 10);
114 if (n == ULONG_MAX) {
118 port = (
unsigned int) n;
121 if (mysql_real_connect(
123 _SERVER.isEmpty()?
NULL : _SERVER.data(),
124 _USER.isEmpty()?
NULL : _USER.data(),
125 _PASSWORD.isEmpty()?
NULL : _PASSWORD.data(),
126 _DATABASE.isEmpty() ?
NULL : _DATABASE.data(),
128 _UNIX_SOCKET.isEmpty() ?
NULL : _UNIX_SOCKET.data(),
135 if (mysql_set_character_set(
connHandle(),
"utf8")) {
161 mysql_close(__mysql);
184static StmtType __GetStmtType(
const char* _sql)
186 for (
size_t i = 0; sp[i].type !=
StmtOther; i++) {
200 if (mysql_real_query(
connHandle(), _sql, (
unsigned long) _sqllen)) {
207 switch (__GetStmtType(_sql)) {
224 return __execute(
"START TRANSACTION", 17);
261 *_queryHandleOut = pNewQuery;
267 if (__lastErrorMessage.length() < *_buflen) {
268 *_buflen = __lastErrorMessage.length();
269 *(_buf + *_buflen) =
'\0';
271 strncpy(_buf, __lastErrorMessage.data(), *_buflen);
277 const char* psz = mysql_get_server_info(
connHandle());
282 size_t length = strlen(psz);
283 if (length < *_buflen) {
285 *(_buf + *_buflen) =
'\0';
287 strncpy(_buf, psz, *_buflen);
#define __SET_ERROR_MSG(_message)
#define __DCL_TRACE0_N(fmt)
#define __SET_ERROR_HANDLE(_SQLCODE)
#define __DCL_ASSERT(expr)
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
#define __UNSET_STATE(state)
#define __SET_STATE(state)
virtual bool __createQueryInstance(SQL::Query **_queryHandleOut)
virtual bool __execute(const char *_sql, size_t _sqllen)
virtual bool __startTrans()
virtual bool __getErrorMessage(char *_buf, size_t *_buflen)
virtual bool __rollbackTrans()
MyConnection(const wchar_t *_serverTitle)
virtual bool __commitTrans()
MYSQL * connHandle() const
virtual bool __getServerInfo(char *_buf, size_t *_buflen)
virtual bool __open(const char *_conns, size_t _connslen)
static bool test(const wchar_t *_regex, const wchar_t *_string, bool _icase=false) __DCL_THROWS1(RegexException *)