summaryrefslogtreecommitdiff
path: root/packages/mysql
diff options
context:
space:
mode:
authorivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-10-30 13:21:27 +0000
committerivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-10-30 13:21:27 +0000
commit791228fe2cdf9d89d0e2c4bbaaa6d0f67bc226ec (patch)
treeac8be013093b713061c21602c658502915955935 /packages/mysql
parent45509eccebc6073dfe1e083a65b6b6654197c367 (diff)
downloadfpc-791228fe2cdf9d89d0e2c4bbaaa6d0f67bc226ec.tar.gz
* modified mysql to use library handler functions of dynlibs.pas (no interface changes)
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@13977 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/mysql')
-rw-r--r--packages/mysql/src/mysql.inc460
-rw-r--r--packages/mysql/src/mysql40dyn.pp2
-rw-r--r--packages/mysql/src/mysql41dyn.pp2
-rw-r--r--packages/mysql/src/mysql50dyn.pp2
4 files changed, 240 insertions, 226 deletions
diff --git a/packages/mysql/src/mysql.inc b/packages/mysql/src/mysql.inc
index 36cb161f57..934c5604fd 100644
--- a/packages/mysql/src/mysql.inc
+++ b/packages/mysql/src/mysql.inc
@@ -22,7 +22,7 @@
interface
uses
-{$IFDEF LinkDynamically}
+{$IFDEF LOAD_DYNAMICALLY}
sysutils,
{$ENDIF}
dynlibs,ctypes;
@@ -55,17 +55,17 @@ uses
{$PACKRECORDS C}
{ Copyright (C) 2000-2003 MySQL AB
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA }
@@ -81,7 +81,7 @@ uses
Pmy_socket = ^my_socket;
my_socket = cint;
-
+
pppchar = ^ppchar;
PPByte = ^PByte;
@@ -402,7 +402,7 @@ uses
function net_new_transaction(net : st_net) : st_net;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function my_net_init(net:PNET; vio:PVio):my_bool;cdecl;external mysqllib name 'my_net_init';
procedure my_net_local_init(net:PNET);cdecl;external mysqllib name 'my_net_local_init';
procedure net_end(net:PNET);cdecl;external mysqllib name 'net_end';
@@ -423,7 +423,7 @@ uses
sockaddr = record
// undefined structure
end;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function my_connect(s:my_socket; name:Psockaddr; namelen:cuint; timeout:cuint):cint;cdecl;external mysqllib name 'my_connect';
{$ENDIF}
@@ -483,7 +483,7 @@ uses
{ These functions are used for authentication by client and server and
implemented in sql/password.c }
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
procedure randominit(_para1:Prand_struct; seed1:culong; seed2:culong);cdecl;external mysqllib name 'randominit';
function my_rnd(_para1:Prand_struct):cdouble;cdecl;external mysqllib name 'my_rnd';
procedure create_random_string(fto:Pchar; length:cuint; rand_st:Prand_struct);cdecl;external mysqllib name 'create_random_string';
@@ -523,7 +523,7 @@ uses
{$ENDIF}
{$ifdef _global_h}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function net_field_length(packet:PPuchar):culong;extdecl;external mysqllib name 'net_field_length_ll';
function net_field_length_ll(packet:PPuchar):my_ulonglong;cdecl;external mysqllib name 'net_field_length_ll';
function net_store_length(pkg:Pchar; length:ulonglong):Pchar;cdecl;external mysqllib name 'net_store_length';
@@ -569,7 +569,7 @@ uses
{ $include "typelib.h"}
{ $include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
var
mysql_port : cuint;cvar;external;
mysql_unix_port : Pchar;cvar;external;
@@ -578,7 +578,7 @@ uses
const
CLIENT_NET_READ_TIMEOUT = 365*24*3600; // Timeout on read
CLIENT_NET_WRITE_TIMEOUT = 365*24*3600; // Timeout on write
-
+
{$ifdef NETWARE}
(** unsupported pragma#pragma pack(push, 8) /* 8 byte alignment */*)
{$endif}
@@ -709,7 +709,7 @@ uses
{$ENDIF}
{ $endif}
end;
-
+
MYSQL_DATA = st_mysql_data;
PMYSQL_DATA = ^MYSQL_DATA;
mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
@@ -1026,7 +1026,7 @@ uses
{
Note: this info is from the mysql-5.0 version:
-
+
This structure is used to define bind information, and
internally by the client library.
Public members with their descriptions are listed below
@@ -1188,7 +1188,7 @@ uses
//#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
//#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ Set up and bring down the server; to ensure that applications will
work when linked against either the standard client library or the
embedded server library, these functions should be called. }
@@ -1286,7 +1286,7 @@ uses
mysql_use_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
{$ENDIF}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ perform query on master }
function mysql_master_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_query';
function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_send_query';
@@ -1304,7 +1304,7 @@ uses
const
LOCAL_INFILE_ERROR_LEN = 512;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ procedure mysql_set_local_infile_handler(mysql:PMYSQL; local_infile_init:function (_para1:Ppointer; _para2:Pchar; _para3:pointer):longint; local_infile_read:function (_para1:pointer; _para2:Pchar; _para3:dword):longint; local_infile_end:procedure (_pa
_para6:pointer);cdecl;external mysqllib name 'mysql_set_local_infile_handler';}
procedure mysql_set_local_infile_default(mysql:PMYSQL);cdecl;external mysqllib name 'mysql_set_local_infile_default';
@@ -1488,7 +1488,7 @@ uses
function mysql_reload(mysql : PMySQL) : cint;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{$ifdef USE_OLD_FUNCTIONS}
function mysql_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar):PMYSQL;extdecl;external External_library name 'mysql_connect';
function mysql_create_db(mysql:PMYSQL; DB:Pchar):cint;extdecl;external External_library name 'mysql_create_db';
@@ -1497,12 +1497,12 @@ uses
{$endif}
{$endif}
-{$define HAVE_MYSQL_REAL_CONNECT}
+{$define HAVE_MYSQL_REAL_CONNECT}
{ The following functions are mainly exported because of mysqlbinlog;
They are not for general usage }
function simple_command(mysql,command,arg,length,skip_check : cint) : cint;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function net_safe_read(mysql:PMYSQL):cuint;cdecl;external mysqllib name 'net_safe_read';
{$ENDIF}
@@ -1510,245 +1510,259 @@ uses
(** unsupported pragma#pragma pack(pop) /* restore alignment */*)
{$endif}
-{$IFDEF LinkDynamically}
-Function InitialiseMysql(Const LibraryName : String; argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
-Function InitialiseMysql(argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
-Procedure ReleaseMysql;
+{$IFDEF LOAD_DYNAMICALLY}
+function InitializeMysql(argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
+function InitializeMysql(const LibraryName: String; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
+function TryInitializeMysql(const LibraryName: string; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
+function ReleaseMysql: Integer;
+
+var
+ MysqlLibrary: TLibHandler;
-var MysqlLibraryHandle : TLibHandle;
+function InitialiseMysql(argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
+function InitialiseMysql(const LibraryName: String; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
+function TryInitialiseMysql(const LibraryName: string; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
{$ENDIF}
implementation
-{$IFDEF LinkDynamically}
-
-ResourceString
- SErrAlreadyLoaded = 'MySQL interface already initialized from library %s.';
- SErrLoadFailed = 'Can not load MySQL library "%s". Please check your installation.';
- SErrDefaultsFailed = 'Can not load default MySQL library ("%s" or "%s"). Check your installation.';
-
-var
- RefCount : integer;
- LoadedLibrary : String;
+{$IFDEF LOAD_DYNAMICALLY}
+
+const
+ mysql_symbols: array[0..91] of TLibSymbol = (
+ // Only the procedure that are given in the c-library documentation are loaded, to
+ // avoid problems with 'incomplete' libraries
+ (pvar:@my_init; name:'my_init'; weak:false),
+ (pvar:@my_thread_init; name:'my_thread_init'; weak:true),
+ (pvar:@my_thread_end; name:'my_thread_end'; weak:true),
+
+ (pvar:@mysql_affected_rows; name:'mysql_affected_rows'; weak:false),
+ (pvar:@mysql_autocommit; name:'mysql_autocommit'; weak:false),
+ (pvar:@mysql_change_user; name:'mysql_change_user'; weak:false),
+ // (pvar:@mysql_charset_name; name:'mysql_charset_name'; weak:false),
+ (pvar:@mysql_close; name:'mysql_close'; weak:false),
+ (pvar:@mysql_commit; name:'mysql_commit'; weak:false),
+ // (pvar:@mysql_connect; name:'mysql_connect'; weak:false),
+ // (pvar:@mysql_create_db; name:'mysql_create_db'; weak:false),
+ (pvar:@mysql_data_seek; name:'mysql_data_seek'; weak:false),
+ // (pvar:@mysql_drop_db; name:'mysql_drop_db'; weak:false),
+ (pvar:@mysql_debug; name:'mysql_debug'; weak:false),
+ (pvar:@mysql_dump_debug_info; name:'mysql_dump_debug_info'; weak:false),
+ (pvar:@mysql_eof; name:'mysql_eof'; weak:false),
+ (pvar:@mysql_errno; name:'mysql_errno'; weak:false),
+ (pvar:@mysql_error; name:'mysql_error'; weak:false),
+ (pvar:@mysql_escape_string; name:'mysql_escape_string'; weak:false),
+ (pvar:@mysql_fetch_field; name:'mysql_fetch_field'; weak:false),
+ (pvar:@mysql_fetch_field_direct; name:'mysql_fetch_field_direct'; weak:false),
+ (pvar:@mysql_fetch_fields; name:'mysql_fetch_fields'; weak:false),
+ (pvar:@mysql_fetch_lengths; name:'mysql_fetch_lengths'; weak:false),
+ (pvar:@mysql_fetch_row; name:'mysql_fetch_row'; weak:false),
+ (pvar:@mysql_field_seek; name:'mysql_field_seek'; weak:false),
+ (pvar:@mysql_field_count; name:'mysql_field_count'; weak:false),
+ (pvar:@mysql_field_tell; name:'mysql_field_tell'; weak:false),
+ (pvar:@mysql_free_result; name:'mysql_free_result'; weak:false),
+ (pvar:@mysql_get_client_info; name:'mysql_get_client_info'; weak:false),
+ (pvar:@mysql_get_client_version; name:'mysql_get_client_version'; weak:false),
+ (pvar:@mysql_get_host_info; name:'mysql_get_host_info'; weak:false),
+ (pvar:@mysql_get_server_version; name:'mysql_get_server_version'; weak:false),
+ (pvar:@mysql_get_proto_info; name:'mysql_get_proto_info'; weak:false),
+ (pvar:@mysql_get_server_info; name:'mysql_get_server_info'; weak:false),
+ (pvar:@mysql_info; name:'mysql_info'; weak:false),
+ (pvar:@mysql_init; name:'mysql_init'; weak:false),
+ (pvar:@mysql_insert_id; name:'mysql_insert_id'; weak:false),
+ (pvar:@mysql_kill; name:'mysql_kill'; weak:false),
+ (pvar:@mysql_library_end; name:'mysql_server_end'; weak:false),
+ (pvar:@mysql_library_init; name:'mysql_server_init'; weak:false),
+ (pvar:@mysql_list_dbs; name:'mysql_list_dbs'; weak:false),
+ (pvar:@mysql_list_fields; name:'mysql_list_fields'; weak:false),
+ (pvar:@mysql_list_processes; name:'mysql_list_processes'; weak:false),
+ (pvar:@mysql_list_tables; name:'mysql_list_tables'; weak:false),
+ (pvar:@mysql_more_results; name:'mysql_more_results'; weak:false),
+ (pvar:@mysql_next_result; name:'mysql_next_result'; weak:false),
+ (pvar:@mysql_num_fields; name:'mysql_num_fields'; weak:false),
+ (pvar:@mysql_num_rows; name:'mysql_num_rows'; weak:false),
+ (pvar:@mysql_options; name:'mysql_options'; weak:false),
+ (pvar:@mysql_ping; name:'mysql_ping'; weak:false),
+ (pvar:@mysql_query; name:'mysql_query'; weak:false),
+ (pvar:@mysql_real_connect; name:'mysql_real_connect'; weak:false),
+ (pvar:@mysql_real_escape_string; name:'mysql_real_escape_string'; weak:false),
+ (pvar:@mysql_real_query; name:'mysql_real_query'; weak:false),
+ (pvar:@mysql_refresh; name:'mysql_refresh'; weak:false),
+ // (pvar:@mysql_reload; name:'mysql_reload'; weak:false),
+ (pvar:@mysql_rollback; name:'mysql_rollback'; weak:false),
+ (pvar:@mysql_row_seek; name:'mysql_row_seek'; weak:false),
+ (pvar:@mysql_row_tell; name:'mysql_row_tell'; weak:false),
+ (pvar:@mysql_select_db; name:'mysql_select_db'; weak:false),
+ (pvar:@mysql_server_end; name:'mysql_server_end'; weak:false),
+ (pvar:@mysql_server_init; name:'mysql_server_init'; weak:false),
+ (pvar:@mysql_set_server_option; name:'mysql_set_server_option'; weak:false),
+ (pvar:@mysql_sqlstate; name:'mysql_sqlstate'; weak:false),
+ (pvar:@mysql_shutdown; name:'mysql_shutdown'; weak:false),
+ (pvar:@mysql_stat; name:'mysql_stat'; weak:false),
+ (pvar:@mysql_store_result; name:'mysql_store_result'; weak:false),
+ (pvar:@mysql_thread_id; name:'mysql_thread_id'; weak:false),
+ // (pvar:@mysql_thread_save; name:'mysql_thread_save'; weak:false),
+ (pvar:@mysql_use_result; name:'mysql_use_result'; weak:false),
+ (pvar:@mysql_warning_count; name:'mysql_warning_count'; weak:false),
+ (pvar:@mysql_stmt_init; name:'mysql_stmt_init'; weak:false),
+ (pvar:@mysql_stmt_prepare; name:'mysql_stmt_prepare'; weak:false),
+ (pvar:@mysql_stmt_execute; name:'mysql_stmt_execute'; weak:false),
+ (pvar:@mysql_stmt_fetch; name:'mysql_stmt_fetch'; weak:false),
+ (pvar:@mysql_stmt_fetch_column; name:'mysql_stmt_fetch_column'; weak:false),
+ (pvar:@mysql_stmt_store_result; name:'mysql_stmt_store_result'; weak:false),
+ (pvar:@mysql_stmt_param_count; name:'mysql_stmt_param_count'; weak:false),
+ (pvar:@mysql_stmt_attr_set; name:'mysql_stmt_attr_set'; weak:false),
+ (pvar:@mysql_stmt_attr_get; name:'mysql_stmt_attr_get'; weak:false),
+ (pvar:@mysql_stmt_bind_param; name:'mysql_stmt_bind_param'; weak:false),
+ (pvar:@mysql_stmt_bind_result; name:'mysql_stmt_bind_result'; weak:false),
+ (pvar:@mysql_stmt_close; name:'mysql_stmt_close'; weak:false),
+ (pvar:@mysql_stmt_reset; name:'mysql_stmt_reset'; weak:false),
+ (pvar:@mysql_stmt_free_result; name:'mysql_stmt_free_result'; weak:false),
+ (pvar:@mysql_stmt_send_long_data; name:'mysql_stmt_send_long_data'; weak:false),
+ (pvar:@mysql_stmt_result_metadata; name:'mysql_stmt_result_metadata'; weak:false),
+ (pvar:@mysql_stmt_param_metadata; name:'mysql_stmt_param_metadata'; weak:false),
+ (pvar:@mysql_stmt_errno; name:'mysql_stmt_errno'; weak:false),
+ (pvar:@mysql_stmt_error; name:'mysql_stmt_error'; weak:false),
+ (pvar:@mysql_stmt_sqlstate; name:'mysql_stmt_sqlstate'; weak:false),
+ (pvar:@mysql_stmt_row_seek; name:'mysql_stmt_row_seek'; weak:false),
+ (pvar:@mysql_stmt_row_tell; name:'mysql_stmt_row_tell'; weak:false),
+ (pvar:@mysql_stmt_data_seek; name:'mysql_stmt_data_seek'; weak:false),
+ (pvar:@mysql_stmt_num_rows; name:'mysql_stmt_num_rows'; weak:false),
+ (pvar:@mysql_stmt_affected_rows; name:'mysql_stmt_affected_rows'; weak:false),
+ (pvar:@mysql_stmt_insert_id; name:'mysql_stmt_insert_id'; weak:false),
+ (pvar:@mysql_stmt_field_count; name:'mysql_stmt_field_count'; weak:false)
+ );
+
+type
+ PMysqlArgs = ^TMysqlArgs;
+ TMysqlArgs = record
+ argc: cint;
+ argv: PPchar;
+ groups: PPchar;
+ end;
+
+function mysql_initialize(User: Pointer; Handler: PLibHandler; out ErrorMsg: String): Boolean;
+var
+ args: PMysqlArgs absolute User;
+begin
+ Result := mysql_library_init(args^.argc, args^.argv, args^.groups) = 0;
+ if not Result then
+ ErrorMsg := 'mysql_library_init failed';
+end;
-Function TryInitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar) : Integer;
+procedure mysql_finalize(User: Pointer; Handler: PLibHandler);
+begin
+ mysql_library_end();
+end;
+function TryInitializeMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+var
+ args: TMysqlArgs;
begin
- Result := 0;
- if (RefCount=0) then
- begin
- MysqlLibraryHandle := loadlibrary(LibraryName);
- if (MysqlLibraryHandle=nilhandle) then
- Exit;
- Inc(RefCount);
- LoadedLibrary:=LibraryName;
-// Only the procedure that are given in the c-library documentation are loaded, to
-// avoid problems with 'incomplete' libraries
- pointer(my_init) := GetProcedureAddress(MysqlLibraryHandle,'my_init');
- pointer(my_thread_init) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_init');
- pointer(my_thread_end) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_end');
-
- pointer(mysql_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_affected_rows');
- pointer(mysql_autocommit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_autocommit');
- pointer(mysql_change_user) := GetProcedureAddress(MysqlLibraryHandle,'mysql_change_user');
-// pointer(mysql_charset_name) := GetProcedureAddress(MysqlLibraryHandle,'mysql_charset_name');
- pointer(mysql_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_close');
- pointer(mysql_commit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_commit');
-// pointer(mysql_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_connect');
-// pointer(mysql_create_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_create_db');
- pointer(mysql_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_data_seek');
-// pointer(mysql_drop_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_drop_db');
- pointer(mysql_debug) := GetProcedureAddress(MysqlLibraryHandle,'mysql_debug');
- pointer(mysql_dump_debug_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_dump_debug_info');
- pointer(mysql_eof) := GetProcedureAddress(MysqlLibraryHandle,'mysql_eof');
- pointer(mysql_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_errno');
- pointer(mysql_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_error');
- pointer(mysql_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_escape_string');
- pointer(mysql_fetch_field) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field');
- pointer(mysql_fetch_field_direct) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field_direct');
- pointer(mysql_fetch_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_fields');
- pointer(mysql_fetch_lengths) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_lengths');
- pointer(mysql_fetch_row) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_row');
- pointer(mysql_field_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_seek');
- pointer(mysql_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_count');
- pointer(mysql_field_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_tell');
- pointer(mysql_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_free_result');
- pointer(mysql_get_client_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_info');
- pointer(mysql_get_client_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_version');
- pointer(mysql_get_host_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_host_info');
- pointer(mysql_get_server_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_version');
- pointer(mysql_get_proto_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_proto_info');
- pointer(mysql_get_server_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_info');
- pointer(mysql_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_info');
- pointer(mysql_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_init');
- pointer(mysql_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_insert_id');
- pointer(mysql_kill) := GetProcedureAddress(MysqlLibraryHandle,'mysql_kill');
- pointer(mysql_library_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
- pointer(mysql_library_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
- pointer(mysql_list_dbs) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_dbs');
- pointer(mysql_list_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_fields');
- pointer(mysql_list_processes) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_processes');
- pointer(mysql_list_tables) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_tables');
- pointer(mysql_more_results) := GetProcedureAddress(MysqlLibraryHandle,'mysql_more_results');
- pointer(mysql_next_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_next_result');
- pointer(mysql_num_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_fields');
- pointer(mysql_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_rows');
- pointer(mysql_options) := GetProcedureAddress(MysqlLibraryHandle,'mysql_options');
- pointer(mysql_ping) := GetProcedureAddress(MysqlLibraryHandle,'mysql_ping');
- pointer(mysql_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_query');
- pointer(mysql_real_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_connect');
- pointer(mysql_real_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_escape_string');
- pointer(mysql_real_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_query');
- pointer(mysql_refresh) := GetProcedureAddress(MysqlLibraryHandle,'mysql_refresh');
-// pointer(mysql_reload) := GetProcedureAddress(MysqlLibraryHandle,'mysql_reload');
- pointer(mysql_rollback) := GetProcedureAddress(MysqlLibraryHandle,'mysql_rollback');
- pointer(mysql_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_seek');
- pointer(mysql_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_tell');
- pointer(mysql_select_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_select_db');
- pointer(mysql_server_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
- pointer(mysql_server_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
- pointer(mysql_set_server_option) := GetProcedureAddress(MysqlLibraryHandle,'mysql_set_server_option');
- pointer(mysql_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_sqlstate');
- pointer(mysql_shutdown) := GetProcedureAddress(MysqlLibraryHandle,'mysql_shutdown');
- pointer(mysql_stat) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stat');
- pointer(mysql_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_store_result');
- pointer(mysql_thread_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_id');
-// pointer(mysql_thread_save) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_save');
- pointer(mysql_use_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_use_result');
- pointer(mysql_warning_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_warning_count');
- pointer(mysql_stmt_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_init');
- pointer(mysql_stmt_prepare) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_prepare');
- pointer(mysql_stmt_execute) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_execute');
- pointer(mysql_stmt_fetch) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch');
- pointer(mysql_stmt_fetch_column) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch_column');
- pointer(mysql_stmt_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_store_result');
- pointer(mysql_stmt_param_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_count');
- pointer(mysql_stmt_attr_set) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_set');
- pointer(mysql_stmt_attr_get) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_get');
- pointer(mysql_stmt_bind_param) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_param');
- pointer(mysql_stmt_bind_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_result');
- pointer(mysql_stmt_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_close');
- pointer(mysql_stmt_reset) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_reset');
- pointer(mysql_stmt_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_free_result');
- pointer(mysql_stmt_send_long_data) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_send_long_data');
- pointer(mysql_stmt_result_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_result_metadata');
- pointer(mysql_stmt_param_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_metadata');
- pointer(mysql_stmt_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_errno');
- pointer(mysql_stmt_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_error');
- pointer(mysql_stmt_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_sqlstate');
- pointer(mysql_stmt_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_seek');
- pointer(mysql_stmt_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_tell');
- pointer(mysql_stmt_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_data_seek');
- pointer(mysql_stmt_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_num_rows');
- pointer(mysql_stmt_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_affected_rows');
- pointer(mysql_stmt_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_insert_id');
- pointer(mysql_stmt_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_field_count');
-
- if mysql_library_init(argc, argv, groups) <> 0 then
- Exit;
- end
- else
- inc(RefCount);
-
- Result:=RefCount;
+ args.argc := argc;
+ args.argv := argv;
+ args.groups := groups;
+ Result := TryInitializeLibrary(MysqlLibrary, LibraryName, @args);
end;
-Function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar) : Integer;
+function InitializeMysql(argc: cint; argv: PPchar; groups: PPchar): Integer;
+var
+ args: TMysqlArgs;
+begin
+ args.argc := argc;
+ args.argv := argv;
+ args.groups := groups;
+ Result := InitializeLibrary(MysqlLibrary, [mysqllib,mysqlvlib], @args);
+end;
+function InitializeMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+var
+ args: TMysqlArgs;
begin
- Result := 0;
- If (TryInitialiseMysql(mysqlvlib,argc,argv,groups) = 0) and
- (TryInitialiseMysql(mysqllib,argc,argv,groups) = 0) then
- Raise EInOutError.CreateFmt(SErrDefaultsFailed,[mysqlvlib,mysqllib]);
- Result := RefCount;
+ args.argc := argc;
+ args.argv := argv;
+ args.groups := groups;
+ Result := InitializeLibrary(MysqlLibrary, LibraryName, @args);
end;
-Function InitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups:PPchar) : Integer;
+function ReleaseMysql: Integer;
+begin
+ Result := ReleaseLibrary(MysqlLibrary);
+end;
+function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar): Integer;
begin
- Result := TryInitialiseMysql(LibraryName,argc,argv,groups);
- If Result = 0 then
- Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
- else If (LibraryName<>LoadedLibrary) then
- begin
- Dec(RefCount);
- Result := RefCount;
- Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
- end;
+ Result := InitializeMysql(argc, argv, groups);
end;
-Procedure ReleaseMysql;
+function InitialiseMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+begin
+ Result := InitializeMysql(LibraryName, argc, argv, groups);
+end;
+function TryInitialiseMysql(const LibraryName: string; argc: cint; argv: PPchar; groups: PPchar): Integer;
begin
- if RefCount> 1 then
- Dec(RefCount)
- else if RefCount = 1 then
- begin
- mysql_library_end;
- if UnloadLibrary(MysqlLibraryHandle) then
- begin
- Dec(RefCount);
- MysqlLibraryHandle := NilHandle;
- LoadedLibrary:='';
- end
- end
+ Result := TryInitializeMysql(LibraryName, argc, argv, groups);
end;
{$ENDIF}
- function net_new_transaction(net : st_net) : st_net;
- begin
- net.pkt_nr := 0;
- result := net;
- end;
- function IS_PRI_KEY(n : longint) : boolean;
- begin
- IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
- end;
- function IS_NOT_NULL(n : longint) : boolean;
- begin
- IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
- end;
+function net_new_transaction(net : st_net) : st_net;
+begin
+ net.pkt_nr := 0;
+ result := net;
+end;
- function IS_BLOB(n : longint) : boolean;
- begin
- IS_BLOB:=(n and BLOB_FLAG)<>0;
- end;
+function IS_PRI_KEY(n : longint) : boolean;
+begin
+ IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
+end;
+
+function IS_NOT_NULL(n : longint) : boolean;
+begin
+ IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
+end;
- function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
- begin
- IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
- end;
+function IS_BLOB(n : longint) : boolean;
+begin
+ IS_BLOB:=(n and BLOB_FLAG)<>0;
+end;
- function IS_NUM(t : enum_field_types) : boolean;
- begin
+function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
+begin
+ IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
+end;
+
+function IS_NUM(t : enum_field_types) : boolean;
+begin
{$IFDEF mysql50}
- IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
+ IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
{$ELSE}
- IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
+ IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
{$ENDIF}
- end;
+end;
- function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
- begin
- INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
- or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
- end;
+function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
+begin
+ INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
+ or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
+end;
- function mysql_reload(mysql : PMySQL) : cint;
- begin
- mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
- end;
+function mysql_reload(mysql : PMySQL) : cint;
+begin
+ mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
+end;
- function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
- begin
- //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
- result := -1;
- end;
+function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
+begin
+ //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
+ result := -1;
+end;
-{$IFDEF LinkDynamically}
+{$IFDEF LOAD_DYNAMICALLY}
initialization
- Refcount := 0;
+ MysqlLibrary := LibraryHandler('mysql', @mysql_symbols, Length(mysql_symbols), @mysql_initialize, @mysql_finalize);
{$ENDIF}
+
end.
diff --git a/packages/mysql/src/mysql40dyn.pp b/packages/mysql/src/mysql40dyn.pp
index b8c93f1aa6..0592588970 100644
--- a/packages/mysql/src/mysql40dyn.pp
+++ b/packages/mysql/src/mysql40dyn.pp
@@ -4,7 +4,7 @@
unit mysql40dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$UNDEF MYSQL41}
{$i mysql.inc}
diff --git a/packages/mysql/src/mysql41dyn.pp b/packages/mysql/src/mysql41dyn.pp
index 06362619b7..127de1c341 100644
--- a/packages/mysql/src/mysql41dyn.pp
+++ b/packages/mysql/src/mysql41dyn.pp
@@ -4,7 +4,7 @@
unit mysql41dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$DEFINE MYSQL41}
{$i mysql.inc}
diff --git a/packages/mysql/src/mysql50dyn.pp b/packages/mysql/src/mysql50dyn.pp
index 67719e52a6..5b0fcc8119 100644
--- a/packages/mysql/src/mysql50dyn.pp
+++ b/packages/mysql/src/mysql50dyn.pp
@@ -4,7 +4,7 @@
unit mysql50dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$DEFINE MYSQL50}
{$i mysql.inc}