PageRenderTime 36ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/Database/db_mysql.h

http://xgcbasehg.codeplex.com
C Header | 281 lines | 146 code | 35 blank | 100 comment | 11 complexity | be77438e3cb20cbaddaaff93491d4c94 MD5 | raw file
Possible License(s): GPL-2.0
  1. #pragma once
  2. #include "winsock2.h" //??mysql.h????__LCC__?????????winsock.h
  3. #include "mysql.h"
  4. namespace XGC
  5. {
  6. namespace db
  7. {
  8. //int (*_mysql_server_init)(int argc, char **argv, char **groups);
  9. //void (*_mysql_server_end)(void);
  10. //MYSQL_PARAMETERS *(*_mysql_get_parameters)(void);
  11. //my_bool (*_mysql_thread_init)(void);
  12. //void (*_mysql_thread_end)(void);
  13. static my_ulonglong (*_mysql_num_rows)(MYSQL_RES *res);
  14. static unsigned int (*_mysql_num_fields)(MYSQL_RES *res);
  15. static my_bool (*_mysql_eof)(MYSQL_RES *res);
  16. static MYSQL_FIELD *(*_mysql_fetch_field_direct)(MYSQL_RES *res, unsigned int fieldnr);
  17. static MYSQL_FIELD * (*_mysql_fetch_fields)(MYSQL_RES *res);
  18. //MYSQL_ROW_OFFSET (*_mysql_row_tell)(MYSQL_RES *res);
  19. //MYSQL_FIELD_OFFSET (*_mysql_field_tell)(MYSQL_RES *res);
  20. static unsigned int (*_mysql_field_count)(MYSQL *mysql);
  21. static my_ulonglong (*_mysql_affected_rows)(MYSQL *mysql);
  22. static my_ulonglong (*_mysql_insert_id)(MYSQL *mysql);
  23. static unsigned int (*_mysql_errno)(MYSQL *mysql);
  24. static const char * (*_mysql_error)(MYSQL *mysql);
  25. //const char *(*_mysql_sqlstate)(MYSQL *mysql);
  26. static unsigned int (*_mysql_warning_count)(MYSQL *mysql);
  27. static const char * (*_mysql_info)(MYSQL *mysql);
  28. //unsigned long (*_mysql_thread_id)(MYSQL *mysql);
  29. //const char * (*_mysql_character_set_name)(MYSQL *mysql);
  30. //int (*_mysql_set_character_set)(MYSQL *mysql, const char *csname);
  31. static MYSQL * (*_mysql_init)(MYSQL *mysql);
  32. //my_bool (*_mysql_ssl_set)(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher);
  33. //const char *(*_mysql_get_ssl_cipher)(MYSQL *mysql);
  34. //my_bool (*_mysql_change_user)(MYSQL *mysql, const char *user, const char *passwd, const char *db);
  35. static MYSQL * (*_mysql_real_connect)(MYSQL *mysql, const char *host,
  36. const char *user,
  37. const char *passwd,
  38. const char *db,
  39. unsigned int port,
  40. const char *unix_socket,
  41. unsigned long clientflag);
  42. static int (*_mysql_select_db)(MYSQL *mysql, const char *db);
  43. static int (*_mysql_query)(MYSQL *mysql, const char *q);
  44. static int (*_mysql_send_query)(MYSQL *mysql, const char *q, unsigned long length);
  45. static int (*_mysql_real_query)(MYSQL *mysql, const char *q, unsigned long length);
  46. static MYSQL_RES * (*_mysql_store_result)(MYSQL *mysql);
  47. static MYSQL_RES * (*_mysql_use_result)(MYSQL *mysql);
  48. //my_bool (*_mysql_master_query)(MYSQL *mysql, const char *q, unsigned long length);
  49. //my_bool (*_mysql_master_send_query)(MYSQL *mysql, const char *q, unsigned long length);
  50. //my_bool (*_mysql_slave_query)(MYSQL *mysql, const char *q, unsigned long length);
  51. //my_bool (*_mysql_slave_send_query)(MYSQL *mysql, const char *q, unsigned long length);
  52. //void (*_mysql_get_character_set_info)(MYSQL *mysql, MY_CHARSET_INFO *charset);
  53. //void (*_mysql_enable_rpl_parse)(MYSQL* mysql);
  54. //void (*_mysql_disable_rpl_parse)(MYSQL* mysql);
  55. //int (*_mysql_rpl_parse_enabled)(MYSQL* mysql);
  56. //void (*_mysql_enable_reads_from_master)(MYSQL* mysql);
  57. //void (*_mysql_disable_reads_from_master)(MYSQL* mysql);
  58. //my_bool (*_mysql_reads_from_master_enabled)(MYSQL* mysql);
  59. //enum mysql_rpl_type (*_mysql_rpl_query_type)(const char* q, int len);
  60. //my_bool (*_mysql_rpl_probe)(MYSQL* mysql);
  61. //int (*_mysql_set_master)(MYSQL* mysql, const char* host,
  62. // unsigned int port,
  63. // const char* user,
  64. // const char* passwd);
  65. //int (*_mysql_add_slave)(MYSQL* mysql, const char* host,
  66. // unsigned int port,
  67. // const char* user,
  68. // const char* passwd);
  69. //int (*_mysql_shutdown)(MYSQL *mysql,
  70. // enum mysql_enum_shutdown_level
  71. // shutdown_level);
  72. //int (*_mysql_dump_debug_info)(MYSQL *mysql);
  73. //int (*_mysql_refresh)(MYSQL *mysql,
  74. // unsigned int refresh_options);
  75. //int (*_mysql_kill)(MYSQL *mysql,unsigned long pid);
  76. //int (*_mysql_set_server_option)(MYSQL *mysql, enum enum_mysql_set_option option);
  77. static int (*_mysql_ping)(MYSQL *mysql);
  78. //const char * (*_mysql_stat)(MYSQL *mysql);
  79. //const char * (*_mysql_get_server_info)(MYSQL *mysql);
  80. //const char * (*_mysql_get_client_info)(void);
  81. //unsigned long (*_mysql_get_client_version)(void);
  82. //const char * (*_mysql_get_host_info)(MYSQL *mysql);
  83. //unsigned long (*_mysql_get_server_version)(MYSQL *mysql);
  84. //unsigned int (*_mysql_get_proto_info)(MYSQL *mysql);
  85. //MYSQL_RES * (*_mysql_list_dbs)(MYSQL *mysql,const char *wild);
  86. //MYSQL_RES * (*_mysql_list_tables)(MYSQL *mysql,const char *wild);
  87. //MYSQL_RES * (*_mysql_list_processes)(MYSQL *mysql);
  88. //int (*_mysql_options)(MYSQL *mysql,enum mysql_option option, const void *arg);
  89. static void (*_mysql_free_result)(MYSQL_RES *result);
  90. //void (*_mysql_data_seek)(MYSQL_RES *result, my_ulonglong offset);
  91. //MYSQL_ROW_OFFSET (*_mysql_row_seek)(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);
  92. //MYSQL_FIELD_OFFSET (*_mysql_field_seek)(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset);
  93. static MYSQL_ROW (*_mysql_fetch_row)(MYSQL_RES *result);
  94. static unsigned long * (*_mysql_fetch_lengths)(MYSQL_RES *result);
  95. static MYSQL_FIELD * (*_mysql_fetch_field)(MYSQL_RES *result);
  96. static MYSQL_RES * (*_mysql_list_fields)(MYSQL *mysql, const char *table, const char *wild);
  97. static unsigned long (*_mysql_escape_string)(char *to,const char *from, unsigned long from_length);
  98. static unsigned long (*_mysql_hex_string)(char *to,const char *from, unsigned long from_length);
  99. static unsigned long (*_mysql_real_escape_string)(MYSQL *mysql, char *to,const char *from, unsigned long length);
  100. //void (*_mysql_debug)(const char *debug);
  101. //void (*myodbc_remove_escape)(MYSQL *mysql,char *name);
  102. //unsigned int (*_mysql_thread_safe)(void);
  103. //my_bool (*_mysql_embedded)(void);
  104. //MYSQL_MANAGER* (*_mysql_manager_init)(MYSQL_MANAGER* con);
  105. //MYSQL_MANAGER* (*_mysql_manager_connect)(MYSQL_MANAGER* con,
  106. // const char* host,
  107. // const char* user,
  108. // const char* passwd,
  109. // unsigned int port);
  110. //void (*_mysql_manager_close)(MYSQL_MANAGER* con);
  111. //int (*_mysql_manager_command)(MYSQL_MANAGER* con, const char* cmd, int cmd_len);
  112. //int (*_mysql_manager_fetch_line)(MYSQL_MANAGER* con, char* res_buf, int res_buf_size);
  113. //my_bool (*_mysql_read_query_result)(MYSQL *mysql);
  114. static void (*_mysql_close)(MYSQL *sock);
  115. class CMySQLRecordSet
  116. {
  117. friend class CMySQLConnection;
  118. public:
  119. ///????
  120. CMySQLRecordSet(): m_res(NULL), m_row(NULL)
  121. {
  122. }
  123. ///????
  124. ~CMySQLRecordSet()
  125. {
  126. if (m_res)
  127. _mysql_free_result(m_res);
  128. }
  129. ///??????
  130. unsigned int GetRecordCount() { return (m_res ? (unsigned int)_mysql_num_rows(m_res) : 0); }
  131. ///??????
  132. unsigned int GetFieldCount() { return (m_res ? (unsigned int)_mysql_num_fields(m_res) : 0); }
  133. ///????????
  134. bool GetRecord()
  135. {
  136. if (m_res == NULL)
  137. return false;
  138. m_row = _mysql_fetch_row(m_res);
  139. return (m_row != NULL);
  140. }
  141. ///???????????????
  142. const char* GetFieldValue(unsigned int nIndex)
  143. {
  144. if (m_row == NULL)
  145. return NULL;
  146. if (nIndex >= GetFieldCount())
  147. return NULL;
  148. return m_row[nIndex];
  149. }
  150. private:
  151. MYSQL_RES* m_res;
  152. MYSQL_ROW m_row;
  153. };
  154. //**
  155. //@brief ??MySQL???
  156. //*
  157. //* ??MySQL????????????????????
  158. //*/
  159. class CMySQLConnection
  160. {
  161. public:
  162. ///??ExecuteEx????
  163. typedef enum {Failed, NoRecordSet, HasRecordSet} EExecResult;
  164. ///????
  165. CMySQLConnection(void);
  166. ///????
  167. ~CMySQLConnection(void);
  168. ///??????
  169. void SetConnectionString(const char* pszServerAddr, int nServerPort,
  170. const char* pszDBName, const char* pszUserID, const char* pszPassword);
  171. ///????
  172. BOOL Connect(const char* pszServerAddr, int nServerPort,
  173. const char* pszDBName, const char* pszUserID, const char* pszPassword);
  174. ///???????????????
  175. BOOL Connect();
  176. ///????
  177. void Close();
  178. ///?????
  179. BOOL IsConnected();
  180. ///???????????MYSQL??
  181. char* EscapeString(const char* pszSrc, int nSize, char* pszDest)
  182. {
  183. if (m_myConnection)
  184. {
  185. _mysql_real_escape_string(m_myConnection, pszDest, pszSrc, nSize);
  186. return pszDest;
  187. }
  188. else
  189. return NULL;
  190. }
  191. ///????????UPDATE?DELETE?INSERT????(??)???
  192. unsigned int GetAffectedRows() { return (unsigned int)_mysql_affected_rows(m_myConnection); }
  193. ///???????????MYSQL??
  194. char* EscapeString(const char* pszSrc, char* pszDest)
  195. {
  196. return EscapeString(pszSrc, (int)strlen(pszSrc), pszDest);
  197. }
  198. ///???????????MYSQL?????????2????
  199. size_t EscapeStringEx(const char* pszSrc, int nSize, char* pszDest)
  200. {
  201. if (m_myConnection)
  202. {
  203. return _mysql_real_escape_string(m_myConnection, pszDest, pszSrc, nSize);
  204. }
  205. else
  206. {
  207. return NULL;
  208. }
  209. }
  210. ///?????SQL??????????????
  211. int ExecuteEx(const char* pszSQL, CMySQLRecordSet& rcdSet);
  212. ///?????SQL??????????????(?????????)
  213. int ExecuteEx(const char* pszSQL, int nLength,CMySQLRecordSet& rcdSet);
  214. ///????SQL?????????
  215. BOOL Execute(const char* pszSQL);
  216. ///????SQL????????
  217. BOOL Execute(const char* pszSQL, CMySQLRecordSet& rcdSet);
  218. ///????????
  219. DWORD GetLastError()
  220. {
  221. if(m_myConnection!=NULL)
  222. {
  223. return (DWORD)_mysql_errno(m_myConnection);
  224. }
  225. return 0;
  226. }
  227. ///?????????
  228. const char* GetLastErrorInfo()
  229. {
  230. if(m_myConnection!=NULL)
  231. {
  232. return _mysql_error(m_myConnection);
  233. }
  234. return NULL;
  235. }
  236. private:
  237. char m_szServerAddr[24];
  238. char m_szDBName[24];
  239. char m_szUserID[24];
  240. char m_szPassword[24];
  241. int m_nServerPort;
  242. MYSQL* m_myConnection;
  243. BOOL m_bConnected;
  244. };
  245. };
  246. };