00001 {*********************************************************}
00002 { }
00003 { Zeos Database Objects }
00004 { Delphi plain interface to libmysql.dll }
00005 { Version 4.1 }
00006 { }
00007 { Originally written by Sergey Seroukhov }
00008 { }
00009 { Thanks to : }
00010 { Pascal Data Objects Library }
00011 { }
00012 { Copyright (c) 2006 John Marino, www.synsport.com }
00013 { }
00014 {*********************************************************}
00015
00016 {@********************************************************}
00017 { Copyright (c) 1999-2006 Zeos Development Group }
00018 { }
00019 { License Agreement: }
00020 { }
00021 { This library is distributed in the hope that it will be }
00022 { useful, but WITHOUT ANY WARRANTY; without even the }
00023 { implied warranty of MERCHANTABILITY or FITNESS FOR }
00024 { A PARTICULAR PURPOSE. See the GNU Lesser General }
00025 { Public License for more details. }
00026 { }
00027 { The source code of the ZEOS Libraries and packages are }
00028 { distributed under the Library GNU General Public }
00029 { License (see the file COPYING / COPYING.ZEOS) }
00030 { with the following modification: }
00031 { As a special exception, the copyright holders of this }
00032 { library give you permission to link this library with }
00033 { independent modules to produce an executable, }
00034 { regardless of the license terms of these independent }
00035 { modules, and to copy and distribute the resulting }
00036 { executable under terms of your choice, provided that }
00037 { you also meet, for each linked independent module, }
00038 { the terms and conditions of the license of that module. }
00039 { An independent module is a module which is not derived }
00040 { from or based on this library. If you modify this }
00041 { library, you may extend this exception to your version }
00042 { of the library, but you are not obligated to do so. }
00043 { If you do not wish to do so, delete this exception }
00044 { statement from your version. }
00045 { }
00046 { }
00047 { The project web site is located on: }
00048 { http:
00049 { http:
00050 { svn:
00051 { }
00052 { http:
00053 { http:
00054 { }
00055 { }
00056 { }
00057 { Zeos Development Group. }
00058 {********************************************************@}
00059
00060 unit ZPlainMySqlConstants;
00061
00062 interface
00063
00064 {$I ZPlain.inc}
00065
00066 uses
00067 ZCompatibility;
00068
00069 const
00070 {$IFNDEF MYSQL_STRICT_DLL_LOADING}
00071 WINDOWS2_DLL_LOCATION = 'libmysql.dll';
00072 WINDOWS2_DLL_LOCATION_EMBEDDED = 'libmysqld.dll';
00073 {$ENDIF}
00074 LINUX2_DLL_LOCATION = 'libmysqlclient.so';
00075 LINUX_DLL_LOCATION_EMBEDDED = 'libmysqld.so';
00076
00077 { General Declarations }
00078 MYSQL_ERRMSG_SIZE = 512;
00079 SQLSTATE_LENGTH = 5;
00080 SCRAMBLE_LENGTH = 20;
00081
00082 MYSQL_PORT = 3306;
00083 LOCAL_HOST = 'localhost';
00084 NAME_LEN = 64;
00085 PROTOCOL_VERSION = 10;
00086 FRM_VER = 6;
00087
00088 { Field's flags }
00089 NOT_NULL_FLAG = 1; { Field can't be NULL }
00090 PRI_KEY_FLAG = 2; { Field is part of a primary key }
00091 UNIQUE_KEY_FLAG = 4; { Field is part of a unique key }
00092 MULTIPLE_KEY_FLAG = 8; { Field is part of a key }
00093 BLOB_FLAG = 16; { Field is a blob }
00094 UNSIGNED_FLAG = 32; { Field is unsigned }
00095 ZEROFILL_FLAG = 64; { Field is zerofill }
00096 BINARY_FLAG = 128; { Field is binary }
00097 ENUM_FLAG = 256; { Field is an enum }
00098 AUTO_INCREMENT_FLAG = 512; { Field is a autoincrement field }
00099 TIMESTAMP_FLAG = 1024; { Field is a timestamp }
00100 SET_FLAG = 2048; { Field is a set }
00101 NUM_FLAG = 32768; { Field is num (for clients) }
00102 PART_KEY_FLAG = 16384; { Intern; Part of some key }
00103 GROUP_FLAG = 32768; { Intern: Group field }
00104 UNIQUE_FLAG = 65536; { Intern: Used by sql_yacc }
00105 BINCMP_FLAG = $20000; { Intern: Used by sql_yacc }
00106 GET_FIXED_FIELDS_FLAG = $40000; { Used to get fields in item tree }
00107 FIELD_IN_PART_FUNC_FLAG= $80000; { Field part of partition func }
00108 FIELD_IN_ADD_INDEX = $100000; { Intern: Field used in ADD INDEX }
00109 FIELD_IS_RENAMED = $200000; { Intern: Field is being renamed}
00110
00111 { Server Administration Refresh Options }
00112 REFRESH_GRANT = 1; { Refresh grant tables }
00113 REFRESH_LOG = 2; { Start on new log file }
00114 REFRESH_TABLES = 4; { close all tables }
00115 REFRESH_HOSTS = 8; { Flush host cache }
00116 REFRESH_STATUS = 16; { Flush status variables }
00117 REFRESH_THREADS = 32; { Flush status variables }
00118 REFRESH_SLAVE = 64; { Reset master info abd restat slave thread }
00119 REFRESH_MASTER = 128; { Remove all bin logs in the index and truncate the index }
00120 REFRESH_READ_LOCK = 16384; { Lock tables for read }
00121 REFRESH_FAST = 32768; { Intern flag }
00122 REFRESH_QUERY_CACHE = 65536;
00123 REFRESH_QUERY_CACHE_FREE = $20000; { Pack query cache }
00124 REFRESH_DES_KEY_FILE = $40000;
00125 REFRESH_USER_RESOURCES = $80000;
00126
00127
00128 SERVER_STATUS_IN_TRANS = 1; {Transaction has started}
00129 SERVER_STATUS_AUTOCOMMIT = 2; {Server in Autocommit Mode}
00130 SERVER_STATUS_MORE_RESULTS = 4; {More results on server}
00131 SERVER_MORE_RESULTS_EXISTS = 8; {Multiple query, next query exists}
00132 SERVER_QUERY_NO_GOOD_INDEX_USED = 16;
00133 SERVER_QUERY_NO_INDEX_USED = 32;
00134 SERVER_STATUS_DB_DROPPED = 256; {A database was dropped}
00135
00136 NET_READ_TIMEOUT = 30; {timeout on read}
00137 NET_WRITE_TIMEOUT = 60; {timeout on write}
00138 NET_WAIT_TIMEOUT = 28800; {wait for new query}
00139
00140 { Net type }
00141 NET_TYPE_TCPIP = 0;
00142 NET_TYPE_SOCKET = 1;
00143 NET_TYPE_NAMEDPIPE = 2;
00144
00145 {THD: Killable}
00146 MYSQL_SHUTDOWN_KILLABLE_CONNECT = 1;
00147 MYSQL_SHUTDOWN_KILLABLE_TRANS = 2;
00148 MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE = 4;
00149 MYSQL_SHUTDOWN_KILLABLE_UPDATE = 8;
00150
00151 {prepared fetch results}
00152 STMT_FETCH_OK = 0;
00153 STMT_FETCH_ERROR = 1;
00154 STMT_FETCH_NO_DATA = 100;
00155 STMT_FETCH_DATA_TRUNC = 101;
00156
00157 type
00158 PZMySQLConnect = Pointer;
00159 PZMySQLResult = Pointer;
00160 PZMySQLRow = Pointer;
00161 PZMySQLField = Pointer;
00162 PZMySQLRowOffset = Pointer;
00163 PZMySqlPrepStmt = Pointer;
00164 PZMysqlBindArray = Pointer;
00165
00166 { TMySqlServerCommand = (
00167 COM_SLEEP,
00168 COM_QUIT,
00169 COM_INIT_DB,
00170 COM_QUERY,
00171 COM_FIELD_LIST,
00172 COM_CREATE_DB,
00173 COM_DROP_DB,
00174 COM_REFRESH,
00175 COM_SHUTDOWN,
00176 COM_STATISTICS,
00177 COM_PROCESS_INFO,
00178 COM_CONNECT,
00179 COM_PROCESS_KILL,
00180 COM_DEBUG,
00181 COM_PING,
00182 COM_TIME,
00183 COM_DELAYED_INSERT,
00184 COM_CHANGE_USER,
00185 COM_BINLOG_DUMP,
00186 COM_TABLE_DUMP,
00187 COM_CONNECT_OUT,
00188 COM_REGISTER_SLAVE,
00189 COM_PREPARE,
00190 COM_EXECUTE,
00191 COM_LONG_DATA,
00192 COM_CLOSE_STMT,
00193 COM_RESET_STMT,
00194 COM_SET_OPTION,
00195 COM_STMT_FETCH,
00196 COM_END
00197 );
00198 }
00199 { Enum Field Types }
00200 TMysqlFieldTypes = (
00201 MYSQL_TYPE_DECIMAL,
00202 MYSQL_TYPE_TINY, {BIND}
00203 MYSQL_TYPE_SHORT, {BIND}
00204 MYSQL_TYPE_LONG, {BIND}
00205 MYSQL_TYPE_FLOAT, {BIND}
00206 MYSQL_TYPE_DOUBLE, {BIND}
00207 MYSQL_TYPE_NULL,
00208 MYSQL_TYPE_TIMESTAMP, {BIND}
00209 MYSQL_TYPE_LONGLONG, {BIND}
00210 MYSQL_TYPE_INT24,
00211 MYSQL_TYPE_DATE, {BIND}
00212 MYSQL_TYPE_TIME, {BIND}
00213 MYSQL_TYPE_DATETIME, {BIND}
00214 MYSQL_TYPE_YEAR,
00215 MYSQL_TYPE_NEWDATE,
00216 MYSQL_TYPE_VARCHAR,
00217 MYSQL_TYPE_BIT,
00218 MYSQL_TYPE_NEWDECIMAL,
00219 MYSQL_TYPE_ENUM,
00220 MYSQL_TYPE_SET,
00221 MYSQL_TYPE_TINY_BLOB, {BIND}
00222 MYSQL_TYPE_MEDIUM_BLOB, {BIND}
00223 MYSQL_TYPE_LONG_BLOB, {BIND}
00224 MYSQL_TYPE_BLOB, {BIND}
00225 MYSQL_TYPE_VAR_STRING, {BIND}
00226 MYSQL_TYPE_STRING, {BIND}
00227 MYSQL_TYPE_GEOMETRY
00228 );
00229
00230 TMysqlSetOption = (
00231 MYSQL_OPTION_MULTI_STATEMENTS_ON,
00232 MYSQL_OPTION_MULTI_STATEMENTS_OFF
00233 );
00234
00235 TMysqlStmtAttrType = (
00236 STMT_ATTR_UPDATE_MAX_LENGTH,
00237 STMT_ATTR_CURSOR_TYPE,
00238 STMT_ATTR_PREFETCH_ROWS
00239 );
00240
00241 TMysqlShutdownLevel = (
00242 SHUTDOWN_DEFAULT{$IFNDEF VER130} = 0{$ENDIF},
00243 SHUTDOWN_WAIT_CONNECTIONS{$IFNDEF VER130} = MYSQL_SHUTDOWN_KILLABLE_CONNECT{$ENDIF},
00244 SHUTDOWN_WAIT_TRANSACTIONS{$IFNDEF VER130} = MYSQL_SHUTDOWN_KILLABLE_TRANS{$ENDIF},
00245 SHUTDOWN_WAIT_UPDATES{$IFNDEF VER130} = MYSQL_SHUTDOWN_KILLABLE_UPDATE{$ENDIF},
00246 SHUTDOWN_WAIT_ALL_BUFFERS{$IFNDEF VER130} = (MYSQL_SHUTDOWN_KILLABLE_UPDATE shl 1){$ENDIF},
00247 SHUTDOWN_WAIT_CRITICAL_BUFFERS,
00248 KILL_QUERY{$IFNDEF VER130} = 254{$ENDIF},
00249 KILL_CONNECTION{$IFNDEF VER130} = 255{$ENDIF}
00250 );
00251
00252 TMYSQL_CLIENT_OPTIONS =
00253 ( CLIENT_LONG_PASSWORD, { = 1; { new more secure passwords }
00254 CLIENT_FOUND_ROWS , { = 2; { Found instead of affected rows }
00255 CLIENT_LONG_FLAG , { = 4; { Get all column flags }
00256 CLIENT_CONNECT_WITH_DB , { = 8; { One can specify db on connect }
00257 CLIENT_NO_SCHEMA , { = 16; { Don't allow database.table.column }
00258 CLIENT_COMPRESS , { = 32; { Can use compression protcol }
00259 CLIENT_ODBC , { = 64; { Odbc client }
00260 CLIENT_LOCAL_FILES , { = 128; { Can use LOAD DATA LOCAL }
00261 CLIENT_IGNORE_SPACE , { = 256; { Ignore spaces before '(' }
00262 CLIENT_CHANGE_USER , { = 512; { Support the mysql_change_user() }
00263 CLIENT_INTERACTIVE , { = 1024; { This is an interactive client }
00264 CLIENT_SSL , { = 2048; { Switch to SSL after handshake }
00265 CLIENT_IGNORE_SIGPIPE , { = 4096; { IGNORE sigpipes }
00266 CLIENT_TRANSACTIONS , { = 8196; { Client knows about transactions }
00267 CLIENT_RESERVED , { = 16384; { Old flag for 4.1 protocol }
00268 CLIENT_SECURE_CONNECTION , {= 32768; { New 4.1 authentication }
00269 CLIENT_MULTI_STATEMENTS , {= 65536; { Enable/disable multi-stmt support }
00270 CLIENT_MULTI_RESULTS , { = 131072; { Enable/disable multi-results }
00271 CLIENT_OPT_18, {2^18 = 262144}
00272 CLIENT_OPT_19,{2^19 = 524288}
00273 CLIENT_OPT_20, {2^20 = 1048576}
00274 CLIENT_OPT_21, {2^21 = 2097152 }
00275 CLIENT_OPT_22, {2^22 = 4194304}
00276 CLIENT_OPT_23, {2^23 = 8388608 }
00277 CLIENT_OPT_24, {2^24 = 16777216 }
00278 CLIENT_OPT_25, {2^25 = 33554432}
00279 CLIENT_OPT_26, {2^26 = 67108864}
00280 CLIENT_OPT_27, {2^27 = 134217728}
00281 CLIENT_OPT_28, {2^28 = 268435456}
00282 CLIENT_OPT_29, {2^29 = 536870912}
00283 CLIENT_OPT_30, {2^30 = 1073741824}
00284 CLIENT_REMEMBER_OPTIONS { = 2147483648; {Enable/disable multi-results });
00285
00286 { TMySqlOption = (
00287 MYSQL_OPT_CONNECT_TIMEOUT,
00288 MYSQL_OPT_COMPRESS,
00289 MYSQL_OPT_NAMED_PIPE,
00290 MYSQL_INIT_COMMAND,
00291 MYSQL_READ_DEFAULT_FILE,
00292 MYSQL_READ_DEFAULT_GROUP,
00293 MYSQL_SET_CHARSET_DIR,
00294 MYSQL_SET_CHARSET_NAME,
00295 MYSQL_OPT_LOCAL_INFILE,
00296 MYSQL_OPT_PROTOCOL,
00297 MYSQL_SHARED_MEMORY_BASE_NAME,
00298 MYSQL_OPT_READ_TIMEOUT,
00299 MYSQL_OPT_WRITE_TIMEOUT,
00300 MYSQL_OPT_USE_RESULT,
00301 MYSQL_OPT_USE_REMOTE_CONNECTION,
00302 MYSQL_OPT_USE_EMBEDDED_CONNECTION,
00303 MYSQL_OPT_GUESS_CONNECTION,
00304 MYSQL_SET_CLIENT_IP,
00305 MYSQL_SECURE_AUTH,
00306 MYSQL_REPORT_DATA_TRUNCATION,
00307 MYSQL_OPT_RECONNECT
00308 );
00309
00310 TMySqlStatus = (
00311 MYSQL_STATUS_READY,
00312 MYSQL_STATUS_GET_RESULT,
00313 MYSQL_STATUS_USE_RESULT
00314 );
00315
00316 TMySqlRplType = (
00317 MYSQL_RPL_MASTER,
00318 MYSQL_RPL_SLAVE,
00319 MYSQL_RPL_ADMIN
00320 );
00321 }
00322 TMySqlProtocolType = (
00323 MYSQL_PROTOCOL_DEFAULT,
00324 MYSQL_PROTOCOL_TCP,
00325 MYSQL_PROTOCOL_SOCKET,
00326 MYSQL_PROTOCOL_PIPE,
00327 MYSQL_PROTOCOL_MEMORY
00328 );
00329
00330 TMysqlStmtState = (
00331 MYSQL_STMT_INIT_DONE{$IFNDEF VER130} = 1{$ENDIF},
00332 MYSQL_STMT_PREPARE_DONE,
00333 MYSQL_STMT_EXECUTE_DONE,
00334 MYSQL_STMT_FETCH_DONE
00335 );
00336
00337 MYSQL_TIME = record
00338 year: Cardinal;
00339 month: Cardinal;
00340 day: Cardinal;
00341 hour: Cardinal;
00342 minute: Cardinal;
00343 second: Cardinal;
00344 neg: Byte;
00345 second_part: Int64;
00346 end;
00347
00348 { PUSED_MEM=^USED_MEM;
00349 USED_MEM = packed record
00350 next: PUSED_MEM;
00351 left: Integer;
00352 size: Integer;
00353 end;
00354
00355 PERR_PROC = ^ERR_PROC;
00356 ERR_PROC = procedure;
00357
00358 PMEM_ROOT = ^MEM_ROOT;
00359 MEM_ROOT = packed record
00360 free: PUSED_MEM;
00361 used: PUSED_MEM;
00362 pre_alloc: PUSED_MEM;
00363 min_malloc: Integer;
00364 block_size: Integer;
00365 block_num: Integer;
00366 first_block_usage: Integer;
00367 error_handler: PERR_PROC;
00368 end;
00369
00370 PMYSQL_OPTIONS = ^ST_MYSQL_OPTIONS;
00371 ST_MYSQL_OPTIONS = record
00372 connect_timeout: Cardinal;
00373 read_timeout: Cardinal;
00374 write_timeout: Cardinal;
00375 port: Cardinal;
00376 protocol: Cardinal;
00377 client_flag: LongInt;
00378 host: PChar;
00379 user: PChar;
00380 password: PChar;
00381 unix_socket: PChar;
00382 db: PChar;
00383 init_commands: Pointer;
00384 my_cnf_file: PChar;
00385 my_cnf_group: PChar;
00386 charset_dir: PChar;
00387 charset_name: PChar;
00388 ssl_key: PChar;
00389 ssl_cert: PChar;
00390 ssl_ca: PChar;
00391 ssl_capath: PChar;
00392 ssl_cipher: PChar;
00393 shared_memory_base_name: PChar;
00394 max_allowed_packet: LongInt;
00395 use_ssl: Byte;
00396 compress: Byte;
00397 named_pipe: Byte;
00398 rpl_probe: Byte;
00399 rpl_parse: Byte;
00400 no_master_reads: Byte;
00401 separate_thread: Byte;
00402 methods_to_use: TMySqlOption;
00403 client_ip: PChar;
00404 secure_auth: Byte;
00405 local_infile_init: Pointer;
00406 local_infile_read: Pointer;
00407 local_infile_end: Pointer;
00408 local_infile_error: Pointer;
00409 local_infile_userdata: Pointer;
00410 end;
00411 }
00412 PLIST = ^LIST;
00413 LIST = record
00414 prev: PLIST;
00415 next: PLIST;
00416 data: Pointer;
00417 end;
00418
00419 MYSQL_FIELD_OFFSET = Cardinal;
00420
00421 // PMYSQL_BIND = ^MYSQL_BIND;
00422 // MYSQL_BIND = record
00423 // length: {$IFNDEF VER130}PLongWord{$ELSE}^Cardinal{$ENDIF};
00424 // is_null: {$IFNDEF VER130}PByte{$ELSE}^Byte{$ENDIF};
00425 // buffer: PChar;
00426 // buffer_type: TMysqlFieldTypes;
00427 // buffer_length: LongWord;
00428
00429 {all but is_unsigned is used internally by mysql server}
00430 // inter_buffer: {$IFNDEF VER130}PByte{$ELSE}^Byte{$ENDIF};
00431 // offset: LongWord;
00432 // internal_length: LongWord;
00433 // param_number: Cardinal;
00434 // pack_length: Cardinal;
00435 // is_unsigned: Byte;
00436 // long_data_used: Byte;
00437 // internal_is_null: Byte;
00438 // store_param_funct: Pointer; {procedure: (NET *net, struct st_mysql_bind *param)}
00439 // fetch_result: Pointer; {prcoedure: (struct st_mysql_bind *, unsigned char **row)}
00440 // skip_result: Pointer; {(struct st_mysql_bind *, MYSQL_FIELD *, unsigned char **row)}
00441 // end;
00442
00443 PMYSQL_BIND2 = ^MYSQL_BIND2;
00444 MYSQL_BIND2 = record
00445 length: PLongInt;
00446 is_null: PByte;
00447 buffer: PChar;
00448 error: PByte;
00449 buffer_type: Byte;
00450 buffer_length: LongInt;
00451 row_ptr: PByte;
00452 offset: LongInt;
00453 length_value: LongInt;
00454 param_number: Cardinal;
00455 pack_length: Cardinal;
00456 error_value: Byte;
00457 is_unsigned: Byte;
00458 long_data_used: Byte;
00459 is_null_value: Byte;
00460 store_param_funct: Pointer;
00461 fetch_result: Pointer;
00462 skip_result: Pointer;
00463 end;
00464
00465 PDOBindRecord2 = record
00466 buffer: Array of Byte;
00467 length: LongWord;
00468 is_null: Byte;
00469 end;
00470
00471 // Structure of the MYSQL_RES record isn't used anymore.
00472
00473
00474 MYSQL_RES = pointer;
00475 PMYSQL_RES = ^MYSQL_RES;
00476
00477 const
00478 EMBEDDED_DEFAULT_DATA_DIR = {$IFDEF WIN32}
00479 '.\data\'
00480 {$ELSE} './data/'
00481 {$ENDIF};
00482 SERVER_ARGUMENTS_KEY_PREFIX = 'ServerArgument';
00483 SERVER_GROUPS : array [0..2] of PChar = ('embedded'#0, 'server'#0, nil);
00484
00485 DEFAULT_PARAMS : array [0..2] of PChar = ('not_used'#0,
00486 '--datadir='+EMBEDDED_DEFAULT_DATA_DIR+#0,
00487 '--set-variable=key_buffer_size=32M'#0);
00488
00489 implementation
00490
00491
00492 end.