📄 mysql.pas
字号:
// tabs = 2
// -----------------------------------------------------------------------------------------------
//
// MySQL Client API for Borland Delphi (version 4 and above)
//
// Pascal Interface Unit for libmySQL.dll, the
// Client Library for MySQL AB's SQL Database Server
//
// This is a literal translation of relevant parts of MySQL AB's
// C header files, mysql.h, mysql_com.h, and mysql_version.h
//
// Copyright (c) 1999-2002 Matthias Fichtner
// (see license.txt for licensing information)
//
// -----------------------------------------------------------------------------------------------
// See mysql.h for MySQL AB's copyright and GPL notice
// -----------------------------------------------------------------------------------------------
//
// 17-Aug-1999 mf Translated mysql.h MySQL 3.22.24
// 19-Aug-1999 mf Corrected some type definitions MySQL 3.22.24
// 20-Aug-1999 mf Finished debugging the unit MySQL 3.22.24
// 18-Sep-1999 mf Code maintenance for release 3.22.26a MySQL 3.22.26a
// 22-Oct-1999 mf Code maintenance for release 3.22.28 MySQL 3.22.28
// 02-Jan-2000 mf Code maintenance for release 3.22.29 MySQL 3.22.29
// 21-Jan-2000 mf Code maintenance for release 3.22.30 MySQL 3.22.30
// 07-Feb-2000 mf Code maintenance for release 3.22.31 MySQL 3.22.31
// 16-Feb-2000 mf Code maintenance for release 3.22.32 MySQL 3.22.32
// 13-Aug-2000 mf Code maintenance for release 3.22.34 MySQL 3.22.34
// 14-Aug-2000 mf Reworked entire unit for first 3.23 release MySQL 3.23.19-beta
// 14-Aug-2000 mf Added mysql_character_set_name() MySQL 3.23.22-beta
// 11-Sep-2000 mf Added IS_NUM_FIELD and INTERNAL_NUM_FIELD MySQL 3.23.24-beta
// 08-Oct-2000 mf Modified TMEM_ROOT, enum_server_command, MySQL 3.23.25-beta
// and INTERNAL_NUM_FIELD
// 01-Nov-2000 mf Code maintenance for release 3.23.27 MySQL 3.23.27-beta
// 25-Nov-2000 mf Code maintenance for release 3.23.28 MySQL 3.23.28-gamma
// 05-Jan-2001 mf Code maintenance for release 3.23.30 MySQL 3.23.30-gamma
// 19-Jan-2001 mf Code maintenance for release 3.23.31 MySQL 3.23.31
// 11-Mar-2001 mf Added functions mysql_real_send_query(), MySQL 3.23.33
// mysql_send_query(), and mysql_reap_query()
// 28-Mai-2001 mf Modified mysql_send_query(), removed MySQL 3.23.38
// mysql_real_send_query(), mysql_reap_query(),
// added mysql_read_query_result(), and fixed
// CLIENT_TRANSACTIONS
// 07-Aug-2001 mf Code maintenance for release 3.23.40 MySQL 3.23.40
// 23-Sep-2001 mf Code maintenance for release 3.23.42 MySQL 3.23.42
// 29-Jan-2002 mf Added libmysql_load(), libmysql_free(), MySQL 3.23.47
// libmysql_status and LIBMYSQL_ constants
// for dynamic loading of libmySQL.dll
//
// -----------------------------------------------------------------------------------------------
//
// Latest releases of mysql.pas are made available through the
// distribution site at: http://www.fichtner.net/delphi/mysql/
//
// Please send questions, bug reports, and suggestions regarding
// mysql.pas to Matthias Fichtner <mfichtner@fichtner-meyer.com>
//
// See readme.txt for an introduction and documentation.
// See license.txt for licensing information and disclaimer.
//
// -----------------------------------------------------------------------------------------------
// This unit is provided "as is". Use it at your own risk.
// -----------------------------------------------------------------------------------------------
{$DEFINE DONT_LOAD_DLL} // Added for TmySQL by Justin P. Yunke on 02/11/2002
unit mysql;
// -----------------------------------------------------------------------------------------------
INTERFACE
// -----------------------------------------------------------------------------------------------
uses
Windows, // Needed for some type definitions
Winsock; // Needed for some type definitions
// ----------------
// From mysql.h ...
// ----------------
type
my_bool = byte;
gptr = pChar;
type
PUSED_MEM = ^TUSED_MEM; // struct for once_alloc
TUSED_MEM = record
next: PUSED_MEM; // Next block in use
left: longword; // memory left in block
size: longword; // size of block
end;
type
error_proc = procedure;
type
PMEM_ROOT = ^TMEM_ROOT;
TMEM_ROOT = record
free: PUSED_MEM;
used: PUSED_MEM;
pre_alloc: PUSED_MEM;
min_malloc: longword;
block_size: longword;
error_handler: error_proc;
end;
type
my_socket = TSocket;
// --------------------
// From mysql_com.h ...
// --------------------
const
NAME_LEN = 64; // Field/table name length
HOSTNAME_LENGTH = 60;
USERNAME_LENGTH = 16;
SERVER_VERSION_LENGTH = 60;
LOCAL_HOST = 'localhost';
LOCAL_HOST_NAMEDPIPE = '.';
MYSQL_NAMEDPIPE = 'MySQL';
MYSQL_SERVICENAME = 'MySql';
type
enum_server_command = (
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY,
COM_FIELD_LIST, COM_CREATE_DB, COM_DROP_DB, COM_REFRESH,
COM_SHUTDOWN, COM_STATISTICS,
COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL,
COM_DEBUG, COM_PING, COM_TIME, COM_DELAYED_INSERT,
COM_CHANGE_USER, COM_BINLOG_DUMP,
COM_TABLE_DUMP, COM_CONNECT_OUT
);
const
NOT_NULL_FLAG = 1; // Field can't be NULL
PRI_KEY_FLAG = 2; // Field is part of a primary key
UNIQUE_KEY_FLAG = 4; // Field is part of a unique key
MULTIPLE_KEY_FLAG = 8; // Field is part of a key
BLOB_FLAG = 16; // Field is a blob
UNSIGNED_FLAG = 32; // Field is unsigned
ZEROFILL_FLAG = 64; // Field is zerofill
BINARY_FLAG = 128;
// The following are only sent to new clients
ENUM_FLAG = 256; // field is an enum
AUTO_INCREMENT_FLAG = 512; // field is a autoincrement field
TIMESTAMP_FLAG = 1024; // Field is a timestamp
SET_FLAG = 2048; // field is a set
NUM_FLAG = 32768; // Field is num (for clients)
PART_KEY_FLAG = 16384; // Intern; Part of some key
GROUP_FLAG = 32768; // Intern: Group field
UNIQUE_FLAG = 65536; // Intern: Used by sql_yacc
REFRESH_GRANT = 1; // Refresh grant tables
REFRESH_LOG = 2; // Start on new log file
REFRESH_TABLES = 4; // close all tables
REFRESH_HOSTS = 8; // Flush host cache
REFRESH_STATUS = 16; // Flush status variables
REFRESH_THREADS = 32; // Flush status variables
REFRESH_SLAVE = 64; // Reset master info and restart slave
// thread
REFRESH_MASTER = 128; // Remove all bin logs in the index
// and truncate the index
// The following can't be set with mysql_refresh()
REFRESH_READ_LOCK = 16384; // Lock tables for read
REFRESH_FAST = 32768; // Intern flag
CLIENT_LONG_PASSWORD = 1; // new more secure passwords
CLIENT_FOUND_ROWS = 2; // Found instead of affected rows
CLIENT_LONG_FLAG = 4; // Get all column flags
CLIENT_CONNECT_WITH_DB = 8; // One can specify db on connect
CLIENT_NO_SCHEMA = 16; // Don't allow database.table.column
CLIENT_COMPRESS = 32; // Can use compression protcol
CLIENT_ODBC = 64; // Odbc client
CLIENT_LOCAL_FILES = 128; // Can use LOAD DATA LOCAL
CLIENT_IGNORE_SPACE = 256; // Ignore spaces before '('
CLIENT_INTERACTIVE = 1024; // This is an interactive client
CLIENT_SSL = 2048; // Switch to SSL after handshake
CLIENT_IGNORE_SIGPIPE = 4096; // IGNORE sigpipes
CLIENT_TRANSACTIONS = 8192; // Client knows about transactions
SERVER_STATUS_IN_TRANS = 1; // Transaction has started
SERVER_STATUS_AUTOCOMMIT = 2; // Server in auto_commit mode
MYSQL_ERRMSG_SIZE = 200;
NET_READ_TIMEOUT = 30; // Timeout on read
NET_WRITE_TIMEOUT = 60; // Timeout on write
NET_WAIT_TIMEOUT = 8*60*60; // Wait for new query
type
PVio = ^TVio;
TVio = record
end;
type
PNET = ^TNET;
TNET = record
vio: PVio;
fd: my_socket;
fcntl: longint;
buff, buff_end, write_pos, read_pos: pByte;
last_error: array [0..MYSQL_ERRMSG_SIZE - 1] of char;
last_errno, max_packet, timeout, pkt_nr: longword;
error: byte;
return_errno, compress: my_bool;
no_send_ok: my_bool; // needed if we are doing several
// queries in one command ( as in LOAD TABLE ... FROM MASTER ),
// and do not want to confuse the client with OK at the wrong time
remain_in_buf, length, buf_length, where_b: longword;
return_status: pLongword;
reading_or_writing: byte;
save_char: char;
end;
const
packet_error: longword = $ffffffff;
const
FIELD_TYPE_DECIMAL = 0;
FIELD_TYPE_TINY = 1;
FIELD_TYPE_SHORT = 2;
FIELD_TYPE_LONG = 3;
FIELD_TYPE_FLOAT = 4;
FIELD_TYPE_DOUBLE = 5;
FIELD_TYPE_NULL = 6;
FIELD_TYPE_TIMESTAMP = 7;
FIELD_TYPE_LONGLONG = 8;
FIELD_TYPE_INT24 = 9;
FIELD_TYPE_DATE = 10;
FIELD_TYPE_TIME = 11;
FIELD_TYPE_DATETIME = 12;
FIELD_TYPE_YEAR = 13;
FIELD_TYPE_NEWDATE = 14;
FIELD_TYPE_ENUM = 247;
FIELD_TYPE_SET = 248;
FIELD_TYPE_TINY_BLOB = 249;
FIELD_TYPE_MEDIUM_BLOB = 250;
FIELD_TYPE_LONG_BLOB = 251;
FIELD_TYPE_BLOB = 252;
FIELD_TYPE_VAR_STRING = 253;
FIELD_TYPE_STRING = 254;
const
FIELD_TYPE_CHAR = FIELD_TYPE_TINY; // For compability
FIELD_TYPE_INTERVAL = FIELD_TYPE_ENUM; // For compability
type
enum_field_types = FIELD_TYPE_DECIMAL..FIELD_TYPE_STRING;
// ------------------------
// From mysql_version.h ...
// ------------------------
const
PROTOCOL_VERSION = 10;
MYSQL_SERVER_VERSION = '3.23.47';
MYSQL_SERVER_SUFFIX = '';
FRM_VER = 6;
MYSQL_VERSION_ID = 32347;
MYSQL_PORT = 3306;
MYSQL_UNIX_ADDR = '/tmp/mysql.sock';
// ----------------
// From mysql.h ...
// ----------------
function IS_PRI_KEY(n: longword): boolean;
function IS_NOT_NULL(n: longword): boolean;
function IS_BLOB(n: longword): boolean;
function IS_NUM(t: longword): boolean;
type
PMYSQL_FIELD = ^TMYSQL_FIELD;
TMYSQL_FIELD = record
name: pChar; // Name of column
table: pChar; // Table of column if column was a field
def: pChar; // Default value (set by mysql_list_fields)
_type: enum_field_types; // Type of field. Se mysql_com.h for types
length: longword; // Width of column
max_length: longword; // Max width of selected set
flags: longword; // Div flags
decimals: longword; // Number of decimals in field
end;
function IS_NUM_FIELD(f: PMYSQL_FIELD): boolean;
function INTERNAL_NUM_FIELD(f: PMYSQL_FIELD): boolean;
type
PMYSQL_ROW = ^TMYSQL_ROW; // return data as array of strings
TMYSQL_ROW = array[0..MaxInt div SizeOf(pChar) - 1] of pChar;
type
MYSQL_FIELD_OFFSET = longword; // offset to current field
type
my_ulonglong = int64;
const
MYSQL_COUNT_ERROR: my_ulonglong = not 0;
type
PMYSQL_ROWS = ^TMYSQL_ROWS;
TMYSQL_ROWS = record
next: PMYSQL_ROWS; // list of rows
data: PMYSQL_ROW;
end;
type
MYSQL_ROW_OFFSET = PMYSQL_ROWS; // offset to current row
type
PMYSQL_DATA = ^TMYSQL_DATA;
TMYSQL_DATA = record
rows: my_ulonglong;
fields: longword;
data: PMYSQL_ROWS;
alloc: TMEM_ROOT;
end;
type
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -