|
@@ -23,15 +23,17 @@ interface
|
|
|
{$ifdef Load_Dynamically}{$define LinkDynamically}{$endif}
|
|
|
uses
|
|
|
{$IFDEF LinkDynamically}
|
|
|
- sysutils,
|
|
|
+ sysutils,
|
|
|
{$ENDIF}
|
|
|
- dynlibs,ctypes;
|
|
|
+ ctypes, dynlibs;
|
|
|
|
|
|
{$IFDEF Unix}
|
|
|
{$DEFINE extdecl:=cdecl}
|
|
|
const
|
|
|
mysqllib = 'libmysqlclient.'+sharedsuffix;
|
|
|
- {$IF DEFINED(mysql55) or DEFINED(mysql56)}
|
|
|
+ {$IF DEFINED(mysql57)}
|
|
|
+ mysqlvlib = mysqllib+'.20';
|
|
|
+ {$ELSEIF DEFINED(mysql55) or DEFINED(mysql56)}
|
|
|
mysqlvlib = mysqllib+'.18';
|
|
|
{$ELSEIF DEFINED(mysql51)}
|
|
|
mysqlvlib = mysqllib+'.16';
|
|
@@ -51,6 +53,10 @@ uses
|
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
|
+{$IFDEF mysql57}
|
|
|
+ {$DEFINE mysql56}
|
|
|
+{$ENDIF mysql57}
|
|
|
+
|
|
|
{$IFDEF mysql56}
|
|
|
{$DEFINE mysql55}
|
|
|
{$ENDIF mysql56}
|
|
@@ -88,8 +94,8 @@ uses
|
|
|
type
|
|
|
my_bool = cchar;
|
|
|
Pmy_bool = ^my_bool;
|
|
|
-// pppchar = ^ppchar;
|
|
|
-// ppbyte = ^pbyte;
|
|
|
+ ppcchar = ^pcchar;
|
|
|
+ psize_t = pointer;
|
|
|
|
|
|
PVIO = Pointer;
|
|
|
|
|
@@ -111,6 +117,7 @@ uses
|
|
|
HOSTNAME_LENGTH = 60;
|
|
|
{$IFDEF mysql51}
|
|
|
SYSTEM_CHARSET_MBMAXLEN = 3;
|
|
|
+ FILENAME_CHARSET_MBMAXLEN = 5;
|
|
|
NAME_CHAR_LEN = 64; // Field/table name length
|
|
|
USERNAME_CHAR_LENGTH = 16;
|
|
|
NAME_LEN = (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN);
|
|
@@ -133,6 +140,12 @@ uses
|
|
|
INDEX_COMMENT_MAXLEN = 1024;
|
|
|
TABLE_PARTITION_COMMENT_MAXLEN = 1024;
|
|
|
|
|
|
+ { Maximum length of protocol packet. }
|
|
|
+ { OK packet length limit also restricted to this value as any length greater
|
|
|
+ than this value will have first byte of OK packet to be 254 thus does not
|
|
|
+ provide a means to identify if this is OK or EOF packet. }
|
|
|
+ MAX_PACKET_LENGTH = (256*256*256-1);
|
|
|
+
|
|
|
const
|
|
|
MYSQL_NAMEDPIPE = 'MySQL';
|
|
|
MYSQL_SERVICENAME = 'MySQL';
|
|
@@ -152,6 +165,9 @@ uses
|
|
|
COM_DAEMON,
|
|
|
{$IFDEF mysql56}
|
|
|
COM_BINLOG_DUMP_GTID,
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ COM_RESET_CONNECTION,
|
|
|
+ {$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ELSE}
|
|
@@ -160,6 +176,7 @@ uses
|
|
|
COM_RESET_STMT,COM_SET_OPTION,
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
|
+ { Must be last }
|
|
|
COM_END
|
|
|
);
|
|
|
|
|
@@ -217,6 +234,9 @@ uses
|
|
|
FIELD_FLAGS_COLUMN_FORMAT_MASK = (3 shl FIELD_FLAGS_COLUMN_FORMAT);
|
|
|
{$IFDEF mysql56}
|
|
|
FIELD_IS_DROPPED = (1 shl 26); // Intern: Field is being dropped
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ EXPLICIT_NULL_FLAG = (1 shl 27); // Field is explicitly specified as NULL by the user
|
|
|
+ {$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
@@ -245,6 +265,7 @@ uses
|
|
|
REFRESH_DES_KEY_FILE = $40000;
|
|
|
REFRESH_USER_RESOURCES = $80000;
|
|
|
REFRESH_FOR_EXPORT = $100000; // FLUSH TABLES ... FOR EXPORT
|
|
|
+ REFRESH_OPTIMIZER_COSTS = $200000; // FLUSH OPTIMIZER_COSTS
|
|
|
|
|
|
CLIENT_LONG_PASSWORD = 1; // new more secure passwords
|
|
|
CLIENT_FOUND_ROWS = 2; // Found instead of affected rows
|
|
@@ -261,7 +282,7 @@ uses
|
|
|
CLIENT_IGNORE_SIGPIPE = 4096; // IGNORE sigpipes
|
|
|
CLIENT_TRANSACTIONS = 8192; // Client knows about transactions
|
|
|
CLIENT_RESERVED = 16384; // Old flag for 4.1 protocol
|
|
|
- CLIENT_SECURE_CONNECTION = 32768; // New 4.1 authentication
|
|
|
+ CLIENT_SECURE_CONNECTION = 32768; // Old flag for 4.1 authentication
|
|
|
CLIENT_MULTI_STATEMENTS = 65536; // Enable/disable multi-stmt support
|
|
|
CLIENT_MULTI_RESULTS = 131072; // Enable/disable multi-results
|
|
|
CLIENT_PS_MULTI_RESULTS : cardinal = 1 shl 18; // Multi-results in PS-protocol
|
|
@@ -269,6 +290,8 @@ uses
|
|
|
CLIENT_CONNECT_ATTRS : cardinal = (1 shl 20); // Client supports connection attributes
|
|
|
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA : cardinal = (1 shl 21); // Enable authentication response packet to be larger than 255 bytes.
|
|
|
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS : cardinal = (1 shl 22); // Don't close the connection for a connection with expired password.
|
|
|
+ CLIENT_SESSION_TRACK : cardinal = (1 shl 23); // Capable of handling server state change information. Its a hint to the server to include the state change information in Ok packet.
|
|
|
+ CLIENT_DEPRECATE_EOF : cardinal = (1 shl 24); // Client no longer needs EOF packet
|
|
|
CLIENT_SSL_VERIFY_SERVER_CERT : cardinal = 1 shl 30;
|
|
|
CLIENT_REMEMBER_OPTIONS : cardinal = 1 shl 31;
|
|
|
|
|
@@ -294,21 +317,24 @@ uses
|
|
|
SERVER_STATUS_DB_DROPPED = 256; // A database was dropped
|
|
|
{$IFDEF mysql50}
|
|
|
SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512;
|
|
|
-{$ENDIF}
|
|
|
-{$IFDEF mysql51}
|
|
|
+ {$IFDEF mysql51}
|
|
|
{
|
|
|
Sent to the client if after a prepared statement reprepare
|
|
|
we discovered that the new statement returns a different
|
|
|
number of result set columns.
|
|
|
}
|
|
|
SERVER_STATUS_METADATA_CHANGED = 1024;
|
|
|
-{$ENDIF}
|
|
|
-{$IFDEF mysql55}
|
|
|
+ {$IFDEF mysql55}
|
|
|
SERVER_QUERY_WAS_SLOW = 2048;
|
|
|
SERVER_PS_OUT_PARAMS = 4096; // To mark ResultSet containing output parameter values.
|
|
|
-{$ENDIF}
|
|
|
-{$IFDEF mysql56}
|
|
|
+ {$IFDEF mysql56}
|
|
|
SERVER_STATUS_IN_TRANS_READONLY = 8192;
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ SERVER_SESSION_STATE_CHANGED = (1 shl 14); // This status flag, when on, implies that one of the state information has changed on the server because of the execution of the last statement.
|
|
|
+ {$ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF mysql41}
|
|
@@ -340,7 +366,6 @@ uses
|
|
|
type
|
|
|
Pst_net = ^st_net;
|
|
|
st_net = record
|
|
|
-{ $if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) }
|
|
|
vio : PVio;
|
|
|
buff : pcuchar;
|
|
|
buff_end : pcuchar;
|
|
@@ -365,7 +390,6 @@ uses
|
|
|
unused3: my_bool; // Please remove with the next incompatible ABI change
|
|
|
{ Pointer to query object in query cache, do not equal NULL (0) for
|
|
|
queries in cache that have not stored its results yet }
|
|
|
-{ $endif }
|
|
|
unused: pcuchar;
|
|
|
last_errno: cuint;
|
|
|
error: cuchar;
|
|
@@ -531,6 +555,24 @@ uses
|
|
|
MYSQL_OPTION_MULTI_STATEMENTS_OFF
|
|
|
);
|
|
|
|
|
|
+{$IFDEF mysql57}
|
|
|
+ { Type of state change information that the server can include in the Ok
|
|
|
+ packet.
|
|
|
+ Note : 1) session_state_type shouldn't go past 255 (i.e. 1-byte boundary).
|
|
|
+ 2) Modify the definition of SESSION_TRACK_END when a new member is added.
|
|
|
+ }
|
|
|
+ enum_session_state_type = (
|
|
|
+ SESSION_TRACK_SYSTEM_VARIABLES, // Session system variables
|
|
|
+ SESSION_TRACK_SCHEMA, // Current schema
|
|
|
+ SESSION_TRACK_STATE_CHANGE, // track session state changes
|
|
|
+ SESSION_TRACK_GTIDS
|
|
|
+ );
|
|
|
+
|
|
|
+ const
|
|
|
+ SESSION_TRACK_BEGIN = ord(SESSION_TRACK_SYSTEM_VARIABLES);
|
|
|
+ SESSION_TRACK_END = ord(SESSION_TRACK_GTIDS);
|
|
|
+{$ENDIF}
|
|
|
+
|
|
|
function net_new_transaction(net : st_net) : st_net;
|
|
|
|
|
|
{$IFNDEF LinkDynamically}
|
|
@@ -721,10 +763,6 @@ uses
|
|
|
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}
|
|
|
-
|
|
|
type
|
|
|
Pst_mysql_field = ^st_mysql_field;
|
|
|
st_mysql_field = record
|
|
@@ -892,6 +930,9 @@ uses
|
|
|
,MYSQL_SERVER_PUBLIC_KEY
|
|
|
,MYSQL_ENABLE_CLEARTEXT_PLUGIN
|
|
|
,MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ ,MYSQL_OPT_SSL_ENFORCE
|
|
|
+ {$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
|
{$ENDIF}
|
|
@@ -1510,6 +1551,13 @@ uses
|
|
|
function mysql_real_query(mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;external mysqllib name 'mysql_real_query';
|
|
|
function mysql_store_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqllib name 'mysql_store_result';
|
|
|
function mysql_use_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqllib name 'mysql_use_result';
|
|
|
+ {$IFDEF mysql50}
|
|
|
+ procedure mysql_get_character_set_info(mysql:PMYSQL; charset:PMY_CHARSET_INFO);extdecl;external mysqllib name 'mysql_get_character_set_info';
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ function mysql_session_track_get_first(mysql:PMYSQL; typ:enum_session_state_type; data:ppcchar; length:psize_t):cint; extdecl; external mysqllib name 'mysql_session_track_get_first';
|
|
|
+ function mysql_session_track_get_next(mysql:PMYSQL; typ:enum_session_state_type; data:ppcchar; length:psize_t):cint; extdecl; external mysqllib name 'mysql_session_track_get_next';
|
|
|
+ {$ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
|
|
|
{$ELSE}
|
|
|
|
|
@@ -1548,6 +1596,14 @@ uses
|
|
|
mysql_real_query: function (mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;
|
|
|
mysql_store_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
|
|
|
mysql_use_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
|
|
|
+ {$IFDEF mysql50}
|
|
|
+ mysql_get_character_set_info: procedure(mysql:PMYSQL; charset:PMY_CHARSET_INFO);extdecl;
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ mysql_session_track_get_first: function(mysql:PMYSQL; typ:enum_session_state_type; data:ppcchar; length:psize_t):cint; extdecl;
|
|
|
+ mysql_session_track_get_next: function(mysql:PMYSQL; typ:enum_session_state_type; data:ppcchar; length:psize_t):cint; extdecl;
|
|
|
+ {$ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
+
|
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFNDEF LinkDynamically}
|
|
@@ -1558,9 +1614,6 @@ uses
|
|
|
{ perform query on slave }
|
|
|
function mysql_slave_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_slave_query';
|
|
|
function mysql_slave_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_slave_send_query';
|
|
|
-{$IFDEF mysql50}
|
|
|
- procedure mysql_get_character_set_info(mysql : PMYSQL; charset : PMY_CHARSET_INFO);extdecl;external mysqllib name 'mysql_get_character_set_info';
|
|
|
-{$ENDIF}
|
|
|
{$ENDIF}
|
|
|
|
|
|
{ local infile support }
|
|
@@ -1696,6 +1749,9 @@ uses
|
|
|
mysql_options: function (mysql:PMYSQL; option:mysql_option; arg:Pchar):cint;extdecl;
|
|
|
{$IFDEF mysql56}
|
|
|
mysql_options4: function (mysql:PMYSQL; option:mysql_option; arg1,arg2:Pointer):cint;extdecl;
|
|
|
+ {$IFDEF mysql57}
|
|
|
+ mysql_get_option: function (mysql:PMYSQL; option:mysql_option; arg:Pointer):cint;extdecl;
|
|
|
+ {$ENDIF}
|
|
|
{$ENDIF}
|
|
|
mysql_free_result: procedure (result:PMYSQL_RES);extdecl;
|
|
|
mysql_data_seek: procedure (result:PMYSQL_RES; offset:my_ulonglong);extdecl;
|
|
@@ -1708,6 +1764,10 @@ uses
|
|
|
mysql_escape_string: function (fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;
|
|
|
mysql_hex_string: function (fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;
|
|
|
mysql_real_escape_string: function (mysql:PMYSQL; fto:Pchar; from:Pchar; length:culong):culong;extdecl;
|
|
|
+{$IFDEF mysql57}
|
|
|
+ mysql_real_escape_string_quote: function(mysql:PMYSQL; fto:pcchar; from:pcchar; length:culong; quote: cchar):culong;extdecl;
|
|
|
+ mysql_reset_connection: function(mysql:PMYSQL):cint;extdecl;
|
|
|
+{$ENDIF}
|
|
|
mysql_debug: procedure (debug:Pchar);extdecl;
|
|
|
|
|
|
mysql_rollback: function (mysql:PMYSQL):my_bool;extdecl;
|
|
@@ -1757,16 +1817,8 @@ uses
|
|
|
|
|
|
function mysql_reload(mysql : PMySQL) : cint;
|
|
|
|
|
|
-{$IFNDEF LinkDynamically}
|
|
|
-{$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';
|
|
|
- function mysql_drop_db(mysql:PMYSQL; DB:Pchar):cint;extdecl;external External_library name 'mysql_drop_db';
|
|
|
- function mysql_reload(mysql : PMySQL) : cint;
|
|
|
-{$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 }
|
|
|
|
|
@@ -1775,9 +1827,6 @@ uses
|
|
|
function net_safe_read(mysql:PMYSQL):cuint;cdecl;external mysqllib name 'net_safe_read';
|
|
|
{$ENDIF}
|
|
|
|
|
|
-{$ifdef NETWARE}
|
|
|
-(** unsupported pragma#pragma pack(pop) /* restore alignment */*)
|
|
|
-{$endif}
|
|
|
|
|
|
{$IFDEF LinkDynamically}
|
|
|
Function InitialiseMysql(Const LibraryName : AnsiString) : Integer;
|
|
@@ -1812,6 +1861,7 @@ begin
|
|
|
Exit;
|
|
|
Inc(RefCount);
|
|
|
MysqlLoadedLibrary:=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');
|
|
@@ -1821,13 +1871,9 @@ begin
|
|
|
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');
|
|
@@ -1870,7 +1916,6 @@ begin
|
|
|
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');
|
|
@@ -1884,7 +1929,6 @@ begin
|
|
|
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');
|
|
@@ -1915,6 +1959,10 @@ begin
|
|
|
pointer(mysql_stmt_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_insert_id');
|
|
|
pointer(mysql_stmt_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_field_count');
|
|
|
pointer(mysql_stmt_next_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_next_result');
|
|
|
+{$IFDEF mysql57}
|
|
|
+ pointer(mysql_real_escape_string_quote) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_escape_string_quote');
|
|
|
+ pointer(mysql_reset_connection) := GetProcedureAddress(MysqlLibraryHandle,'mysql_reset_connection');
|
|
|
+{$ENDIF}
|
|
|
|
|
|
if mysql_library_init(argc, argv, groups) <> 0 then
|
|
|
Exit;
|