2
0

mysql3dyn.pp 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. {
  2. Contains the MySQL 3 functions calls
  3. Call InitialiseMysql3 before using any of the calls, and call ReleaseMysql3
  4. when finished.
  5. }
  6. unit mysql3dyn;
  7. {
  8. Adapted from mysql4dyn by Bram Kuijvenhoven (Hexis BV, The Netherlands)
  9. }
  10. {$mode objfpc}{$H+}
  11. {$MACRO on}
  12. interface
  13. uses dynlibs, classes, sysutils, mysql3_comdyn;
  14. {$IFDEF Unix}
  15. {$DEFINE extdecl:=cdecl}
  16. const
  17. Mysqllib = 'libmysqlclient.so';
  18. {$ENDIF}
  19. {$IFDEF Windows}
  20. {$DEFINE extdecl:=stdcall}
  21. const
  22. Mysqllib = 'libmysql.dll';
  23. {$ENDIF}
  24. {$PACKRECORDS C}
  25. {$i mysql3types.inc}
  26. type tpcharfunction = function : pchar; extdecl;
  27. var
  28. mysql_num_rows : function(res : PMYSQL_RES) : my_ulonglong; extdecl;
  29. mysql_num_fields : function(res : PMYSQL_RES) : Cardinal; extdecl;
  30. mysql_eof : function(res : PMYSQL_RES) : my_bool; extdecl;
  31. mysql_fetch_field_direct : function(res : PMYSQL_RES; fieldnr : Cardinal) : PMYSQL_FIELD; extdecl;
  32. mysql_fetch_fields : function(res : PMYSQL_RES) : PMYSQL_FIELD; extdecl;
  33. mysql_row_tell : function(res : PMYSQL_RES) : PMYSQL_ROWS; extdecl;
  34. mysql_field_tell : function(res : PMYSQL_RES) : Cardinal; extdecl;
  35. mysql_affected_rows : function(mysql : PMYSQL): my_ulonglong; extdecl;
  36. mysql_insert_id : function(mysql : PMYSQL): my_ulonglong; extdecl;
  37. mysql_errno : function(mysql : PMYSQL) : Cardinal; extdecl;
  38. mysql_info : function(mysql : PMYSQL): Pchar; extdecl;
  39. mysql_thread_id : function(mysql : PMYSQL) : ptruint; extdecl;
  40. mysql_error : function(mysql : PMYSQL) : pchar; extdecl;
  41. mysql_init : function(mysql: PMYSQL) : PMYSQL;extdecl;
  42. mysql_connect : function(mysql : PMYSQL; host,user,passwd: pchar) : PMYSQL;extdecl;
  43. mysql_real_connect : function(mysql : PMYSQL; const host,user,passwd : pchar;
  44. port : cardinal;
  45. unix_socket : pchar;
  46. clientflag : cardinal) : PMYSQL;extdecl;
  47. mysql_close : function(sock : PMYSQL) : longint ;extdecl;
  48. mysql_select_db : function(MYSQL : PMYSQL; db : Pchar) : longint;extdecl;
  49. mysql_query : function(mysql : PMYSQL; q : pchar) : longint;extdecl;
  50. mysql_real_query : function(mysql : PMYSQL; q : Pchar; length : longint) : longint;extdecl;
  51. mysql_create_db : function(mysql : PMYSQL; db : pchar) : longint;extdecl;
  52. mysql_drop_db : function(mysql : PMYSQL; DB : Pchar) : longint;extdecl;
  53. mysql_shutdown : function(mysql : PMYSQL) : longint;extdecl;
  54. mysql_dump_debug_info : function(mysql : PMYSQL) : longint;extdecl;
  55. mysql_refresh : function(mysql : PMYSQL; refresh_options : cardinal) : longint;extdecl;
  56. mysql_kill : function(mysql : PMYSQL; pid : Cardinal) : longint;extdecl;
  57. mysql_stat : function(mysql : PMYSQL) : Pchar;extdecl;
  58. mysql_get_server_info : function(mysql : PMYSQL) : pchar;extdecl;
  59. mysql_get_client_info : function : pchar;extdecl;
  60. mysql_get_host_info : function(mysql : PMYSQL) : pchar;extdecl;
  61. mysql_get_proto_info : function(mysql : PMYSQL) : Cardinal;extdecl;
  62. mysql_list_dbs : function(mysql : PMYSQL;wild : Pchar) : PMYSQL_RES;extdecl;
  63. mysql_list_tables : function(mysql : PMYSQL;Wild : Pchar) : PMYSQL_RES;extdecl;
  64. mysql_list_fields : function(mysql : PMYSQL; table,wild : pchar) : PMYSQL_RES;extdecl;
  65. mysql_list_processes : function(mysql : PMYSQL) : PMYSQL_RES;extdecl;
  66. mysql_store_result : function(mysql : PMYSQL) : PMYSQL_RES;extdecl;
  67. mysql_use_result : function(mysql : PMYSQL) : PMYSQL_RES;extdecl;
  68. mysql_free_result : procedure(res : PMYSQL_RES);extdecl;
  69. mysql_data_seek : procedure(mysql : PMYSQL_RES; offs : cardinal);extdecl;
  70. mysql_row_seek : function(mysql : PMYSQL_RES; Offs: TMYSQL_ROW_OFFSET): TMYSQL_ROW_OFFSET;extdecl;
  71. mysql_field_seek : function(musql : PMYSQL_RES;offs : TMYSQL_FIELD_OFFSET): TMYSQL_FIELD_OFFSET;extdecl;
  72. mysql_fetch_row : function(mysql : PMYSQL_RES) : TMYSQL_ROW;extdecl;
  73. mysql_fetch_lengths : function(mysql : PMYSQL_RES) : PCardinal;extdecl;
  74. mysql_fetch_field : function(handle : PMYSQL_RES) : PMYSQL_FIELD;extdecl;
  75. mysql_escape_string : function(escto,escfrom : pchar; length : Cardinal) : cardinal;extdecl;
  76. mysql_debug : procedure(debug : pchar);extdecl;
  77. Procedure InitialiseMysql3;
  78. Procedure ReleaseMysql3;
  79. var Mysql3LibraryHandle : TLibHandle;
  80. implementation
  81. var RefCount : integer;
  82. Procedure InitialiseMysql3;
  83. begin
  84. inc(RefCount);
  85. if RefCount = 1 then
  86. begin
  87. Mysql3LibraryHandle := loadlibrary(Mysqllib);
  88. if Mysql3LibraryHandle = nilhandle then
  89. begin
  90. RefCount := 0;
  91. Raise EInOutError.Create('Can not load MySQL client. Is it installed? ('+Mysqllib+')');
  92. end;
  93. pointer(mysql_get_client_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_get_client_info');
  94. // To avoid the strangest problems for ppl using other client-libs
  95. if copy(strpas(mysql_get_client_info()),1,4) <> '3.23' then
  96. Raise EInOutError.Create('This program can only work with the MySQL client version 3.23.x. Please use the right version of '+Mysqllib+'.');
  97. pointer(mysql_num_rows) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_num_rows');
  98. pointer(mysql_num_fields) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_num_fields');
  99. pointer(mysql_eof) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_eof');
  100. pointer(mysql_fetch_field_direct) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_fetch_field_direct');
  101. pointer(mysql_fetch_fields) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_fetch_fields');
  102. pointer(mysql_row_tell) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_row_tell');
  103. pointer(mysql_field_tell) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_field_tell');
  104. pointer(mysql_affected_rows) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_affected_rows');
  105. pointer(mysql_insert_id) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_insert_id');
  106. pointer(mysql_errno) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_errno');
  107. pointer(mysql_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_info');
  108. pointer(mysql_thread_id) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_thread_id');
  109. pointer(mysql_error) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_error');
  110. pointer(mysql_init) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_init');
  111. pointer(mysql_connect) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_connect');
  112. pointer(mysql_real_connect) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_real_connect');
  113. pointer(mysql_close) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_close');
  114. pointer(mysql_select_db) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_select_db');
  115. pointer(mysql_query) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_query');
  116. pointer(mysql_real_query) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_real_query');
  117. pointer(mysql_create_db) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_create_db');
  118. pointer(mysql_drop_db) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_drop_db');
  119. pointer(mysql_shutdown) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_shutdown');
  120. pointer(mysql_dump_debug_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_dump_debug_info');
  121. pointer(mysql_refresh) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_refresh');
  122. pointer(mysql_kill) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_kill');
  123. pointer(mysql_stat) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_stat');
  124. pointer(mysql_get_server_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_get_server_info');
  125. pointer(mysql_get_host_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_get_host_info');
  126. pointer(mysql_get_proto_info) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_get_proto_info');
  127. pointer(mysql_list_dbs) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_list_dbs');
  128. pointer(mysql_list_tables) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_list_tables');
  129. pointer(mysql_list_fields) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_list_fields');
  130. pointer(mysql_list_processes) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_list_processes');
  131. pointer(mysql_store_result) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_store_result');
  132. pointer(mysql_use_result) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_use_result');
  133. pointer(mysql_free_result) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_free_result');
  134. pointer(mysql_data_seek) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_data_seek');
  135. pointer(mysql_row_seek) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_row_seek');
  136. pointer(mysql_field_seek) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_field_seek');
  137. pointer(mysql_fetch_row) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_fetch_row');
  138. pointer(mysql_fetch_lengths) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_fetch_lengths');
  139. pointer(mysql_fetch_field) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_fetch_field');
  140. pointer(mysql_escape_string) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_escape_string');
  141. pointer(mysql_debug) := GetProcedureAddress(Mysql3LibraryHandle,'mysql_debug');
  142. InitialiseMysql3_com;
  143. end;
  144. end;
  145. Procedure ReleaseMysql3;
  146. begin
  147. if RefCount > 0 then dec(RefCount);
  148. if RefCount = 0 then
  149. begin
  150. if not UnloadLibrary(Mysql3LibraryHandle) then inc(RefCount);
  151. ReleaseMysql3_com;
  152. end;
  153. end;
  154. {$i mysql3impl.inc}
  155. end.