mysql4dyn.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. {
  2. Contains the MySQL 4 functions calls
  3. Call InitialiseMysql4 before using any of the calls, and call ReleaseMysql4
  4. when finished.
  5. }
  6. {$IFNDEF FPC_DOTTEDUNITS}
  7. unit mysql4dyn;
  8. {$ENDIF FPC_DOTTEDUNITS}
  9. {$mode objfpc}{$H+}
  10. {$MACRO on}
  11. interface
  12. {$IFDEF FPC_DOTTEDUNITS}
  13. uses System.CTypes,System.DynLibs, System.Classes, System.SysUtils, Api.My4_sys, Api.Mysql4_comdyn;
  14. {$ELSE FPC_DOTTEDUNITS}
  15. uses ctypes,dynlibs, classes, sysutils, my4_sys, mysql4_comdyn;
  16. {$ENDIF FPC_DOTTEDUNITS}
  17. {
  18. Automatically converted by H2Pas 0.99.15 from mysql.ph
  19. The following command line parameters were used:
  20. -p
  21. -D
  22. -l
  23. mysqlclient
  24. mysql.ph
  25. }
  26. { Copyright (C) 2000 MySQL AB
  27. This program is free software; you can redistribute it and/or modify
  28. it under the terms of the GNU General Public License as published by
  29. the Free Software Foundation; either version 2 of the License, or
  30. (at your option) any later version.
  31. This program is distributed in the hope that it will be useful,
  32. but WITHOUT ANY WARRANTY; without even the implied warranty of
  33. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  34. GNU General Public License for more details.
  35. You should have received a copy of the GNU General Public License
  36. along with this program; if not, write to the Free Software
  37. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA }
  38. {$IFDEF Unix}
  39. {$DEFINE extdecl:=cdecl}
  40. const
  41. Mysqllib = 'libmysqlclient.'+sharedsuffix;
  42. {$ENDIF}
  43. {$IFDEF Windows}
  44. {$DEFINE extdecl:=stdcall}
  45. const
  46. Mysqllib = 'libmysql.dll';
  47. {$ENDIF}
  48. {$PACKRECORDS C}
  49. {$i mysql4types.inc}
  50. type tpcharfunction = function : PAnsiChar; extdecl;
  51. var
  52. mysql_server_init : function (argc:longint; argv:PPAnsiChar; groups:PPAnsiChar):longint;extdecl;
  53. mysql_server_end : procedure;extdecl;
  54. mysql_thread_init : function :my_bool;extdecl;
  55. mysql_thread_end : procedure;extdecl;
  56. mysql_num_rows : function (res:PMYSQL_RES):my_ulonglong;extdecl;
  57. mysql_num_fields : function (res:PMYSQL_RES):dword;extdecl;
  58. mysql_eof : function (res:PMYSQL_RES):my_bool;extdecl;
  59. mysql_fetch_field_direct : function (res:PMYSQL_RES; fieldnr:dword):PMYSQL_FIELD;extdecl;
  60. mysql_fetch_fields : function (res:PMYSQL_RES):PMYSQL_FIELD;extdecl;
  61. mysql_row_tell : function (res:PMYSQL_RES):PMYSQL_ROWS;extdecl;
  62. mysql_field_tell : function (res:PMYSQL_RES):dword;extdecl;
  63. mysql_field_count : function (mysql:PMYSQL):dword;extdecl;
  64. mysql_affected_rows : function (mysql:PMYSQL):my_ulonglong;extdecl;
  65. mysql_insert_id : function (mysql:PMYSQL):my_ulonglong;extdecl;
  66. mysql_errno : function (mysql:PMYSQL):dword;extdecl;
  67. mysql_error : function (mysql:PMYSQL):PAnsiChar;extdecl;
  68. mysql_info : function (mysql:PMYSQL):PAnsiChar;extdecl;
  69. mysql_thread_id : function (mysql:PMYSQL):dword;extdecl;
  70. mysql_character_set_name : function (mysql:PMYSQL):PAnsiChar;extdecl;
  71. mysql_init : function (mysql:PMYSQL):PMYSQL;extdecl;
  72. mysql_ssl_set : function (mysql:PMYSQL; key:PAnsiChar; cert:PAnsiChar; ca:PAnsiChar; capath:PAnsiChar;cipher:PAnsiChar):longint;extdecl;
  73. mysql_ssl_clear : function (mysql:PMYSQL):longint;extdecl;
  74. mysql_change_user : function (mysql:PMYSQL; user:PAnsiChar; passwd:PAnsiChar; db:PAnsiChar):my_bool;extdecl;
  75. mysql_real_connect : function (mysql:PMYSQL; host:PAnsiChar; user:PAnsiChar; passwd:PAnsiChar; db:PAnsiChar;port:dword; unix_socket:PAnsiChar; clientflag:dword):PMYSQL;extdecl;
  76. mysql_close : procedure (sock:PMYSQL);extdecl;
  77. mysql_select_db : function (mysql:PMYSQL; db:PAnsiChar):longint;extdecl;
  78. mysql_query : function (mysql:PMYSQL; q:PAnsiChar):longint;extdecl;
  79. mysql_send_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  80. mysql_read_query_result : function (mysql:PMYSQL):longint;extdecl;
  81. mysql_real_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  82. mysql_master_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  83. mysql_master_send_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  84. mysql_slave_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  85. mysql_slave_send_query : function (mysql:PMYSQL; q:PAnsiChar; length:dword):longint;extdecl;
  86. mysql_enable_rpl_parse : procedure (mysql:PMYSQL);extdecl;
  87. mysql_disable_rpl_parse : procedure (mysql:PMYSQL);extdecl;
  88. mysql_rpl_parse_enabled : function (mysql:PMYSQL):longint;extdecl;
  89. mysql_enable_reads_from_master : procedure (mysql:PMYSQL);extdecl;
  90. mysql_disable_reads_from_master : procedure (mysql:PMYSQL);extdecl;
  91. mysql_reads_from_master_enabled : function (mysql:PMYSQL):longint;extdecl;
  92. (* error
  93. enum mysql_rpl_type mysql_rpl_query_type(const AnsiChar* q, int len);
  94. in declaration at line 291 *)
  95. mysql_rpl_probe : function (mysql:PMYSQL):longint;extdecl;
  96. mysql_set_master : function (mysql:PMYSQL; host:PAnsiChar; port:dword; user:PAnsiChar; passwd:PAnsiChar):longint;extdecl;
  97. mysql_add_slave : function (mysql:PMYSQL; host:PAnsiChar; port:dword; user:PAnsiChar; passwd:PAnsiChar):longint;extdecl;
  98. mysql_shutdown : function (mysql:PMYSQL):longint;extdecl;
  99. mysql_dump_debug_info : function (mysql:PMYSQL):longint;extdecl;
  100. mysql_refresh : function (mysql:PMYSQL; refresh_options:dword):longint;extdecl;
  101. mysql_kill : function (mysql:PMYSQL; pid:dword):longint;extdecl;
  102. mysql_ping : function (mysql:PMYSQL):longint;extdecl;
  103. mysql_stat : function (mysql:PMYSQL):PAnsiChar;extdecl;
  104. mysql_get_server_info : function (mysql:PMYSQL):PAnsiChar;extdecl;
  105. mysql_get_client_info : tpcharfunction; //function:PAnsiChar; extdecl;
  106. mysql_get_host_info : function (mysql:PMYSQL):PAnsiChar;extdecl;
  107. mysql_get_proto_info : function (mysql:PMYSQL):dword;extdecl;
  108. mysql_list_dbs : function (mysql:PMYSQL; wild:PAnsiChar):PMYSQL_RES;extdecl;
  109. mysql_list_tables : function (mysql:PMYSQL; wild:PAnsiChar):PMYSQL_RES;extdecl;
  110. mysql_list_fields : function (mysql:PMYSQL; table:PAnsiChar; wild:PAnsiChar):PMYSQL_RES;extdecl;
  111. mysql_list_processes : function (mysql:PMYSQL):PMYSQL_RES;extdecl;
  112. mysql_store_result : function (mysql:PMYSQL):PMYSQL_RES;extdecl;
  113. mysql_use_result : function (mysql:PMYSQL):PMYSQL_RES;extdecl;
  114. mysql_options : function (mysql:PMYSQL; option:mysql_option; arg:PAnsiChar):longint;extdecl;
  115. mysql_free_result : procedure (result:PMYSQL_RES);extdecl;
  116. mysql_data_seek : procedure (result:PMYSQL_RES; offset:my_ulonglong);extdecl;
  117. mysql_row_seek : function (result:PMYSQL_RES; _para2:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;extdecl;
  118. mysql_field_seek : function (result:PMYSQL_RES; offset:MYSQL_FIELD_OFFSET):MYSQL_FIELD_OFFSET;extdecl;
  119. mysql_fetch_row : function (result:PMYSQL_RES):MYSQL_ROW;extdecl;
  120. mysql_fetch_lengths : function (result:PMYSQL_RES):Pdword;extdecl;
  121. mysql_fetch_field : function (result:PMYSQL_RES):PMYSQL_FIELD;extdecl;
  122. mysql_escape_string : function (_to:PAnsiChar; from:PAnsiChar; from_length:dword):dword;extdecl;
  123. mysql_real_escape_string : function (mysql:PMYSQL; _to:PAnsiChar; from:PAnsiChar; length:dword):dword;extdecl;
  124. mysql_debug : procedure (debug:PAnsiChar);extdecl;
  125. mysql_odbc_escape_string : function (mysql:PMYSQL; _to:PAnsiChar; to_length:dword; from:PAnsiChar; from_length:dword;param:pointer; extend_buffer: TExdendBuffer):PAnsiChar;extdecl;
  126. myodbc_remove_escape : procedure (mysql:PMYSQL; name:PAnsiChar);extdecl;
  127. mysql_thread_safe : function :dword;extdecl;
  128. mysql_manager_init : function (con:PMYSQL_MANAGER):PMYSQL_MANAGER;extdecl;
  129. mysql_manager_connect : function (con:PMYSQL_MANAGER; host:PAnsiChar; user:PAnsiChar; passwd:PAnsiChar; port:dword):PMYSQL_MANAGER;extdecl;
  130. mysql_manager_close : procedure (con:PMYSQL_MANAGER);extdecl;
  131. mysql_manager_command : function (con:PMYSQL_MANAGER; cmd:PAnsiChar; cmd_len:longint):longint;extdecl;
  132. mysql_manager_fetch_line : function (con:PMYSQL_MANAGER; res_buf:PAnsiChar; res_buf_size:longint):longint;extdecl;
  133. simple_command : function (mysql:PMYSQL; command:enum_server_command; arg:PAnsiChar; length:dword; skipp_check:my_bool):longint;extdecl;
  134. net_safe_read : function (mysql:PMYSQL):dword;extdecl;
  135. function IS_PRI_KEY(n : longint) : Boolean;
  136. function IS_NOT_NULL(n : longint) : Boolean;
  137. function IS_BLOB(n : longint) : boolean;
  138. function MYSQL_COUNT_ERROR : longint;
  139. function mysql_reload(mysql : pmysql) : longint;
  140. Function InitialiseMysql4 : Integer;
  141. Function InitialiseMysql4(Const LibraryName : String) : Integer;
  142. Procedure ReleaseMysql4;
  143. var Mysql4LibraryHandle : TLibHandle;
  144. implementation
  145. ResourceString
  146. SErrAlreadyLoaded = 'MySQL 4.1 already initialized from library %s';
  147. SLoadFailed = 'Can not load MySQL 4.1 library "%s". Please check your installation.';
  148. var
  149. RefCount : integer;
  150. LoadedLibrary : String;
  151. Function InitialiseMysql4 : Integer;
  152. begin
  153. // Use Default library
  154. Result:=InitialiseMySQL4(Mysqllib);
  155. end;
  156. Function InitialiseMysql4(Const LibraryName : String) : Integer;
  157. begin
  158. inc(RefCount);
  159. if RefCount = 1 then
  160. begin
  161. Mysql4LibraryHandle := loadlibrary(LibraryName);
  162. if Mysql4LibraryHandle = nilhandle then
  163. begin
  164. RefCount := 0;
  165. Raise EInOutError.CreateFmt(SLoadFailed,[LibraryName]);
  166. end;
  167. LoadedLibrary:=LibraryName;
  168. pointer(mysql_get_client_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_get_client_info');
  169. // To avoid the strangest problems for ppl using other client-libs
  170. if copy(strpas(mysql_get_client_info()),1,3) <> '4.0' then
  171. Raise EInOutError.Create('This program can only work with the MySQL client version 4.0.x. Please use the right version of '+Mysqllib+'.');
  172. pointer(mysql_server_init) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_server_init');
  173. pointer(mysql_server_end) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_server_end');
  174. pointer(mysql_thread_init) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_thread_init');
  175. pointer(mysql_thread_end) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_thread_end');
  176. pointer(mysql_num_rows) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_num_rows');
  177. pointer(mysql_num_fields) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_num_fields');
  178. pointer(mysql_eof) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_eof');
  179. pointer(mysql_fetch_field_direct) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_fetch_field_direct');
  180. pointer(mysql_fetch_fields) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_fetch_fields');
  181. pointer(mysql_row_tell) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_row_tell');
  182. pointer(mysql_field_tell) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_field_tell');
  183. pointer(mysql_field_count) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_field_count');
  184. pointer(mysql_affected_rows) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_affected_rows');
  185. pointer(mysql_insert_id) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_insert_id');
  186. pointer(mysql_errno) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_errno');
  187. pointer(mysql_error) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_error');
  188. pointer(mysql_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_info');
  189. pointer(mysql_thread_id) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_thread_id');
  190. pointer(mysql_character_set_name) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_character_set_name');
  191. pointer(mysql_init) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_init');
  192. pointer(mysql_ssl_set) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_ssl_set');
  193. pointer(mysql_ssl_clear) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_ssl_clear');
  194. pointer(mysql_change_user) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_change_user');
  195. pointer(mysql_real_connect) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_real_connect');
  196. pointer(mysql_close) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_close');
  197. pointer(mysql_select_db) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_select_db');
  198. pointer(mysql_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_query');
  199. pointer(mysql_send_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_send_query');
  200. pointer(mysql_read_query_result) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_read_query_result');
  201. pointer(mysql_real_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_real_query');
  202. pointer(mysql_master_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_master_query');
  203. pointer(mysql_master_send_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_master_send_query');
  204. pointer(mysql_slave_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_slave_query');
  205. pointer(mysql_slave_send_query) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_slave_send_query');
  206. pointer(mysql_enable_rpl_parse) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_enable_rpl_parse');
  207. pointer(mysql_disable_rpl_parse) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_disable_rpl_parse');
  208. pointer(mysql_rpl_parse_enabled) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_rpl_parse_enabled');
  209. pointer(mysql_enable_reads_from_master) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_enable_reads_from_master');
  210. pointer(mysql_disable_reads_from_master) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_disable_reads_from_master');
  211. pointer(mysql_reads_from_master_enabled) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_reads_from_master_enabled');
  212. pointer(mysql_rpl_probe) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_rpl_probe');
  213. pointer(mysql_set_master) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_set_master');
  214. pointer(mysql_add_slave) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_add_slave');
  215. pointer(mysql_shutdown) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_shutdown');
  216. pointer(mysql_dump_debug_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_dump_debug_info');
  217. pointer(mysql_refresh) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_refresh');
  218. pointer(mysql_kill) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_kill');
  219. pointer(mysql_ping) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_ping');
  220. pointer(mysql_stat) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_stat');
  221. pointer(mysql_get_server_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_get_server_info');
  222. pointer(mysql_get_host_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_get_host_info');
  223. pointer(mysql_get_proto_info) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_get_proto_info');
  224. pointer(mysql_list_dbs) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_list_dbs');
  225. pointer(mysql_list_tables) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_list_tables');
  226. pointer(mysql_list_fields) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_list_fields');
  227. pointer(mysql_list_processes) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_list_processes');
  228. pointer(mysql_store_result) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_store_result');
  229. pointer(mysql_use_result) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_use_result');
  230. pointer(mysql_options) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_options');
  231. pointer(mysql_free_result) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_free_result');
  232. pointer(mysql_data_seek) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_data_seek');
  233. pointer(mysql_row_seek) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_row_seek');
  234. pointer(mysql_field_seek) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_field_seek');
  235. pointer(mysql_fetch_row) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_fetch_row');
  236. pointer(mysql_fetch_lengths) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_fetch_lengths');
  237. pointer(mysql_fetch_field) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_fetch_field');
  238. pointer(mysql_escape_string) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_escape_string');
  239. pointer(mysql_real_escape_string) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_real_escape_string');
  240. pointer(mysql_debug) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_debug');
  241. pointer(mysql_odbc_escape_string) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_odbc_escape_string');
  242. pointer(myodbc_remove_escape) := GetProcedureAddress(Mysql4LibraryHandle,'myodbc_remove_escape');
  243. pointer(mysql_thread_safe) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_thread_safe');
  244. pointer(mysql_manager_init) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_manager_init');
  245. pointer(mysql_manager_connect) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_manager_connect');
  246. pointer(mysql_manager_close) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_manager_close');
  247. pointer(mysql_manager_command) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_manager_command');
  248. pointer(mysql_manager_fetch_line) := GetProcedureAddress(Mysql4LibraryHandle,'mysql_manager_fetch_line');
  249. pointer(simple_command) := GetProcedureAddress(Mysql4LibraryHandle,'simple_command');
  250. pointer(net_safe_read) := GetProcedureAddress(Mysql4LibraryHandle,'net_safe_read');
  251. InitialiseMysql4_com;
  252. end
  253. else
  254. If (LibraryName<>LoadedLibrary) then
  255. Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
  256. Result:=RefCount;
  257. end;
  258. Procedure ReleaseMysql4;
  259. begin
  260. if RefCount > 0 then dec(RefCount);
  261. if RefCount = 0 then
  262. begin
  263. if not UnloadLibrary(Mysql4LibraryHandle) then
  264. inc(RefCount)
  265. else
  266. LoadedLibrary:='';
  267. ReleaseMysql4_com;
  268. end;
  269. end;
  270. {$i mysql4impl.inc}
  271. end.