diff options
| author | ivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-10-30 13:21:27 +0000 |
|---|---|---|
| committer | ivost <ivost@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-10-30 13:21:27 +0000 |
| commit | 791228fe2cdf9d89d0e2c4bbaaa6d0f67bc226ec (patch) | |
| tree | ac8be013093b713061c21602c658502915955935 /packages/mysql | |
| parent | 45509eccebc6073dfe1e083a65b6b6654197c367 (diff) | |
| download | fpc-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.inc | 460 | ||||
| -rw-r--r-- | packages/mysql/src/mysql40dyn.pp | 2 | ||||
| -rw-r--r-- | packages/mysql/src/mysql41dyn.pp | 2 | ||||
| -rw-r--r-- | packages/mysql/src/mysql50dyn.pp | 2 |
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} |
