00001 {*********************************************************}
00002 { }
00003 { Zeos Database Objects }
00004 { Native Plain Drivers for MySQL }
00005 { }
00006 { Originally written by Sergey Seroukhov }
00007 { }
00008 { Thanks to : }
00009 { Pascal Data Objects Library }
00010 { }
00011 { Copyright (c) 2006 John Marino, www.synsport.com }
00012 { }
00013 {*********************************************************}
00014
00015 {@********************************************************}
00016 { Copyright (c) 1999-2006 Zeos Development Group }
00017 { }
00018 { License Agreement: }
00019 { }
00020 { This library is distributed in the hope that it will be }
00021 { useful, but WITHOUT ANY WARRANTY; without even the }
00022 { implied warranty of MERCHANTABILITY or FITNESS FOR }
00023 { A PARTICULAR PURPOSE. See the GNU Lesser General }
00024 { Public License for more details. }
00025 { }
00026 { The source code of the ZEOS Libraries and packages are }
00027 { distributed under the Library GNU General Public }
00028 { License (see the file COPYING / COPYING.ZEOS) }
00029 { with the following modification: }
00030 { As a special exception, the copyright holders of this }
00031 { library give you permission to link this library with }
00032 { independent modules to produce an executable, }
00033 { regardless of the license terms of these independent }
00034 { modules, and to copy and distribute the resulting }
00035 { executable under terms of your choice, provided that }
00036 { you also meet, for each linked independent module, }
00037 { the terms and conditions of the license of that module. }
00038 { An independent module is a module which is not derived }
00039 { from or based on this library. If you modify this }
00040 { library, you may extend this exception to your version }
00041 { of the library, but you are not obligated to do so. }
00042 { If you do not wish to do so, delete this exception }
00043 { statement from your version. }
00044 { }
00045 { }
00046 { The project web site is located on: }
00047 { http:
00048 { http:
00049 { svn:
00050 { }
00051 { http:
00052 { http:
00053 { }
00054 { }
00055 { }
00056 { Zeos Development Group. }
00057 {********************************************************@}
00058
00059 unit ZPlainMySqlDriver;
00060
00061 interface
00062
00063 {$I ZPlain.inc}
00064
00065 uses Classes, ZClasses, ZPlainDriver, ZCompatibility, ZPlainMySqlConstants,
00066 {$IFDEF ENABLE_MYSQL_DEPRECATED} ZPlainMySql320, ZPlainMySql323, ZPlainMySql40, ZMessages,{$ENDIF}
00067 ZPlainMySql41, ZPlainMySql5;
00068
00069 const
00070
00071 { Enum Field Types }
00072 FIELD_TYPE_DECIMAL = 0;
00073 FIELD_TYPE_TINY = 1;
00074 FIELD_TYPE_SHORT = 2;
00075 FIELD_TYPE_LONG = 3;
00076 FIELD_TYPE_FLOAT = 4;
00077 FIELD_TYPE_DOUBLE = 5;
00078 FIELD_TYPE_NULL = 6;
00079 FIELD_TYPE_TIMESTAMP = 7;
00080 FIELD_TYPE_LONGLONG = 8;
00081 FIELD_TYPE_INT24 = 9;
00082 FIELD_TYPE_DATE = 10;
00083 FIELD_TYPE_TIME = 11;
00084 FIELD_TYPE_DATETIME = 12;
00085 FIELD_TYPE_YEAR = 13;
00086 FIELD_TYPE_NEWDATE = 14;
00087 FIELD_TYPE_VARCHAR = 15;
00088 FIELD_TYPE_BIT = 16;
00089 FIELD_TYPE_NEWDECIMAL = 246;
00090 FIELD_TYPE_ENUM = 247;
00091 FIELD_TYPE_SET = 248;
00092 FIELD_TYPE_TINY_BLOB = 249;
00093 FIELD_TYPE_MEDIUM_BLOB = 250;
00094 FIELD_TYPE_LONG_BLOB = 251;
00095 FIELD_TYPE_BLOB = 252;
00096 FIELD_TYPE_VAR_STRING = 253;
00097 FIELD_TYPE_STRING = 254;
00098 FIELD_TYPE_GEOMETRY = 255;
00099
00100 { For Compatibility }
00101 FIELD_TYPE_CHAR = FIELD_TYPE_TINY;
00102 FIELD_TYPE_INTERVAL = FIELD_TYPE_ENUM;
00103
00104 { Client Connection Options }
00105 _CLIENT_LONG_PASSWORD = 1; { new more secure passwords }
00106 _CLIENT_FOUND_ROWS = 2; { Found instead of affected rows }
00107 _CLIENT_LONG_FLAG = 4; { Get all column flags }
00108 _CLIENT_CONNECT_WITH_DB = 8; { One can specify db on connect }
00109 _CLIENT_NO_SCHEMA = 16; { Don't allow database.table.column }
00110 _CLIENT_COMPRESS = 32; { Can use compression protcol }
00111 _CLIENT_ODBC = 64; { Odbc client }
00112 _CLIENT_LOCAL_FILES = 128; { Can use LOAD DATA LOCAL }
00113 _CLIENT_IGNORE_SPACE = 256; { Ignore spaces before '(' }
00114 _CLIENT_CHANGE_USER = 512; { Support the mysql_change_user() }
00115 _CLIENT_INTERACTIVE = 1024; { This is an interactive client }
00116 _CLIENT_SSL = 2048; { Switch to SSL after handshake }
00117 _CLIENT_IGNORE_SIGPIPE = 4096; { IGNORE sigpipes }
00118 _CLIENT_TRANSACTIONS = 8196; { Client knows about transactions }
00119 _CLIENT_RESERVED = 16384; { Old flag for 4.1 protocol }
00120 _CLIENT_SECURE_CONNECTION = 32768; { New 4.1 authentication }
00121 _CLIENT_MULTI_STATEMENTS = 65536; { Enable/disable multi-stmt support }
00122 _CLIENT_MULTI_RESULTS = 131072; { Enable/disable multi-results }
00123 _CLIENT_REMEMBER_OPTIONS = 2147483648; {Enable/disable multi-results }
00124
00125 type
00126 PZMySQLConnect = Pointer;
00127 PZMySQLResult = Pointer;
00128 PZMySQLRow = Pointer;
00129 PZMySQLField = Pointer;
00130 PZMySQLRowOffset = Pointer;
00131
00132 TZMySQLOption = (
00133 MYSQL_OPT_CONNECT_TIMEOUT,
00134 MYSQL_OPT_COMPRESS,
00135 MYSQL_OPT_NAMED_PIPE,
00136 MYSQL_INIT_COMMAND,
00137 MYSQL_READ_DEFAULT_FILE,
00138 MYSQL_READ_DEFAULT_GROUP,
00139 MYSQL_SET_CHARSET_DIR,
00140 MYSQL_SET_CHARSET_NAME
00141 );
00142
00143 TZMySQLStatus = (
00144 MYSQL_STATUS_READY,
00145 MYSQL_STATUS_GET_RESULT,
00146 MYSQL_STATUS_USE_RESULT
00147 );
00148
00149 {** Represents a generic interface to MySQL native API. }
00150 IZMySQLPlainDriver = interface (IZPlainDriver)
00151 ['{D1CB3F6C-72A1-4125-873F-791202ACC5F0}']
00152 {ADDED by fduenas 15-06-2006}
00153 function GetClientVersion: Integer;
00154 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00155 {END ADDED by fduenas 15-06-2006}
00156 procedure Despose(var Handle: PZMySQLConnect);
00157
00158 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00159 // char_set_name
00160 procedure Close(Handle: PZMySQLConnect);
00161 function Connect(Handle: PZMySQLConnect; const Host, User, Password: PChar): PZMySQLConnect;
00162 function CreateDatabase(Handle: PZMySQLConnect; const Database: PChar): Integer;
00163 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00164 procedure Debug(Debug: PChar);
00165 function DropDatabase(Handle: PZMySQLConnect; const Database: PChar): Integer;
00166 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00167 // eof
00168 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00169 function GetLastError(Handle: PZMySQLConnect): PChar;
00170 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00171 function FetchField(Res: PZMySQLResult): PZMySQLField;
00172 // fetch_field_direct
00173 // fetch_fields
00174 function FetchLengths(Res: PZMySQLResult): PLongInt;
00175 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00176 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00177 // field_tell
00178 procedure FreeResult(Res: PZMySQLResult);
00179 function GetClientInfo: PChar;
00180 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00181 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00182 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00183 // info
00184 function Init(var Handle: PZMySQLConnect): PZMySQLConnect;
00185 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00186 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00187 function GetListDatabases(Handle: PZMySQLConnect; Wild: PChar): PZMySQLResult;
00188 function GetListFields(Handle: PZMySQLConnect; const Table, Wild: PChar): PZMySQLResult;
00189 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00190 function GetListTables(Handle: PZMySQLConnect; const Wild: PChar): PZMySQLResult;
00191 // num_fields
00192 function GetNumRows(Res: PZMySQLResult): Int64;
00193 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption; const Arg: PChar): Integer;
00194 function Ping(Handle: PZMySQLConnect): Integer;
00195 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00196 function RealConnect(Handle: PZMySQLConnect; const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00197 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00198 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar; Length: Integer): Integer;
00199 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00200 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00201 // row_tell
00202 function SelectDatabase(Handle: PZMySQLConnect; const Database: PChar): Integer;
00203 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00204 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00205 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00206 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00207 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00208
00209 // my_init
00210 // thread_init
00211 // thread_end
00212 // thread_safe
00213
00214 // server_init
00215 // server_end
00216
00217 // change_user
00218 // field_count
00219 // function GetClientVersion: AnsiString;
00220
00221 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer; // 2 versions!!
00222
00223 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00224 function Commit (Handle: PZMySQLConnect): Boolean;
00225 //function GetServerVersion (Handle: PZMySQLConnect): AnsiString;
00226 // hex_string
00227 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00228 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00229 function Rollback (Handle: PZMySQLConnect): Boolean;
00230 // set_character_set
00231 // set_server_option
00232 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00233 // warning_count
00234
00235 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00236 // stmt_attr_get
00237 // stmt_attr_set
00238 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00239 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00240 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00241 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00242 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00243 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00244 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00245 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00246 // stmt_fetch_column
00247 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00248 // stmt_free_result
00249 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00250 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00251 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00252 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00253 // stmt_param_metadata
00254 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00255 // stmt_reset
00256 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00257 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00258 // stmt_row_tell
00259 // stmt_send_long_data
00260 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00261 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00262
00263 // get_character_set_info
00264
00265 {non API functions}
00266 function GetFieldType(Field: PZMySQLField): Byte;
00267 function GetFieldFlags(Field: PZMySQLField): Integer;
00268 {$IFDEF ENABLE_MYSQL_DEPRECATED}
00269 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00270 {$ENDIF ENABLE_MYSQL_DEPRECATED}
00271 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00272 function GetRowCount(Res: PZMySQLResult): Int64;
00273 function GetFieldCount(Res: PZMySQLResult): Integer;
00274 function GetFieldName(Field: PZMySQLField): PChar;
00275 function GetFieldTable(Field: PZMySQLField): PChar;
00276 function GetFieldLength(Field: PZMySQLField): Integer;
00277 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00278 function GetFieldDecimals(Field: PZMySQLField): Integer;
00279 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00280 procedure BuildArguments(Options: TStrings);
00281
00282 {
00283 function GetProtocol: string; virtual;
00284 function GetDescription: string; virtual;
00285 procedure Initialize; virtual;
00286
00287 }
00288 end;
00289
00290 {$IFDEF ENABLE_MYSQL_DEPRECATED}
00291
00292 {** Implements a driver for MySQL 3.20 }
00293
00294 TZMySQL320PlainDriver = class (TZAbstractObject, IZPlainDriver,
00295 IZMySQLPlainDriver)
00296 protected
00297 MYSQL_API : ZPlainMySql320.mysql320_API;
00298 public
00299 constructor Create;
00300
00301 function GetProtocol: string;
00302 function GetDescription: string;
00303 procedure Initialize;
00304
00305 procedure Debug(Debug: PChar);
00306 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00307 function GetLastError(Handle: PZMySQLConnect): PChar;
00308 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00309 function Init(var Handle: PZMySQLConnect): PZMySQLConnect;
00310 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00311 procedure Despose(var Handle: PZMySQLConnect);
00312
00313 function Connect(Handle: PZMySQLConnect;
00314 const Host, User, Password: PChar): PZMySQLConnect;
00315 function RealConnect(Handle: PZMySQLConnect;
00316 const Host, User, Password, Db: PChar; Port: Cardinal;
00317 UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00318 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00319 procedure Close(Handle: PZMySQLConnect);
00320
00321 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00322 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar;
00323 Length: Integer): Integer;
00324
00325 function SelectDatabase(Handle: PZMySQLConnect;
00326 const Database: PChar): Integer;
00327 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00328 function CreateDatabase(Handle: PZMySQLConnect;
00329 const Database: PChar): Integer;
00330 function DropDatabase(Handle: PZMySQLConnect;
00331 const Database: PChar): Integer;
00332
00333 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
00334
00335 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00336 function Commit (Handle: PZMySQLConnect): Boolean;
00337 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00338 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00339 function Rollback (Handle: PZMySQLConnect): Boolean;
00340 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00341
00342 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00343 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00344 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00345 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00346 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00347 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00348 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00349 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00350 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00351 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00352 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00353 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00354 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00355 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00356 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00357 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00358 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00359 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00360 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00361
00362 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00363 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00364 function Ping(Handle: PZMySQLConnect): Integer;
00365
00366 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00367 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption;
00368 const Arg: PChar): Integer;
00369 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00370
00371 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00372 function GetClientInfo: PChar;
00373 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00374 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00375 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00376 {ADDED by fduenas 15-06-2006}
00377 function GetClientVersion: Integer;
00378 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00379 {END ADDED by fduenas 15-06-2006}
00380 function GetListDatabases(Handle: PZMySQLConnect;
00381 Wild: PChar): PZMySQLResult;
00382 function GetListTables(Handle: PZMySQLConnect;
00383 const Wild: PChar): PZMySQLResult;
00384 function GetNumRows(Res: PZMySQLResult): Int64;
00385 function GetListFields(Handle: PZMySQLConnect;
00386 const Table, Wild: PChar): PZMySQLResult;
00387 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00388
00389 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00390 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00391 procedure FreeResult(Res: PZMySQLResult);
00392 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00393
00394 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00395 function FetchLengths(Res: PZMySQLResult): PLongInt;
00396 function FetchField(Res: PZMySQLResult): PZMySQLField;
00397
00398 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00399 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset):
00400 PZMySQLRowOffset;
00401 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00402
00403 function GetFieldType(Field: PZMySQLField): Byte;
00404 function GetFieldFlags(Field: PZMySQLField): Integer;
00405 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00406 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00407 function GetRowCount(Res: PZMySQLResult): Int64;
00408 function GetFieldCount(Res: PZMySQLResult): Integer;
00409 function GetFieldName(Field: PZMySQLField): PChar;
00410 function GetFieldTable(Field: PZMySQLField): PChar;
00411 function GetFieldLength(Field: PZMySQLField): Integer;
00412 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00413 function GetFieldDecimals(Field: PZMySQLField): Integer;
00414 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00415 procedure BuildArguments(Options: TStrings);
00416 end;
00417
00418 {** Implements a driver for MySQL 3.23 }
00419 TZMySQL323PlainDriver = class (TZAbstractObject, IZPlainDriver,
00420 IZMySQLPlainDriver)
00421 protected
00422 MYSQL_API : ZPlainMySql323.mysql323_API;
00423 public
00424 constructor Create;
00425
00426 function GetProtocol: string;
00427 function GetDescription: string;
00428 procedure Initialize;
00429
00430 procedure Debug(Debug: PChar);
00431 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00432 function GetLastError(Handle: PZMySQLConnect): PChar;
00433 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00434 function Init(var Handle: PZMySQLConnect): PZMySQLConnect;
00435 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00436 procedure Despose(var Handle: PZMySQLConnect);
00437
00438 function Connect(Handle: PZMySQLConnect;
00439 const Host, User, Password: PChar): PZMySQLConnect;
00440 function RealConnect(Handle: PZMySQLConnect;
00441 const Host, User, Password, Db: PChar; Port: Cardinal;
00442 UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00443 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00444 procedure Close(Handle: PZMySQLConnect);
00445
00446 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00447 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar;
00448 Length: Integer): Integer;
00449
00450 function SelectDatabase(Handle: PZMySQLConnect;
00451 const Database: PChar): Integer;
00452 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00453 function CreateDatabase(Handle: PZMySQLConnect;
00454 const Database: PChar): Integer;
00455 function DropDatabase(Handle: PZMySQLConnect;
00456 const Database: PChar): Integer;
00457
00458 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer; // 2 versions!!
00459 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00460 function Commit (Handle: PZMySQLConnect): Boolean;
00461 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00462 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00463 function Rollback (Handle: PZMySQLConnect): Boolean;
00464 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00465
00466 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00467 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00468 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00469 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00470 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00471 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00472 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00473 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00474 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00475 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00476 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00477 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00478 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00479 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00480 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00481 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00482 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00483 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00484 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00485
00486 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00487 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00488 function Ping(Handle: PZMySQLConnect): Integer;
00489
00490 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00491 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption;
00492 const Arg: PChar): Integer;
00493 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00494
00495 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00496 function GetClientInfo: PChar;
00497 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00498 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00499 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00500 {ADDED by fduenas 15-06-2006}
00501 function GetClientVersion: Integer;
00502 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00503 {END ADDED by fduenas 15-06-2006}
00504 function GetListDatabases(Handle: PZMySQLConnect;
00505 Wild: PChar): PZMySQLResult;
00506 function GetListTables(Handle: PZMySQLConnect;
00507 const Wild: PChar): PZMySQLResult;
00508 function GetNumRows(Res: PZMySQLResult): Int64;
00509 function GetListFields(Handle: PZMySQLConnect;
00510 const Table, Wild: PChar): PZMySQLResult;
00511 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00512
00513 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00514 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00515 procedure FreeResult(Res: PZMySQLResult);
00516 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00517
00518 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00519 function FetchLengths(Res: PZMySQLResult): PLongInt;
00520 function FetchField(Res: PZMySQLResult): PZMySQLField;
00521
00522 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00523 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset):
00524 PZMySQLRowOffset;
00525 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00526
00527 function GetFieldType(Field: PZMySQLField): Byte;
00528 function GetFieldFlags(Field: PZMySQLField): Integer;
00529 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00530 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00531 function GetRowCount(Res: PZMySQLResult): Int64;
00532 function GetFieldCount(Res: PZMySQLResult): Integer;
00533 function GetFieldName(Field: PZMySQLField): PChar;
00534 function GetFieldTable(Field: PZMySQLField): PChar;
00535 function GetFieldLength(Field: PZMySQLField): Integer;
00536 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00537 function GetFieldDecimals(Field: PZMySQLField): Integer;
00538 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00539 procedure BuildArguments(Options: TStrings);
00540 end;
00541
00542 {** Implements a driver for MySQL 4.0 }
00543 TZMySQL40PlainDriver = class (TZAbstractObject, IZPlainDriver,
00544 IZMySQLPlainDriver)
00545 protected
00546 MYSQL_API : ZPlainMySql40.mysql40_API;
00547 public
00548 constructor Create;
00549
00550 function GetProtocol: string; virtual;
00551 function GetDescription: string; virtual;
00552 procedure Initialize; virtual;
00553
00554 procedure Debug(Debug: PChar);
00555 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00556 function GetLastError(Handle: PZMySQLConnect): PChar;
00557 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00558 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; virtual;
00559 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00560 procedure Despose(var Handle: PZMySQLConnect);
00561
00562 function Connect(Handle: PZMySQLConnect;
00563 const Host, User, Password: PChar): PZMySQLConnect;
00564 function RealConnect(Handle: PZMySQLConnect;
00565 const Host, User, Password, Db: PChar; Port: Cardinal;
00566 UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00567 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00568 procedure Close(Handle: PZMySQLConnect);
00569
00570 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00571 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar;
00572 Length: Integer): Integer;
00573
00574 function SelectDatabase(Handle: PZMySQLConnect;
00575 const Database: PChar): Integer;
00576 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00577 function CreateDatabase(Handle: PZMySQLConnect;
00578 const Database: PChar): Integer;
00579 function DropDatabase(Handle: PZMySQLConnect;
00580 const Database: PChar): Integer;
00581
00582 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer; // 2 versions!!
00583 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00584 function Commit (Handle: PZMySQLConnect): Boolean;
00585 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00586 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00587 function Rollback (Handle: PZMySQLConnect): Boolean;
00588 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00589
00590 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00591 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00592 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00593 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00594 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00595 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00596 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00597 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00598 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00599 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00600 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00601 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00602 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00603 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00604 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00605 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00606 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00607 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00608 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00609
00610 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00611 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00612 function Ping(Handle: PZMySQLConnect): Integer;
00613
00614 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00615 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption;
00616 const Arg: PChar): Integer;
00617 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00618
00619 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00620 function GetClientInfo: PChar;
00621 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00622 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00623 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00624 {ADDED by fduenas 15-06-2006}
00625 function GetClientVersion: Integer;
00626 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00627 {END ADDED by fduenas 15-06-2006}
00628 function GetListDatabases(Handle: PZMySQLConnect;
00629 Wild: PChar): PZMySQLResult;
00630 function GetListTables(Handle: PZMySQLConnect;
00631 const Wild: PChar): PZMySQLResult;
00632 function GetNumRows(Res: PZMySQLResult): Int64;
00633 function GetListFields(Handle: PZMySQLConnect;
00634 const Table, Wild: PChar): PZMySQLResult;
00635 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00636
00637 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00638 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00639 procedure FreeResult(Res: PZMySQLResult);
00640 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00641
00642 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00643 function FetchLengths(Res: PZMySQLResult): PLongInt;
00644 function FetchField(Res: PZMySQLResult): PZMySQLField;
00645
00646 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00647 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset):
00648 PZMySQLRowOffset;
00649 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00650
00651 function GetFieldType(Field: PZMySQLField): Byte;
00652 function GetFieldFlags(Field: PZMySQLField): Integer;
00653 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00654 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00655 function GetRowCount(Res: PZMySQLResult): Int64;
00656 function GetFieldCount(Res: PZMySQLResult): Integer;
00657 function GetFieldName(Field: PZMySQLField): PChar;
00658 function GetFieldTable(Field: PZMySQLField): PChar;
00659 function GetFieldLength(Field: PZMySQLField): Integer;
00660 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00661 function GetFieldDecimals(Field: PZMySQLField): Integer;
00662 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00663 procedure BuildArguments(Options: TStrings); virtual;
00664 end;
00665
00666 TZMySQLD40PlainDriver = class (TZMySQL40PlainDriver)
00667 public
00668 function GetProtocol: string; override;
00669 function GetDescription: string; override;
00670 procedure Initialize; override;
00671 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; override;
00672 procedure BuildArguments(Options: TStrings); override;
00673 end;
00674 {$ENDIF ENABLE_MYSQL_DEPRECATED}
00675
00676 {** Implements a driver for MySQL 4.1 }
00677 TZMySQL41PlainDriver = class (TZAbstractObject, IZPlainDriver,
00678 IZMySQLPlainDriver)
00679 protected
00680 MYSQL_API : ZPlainMySql41.mysql41_API;
00681 public
00682 constructor Create;
00683
00684 function GetProtocol: string; virtual;
00685 function GetDescription: string; virtual;
00686 procedure Initialize; virtual;
00687
00688 procedure Debug(Debug: PChar);
00689 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00690 function GetLastError(Handle: PZMySQLConnect): PChar;
00691 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00692 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; virtual;
00693 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00694 procedure Despose(var Handle: PZMySQLConnect);
00695
00696 function Connect(Handle: PZMySQLConnect;
00697 const Host, User, Password: PChar): PZMySQLConnect;
00698 function RealConnect(Handle: PZMySQLConnect;
00699 const Host, User, Password, Db: PChar; Port: Cardinal;
00700 UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00701 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00702 procedure Close(Handle: PZMySQLConnect);
00703
00704 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00705 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar;
00706 Length: Integer): Integer;
00707
00708 function SelectDatabase(Handle: PZMySQLConnect;
00709 const Database: PChar): Integer;
00710 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00711 function CreateDatabase(Handle: PZMySQLConnect;
00712 const Database: PChar): Integer;
00713 function DropDatabase(Handle: PZMySQLConnect;
00714 const Database: PChar): Integer;
00715
00716 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer; // 2 versions!!
00717 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00718 function Commit (Handle: PZMySQLConnect): Boolean;
00719 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00720 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00721 function Rollback (Handle: PZMySQLConnect): Boolean;
00722 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00723
00724 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00725 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00726 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00727 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00728 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00729 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00730 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00731 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00732 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00733 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00734 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00735 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00736 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00737 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00738 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00739 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00740 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00741 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00742 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00743
00744 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00745 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00746 function Ping(Handle: PZMySQLConnect): Integer;
00747
00748 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00749 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption;
00750 const Arg: PChar): Integer;
00751 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00752
00753 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00754 function GetClientInfo: PChar;
00755 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00756 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00757 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00758 {ADDED by fduenas 15-06-2006}
00759 function GetClientVersion: Integer;
00760 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00761 {END ADDED by fduenas 15-06-2006}
00762 function GetListDatabases(Handle: PZMySQLConnect;
00763 Wild: PChar): PZMySQLResult;
00764 function GetListTables(Handle: PZMySQLConnect;
00765 const Wild: PChar): PZMySQLResult;
00766 function GetNumRows(Res: PZMySQLResult): Int64;
00767 function GetListFields(Handle: PZMySQLConnect;
00768 const Table, Wild: PChar): PZMySQLResult;
00769 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00770
00771 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00772 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00773 procedure FreeResult(Res: PZMySQLResult);
00774 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00775
00776 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00777 function FetchLengths(Res: PZMySQLResult): PLongInt;
00778 function FetchField(Res: PZMySQLResult): PZMySQLField;
00779
00780 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00781 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset):
00782 PZMySQLRowOffset;
00783 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00784
00785 function GetFieldType(Field: PZMySQLField): Byte;
00786 function GetFieldFlags(Field: PZMySQLField): Integer;
00787 {$IFDEF ENABLE_MYSQL_DEPRECATED}
00788 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00789 {$ENDIF ENABLE_MYSQL_DEPRECATED}
00790 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00791 function GetRowCount(Res: PZMySQLResult): Int64;
00792 function GetFieldCount(Res: PZMySQLResult): Integer;
00793 function GetFieldName(Field: PZMySQLField): PChar;
00794 function GetFieldTable(Field: PZMySQLField): PChar;
00795 function GetFieldLength(Field: PZMySQLField): Integer;
00796 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00797 function GetFieldDecimals(Field: PZMySQLField): Integer;
00798 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00799 procedure BuildArguments(Options: TStrings); virtual;
00800 end;
00801
00802 {** Implements a driver for MySQL 4.1 }
00803 TZMySQLD41PlainDriver = class (TZMySQL41PlainDriver)
00804 public
00805 function GetProtocol: string; override;
00806 function GetDescription: string; override;
00807 procedure Initialize; override;
00808 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; override;
00809 procedure BuildArguments(Options: TStrings); override;
00810 end;
00811
00812 TZMySQL5PlainDriver = class (TZAbstractObject, IZPlainDriver,
00813 IZMySQLPlainDriver)
00814 protected
00815 MYSQL_API : ZPlainMySql5.mysql5_API;
00816 public
00817 constructor Create;
00818
00819 function GetProtocol: string; virtual;
00820 function GetDescription: string; virtual;
00821 procedure Initialize; virtual;
00822
00823 procedure Debug(Debug: PChar);
00824 function DumpDebugInfo(Handle: PZMySQLConnect): Integer;
00825 function GetLastError(Handle: PZMySQLConnect): PChar;
00826 function GetLastErrorCode(Handle: PZMySQLConnect): Integer;
00827 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; virtual;
00828 function GetLastInsertID (Handle: PZMySQLConnect): Int64;
00829 procedure Despose(var Handle: PZMySQLConnect);
00830
00831 function Connect(Handle: PZMySQLConnect;
00832 const Host, User, Password: PChar): PZMySQLConnect;
00833 function RealConnect(Handle: PZMySQLConnect;
00834 const Host, User, Password, Db: PChar; Port: Cardinal;
00835 UnixSocket: PChar; ClientFlag: Cardinal): PZMySQLConnect;
00836 function GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00837 procedure Close(Handle: PZMySQLConnect);
00838
00839 function ExecQuery(Handle: PZMySQLConnect; const Query: PChar): Integer;
00840 function ExecRealQuery(Handle: PZMySQLConnect; const Query: PChar;
00841 Length: Integer): Integer;
00842
00843 function SelectDatabase(Handle: PZMySQLConnect;
00844 const Database: PChar): Integer;
00845 function SslSet(Handle: PZMySQLConnect; const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
00846 function CreateDatabase(Handle: PZMySQLConnect;
00847 const Database: PChar): Integer;
00848 function DropDatabase(Handle: PZMySQLConnect;
00849 const Database: PChar): Integer;
00850
00851 function Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer; // 2 versions!!
00852 function SetAutocommit (Handle: PZMySQLConnect; mode: Boolean): Boolean;
00853 function Commit (Handle: PZMySQLConnect): Boolean;
00854 function CheckAnotherRowset (Handle: PZMySQLConnect): Boolean;
00855 function RetrieveNextRowset (Handle: PZMySQLConnect): Integer;
00856 function Rollback (Handle: PZMySQLConnect): Boolean;
00857 function GetSQLState (Handle: PZMySQLConnect): AnsiString;
00858
00859 function GetPreparedAffectedRows (Handle: PZMySqlPrepStmt): Int64;
00860 function BindParameters (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00861 function BindResult (Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
00862 function ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
00863 procedure SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
00864 function GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt): Integer;
00865 function GetLastPreparedError(Handle: PZMySqlPrepStmt): AnsiString;
00866 function ExecuteStmt (Handle: PZMySqlPrepStmt): Integer;
00867 function FetchBoundResults (Handle: PZMySqlPrepStmt): Integer;
00868 function GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
00869 function InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
00870 function GetPreparedInsertID (Handle: PZMySqlPrepStmt): Int64;
00871 function GetPreparedNumRows (Handle: PZMySqlPrepStmt): Int64;
00872 function GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal; // param_count
00873 function PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
00874 function GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
00875 function SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00876 function GetPreparedSQLState (Handle: PZMySqlPrepStmt): PChar;
00877 function StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
00878
00879 function Refresh(Handle: PZMySQLConnect; Options: Cardinal): Integer;
00880 function Kill(Handle: PZMySQLConnect; Pid: LongInt): Integer;
00881 function Ping(Handle: PZMySQLConnect): Integer;
00882
00883 function GetStatInfo(Handle: PZMySQLConnect): PChar;
00884 function SetOptions(Handle: PZMySQLConnect; Option: TZMySQLOption;
00885 const Arg: PChar): Integer;
00886 function GetEscapeString(StrTo, StrFrom: PChar; Length: Cardinal): Cardinal;
00887
00888 function GetServerInfo(Handle: PZMySQLConnect): PChar;
00889 function GetClientInfo: PChar;
00890 function GetHostInfo(Handle: PZMySQLConnect): PChar;
00891 function GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
00892 function GetThreadId(Handle: PZMySQLConnect): Cardinal;
00893 {ADDED by fduenas 15-06-2006}
00894 function GetClientVersion: Integer;
00895 function GetServerVersion(Handle: PZMySQLConnect): Integer;
00896 {END ADDED by fduenas 15-06-2006}
00897 function GetListDatabases(Handle: PZMySQLConnect;
00898 Wild: PChar): PZMySQLResult;
00899 function GetListTables(Handle: PZMySQLConnect;
00900 const Wild: PChar): PZMySQLResult;
00901 function GetNumRows(Res: PZMySQLResult): Int64;
00902 function GetListFields(Handle: PZMySQLConnect;
00903 const Table, Wild: PChar): PZMySQLResult;
00904 function GetListProcesses(Handle: PZMySQLConnect): PZMySQLResult;
00905
00906 function StoreResult(Handle: PZMySQLConnect): PZMySQLResult;
00907 function UseResult(Handle: PZMySQLConnect): PZMySQLResult;
00908 procedure FreeResult(Res: PZMySQLResult);
00909 function GetAffectedRows(Handle: PZMySQLConnect): Int64;
00910
00911 function FetchRow(Res: PZMySQLResult): PZMySQLRow;
00912 function FetchLengths(Res: PZMySQLResult): PLongInt;
00913 function FetchField(Res: PZMySQLResult): PZMySQLField;
00914
00915 procedure SeekData(Res: PZMySQLResult; Offset: Cardinal);
00916 function SeekRow(Res: PZMySQLResult; Row: PZMySQLRowOffset): PZMySQLRowOffset;
00917 function SeekField(Res: PZMySQLResult; Offset: Cardinal): Cardinal;
00918
00919 function GetFieldType(Field: PZMySQLField): Byte;
00920 function GetFieldFlags(Field: PZMySQLField): Integer;
00921 {$IFDEF ENABLE_MYSQL_DEPRECATED}
00922 function GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
00923 {$ENDIF ENABLE_MYSQL_DEPRECATED}
00924 function ResultSetExists(Handle: PZMySQLConnect):Boolean;
00925 function GetRowCount(Res: PZMySQLResult): Int64;
00926 function GetFieldCount(Res: PZMySQLResult): Integer;
00927 function GetFieldName(Field: PZMySQLField): PChar;
00928 function GetFieldTable(Field: PZMySQLField): PChar;
00929 function GetFieldLength(Field: PZMySQLField): Integer;
00930 function GetFieldMaxLength(Field: PZMySQLField): Integer;
00931 function GetFieldDecimals(Field: PZMySQLField): Integer;
00932 function GetFieldData(Row: PZMySQLRow; Offset: Cardinal): PChar;
00933 procedure BuildArguments(Options: TStrings); virtual;
00934 end;
00935
00936 TZMySQLD5PlainDriver = class (TZMySQL5PlainDriver)
00937 public
00938 function GetProtocol: string; override;
00939 function GetDescription: string; override;
00940 procedure Initialize; override;
00941 function Init(var Handle: PZMySQLConnect): PZMySQLConnect; override;
00942 procedure BuildArguments(Options: TStrings); override;
00943 end;
00944
00945 implementation
00946 uses SysUtils;
00947
00948 var
00949 ServerArgs: array of PChar;
00950 ServerArgsLen: Integer;
00951
00952 procedure BuildServerArguments(Options: TStrings);
00953 var
00954 TmpList: TStringList;
00955 i: Integer;
00956 begin
00957 TmpList := TStringList.Create;
00958 try
00959 TmpList.Add(ParamStr(0));
00960 for i := 0 to Options.Count - 1 do
00961 if SameText(SERVER_ARGUMENTS_KEY_PREFIX,
00962 Copy(Options.Names[i], 1,
00963 Length(SERVER_ARGUMENTS_KEY_PREFIX))) then
00964 {$IFDEF VER140BELOW}
00965 TmpList.Add(Options.Values[Options.Names[i]]);
00966 {$ELSE}
00967 TmpList.Add(Options.ValueFromIndex[i]);
00968 {$ENDIF}
00969 //Check if DataDir is specified, if not, then add it to the Arguments List
00970 If TmpList.Values['--datadir'] = '' then
00971 TmpList.Add('--datadir='+EMBEDDED_DEFAULT_DATA_DIR);
00972 ServerArgsLen := TmpList.Count;
00973 SetLength(ServerArgs, ServerArgsLen);
00974 for i := 0 to ServerArgsLen - 1 do
00975 ServerArgs[i] := StrNew(PChar(TmpList[i]));
00976 finally
00977 TmpList.Free;
00978 end;
00979 end;
00980
00981 {$IFDEF ENABLE_MYSQL_DEPRECATED}
00982 { TZMySQL320PlainDriver }
00983
00984 constructor TZMySQL320PlainDriver.Create;
00985 begin
00986 end;
00987
00988 function TZMySQL320PlainDriver.GetProtocol: string;
00989 begin
00990 Result := 'mysql-3.20';
00991 end;
00992
00993 function TZMySQL320PlainDriver.GetDescription: string;
00994 begin
00995 Result := 'Native Plain Driver for MySQL 3.20+';
00996 end;
00997
00998 procedure TZMySQL320PlainDriver.Initialize;
00999 begin
01000 ZPlainMySql320.LibraryLoader.LoadIfNeeded;
01001 MYSQL_API := ZPlainMySql320.LibraryLoader.api_rec;
01002 end;
01003
01004 procedure TZMySQL320PlainDriver.Close(Handle: PZMySQLConnect);
01005 begin
01006 MYSQL_API.mysql_close(Handle);
01007 end;
01008
01009 function TZMySQL320PlainDriver.Connect(Handle: PZMySQLConnect; const Host,
01010 User, Password: PChar): PZMySQLConnect;
01011 begin
01012 Result := MYSQL_API.mysql_connect(Handle, Host, User, Password);
01013 end;
01014
01015 function TZMySQL320PlainDriver.SslSet(Handle: PZMySQLConnect;
01016 const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
01017 begin
01018 Result := MYSQL_API.mysql_ssl_set(Handle, Key, Cert, Ca, Capath, Cipher);
01019 end;
01020
01021 function TZMySQL320PlainDriver.CreateDatabase(Handle: PZMySQLConnect;
01022 const Database: PChar): Integer;
01023 begin
01024 Result := MYSQL_API.mysql_create_db(Handle, Database);
01025 end;
01026
01027 procedure TZMySQL320PlainDriver.Debug(Debug: PChar);
01028 begin
01029 MYSQL_API.mysql_debug(Debug);
01030 end;
01031
01032 function TZMySQL320PlainDriver.DropDatabase(Handle: PZMySQLConnect;
01033 const Database: PChar): Integer;
01034 begin
01035 Result := MYSQL_API.mysql_drop_db(Handle, Database);
01036 end;
01037
01038 function TZMySQL320PlainDriver.DumpDebugInfo(Handle: PZMySQLConnect): Integer;
01039 begin
01040 Result := MYSQL_API.mysql_dump_debug_info(Handle);
01041 end;
01042
01043 function TZMySQL320PlainDriver.ExecQuery(Handle: PZMySQLConnect;
01044 const Query: PChar): Integer;
01045 begin
01046 Result := MYSQL_API.mysql_query(Handle, Query);
01047 end;
01048
01049 function TZMySQL320PlainDriver.ExecRealQuery(Handle: PZMySQLConnect;
01050 const Query: PChar; Length: Integer): Integer;
01051 begin
01052 Result := MYSQL_API.mysql_real_query(Handle, Query, Length);
01053 end;
01054
01055 function TZMySQL320PlainDriver.FetchField(Res: PZMySQLResult): PZMySQLField;
01056 begin
01057 Result := MYSQL_API.mysql_fetch_field(Res);
01058 end;
01059
01060 function TZMySQL320PlainDriver.FetchLengths(Res: PZMySQLResult): PLongInt;
01061 begin
01062 Result := MYSQL_API.mysql_fetch_lengths(Res);
01063 end;
01064
01065 function TZMySQL320PlainDriver.FetchRow(Res: PZMySQLResult): PZMySQLRow;
01066 begin
01067 Result := MYSQL_API.mysql_fetch_row(Res);
01068 end;
01069
01070 procedure TZMySQL320PlainDriver.FreeResult(Res: PZMySQLResult);
01071 begin
01072 MYSQL_API.mysql_free_result(Res);
01073 end;
01074
01075 function TZMySQL320PlainDriver.GetAffectedRows(
01076 Handle: PZMySQLConnect): Int64;
01077 begin
01078 Result := MYSQL_API.mysql_affected_rows(Handle);
01079 end;
01080
01081 function TZMySQL320PlainDriver.GetClientInfo: PChar;
01082 begin
01083 Result := MYSQL_API.mysql_get_client_info;
01084 end;
01085
01086 function TZMySQL320PlainDriver.GetEscapeString(StrTo, StrFrom: PChar;
01087 Length: Cardinal): Cardinal;
01088 begin
01089 Result := MYSQL_API.mysql_escape_string(StrTo, StrFrom, Length);
01090 end;
01091
01092 function TZMySQL320PlainDriver.GetHostInfo(Handle: PZMySQLConnect): PChar;
01093 begin
01094 Result := MYSQL_API.mysql_get_host_info(Handle);
01095 end;
01096
01097 function TZMySQL320PlainDriver.GetListDatabases(Handle: PZMySQLConnect;
01098 Wild: PChar): PZMySQLResult;
01099 begin
01100 Result := MYSQL_API.mysql_list_dbs(Handle, Wild);
01101 end;
01102
01103 function TZMySQL320PlainDriver.GetListFields(Handle: PZMySQLConnect;
01104 const Table, Wild: PChar): PZMySQLResult;
01105 begin
01106 Result := MYSQL_API.mysql_list_fields(Handle, Table, Wild);
01107 end;
01108
01109 function TZMySQL320PlainDriver.GetListProcesses(
01110 Handle: PZMySQLConnect): PZMySQLResult;
01111 begin
01112 Result := MYSQL_API.mysql_list_processes(Handle);
01113 end;
01114
01115 function TZMySQL320PlainDriver.GetListTables(Handle: PZMySQLConnect;
01116 const Wild: PChar): PZMySQLResult;
01117 begin
01118 Result := MYSQL_API.mysql_list_tables(Handle, Wild);
01119 end;
01120
01121 function TZMySQL320PlainDriver.GetNumRows(Res: PZMySQLResult): Int64;
01122 Begin
01123 if (Res = nil) then
01124 Result := 0
01125 else
01126 Result := MYSQL_API.mysql_num_rows (Res);
01127 End;
01128
01129 function TZMySQL320PlainDriver.GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
01130 begin
01131 Result := MYSQL_API.mysql_get_proto_info(Handle);
01132 end;
01133
01134 function TZMySQL320PlainDriver.GetServerInfo(Handle: PZMySQLConnect): PChar;
01135 begin
01136 Result := MYSQL_API.mysql_get_server_info(Handle);
01137 end;
01138
01139 function TZMySQL320PlainDriver.GetStatInfo(Handle: PZMySQLConnect): PChar;
01140 begin
01141 Result := MYSQL_API.mysql_stat(Handle);
01142 end;
01143
01144 function TZMySQL320PlainDriver.GetThreadId(Handle: PZMySQLConnect): Cardinal;
01145 begin
01146 Result := MYSQL_API.mysql_thread_id(Handle);
01147 end;
01148
01149 function TZMySQL320PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
01150 begin
01151 if @MYSQL_API.mysql_server_init <> nil then
01152 MYSQL_API.mysql_server_init(1, nil, nil);
01153 Handle := AllocMem(SizeOf(ZPlainMySql320.MYSQL));
01154 Result := MYSQL_API.mysql_init(Handle);
01155 end;
01156
01157 function TZMySQL320PlainDriver.getLastInsertID (Handle: PZMySQLConnect): Int64;
01158 begin
01159 Result := MYSQL_API.mysql_insert_id(ZPlainMySql320.PMYSQL(Handle));
01160 end;
01161
01162 procedure TZMySQL320PlainDriver.Despose(var Handle: PZMySQLConnect);
01163 begin
01164 if Handle <> nil then
01165 FreeMem(Handle);
01166 Handle := nil;
01167 end;
01168
01169 function TZMySQL320PlainDriver.Kill(Handle: PZMySQLConnect;
01170 Pid: Integer): Integer;
01171 begin
01172 Result := MYSQL_API.mysql_kill(Handle, Pid);
01173 end;
01174
01175 function TZMySQL320PlainDriver.Ping(Handle: PZMySQLConnect): Integer;
01176 begin
01177 Result := MYSQL_API.mysql_ping(Handle);
01178 end;
01179
01180 function TZMySQL320PlainDriver.RealConnect(Handle: PZMySQLConnect;
01181 const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar;
01182 ClientFlag: Cardinal): PZMySQLConnect;
01183 begin
01184 Result := MYSQL_API.mysql_real_connect(Handle, Host, User, Password, Db,
01185 Port, UnixSocket, ClientFlag);
01186 end;
01187
01188 function TZMySQL320PlainDriver.GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar;
01189 Length: Cardinal): Cardinal;
01190 begin
01191 Result := MYSQL_API.mysql_real_escape_string(Handle, StrTo, StrFrom, Length);
01192 end;
01193
01194 function TZMySQL320PlainDriver.Refresh(Handle: PZMySQLConnect;
01195 Options: Cardinal): Integer;
01196 begin
01197 Result := MYSQL_API.mysql_refresh(Handle, Options);
01198 end;
01199
01200 procedure TZMySQL320PlainDriver.SeekData(Res: PZMySQLResult;
01201 Offset: Cardinal);
01202 begin
01203 MYSQL_API.mysql_data_seek(Res, Offset);
01204 end;
01205
01206 function TZMySQL320PlainDriver.SeekField(Res: PZMySQLResult;
01207 Offset: Cardinal): Cardinal;
01208 begin
01209 Result := MYSQL_API.mysql_field_seek(Res, Offset);
01210 end;
01211
01212 function TZMySQL320PlainDriver.SeekRow(Res: PZMySQLResult;
01213 Row: PZMySQLRowOffset): PZMySQLRowOffset;
01214 begin
01215 Result := MYSQL_API.mysql_row_seek(Res, Row);
01216 end;
01217
01218 function TZMySQL320PlainDriver.SelectDatabase(Handle: PZMySQLConnect;
01219 const Database: PChar): Integer;
01220 begin
01221 Result := MYSQL_API.mysql_select_db(Handle, Database);
01222 end;
01223
01224 function TZMySQL320PlainDriver.SetOptions(Handle: PZMySQLConnect;
01225 Option: TZMySQLOption; const Arg: PChar): Integer;
01226 begin
01227 Result := MYSQL_API.mysql_options(Handle,
01228 ZPlainMySql320.Tmysqloption(Option), Arg);
01229 end;
01230
01231 function TZMySQL320PlainDriver.Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
01232 begin
01233 Result := MYSQL_API.mysql_shutdown(Handle);
01234 end;
01235
01236 function TZMySQL320PlainDriver.SetAutocommit(Handle: PZMySQLConnect; mode: Boolean): Boolean;
01237 var
01238 query: AnsiString;
01239 testResult: Integer;
01240 begin
01241 if (mode = True) then
01242 query := 'SET AUTOCOMMIT=1'
01243 else
01244 query := 'SET AUTOCOMMIT=0';
01245 testResult := MYSQL_API.mysql_query(ZPlainMySql320.PMYSQL(Handle),pchar(query));
01246 Result := (testResult = 0);
01247 end;
01248
01249 function TZMySQL320PlainDriver.Commit(Handle: PZMySQLConnect): Boolean;
01250 var
01251 testResult: Integer;
01252 begin
01253 testResult := MYSQL_API.mysql_query(ZPlainMySql320.PMYSQL(Handle),'COMMIT');
01254 Result := (testResult = 0);
01255 end;
01256
01257 function TZMySQL320PlainDriver.CheckAnotherRowset(Handle: PZMySQLConnect): Boolean;
01258 Begin
01259 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_more_results']);
01260 result := false;
01261 End;
01262
01263 function TZMySQL320PlainDriver.RetrieveNextRowset(Handle: PZMySQLConnect): Integer;
01264 Begin
01265 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_next_rowset']);
01266 result := 1;
01267 End;
01268
01269 function TZMySQL320PlainDriver.Rollback (Handle: PZMySQLConnect): Boolean;
01270 var
01271 testResult: Integer;
01272 begin
01273 testResult := MYSQL_API.mysql_query(ZPlainMySql320.PMYSQL(Handle),'ROLLBACK');
01274 Result := (testResult = 0);
01275 end;
01276
01277 function TZMySQL320PlainDriver.getSQLState (Handle: PZMySQLConnect): AnsiString;
01278 begin
01279 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_sqlstate']);
01280 Result := '?????'; {mysql 3.20 doesn't support this}
01281 end;
01282
01283 function TZMySQL320PlainDriver.GetPreparedAffectedRows(Handle: PZMySqlPrepStmt): Int64;
01284 Begin
01285 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_affected_rows']);
01286 result := 0;
01287 End;
01288
01289 function TZMySQL320PlainDriver.BindParameters(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
01290 Begin
01291 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_parameters']);
01292 result := 1;
01293 End;
01294
01295 function TZMySQL320PlainDriver.BindResult(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
01296 Begin
01297 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_result']);
01298 result := 1;
01299 End;
01300
01301 function TZMySQL320PlainDriver.ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
01302 begin
01303 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_close']);
01304 result := nil;
01305 end;
01306
01307 procedure TZMySQL320PlainDriver.SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
01308 begin
01309 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_data_seek']);
01310 end;
01311
01312 function TZMySQL320PlainDriver.GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt):Integer;
01313 Begin
01314 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_errno']);
01315 result := 0;
01316 End;
01317
01318 function TZMySQL320PlainDriver.GetLastPreparedError(Handle: PZMySqlPrepStmt):AnsiString;
01319 begin
01320 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_error'] );
01321 result := '';
01322 end;
01323
01324 function TZMySQL320PlainDriver.ExecuteStmt(Handle: PZMySqlPrepStmt): Integer;
01325 Begin
01326 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_execute']);
01327 result := 1;
01328 End;
01329
01330 function TZMySQL320PlainDriver.FetchBoundResults(Handle: PZMySqlPrepStmt): Integer;
01331 Begin
01332 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_fetch']);
01333 result := 1;
01334 End;
01335
01336 function TZMySQL320PlainDriver.GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
01337 Begin
01338 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_field_count']);
01339 result := 0;
01340 End;
01341
01342 function TZMySQL320PlainDriver.InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
01343 begin
01344 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_init']);
01345 result := nil;
01346 end;
01347
01348 function TZMySQL320PlainDriver.GetPreparedInsertID(Handle: PZMySqlPrepStmt): Int64;
01349 Begin
01350 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_insert_id']);
01351 result := 0;
01352 End;
01353
01354 function TZMySQL320PlainDriver.GetPreparedNumRows(Handle: PZMySqlPrepStmt): Int64;
01355 Begin
01356 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_num_rows']);
01357 result := 0;
01358 End;
01359
01360 function TZMySQL320PlainDriver.GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal;
01361 Begin
01362 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_param_count']);
01363 result := 0;
01364 End;
01365
01366 function TZMySQL320PlainDriver.PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
01367 begin
01368 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_prepare']);
01369 Result := 1;
01370 end;
01371
01372 function TZMySQL320PlainDriver.GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
01373 Begin
01374 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_result_metadata']);
01375 result := nil;
01376 End;
01377
01378 function TZMySQL320PlainDriver.SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
01379 Begin
01380 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_row_seek']);
01381 result := nil;
01382 End;
01383
01384 function TZMySQL320PlainDriver.GetPreparedSQLState(Handle: PZMySqlPrepStmt): PChar;
01385 begin
01386 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_sql_state']);
01387 result := '?????';
01388 end;
01389
01390 function TZMySQL320PlainDriver.StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
01391 Begin
01392 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_store_result']);
01393 result := 1;
01394 End;
01395
01396
01397 function TZMySQL320PlainDriver.StoreResult(
01398 Handle: PZMySQLConnect): PZMySQLResult;
01399 begin
01400 Result := MYSQL_API.mysql_store_result(Handle);
01401 end;
01402
01403 function TZMySQL320PlainDriver.UseResult(Handle: PZMySQLConnect): PZMySQLResult;
01404 begin
01405 Result := MYSQL_API.mysql_use_result(Handle);
01406 end;
01407
01408 function TZMySQL320PlainDriver.GetLastError(Handle: PZMySQLConnect): PChar;
01409 begin
01410 Result := @(ZPlainMySql320.PMYSQL(Handle)^._net.last_error);
01411 end;
01412
01413 function TZMySQL320PlainDriver.GetFieldType(Field: PZMySQLField): Byte;
01414 begin
01415 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^._type;
01416 end;
01417
01418 function TZMySQL320PlainDriver.GetFieldFlags(Field: PZMySQLField): Integer;
01419 begin
01420 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.flags;
01421 end;
01422
01423 function TZMySQL320PlainDriver.GetRowCount(Res: PZMySQLResult): Int64;
01424 begin
01425 Result := MYSQL_API.mysql_num_rows(Res);
01426 end;
01427
01428 function TZMySQL320PlainDriver.GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
01429 begin
01430 Result := TZMySQLStatus(ZPlainMySql320.PMYSQL(Handle).status);
01431 end;
01432
01433 function TZMySQL320PlainDriver.ResultSetExists(Handle: PZMySQLConnect): Boolean;
01434 begin
01435 Exception.CreateFmt (SUnsupportedByDriver, ['ResultSetExists']);
01436 result := False;
01437 end;
01438
01439 function TZMySQL320PlainDriver.GetFieldCount(Res: PZMySQLResult): Integer;
01440 begin
01441 Result := MYSQL_API.mysql_num_fields(Res);
01442 end;
01443
01444 function TZMySQL320PlainDriver.GetFieldDecimals(Field: PZMySQLField): Integer;
01445 begin
01446 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.decimals;
01447 end;
01448
01449 function TZMySQL320PlainDriver.GetFieldLength(Field: PZMySQLField): Integer;
01450 begin
01451 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.length;
01452 end;
01453
01454 function TZMySQL320PlainDriver.GetFieldMaxLength(Field: PZMySQLField): Integer;
01455 begin
01456 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.max_length;
01457 end;
01458
01459 function TZMySQL320PlainDriver.GetFieldName(Field: PZMySQLField): PChar;
01460 begin
01461 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.name;
01462 end;
01463
01464 function TZMySQL320PlainDriver.GetFieldTable(Field: PZMySQLField): PChar;
01465 begin
01466 Result := ZPlainMySql320.PMYSQL_FIELD(Field)^.table;
01467 end;
01468
01469 function TZMySQL320PlainDriver.GetFieldData(Row: PZMySQLRow;
01470 Offset: Cardinal): PChar;
01471 begin
01472 Result := ZPlainMySql320.PMYSQL_ROW(ROW)[Offset];
01473 end;
01474
01475 function TZMySQL320PlainDriver.GetLastErrorCode(
01476 Handle: PZMySQLConnect): Integer;
01477 begin
01478 Result := ZPlainMySql320.PMYSQL(Handle)._net.last_errno;
01479 end;
01480
01481 function TZMySQL320PlainDriver.GetClientVersion: Integer;
01482 begin
01483 Result := 32000;
01484 end;
01485
01486 function TZMySQL320PlainDriver.GetServerVersion(
01487 Handle: PZMySQLConnect): Integer;
01488 begin
01489 Result := 32000;
01490 end;
01491
01492 procedure TZMySQL320PlainDriver.BuildArguments(Options: TStrings);
01493 begin
01494
01495 end;
01496
01497 { TZMySQL323PlainDriver }
01498
01499 constructor TZMySQL323PlainDriver.Create;
01500 begin
01501 end;
01502
01503 function TZMySQL323PlainDriver.GetProtocol: string;
01504 begin
01505 Result := 'mysql-3.23';
01506 end;
01507
01508 function TZMySQL323PlainDriver.GetDescription: string;
01509 begin
01510 Result := 'Native Plain Driver for MySQL 3.23+';
01511 end;
01512
01513 procedure TZMySQL323PlainDriver.Initialize;
01514 begin
01515 ZPlainMySql323.LibraryLoader.LoadIfNeeded;
01516 MYSQL_API := ZPlainMySql323.LibraryLoader.api_rec;
01517 end;
01518
01519 procedure TZMySQL323PlainDriver.Close(Handle: PZMySQLConnect);
01520 begin
01521 MYSQL_API.mysql_close(Handle);
01522 end;
01523
01524 function TZMySQL323PlainDriver.Connect(Handle: PZMySQLConnect; const Host,
01525 User, Password: PChar): PZMySQLConnect;
01526 begin
01527 Result := MYSQL_API.mysql_connect(Handle, Host, User, Password);
01528 end;
01529
01530 function TZMySQL323PlainDriver.SslSet(Handle: PZMySQLConnect;
01531 const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
01532 begin
01533 Result := MYSQL_API.mysql_ssl_set(Handle, Key, Cert, Ca, Capath, Cipher);
01534 end;
01535
01536 function TZMySQL323PlainDriver.CreateDatabase(Handle: PZMySQLConnect;
01537 const Database: PChar): Integer;
01538 begin
01539 Result := MYSQL_API.mysql_create_db(Handle, Database);
01540 end;
01541
01542 procedure TZMySQL323PlainDriver.Debug(Debug: PChar);
01543 begin
01544 MYSQL_API.mysql_debug(Debug);
01545 end;
01546
01547 function TZMySQL323PlainDriver.DropDatabase(Handle: PZMySQLConnect;
01548 const Database: PChar): Integer;
01549 begin
01550 Result := MYSQL_API.mysql_drop_db(Handle, Database);
01551 end;
01552
01553 function TZMySQL323PlainDriver.DumpDebugInfo(Handle: PZMySQLConnect): Integer;
01554 begin
01555 Result := MYSQL_API.mysql_dump_debug_info(Handle);
01556 end;
01557
01558 function TZMySQL323PlainDriver.ExecQuery(Handle: PZMySQLConnect;
01559 const Query: PChar): Integer;
01560 begin
01561 Result := MYSQL_API.mysql_query(Handle, Query);
01562 end;
01563
01564 function TZMySQL323PlainDriver.ExecRealQuery(Handle: PZMySQLConnect;
01565 const Query: PChar; Length: Integer): Integer;
01566 begin
01567 Result := MYSQL_API.mysql_real_query(Handle, Query, Length);
01568 end;
01569
01570 function TZMySQL323PlainDriver.FetchField(Res: PZMySQLResult): PZMySQLField;
01571 begin
01572 Result := MYSQL_API.mysql_fetch_field(Res);
01573 end;
01574
01575 function TZMySQL323PlainDriver.FetchLengths(Res: PZMySQLResult): PLongInt;
01576 begin
01577 Result := MYSQL_API.mysql_fetch_lengths(Res);
01578 end;
01579
01580 function TZMySQL323PlainDriver.FetchRow(Res: PZMySQLResult): PZMySQLRow;
01581 begin
01582 Result := MYSQL_API.mysql_fetch_row(Res);
01583 end;
01584
01585 procedure TZMySQL323PlainDriver.FreeResult(Res: PZMySQLResult);
01586 begin
01587 MYSQL_API.mysql_free_result(Res);
01588 end;
01589
01590 function TZMySQL323PlainDriver.GetAffectedRows(
01591 Handle: PZMySQLConnect): Int64;
01592 begin
01593 Result := MYSQL_API.mysql_affected_rows(Handle);
01594 end;
01595
01596 function TZMySQL323PlainDriver.GetClientInfo: PChar;
01597 begin
01598 Result := MYSQL_API.mysql_get_client_info;
01599 end;
01600
01601 function TZMySQL323PlainDriver.GetEscapeString(StrTo, StrFrom: PChar;
01602 Length: Cardinal): Cardinal;
01603 begin
01604 Result := MYSQL_API.mysql_escape_string(StrTo, StrFrom, Length);
01605 end;
01606
01607 function TZMySQL323PlainDriver.GetHostInfo(Handle: PZMySQLConnect): PChar;
01608 begin
01609 Result := MYSQL_API.mysql_get_host_info(Handle);
01610 end;
01611
01612 function TZMySQL323PlainDriver.GetListDatabases(Handle: PZMySQLConnect;
01613 Wild: PChar): PZMySQLResult;
01614 begin
01615 Result := MYSQL_API.mysql_list_dbs(Handle, Wild);
01616 end;
01617
01618 function TZMySQL323PlainDriver.GetListFields(Handle: PZMySQLConnect;
01619 const Table, Wild: PChar): PZMySQLResult;
01620 begin
01621 Result := MYSQL_API.mysql_list_fields(Handle, Table, Wild);
01622 end;
01623
01624 function TZMySQL323PlainDriver.GetListProcesses(
01625 Handle: PZMySQLConnect): PZMySQLResult;
01626 begin
01627 Result := MYSQL_API.mysql_list_processes(Handle);
01628 end;
01629
01630 function TZMySQL323PlainDriver.GetListTables(Handle: PZMySQLConnect;
01631 const Wild: PChar): PZMySQLResult;
01632 begin
01633 Result := MYSQL_API.mysql_list_tables(Handle, Wild);
01634 end;
01635
01636 function TZMySQL323PlainDriver.GetNumRows(Res: PZMySQLResult): Int64;
01637 Begin
01638 if (Res = nil) then
01639 Result := 0
01640 else
01641 Result := MYSQL_API.mysql_num_rows (Res);
01642 End;
01643
01644 function TZMySQL323PlainDriver.GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
01645 begin
01646 Result := MYSQL_API.mysql_get_proto_info(Handle);
01647 end;
01648
01649 function TZMySQL323PlainDriver.GetServerInfo(Handle: PZMySQLConnect): PChar;
01650 begin
01651 Result := MYSQL_API.mysql_get_server_info(Handle);
01652 end;
01653
01654 function TZMySQL323PlainDriver.GetStatInfo(Handle: PZMySQLConnect): PChar;
01655 begin
01656 Result := MYSQL_API.mysql_stat(Handle);
01657 end;
01658
01659 function TZMySQL323PlainDriver.GetThreadId(Handle: PZMySQLConnect): Cardinal;
01660 begin
01661 Result := MYSQL_API.mysql_thread_id(Handle);
01662 end;
01663
01664 function TZMySQL323PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
01665 begin
01666 if @MYSQL_API.mysql_server_init <> nil then
01667 MYSQL_API.mysql_server_init(1, nil, nil);
01668 Handle := AllocMem(SizeOf(ZPlainMySql323.MYSQL));
01669 Result := MYSQL_API.mysql_init(Handle);
01670 end;
01671
01672 function TZMySQL323PlainDriver.getLastInsertID (Handle: PZMySQLConnect): Int64;
01673 begin
01674 Result := MYSQL_API.mysql_insert_id(ZPlainMySql323.PMYSQL(Handle));
01675 end;
01676
01677 procedure TZMySQL323PlainDriver.Despose(var Handle: PZMySQLConnect);
01678 begin
01679 if Handle <> nil then
01680 FreeMem(Handle);
01681 Handle := nil;
01682 end;
01683
01684 function TZMySQL323PlainDriver.Kill(Handle: PZMySQLConnect;
01685 Pid: Integer): Integer;
01686 begin
01687 Result := MYSQL_API.mysql_kill(Handle, Pid);
01688 end;
01689
01690 function TZMySQL323PlainDriver.Ping(Handle: PZMySQLConnect): Integer;
01691 begin
01692 Result := MYSQL_API.mysql_ping(Handle);
01693 end;
01694
01695 function TZMySQL323PlainDriver.RealConnect(Handle: PZMySQLConnect;
01696 const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar;
01697 ClientFlag: Cardinal): PZMySQLConnect;
01698 begin
01699 Result := MYSQL_API.mysql_real_connect(Handle, Host, User, Password, Db,
01700 Port, UnixSocket, ClientFlag);
01701 end;
01702
01703 function TZMySQL323PlainDriver.GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar;
01704 Length: Cardinal): Cardinal;
01705 begin
01706 Result := MYSQL_API.mysql_real_escape_string(Handle, StrTo, StrFrom, Length);
01707 end;
01708
01709 function TZMySQL323PlainDriver.Refresh(Handle: PZMySQLConnect;
01710 Options: Cardinal): Integer;
01711 begin
01712 Result := MYSQL_API.mysql_refresh(Handle, Options);
01713 end;
01714
01715 procedure TZMySQL323PlainDriver.SeekData(Res: PZMySQLResult;
01716 Offset: Cardinal);
01717 begin
01718 MYSQL_API.mysql_data_seek(Res, Offset);
01719 end;
01720
01721 function TZMySQL323PlainDriver.SeekField(Res: PZMySQLResult;
01722 Offset: Cardinal): Cardinal;
01723 begin
01724 Result := MYSQL_API.mysql_field_seek(Res, Offset);
01725 end;
01726
01727 function TZMySQL323PlainDriver.SeekRow(Res: PZMySQLResult;
01728 Row: PZMySQLRowOffset): PZMySQLRowOffset;
01729 begin
01730 Result := MYSQL_API.mysql_row_seek(Res, Row);
01731 end;
01732
01733 function TZMySQL323PlainDriver.SelectDatabase(Handle: PZMySQLConnect;
01734 const Database: PChar): Integer;
01735 begin
01736 Result := MYSQL_API.mysql_select_db(Handle, Database);
01737 end;
01738
01739 function TZMySQL323PlainDriver.SetOptions(Handle: PZMySQLConnect;
01740 Option: TZMySQLOption; const Arg: PChar): Integer;
01741 begin
01742 Result := MYSQL_API.mysql_options(Handle,
01743 ZPlainMySql323.Tmysqloption(Option), Arg);
01744 end;
01745
01746 function TZMySQL323PlainDriver.Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
01747 begin
01748 Result := MYSQL_API.mysql_shutdown(Handle);
01749 end;
01750
01751 function TZMySQL323PlainDriver.SetAutocommit(Handle: PZMySQLConnect; mode: Boolean): Boolean;
01752 var
01753 query: AnsiString;
01754 testResult: Integer;
01755 begin
01756 if (mode = True) then
01757 query := 'SET AUTOCOMMIT=1'
01758 else
01759 query := 'SET AUTOCOMMIT=0';
01760 testResult := MYSQL_API.mysql_query(ZPlainMySql323.PMYSQL(Handle),pchar(query));
01761 Result := (testResult = 0);
01762 end;
01763
01764 function TZMySQL323PlainDriver.Commit(Handle: PZMySQLConnect): Boolean;
01765 var
01766 testResult: Integer;
01767 begin
01768 testResult := MYSQL_API.mysql_query(ZPlainMySql323.PMYSQL(Handle),'COMMIT');
01769 Result := (testResult = 0);
01770 end;
01771
01772 function TZMySQL323PlainDriver.CheckAnotherRowset(Handle: PZMySQLConnect): Boolean;
01773 Begin
01774 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_more_results']);
01775 result := false;
01776 End;
01777
01778 function TZMySQL323PlainDriver.RetrieveNextRowset(Handle: PZMySQLConnect): Integer;
01779 Begin
01780 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_next_rowset']);
01781 result := 1;
01782 End;
01783
01784 function TZMySQL323PlainDriver.Rollback (Handle: PZMySQLConnect): Boolean;
01785 var
01786 testResult: Integer;
01787 begin
01788 testResult := MYSQL_API.mysql_query(ZPlainMySql323.PMYSQL(Handle),'ROLLBACK');
01789 Result := (testResult = 0);
01790 end;
01791
01792 function TZMySQL323PlainDriver.getSQLState (Handle: PZMySQLConnect): AnsiString;
01793 begin
01794 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_sqlstate']);
01795 Result := '?????'; {mysql 3.23 doesn't support this}
01796 end;
01797
01798 function TZMySQL323PlainDriver.GetPreparedAffectedRows(Handle: PZMySqlPrepStmt): Int64;
01799 Begin
01800 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_affected_rows']);
01801 result := 0;
01802 End;
01803
01804 function TZMySQL323PlainDriver.BindParameters(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
01805 Begin
01806 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_parameters']);
01807 result := 1;
01808 End;
01809
01810 function TZMySQL323PlainDriver.BindResult(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
01811 Begin
01812 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_result']);
01813 result := 1;
01814 End;
01815
01816 function TZMySQL323PlainDriver.ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
01817 begin
01818 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_close']);
01819 result := nil;
01820 end;
01821
01822 procedure TZMySQL323PlainDriver.SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
01823 begin
01824 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_data_seek']);
01825 end;
01826
01827 function TZMySQL323PlainDriver.GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt):Integer;
01828 Begin
01829 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_errno']);
01830 result := 0;
01831 End;
01832
01833 function TZMySQL323PlainDriver.GetLastPreparedError(Handle: PZMySqlPrepStmt):AnsiString;
01834 begin
01835 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_error'] );
01836 result := '';
01837 end;
01838
01839 function TZMySQL323PlainDriver.ExecuteStmt(Handle: PZMySqlPrepStmt): Integer;
01840 Begin
01841 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_execute']);
01842 result := 1;
01843 End;
01844
01845 function TZMySQL323PlainDriver.FetchBoundResults(Handle: PZMySqlPrepStmt): Integer;
01846 Begin
01847 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_fetch']);
01848 result := 1;
01849 End;
01850
01851 function TZMySQL323PlainDriver.GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
01852 Begin
01853 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_field_count']);
01854 result := 0;
01855 End;
01856
01857 function TZMySQL323PlainDriver.InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
01858 begin
01859 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_init']);
01860 result := nil;
01861 end;
01862
01863 function TZMySQL323PlainDriver.GetPreparedInsertID(Handle: PZMySqlPrepStmt): Int64;
01864 Begin
01865 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_insert_id']);
01866 result := 0;
01867 End;
01868
01869 function TZMySQL323PlainDriver.GetPreparedNumRows(Handle: PZMySqlPrepStmt): Int64;
01870 Begin
01871 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_num_rows']);
01872 result := 0;
01873 End;
01874
01875 function TZMySQL323PlainDriver.GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal;
01876 Begin
01877 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_param_count']);
01878 result := 0;
01879 End;
01880
01881 function TZMySQL323PlainDriver.PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
01882 begin
01883 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_prepare']);
01884 Result := 1;
01885 end;
01886
01887 function TZMySQL323PlainDriver.GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
01888 Begin
01889 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_result_metadata']);
01890 result := nil;
01891 End;
01892
01893 function TZMySQL323PlainDriver.SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
01894 Begin
01895 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_row_seek']);
01896 result := nil;
01897 End;
01898
01899 function TZMySQL323PlainDriver.GetPreparedSQLState(Handle: PZMySqlPrepStmt): PChar;
01900 begin
01901 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_sql_state']);
01902 result := '?????';
01903 end;
01904
01905 function TZMySQL323PlainDriver.StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
01906 Begin
01907 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_store_result']);
01908 result := 1;
01909 End;
01910
01911 function TZMySQL323PlainDriver.StoreResult(
01912 Handle: PZMySQLConnect): PZMySQLResult;
01913 begin
01914 Result := MYSQL_API.mysql_store_result(Handle);
01915 end;
01916
01917 function TZMySQL323PlainDriver.UseResult(Handle: PZMySQLConnect): PZMySQLResult;
01918 begin
01919 Result := MYSQL_API.mysql_use_result(Handle);
01920 end;
01921
01922 function TZMySQL323PlainDriver.GetLastError(Handle: PZMySQLConnect): PChar;
01923 begin
01924 Result := @(ZPlainMySql320.PMYSQL(Handle)^._net.last_error);
01925 end;
01926
01927 function TZMySQL323PlainDriver.GetFieldType(Field: PZMySQLField): Byte;
01928 begin
01929 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^._type;
01930 end;
01931
01932 function TZMySQL323PlainDriver.GetFieldFlags(Field: PZMySQLField): Integer;
01933 begin
01934 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.flags;
01935 end;
01936
01937 function TZMySQL323PlainDriver.GetRowCount(Res: PZMySQLResult): Int64;
01938 begin
01939 Result := MYSQL_API.mysql_num_rows(Res);
01940 end;
01941
01942 function TZMySQL323PlainDriver.GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
01943 begin
01944 Result := TZMySQLStatus(ZPlainMySql323.PMYSQL(Handle).status);
01945 end;
01946
01947 function TZMySQL323PlainDriver.ResultSetExists(Handle: PZMySQLConnect): Boolean;
01948 begin
01949 result := MYSQL_API.mysql_field_count(Handle)<>0;
01950 // True If statement should return a resultset
01951 end;
01952
01953 function TZMySQL323PlainDriver.GetFieldCount(Res: PZMySQLResult): Integer;
01954 begin
01955 Result := MYSQL_API.mysql_num_fields(Res);
01956 end;
01957
01958 function TZMySQL323PlainDriver.GetFieldDecimals(Field: PZMySQLField): Integer;
01959 begin
01960 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.decimals;
01961 end;
01962
01963 function TZMySQL323PlainDriver.GetFieldLength(Field: PZMySQLField): Integer;
01964 begin
01965 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.length;
01966 end;
01967
01968 function TZMySQL323PlainDriver.GetFieldMaxLength(Field: PZMySQLField): Integer;
01969 begin
01970 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.max_length;
01971 end;
01972
01973 function TZMySQL323PlainDriver.GetFieldName(Field: PZMySQLField): PChar;
01974 begin
01975 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.name;
01976 end;
01977
01978 function TZMySQL323PlainDriver.GetFieldTable(Field: PZMySQLField): PChar;
01979 begin
01980 Result := ZPlainMySql323.PMYSQL_FIELD(Field)^.table;
01981 end;
01982
01983 function TZMySQL323PlainDriver.GetFieldData(Row: PZMySQLRow;
01984 Offset: Cardinal): PChar;
01985 begin
01986 Result := ZPlainMySql323.PMYSQL_ROW(ROW)[Offset];
01987 end;
01988
01989 function TZMySQL323PlainDriver.GetLastErrorCode(
01990 Handle: PZMySQLConnect): Integer;
01991 begin
01992 Result := ZPlainMySql323.PMYSQL(Handle)._net.last_errno;
01993 end;
01994
01995 function TZMySQL323PlainDriver.GetClientVersion: Integer;
01996 begin
01997 Result := 32300;
01998 end;
01999
02000 function TZMySQL323PlainDriver.GetServerVersion(
02001 Handle: PZMySQLConnect): Integer;
02002 begin
02003 Result := 32300;
02004 end;
02005
02006 procedure TZMySQL323PlainDriver.BuildArguments(Options: TStrings);
02007 begin
02008
02009 end;
02010
02011 { TZMySQL40PlainDriver }
02012
02013 constructor TZMySQL40PlainDriver.Create;
02014 begin
02015 end;
02016
02017 function TZMySQL40PlainDriver.GetProtocol: string;
02018 begin
02019 Result := 'mysql-4.0';
02020 end;
02021
02022 function TZMySQL40PlainDriver.GetDescription: string;
02023 begin
02024 Result := 'Native Plain Driver for MySQL 4.0+';
02025 end;
02026
02027 procedure TZMySQL40PlainDriver.Initialize;
02028 begin
02029 ZPlainMySql40.LibraryLoader.LoadIfNeeded;
02030 MYSQL_API := ZPlainMySql40.LibraryLoader.api_rec;
02031 end;
02032
02033 procedure TZMySQL40PlainDriver.Close(Handle: PZMySQLConnect);
02034 begin
02035 MYSQL_API.mysql_close(Handle);
02036 end;
02037
02038 function TZMySQL40PlainDriver.Connect(Handle: PZMySQLConnect; const Host,
02039 User, Password: PChar): PZMySQLConnect;
02040 begin
02041 Result := MYSQL_API.mysql_connect(Handle, Host, User, Password);
02042 end;
02043
02044 function TZMySQL40PlainDriver.SslSet(Handle: PZMySQLConnect;
02045 const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
02046 begin
02047 Result := MYSQL_API.mysql_ssl_set(Handle, Key, Cert, Ca, Capath, Cipher);
02048 end;
02049
02050 function TZMySQL40PlainDriver.CreateDatabase(Handle: PZMySQLConnect;
02051 const Database: PChar): Integer;
02052 begin
02053 Result := MYSQL_API.mysql_create_db(Handle, Database);
02054 end;
02055
02056 procedure TZMySQL40PlainDriver.Debug(Debug: PChar);
02057 begin
02058 MYSQL_API.mysql_debug(Debug);
02059 end;
02060
02061 function TZMySQL40PlainDriver.DropDatabase(Handle: PZMySQLConnect;
02062 const Database: PChar): Integer;
02063 begin
02064 Result := MYSQL_API.mysql_drop_db(Handle, Database);
02065 end;
02066
02067 function TZMySQL40PlainDriver.DumpDebugInfo(Handle: PZMySQLConnect): Integer;
02068 begin
02069 Result := MYSQL_API.mysql_dump_debug_info(Handle);
02070 end;
02071
02072 function TZMySQL40PlainDriver.ExecQuery(Handle: PZMySQLConnect;
02073 const Query: PChar): Integer;
02074 begin
02075 Result := MYSQL_API.mysql_query(Handle, Query);
02076 end;
02077
02078 function TZMySQL40PlainDriver.ExecRealQuery(Handle: PZMySQLConnect;
02079 const Query: PChar; Length: Integer): Integer;
02080 begin
02081 Result := MYSQL_API.mysql_real_query(Handle, Query, Length);
02082 end;
02083
02084 function TZMySQL40PlainDriver.FetchField(Res: PZMySQLResult): PZMySQLField;
02085 begin
02086 Result := MYSQL_API.mysql_fetch_field(Res);
02087 end;
02088
02089 function TZMySQL40PlainDriver.FetchLengths(Res: PZMySQLResult): PLongInt;
02090 begin
02091 Result := MYSQL_API.mysql_fetch_lengths(Res);
02092 end;
02093
02094 function TZMySQL40PlainDriver.FetchRow(Res: PZMySQLResult): PZMySQLRow;
02095 begin
02096 Result := MYSQL_API.mysql_fetch_row(Res);
02097 end;
02098
02099 procedure TZMySQL40PlainDriver.FreeResult(Res: PZMySQLResult);
02100 begin
02101 MYSQL_API.mysql_free_result(Res);
02102 end;
02103
02104 function TZMySQL40PlainDriver.GetAffectedRows(Handle: PZMySQLConnect): Int64;
02105 begin
02106 Result := MYSQL_API.mysql_affected_rows(Handle);
02107 end;
02108
02109 function TZMySQL40PlainDriver.GetClientInfo: PChar;
02110 begin
02111 Result := MYSQL_API.mysql_get_client_info;
02112 end;
02113
02114 function TZMySQL40PlainDriver.GetEscapeString(StrTo, StrFrom: PChar;
02115 Length: Cardinal): Cardinal;
02116 begin
02117 Result := MYSQL_API.mysql_escape_string(StrTo, StrFrom, Length);
02118 end;
02119
02120 function TZMySQL40PlainDriver.GetHostInfo(Handle: PZMySQLConnect): PChar;
02121 begin
02122 Result := MYSQL_API.mysql_get_host_info(Handle);
02123 end;
02124
02125 function TZMySQL40PlainDriver.GetListDatabases(Handle: PZMySQLConnect;
02126 Wild: PChar): PZMySQLResult;
02127 begin
02128 Result := MYSQL_API.mysql_list_dbs(Handle, Wild);
02129 end;
02130
02131 function TZMySQL40PlainDriver.GetListFields(Handle: PZMySQLConnect;
02132 const Table, Wild: PChar): PZMySQLResult;
02133 begin
02134 Result := MYSQL_API.mysql_list_fields(Handle, Table, Wild);
02135 end;
02136
02137 function TZMySQL40PlainDriver.GetListProcesses(
02138 Handle: PZMySQLConnect): PZMySQLResult;
02139 begin
02140 Result := MYSQL_API.mysql_list_processes(Handle);
02141 end;
02142
02143 function TZMySQL40PlainDriver.GetListTables(Handle: PZMySQLConnect;
02144 const Wild: PChar): PZMySQLResult;
02145 begin
02146 Result := MYSQL_API.mysql_list_tables(Handle, Wild);
02147 end;
02148
02149 function TZMySQL40PlainDriver.GetNumRows(Res: PZMySQLResult): Int64;
02150 Begin
02151 if (Res = nil) then
02152 Result := 0
02153 else
02154 Result := MYSQL_API.mysql_num_rows (Res);
02155 End;
02156
02157 function TZMySQL40PlainDriver.GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
02158 begin
02159 Result := MYSQL_API.mysql_get_proto_info(Handle);
02160 end;
02161
02162 function TZMySQL40PlainDriver.GetServerInfo(Handle: PZMySQLConnect): PChar;
02163 begin
02164 Result := MYSQL_API.mysql_get_server_info(Handle);
02165 end;
02166
02167 function TZMySQL40PlainDriver.GetStatInfo(Handle: PZMySQLConnect): PChar;
02168 begin
02169 Result := MYSQL_API.mysql_stat(Handle);
02170 end;
02171
02172 function TZMySQL40PlainDriver.GetThreadId(Handle: PZMySQLConnect): Cardinal;
02173 begin
02174 Result := MYSQL_API.mysql_thread_id(Handle);
02175 end;
02176
02177 function TZMySQL40PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
02178 begin
02179 if @MYSQL_API.mysql_server_init <> nil then
02180 MYSQL_API.mysql_server_init(1, nil, nil);
02181 Handle := AllocMem(SizeOf(ZPlainMySql40.mysql));
02182 Result := MYSQL_API.mysql_init(Handle);
02183 end;
02184
02185 function TZMySQL40PlainDriver.getLastInsertID (Handle: PZMySQLConnect): Int64;
02186 begin
02187 Result := MYSQL_API.mysql_insert_id(ZPlainMySql40.PMYSQL(Handle));
02188 end;
02189
02190 procedure TZMySQL40PlainDriver.Despose(var Handle: PZMySQLConnect);
02191 begin
02192 if Handle <> nil then
02193 FreeMem(Handle);
02194 Handle := nil;
02195 end;
02196
02197 function TZMySQL40PlainDriver.Kill(Handle: PZMySQLConnect;
02198 Pid: Integer): Integer;
02199 begin
02200 Result := MYSQL_API.mysql_kill(Handle, Pid);
02201 end;
02202
02203 function TZMySQL40PlainDriver.Ping(Handle: PZMySQLConnect): Integer;
02204 begin
02205 Result := MYSQL_API.mysql_ping(Handle);
02206 end;
02207
02208 function TZMySQL40PlainDriver.RealConnect(Handle: PZMySQLConnect;
02209 const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar;
02210 ClientFlag: Cardinal): PZMySQLConnect;
02211 begin
02212 Result := MYSQL_API.mysql_real_connect(Handle, Host, User, Password, Db,
02213 Port, UnixSocket, ClientFlag);
02214 end;
02215
02216 function TZMySQL40PlainDriver.GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar;
02217 Length: Cardinal): Cardinal;
02218 begin
02219 Result := MYSQL_API.mysql_real_escape_string(Handle, StrTo, StrFrom, Length);
02220 end;
02221
02222 function TZMySQL40PlainDriver.Refresh(Handle: PZMySQLConnect;
02223 Options: Cardinal): Integer;
02224 begin
02225 Result := MYSQL_API.mysql_refresh(Handle, Options);
02226 end;
02227
02228 procedure TZMySQL40PlainDriver.SeekData(Res: PZMySQLResult;
02229 Offset: Cardinal);
02230 begin
02231 MYSQL_API.mysql_data_seek(Res, Offset);
02232 end;
02233
02234 function TZMySQL40PlainDriver.SeekField(Res: PZMySQLResult;
02235 Offset: Cardinal): Cardinal;
02236 begin
02237 Result := MYSQL_API.mysql_field_seek(Res, Offset);
02238 end;
02239
02240 function TZMySQL40PlainDriver.SeekRow(Res: PZMySQLResult;
02241 Row: PZMySQLRowOffset): PZMySQLRowOffset;
02242 begin
02243 Result := MYSQL_API.mysql_row_seek(Res, Row);
02244 end;
02245
02246 function TZMySQL40PlainDriver.SelectDatabase(Handle: PZMySQLConnect;
02247 const Database: PChar): Integer;
02248 begin
02249 Result := MYSQL_API.mysql_select_db(Handle, Database);
02250 end;
02251
02252 function TZMySQL40PlainDriver.SetOptions(Handle: PZMySQLConnect;
02253 Option: TZMySQLOption; const Arg: PChar): Integer;
02254 begin
02255 Result := MYSQL_API.mysql_options(Handle,
02256 ZPlainMySql40.TMySqlOption(Option), Arg);
02257 end;
02258
02259 function TZMySQL40PlainDriver.Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
02260 begin
02261 Result := MYSQL_API.mysql_shutdown(Handle);
02262 end;
02263
02264 function TZMySQL40PlainDriver.SetAutocommit(Handle: PZMySQLConnect; mode: Boolean): Boolean;
02265 var
02266 query: AnsiString;
02267 testResult: Integer;
02268 begin
02269 if (mode = True) then
02270 query := 'SET AUTOCOMMIT=1'
02271 else
02272 query := 'SET AUTOCOMMIT=0';
02273 testResult := MYSQL_API.mysql_query(ZPlainMySql40.PMYSQL(Handle),pchar(query));
02274 Result := (testResult = 0);
02275 end;
02276
02277 function TZMySQL40PlainDriver.Commit(Handle: PZMySQLConnect): Boolean;
02278 var
02279 testResult: Integer;
02280 begin
02281 testResult := MYSQL_API.mysql_query(ZPlainMySql40.PMYSQL(Handle),'COMMIT');
02282 Result := (testResult = 0);
02283 end;
02284
02285 function TZMySQL40PlainDriver.CheckAnotherRowset(Handle: PZMySQLConnect): Boolean;
02286 Begin
02287 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_more_results']);
02288 result := false;
02289 End;
02290
02291 function TZMySQL40PlainDriver.RetrieveNextRowset(Handle: PZMySQLConnect): Integer;
02292 Begin
02293 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_next_rowset']);
02294 result := 1;
02295 End;
02296
02297 function TZMySQL40PlainDriver.Rollback (Handle: PZMySQLConnect): Boolean;
02298 var
02299 testResult: Integer;
02300 begin
02301 testResult := MYSQL_API.mysql_query(ZPlainMySql40.PMYSQL(Handle),'ROLLBACK');
02302 Result := (testResult = 0);
02303 end;
02304
02305 function TZMySQL40PlainDriver.getSQLState (Handle: PZMySQLConnect): AnsiString;
02306 begin
02307 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_sqlstate']);
02308 Result := '?????'; {mysql 4.0 doesn't support this}
02309 end;
02310
02311 function TZMySQL40PlainDriver.GetPreparedAffectedRows(Handle: PZMySqlPrepStmt): Int64;
02312 Begin
02313 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_affected_rows']);
02314 result := 0;
02315 End;
02316
02317 function TZMySQL40PlainDriver.BindParameters(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
02318 Begin
02319 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_parameters']);
02320 result := 1;
02321 End;
02322
02323 function TZMySQL40PlainDriver.BindResult(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
02324 Begin
02325 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_bind_result']);
02326 result := 1;
02327 End;
02328
02329 function TZMySQL40PlainDriver.ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
02330 begin
02331 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_close']);
02332 result := nil;
02333 end;
02334
02335 procedure TZMySQL40PlainDriver.SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
02336 begin
02337 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_data_seek']);
02338 end;
02339
02340 function TZMySQL40PlainDriver.GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt):Integer;
02341 Begin
02342 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_errno']);
02343 result := 0;
02344 End;
02345
02346 function TZMySQL40PlainDriver.GetLastPreparedError(Handle: PZMySqlPrepStmt):AnsiString;
02347 begin
02348 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_error'] );
02349 result := '';
02350 end;
02351
02352 function TZMySQL40PlainDriver.ExecuteStmt(Handle: PZMySqlPrepStmt): Integer;
02353 Begin
02354 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_execute']);
02355 result := 1;
02356 End;
02357
02358 function TZMySQL40PlainDriver.FetchBoundResults(Handle: PZMySqlPrepStmt): Integer;
02359 Begin
02360 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_fetch']);
02361 result := 1;
02362 End;
02363
02364 function TZMySQL40PlainDriver.GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
02365 Begin
02366 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_field_count']);
02367 result := 0;
02368 End;
02369
02370 function TZMySQL40PlainDriver.InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
02371 begin
02372 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_init']);
02373 result := nil;
02374 end;
02375
02376 function TZMySQL40PlainDriver.GetPreparedInsertID(Handle: PZMySqlPrepStmt): Int64;
02377 Begin
02378 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_insert_id']);
02379 result := 0;
02380 End;
02381
02382 function TZMySQL40PlainDriver.GetPreparedNumRows(Handle: PZMySqlPrepStmt): Int64;
02383 Begin
02384 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_num_rows']);
02385 result := 0;
02386 End;
02387
02388 function TZMySQL40PlainDriver.GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal;
02389 Begin
02390 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_param_count']);
02391 result := 0;
02392 End;
02393
02394 function TZMySQL40PlainDriver.PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
02395 begin
02396 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_prepare']);
02397 Result := 1;
02398 end;
02399
02400 function TZMySQL40PlainDriver.GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
02401 Begin
02402 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_result_metadata']);
02403 result := nil;
02404 End;
02405
02406 function TZMySQL40PlainDriver.SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
02407 Begin
02408 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_row_seek']);
02409 result := nil;
02410 End;
02411
02412 function TZMySQL40PlainDriver.GetPreparedSQLState(Handle: PZMySqlPrepStmt): PChar;
02413 begin
02414 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_sql_state']);
02415 result := '?????';
02416 end;
02417
02418 function TZMySQL40PlainDriver.StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
02419 Begin
02420 Exception.CreateFmt (SUnsupportedByDriver, ['mysql_stmt_store_result']);
02421 result := 1;
02422 End;
02423
02424 function TZMySQL40PlainDriver.StoreResult(
02425 Handle: PZMySQLConnect): PZMySQLResult;
02426 begin
02427 Result := MYSQL_API.mysql_store_result(Handle);
02428 end;
02429
02430 function TZMySQL40PlainDriver.UseResult(Handle: PZMySQLConnect): PZMySQLResult;
02431 begin
02432 Result := MYSQL_API.mysql_use_result(Handle);
02433 end;
02434
02435 function TZMySQL40PlainDriver.GetLastError(Handle: PZMySQLConnect): PChar;
02436 begin
02437 Result := @(ZPlainMySql40.PMYSQL(Handle)^._net.last_error);
02438 end;
02439
02440 function TZMySQL40PlainDriver.GetFieldType(Field: PZMySQLField): Byte;
02441 begin
02442 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^._type;
02443 end;
02444
02445 function TZMySQL40PlainDriver.GetFieldFlags(Field: PZMySQLField): Integer;
02446 begin
02447 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.flags;
02448 end;
02449
02450 function TZMySQL40PlainDriver.GetRowCount(Res: PZMySQLResult): Int64;
02451 begin
02452 Result := MYSQL_API.mysql_num_rows(Res);
02453 end;
02454
02455 function TZMySQL40PlainDriver.GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
02456 begin
02457 Result := TZMySQLStatus(ZPlainMySql40.PMYSQL(Handle).status);
02458 end;
02459
02460 function TZMySQL40PlainDriver.ResultSetExists(Handle: PZMySQLConnect): Boolean;
02461 begin
02462 result := MYSQL_API.mysql_field_count(Handle)<>0;
02463
02464 end;
02465
02466 function TZMySQL40PlainDriver.GetFieldCount(Res: PZMySQLResult): Integer;
02467 begin
02468 Result := MYSQL_API.mysql_num_fields(Res);
02469 end;
02470
02471 function TZMySQL40PlainDriver.GetFieldDecimals(Field: PZMySQLField): Integer;
02472 begin
02473 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.decimals;
02474 end;
02475
02476 function TZMySQL40PlainDriver.GetFieldLength(Field: PZMySQLField): Integer;
02477 begin
02478 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.length;
02479 end;
02480
02481 function TZMySQL40PlainDriver.GetFieldMaxLength(Field: PZMySQLField): Integer;
02482 begin
02483 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.max_length;
02484 end;
02485
02486 function TZMySQL40PlainDriver.GetFieldName(Field: PZMySQLField): PChar;
02487 begin
02488 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.name;
02489 end;
02490
02491 function TZMySQL40PlainDriver.GetFieldTable(Field: PZMySQLField): PChar;
02492 begin
02493 Result := ZPlainMySql40.PMYSQL_FIELD(Field)^.table;
02494 end;
02495
02496 function TZMySQL40PlainDriver.GetFieldData(Row: PZMySQLRow;
02497 Offset: Cardinal): PChar;
02498 begin
02499 Result := ZPlainMySql40.PMYSQL_ROW(ROW)[Offset];
02500 end;
02501
02502 function TZMySQL40PlainDriver.GetLastErrorCode(Handle: PZMySQLConnect): Integer;
02503 begin
02504 Result := ZPlainMySql40.PMYSQL(Handle)._net.last_errno;
02505 end;
02506
02507 function TZMySQL40PlainDriver.GetClientVersion: Integer;
02508 begin
02509 Result := 40000;
02510 end;
02511
02512 function TZMySQL40PlainDriver.GetServerVersion(
02513 Handle: PZMySQLConnect): Integer;
02514 begin
02515 Result := 40000;
02516 end;
02517
02518 procedure TZMySQL40PlainDriver.BuildArguments(Options: TStrings);
02519 begin
02520
02521 end;
02522
02523 { TZMySQLD40PlainDriver }
02524
02525 function TZMySQLD40PlainDriver.GetProtocol: string;
02526 begin
02527 Result := 'mysqld-4.0';
02528 end;
02529
02530 function TZMySQLD40PlainDriver.GetDescription: string;
02531 begin
02532 Result := 'Native Plain Driver for Embedded MySQL 4.0+';
02533 end;
02534
02535 function TZMySQLD40PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
02536 begin
02537 if @MYSQL_API.mysql_server_init <> nil then
02538 MYSQL_API.mysql_server_init(ServerArgsLen, ServerArgs, @SERVER_GROUPS);
02539
02540 Handle := MYSQL_API.mysql_init(nil);
02541 Result := Handle;
02542 end;
02543
02544 procedure TZMySQLD40PlainDriver.Initialize;
02545 begin
02546 ZPlainMySql40.LibraryLoaderEmbedded.LoadIfNeeded;
02547 MYSQL_API := ZPlainMySql40.LibraryLoaderEmbedded.api_rec;
02548 end;
02549
02550 procedure TZMySQLD40PlainDriver.BuildArguments(Options: TStrings);
02551 begin
02552 BuildServerArguments(Options);
02553 end;
02554
02555 {$ENDIF ENABLE_MYSQL_DEPRECATED}
02556
02557 { TZMySQL41PlainDriver }
02558
02559 constructor TZMySQL41PlainDriver.Create;
02560 begin
02561 end;
02562
02563 function TZMySQL41PlainDriver.GetProtocol: string;
02564 begin
02565 Result := 'mysql-4.1';
02566 end;
02567
02568 function TZMySQL41PlainDriver.GetDescription: string;
02569 begin
02570 Result := 'Native Plain Driver for MySQL 4.1+';
02571 end;
02572
02573 procedure TZMySQL41PlainDriver.Initialize;
02574 begin
02575 ZPlainMySql41.LibraryLoader.LoadIfNeeded;
02576 MYSQL_API := ZPlainMySql41.LibraryLoader.api_rec;
02577 end;
02578
02579 procedure TZMySQL41PlainDriver.Close(Handle: PZMySQLConnect);
02580 begin
02581 MYSQL_API.mysql_close(Handle);
02582 end;
02583
02584 function TZMySQL41PlainDriver.Connect(Handle: PZMySQLConnect; const Host,
02585 User, Password: PChar): PZMySQLConnect;
02586 begin
02587 Result := MYSQL_API.mysql_connect(Handle, Host, User, Password);
02588 end;
02589
02590 function TZMySQL41PlainDriver.SslSet(Handle: PZMySQLConnect;
02591 const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
02592 begin
02593 Result := MYSQL_API.mysql_ssl_set(Handle, Key, Cert, Ca, Capath, Cipher);
02594 end;
02595
02596 function TZMySQL41PlainDriver.CreateDatabase(Handle: PZMySQLConnect;
02597 const Database: PChar): Integer;
02598 begin
02599 Result := MYSQL_API.mysql_create_db(Handle, Database);
02600 end;
02601
02602 procedure TZMySQL41PlainDriver.Debug(Debug: PChar);
02603 begin
02604 MYSQL_API.mysql_debug(Debug);
02605 end;
02606
02607 function TZMySQL41PlainDriver.DropDatabase(Handle: PZMySQLConnect;
02608 const Database: PChar): Integer;
02609 begin
02610 Result := MYSQL_API.mysql_drop_db(Handle, Database);
02611 end;
02612
02613 function TZMySQL41PlainDriver.DumpDebugInfo(Handle: PZMySQLConnect): Integer;
02614 begin
02615 Result := MYSQL_API.mysql_dump_debug_info(Handle);
02616 end;
02617
02618 function TZMySQL41PlainDriver.ExecQuery(Handle: PZMySQLConnect;
02619 const Query: PChar): Integer;
02620 begin
02621 Result := MYSQL_API.mysql_query(Handle, Query);
02622 end;
02623
02624 function TZMySQL41PlainDriver.ExecRealQuery(Handle: PZMySQLConnect;
02625 const Query: PChar; Length: Integer): Integer;
02626 begin
02627 Result := MYSQL_API.mysql_real_query(Handle, Query, Length);
02628 end;
02629
02630 function TZMySQL41PlainDriver.FetchField(Res: PZMySQLResult): PZMySQLField;
02631 begin
02632 Result := MYSQL_API.mysql_fetch_field(Res);
02633 end;
02634
02635 function TZMySQL41PlainDriver.FetchLengths(Res: PZMySQLResult): PLongInt;
02636 begin
02637 Result := MYSQL_API.mysql_fetch_lengths(Res);
02638 end;
02639
02640 function TZMySQL41PlainDriver.FetchRow(Res: PZMySQLResult): PZMySQLRow;
02641 begin
02642 Result := MYSQL_API.mysql_fetch_row(Res);
02643 end;
02644
02645 procedure TZMySQL41PlainDriver.FreeResult(Res: PZMySQLResult);
02646 begin
02647 MYSQL_API.mysql_free_result(Res);
02648 end;
02649
02650 function TZMySQL41PlainDriver.GetAffectedRows(Handle: PZMySQLConnect): Int64;
02651 begin
02652 Result := MYSQL_API.mysql_affected_rows(Handle);
02653 end;
02654
02655 function TZMySQL41PlainDriver.GetClientInfo: PChar;
02656 begin
02657 Result := MYSQL_API.mysql_get_client_info;
02658 end;
02659
02660 function TZMySQL41PlainDriver.GetEscapeString(StrTo, StrFrom: PChar;
02661 Length: Cardinal): Cardinal;
02662 begin
02663 Result := MYSQL_API.mysql_escape_string(StrTo, StrFrom, Length);
02664 end;
02665
02666 function TZMySQL41PlainDriver.GetHostInfo(Handle: PZMySQLConnect): PChar;
02667 begin
02668 Result := MYSQL_API.mysql_get_host_info(Handle);
02669 end;
02670
02671 function TZMySQL41PlainDriver.GetListDatabases(Handle: PZMySQLConnect;
02672 Wild: PChar): PZMySQLResult;
02673 begin
02674 Result := MYSQL_API.mysql_list_dbs(Handle, Wild);
02675 end;
02676
02677 function TZMySQL41PlainDriver.GetListFields(Handle: PZMySQLConnect;
02678 const Table, Wild: PChar): PZMySQLResult;
02679 begin
02680 Result := MYSQL_API.mysql_list_fields(Handle, Table, Wild);
02681 end;
02682
02683 function TZMySQL41PlainDriver.GetListProcesses(
02684 Handle: PZMySQLConnect): PZMySQLResult;
02685 begin
02686 Result := MYSQL_API.mysql_list_processes(Handle);
02687 end;
02688
02689 function TZMySQL41PlainDriver.GetListTables(Handle: PZMySQLConnect;
02690 const Wild: PChar): PZMySQLResult;
02691 begin
02692 Result := MYSQL_API.mysql_list_tables(Handle, Wild);
02693 end;
02694
02695 function TZMySQL41PlainDriver.GetNumRows(Res: PZMySQLResult): Int64;
02696 Begin
02697 if (Res = nil) then
02698 Result := 0
02699 else
02700 Result := MYSQL_API.mysql_num_rows (Res);
02701 End;
02702
02703 function TZMySQL41PlainDriver.GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
02704 begin
02705 Result := MYSQL_API.mysql_get_proto_info(Handle);
02706 end;
02707
02708 function TZMySQL41PlainDriver.GetServerInfo(Handle: PZMySQLConnect): PChar;
02709 begin
02710 Result := MYSQL_API.mysql_get_server_info(Handle);
02711 end;
02712
02713 function TZMySQL41PlainDriver.GetStatInfo(Handle: PZMySQLConnect): PChar;
02714 begin
02715 Result := MYSQL_API.mysql_stat(Handle);
02716 end;
02717
02718 function TZMySQL41PlainDriver.GetThreadId(Handle: PZMySQLConnect): Cardinal;
02719 begin
02720 Result := MYSQL_API.mysql_thread_id(Handle);
02721 end;
02722
02723 function TZMySQL41PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
02724 begin
02725 if @MYSQL_API.mysql_server_init <> nil then
02726 MYSQL_API.mysql_server_init(1, nil, nil);
02727 Handle := MYSQL_API.mysql_init(nil);
02728 Result := Handle;
02729 end;
02730
02731 function TZMySQL41PlainDriver.getLastInsertID (Handle: PZMySQLConnect): Int64;
02732 begin
02733 Result := MYSQL_API.mysql_insert_id(ZPlainMySql41.PMYSQL(Handle));
02734 end;
02735
02736 procedure TZMySQL41PlainDriver.Despose(var Handle: PZMySQLConnect);
02737 begin
02738 Handle := nil;
02739 end;
02740
02741 function TZMySQL41PlainDriver.Kill(Handle: PZMySQLConnect;
02742 Pid: Integer): Integer;
02743 begin
02744 Result := MYSQL_API.mysql_kill(Handle, Pid);
02745 end;
02746
02747 function TZMySQL41PlainDriver.Ping(Handle: PZMySQLConnect): Integer;
02748 begin
02749 Result := MYSQL_API.mysql_ping(Handle);
02750 end;
02751
02752 function TZMySQL41PlainDriver.RealConnect(Handle: PZMySQLConnect;
02753 const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar;
02754 ClientFlag: Cardinal): PZMySQLConnect;
02755 begin
02756 Result := MYSQL_API.mysql_real_connect(Handle, Host, User, Password, Db,
02757 Port, UnixSocket, ClientFlag);
02758 end;
02759
02760 function TZMySQL41PlainDriver.GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar;
02761 Length: Cardinal): Cardinal;
02762 begin
02763 Result := MYSQL_API.mysql_real_escape_string(Handle, StrTo, StrFrom, Length);
02764 end;
02765
02766 function TZMySQL41PlainDriver.Refresh(Handle: PZMySQLConnect;
02767 Options: Cardinal): Integer;
02768 begin
02769 Result := MYSQL_API.mysql_refresh(Handle, Options);
02770 end;
02771
02772 procedure TZMySQL41PlainDriver.SeekData(Res: PZMySQLResult;
02773 Offset: Cardinal);
02774 begin
02775 MYSQL_API.mysql_data_seek(Res, Offset);
02776 end;
02777
02778 function TZMySQL41PlainDriver.SeekField(Res: PZMySQLResult;
02779 Offset: Cardinal): Cardinal;
02780 begin
02781 Result := MYSQL_API.mysql_field_seek(Res, Offset);
02782 end;
02783
02784 function TZMySQL41PlainDriver.SeekRow(Res: PZMySQLResult;
02785 Row: PZMySQLRowOffset): PZMySQLRowOffset;
02786 begin
02787 Result := MYSQL_API.mysql_row_seek(Res, Row);
02788 end;
02789
02790 function TZMySQL41PlainDriver.SelectDatabase(Handle: PZMySQLConnect;
02791 const Database: PChar): Integer;
02792 begin
02793 Result := MYSQL_API.mysql_select_db(Handle, Database);
02794 end;
02795
02796 function TZMySQL41PlainDriver.SetOptions(Handle: PZMySQLConnect;
02797 Option: TZMySQLOption; const Arg: PChar): Integer;
02798 begin
02799 Result := MYSQL_API.mysql_options(Handle,
02800 ZPlainMySql41.TMySqlOption(Option), Arg);
02801 end;
02802
02803 function TZMySQL41PlainDriver.Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
02804 begin
02805 Result := MYSQL_API.mysql_shutdown(Handle,shutdown_level);
02806 end;
02807
02808 function TZMySQL41PlainDriver.SetAutocommit(Handle: PZMySQLConnect; mode: Boolean): Boolean;
02809 var
02810 my_bool, my_mode: Byte;
02811 begin
02812 if (mode = True) then
02813 my_mode := 1
02814 else
02815 my_mode := 0;
02816 my_bool := MYSQL_API.mysql_autocommit(ZPlainMySql41.PMYSQL(Handle), my_mode);
02817 Result := (my_bool = 0);
02818 end;
02819
02820 function TZMySQL41PlainDriver.Commit(Handle: PZMySQLConnect): Boolean;
02821 var
02822 my_bool: Byte;
02823 begin
02824 my_bool := MYSQL_API.mysql_commit(ZPlainMySql41.PMYSQL(Handle));
02825 Result := (my_bool = 0);
02826 end;
02827
02828 function TZMySQL41PlainDriver.CheckAnotherRowset(Handle: PZMySQLConnect): Boolean;
02829 var
02830 my_bool: Byte;
02831 Begin
02832 my_bool := MYSQL_API.mysql_more_results (ZPlainMySql41.PMYSQL(Handle));
02833 if (my_bool = 0) then
02834 Result := False
02835 else
02836 Result := True;
02837 End;
02838
02839 function TZMySQL41PlainDriver.RetrieveNextRowset(Handle: PZMySQLConnect): Integer;
02840 Begin
02841 Result := MYSQL_API.mysql_next_result (ZPlainMySql41.PMYSQL(Handle));
02842 End;
02843
02844 function TZMySQL41PlainDriver.Rollback (Handle: PZMySQLConnect): Boolean;
02845 var
02846 my_bool: Byte;
02847 begin
02848 my_bool := MYSQL_API.mysql_rollback(ZPlainMySql41.PMYSQL(Handle));
02849 Result := (my_bool = 0);
02850 end;
02851
02852 function TZMySQL41PlainDriver.getSQLState (Handle: PZMySQLConnect): AnsiString;
02853 begin
02854 Result := MYSQL_API.mysql_sqlstate (ZPlainMySql41.PMYSQL(Handle));
02855 end;
02856
02857 function TZMySQL41PlainDriver.GetPreparedAffectedRows(Handle: PZMySqlPrepStmt): Int64;
02858 Begin
02859 Result := MYSQL_API.mysql_stmt_affected_rows (ZPlainMySql41.PMYSQL_STMT(Handle));
02860 End;
02861
02862 function TZMySQL41PlainDriver.BindParameters(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
02863 Begin
02864 Result := MYSQL_API.mysql_stmt_bind_param (ZPlainMySql41.PMYSQL_STMT(Handle), PMYSQL_BIND2(bindArray));
02865 End;
02866
02867 function TZMySQL41PlainDriver.BindResult(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
02868 Begin
02869 Result := MYSQL_API.mysql_stmt_bind_result (ZPlainMySql41.PMYSQL_STMT(Handle), PMYSQL_BIND2(bindArray));
02870 End;
02871
02872 function TZMySQL41PlainDriver.ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
02873 var
02874 my_bool: Byte;
02875 begin
02876 my_bool := MYSQL_API.mysql_stmt_close(ZPlainMySql41.PMYSQL_STMT(PrepStmtHandle));
02877 if (my_bool = 0) then
02878 Result := nil
02879 else
02880 Result := PrepStmtHandle;
02881 end;
02882
02883 procedure TZMySQL41PlainDriver.SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
02884 begin
02885 MYSQL_API.mysql_stmt_data_seek(ZPlainMySql41.PMYSQL_STMT(PrepStmtHandle), Offset);
02886 end;
02887
02888 function TZMySQL41PlainDriver.GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt):Integer;
02889 Begin
02890 Result := MYSQL_API.mysql_stmt_errno(ZPlainMySql41.PMYSQL_STMT(Handle));
02891 End;
02892
02893 function TZMySQL41PlainDriver.GetLastPreparedError(Handle: PZMySqlPrepStmt):AnsiString;
02894 begin
02895 Result := MYSQL_API.mysql_stmt_error(ZPlainMySql41.PMYSQL_STMT(Handle));
02896 end;
02897
02898 function TZMySQL41PlainDriver.ExecuteStmt(Handle: PZMySqlPrepStmt): Integer;
02899 Begin
02900 Result := MYSQL_API.mysql_stmt_execute (ZPlainMySql41.PMYSQL_STMT(Handle));
02901 End;
02902
02903 function TZMySQL41PlainDriver.FetchBoundResults(Handle: PZMySqlPrepStmt): Integer;
02904 Begin
02905 Result := MYSQL_API.mysql_stmt_fetch (ZPlainMySql41.PMYSQL_STMT(Handle));
02906 End;
02907
02908 function TZMySQL41PlainDriver.GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
02909 Begin
02910 Result := MYSQL_API.mysql_stmt_field_count(ZPlainMySql41.PMYSQL_STMT(Handle));
02911 End;
02912
02913 function TZMySQL41PlainDriver.InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
02914 begin
02915 Result := MYSQL_API.mysql_stmt_init(ZPlainMySql41.PMYSQL(Handle));
02916 end;
02917
02918 function TZMySQL41PlainDriver.GetPreparedInsertID(Handle: PZMySqlPrepStmt): Int64;
02919 Begin
02920 Result := MYSQL_API.mysql_stmt_insert_id (ZPlainMySql41.PMYSQL_STMT(Handle));
02921 End;
02922
02923 function TZMySQL41PlainDriver.GetPreparedNumRows(Handle: PZMySqlPrepStmt): Int64;
02924 Begin
02925 if (Handle = nil) then
02926 Result := 0
02927 else
02928 Result := MYSQL_API.mysql_stmt_num_rows (ZPlainMySql41.PMYSQL_STMT(Handle));
02929 End;
02930
02931 function TZMySQL41PlainDriver.GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal;
02932 Begin
02933 Result := MYSQL_API.mysql_stmt_param_count (ZPlainMySql41.PMYSQL_STMT(Handle));
02934 End;
02935
02936 function TZMySQL41PlainDriver.PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
02937 begin
02938 Result := MYSQL_API.mysql_stmt_prepare(ZPlainMySql41.PMYSQL_STMT(PrepStmtHandle), Query, Length);
02939 end;
02940
02941 function TZMySQL41PlainDriver.GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
02942 Begin
02943 Result := MYSQL_API.mysql_stmt_result_metadata (ZPlainMySql41.PMYSQL_STMT(Handle));
02944 End;
02945
02946 function TZMySQL41PlainDriver.SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
02947 Begin
02948 Result := MYSQL_API.mysql_stmt_row_seek (ZPlainMySql41.PMYSQL_STMT(Handle), Row);
02949 End;
02950
02951 function TZMySQL41PlainDriver.GetPreparedSQLState(Handle: PZMySqlPrepStmt): PChar;
02952 begin
02953 Result := MYSQL_API.mysql_stmt_sqlstate (ZPlainMySql41.PMYSQL_STMT(Handle));
02954 end;
02955
02956 function TZMySQL41PlainDriver.StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
02957 Begin
02958 Result := MYSQL_API.mysql_stmt_store_result (ZPlainMySql41.PMYSQL_STMT(Handle));
02959 End;
02960
02961 function TZMySQL41PlainDriver.StoreResult(
02962 Handle: PZMySQLConnect): PZMySQLResult;
02963 begin
02964 Result := MYSQL_API.mysql_store_result(Handle);
02965 end;
02966
02967 function TZMySQL41PlainDriver.UseResult(Handle: PZMySQLConnect): PZMySQLResult;
02968 begin
02969 Result := MYSQL_API.mysql_use_result(Handle);
02970 end;
02971
02972 function TZMySQL41PlainDriver.GetLastError(Handle: PZMySQLConnect): PChar;
02973 begin
02974 Result := MYSQL_API.mysql_error(Handle);
02975 end;
02976
02977 function TZMySQL41PlainDriver.GetFieldType(Field: PZMySQLField): Byte;
02978 begin
02979 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^._type;
02980 end;
02981
02982 function TZMySQL41PlainDriver.GetFieldFlags(Field: PZMySQLField): Integer;
02983 begin
02984 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.flags;
02985 end;
02986
02987 function TZMySQL41PlainDriver.GetRowCount(Res: PZMySQLResult): Int64;
02988 begin
02989 Result := MYSQL_API.mysql_num_rows(Res);
02990 end;
02991
02992 {$IFDEF ENABLE_MYSQL_DEPRECATED}
02993 function TZMySQL41PlainDriver.GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
02994 begin
02995 Result := TZMySQLStatus(ZPlainMySql41.PMYSQL(Handle).status);
02996 end;
02997 {$ENDIF ENABLE_MYSQL_DEPRECATED}
02998
02999 function TZMySQL41PlainDriver.ResultSetExists(Handle: PZMySQLConnect): Boolean;
03000 begin
03001 result := MYSQL_API.mysql_field_count(Handle)<>0;
03002
03003 end;
03004
03005 function TZMySQL41PlainDriver.GetFieldCount(Res: PZMySQLResult): Integer;
03006 begin
03007 Result := MYSQL_API.mysql_num_fields(Res);
03008 end;
03009
03010 function TZMySQL41PlainDriver.GetFieldDecimals(Field: PZMySQLField): Integer;
03011 begin
03012 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.decimals;
03013 end;
03014
03015 function TZMySQL41PlainDriver.GetFieldLength(Field: PZMySQLField): Integer;
03016 begin
03017 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.length;
03018 end;
03019
03020 function TZMySQL41PlainDriver.GetFieldMaxLength(Field: PZMySQLField): Integer;
03021 begin
03022 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.max_length;
03023 end;
03024
03025 function TZMySQL41PlainDriver.GetFieldName(Field: PZMySQLField): PChar;
03026 begin
03027 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.name;
03028 end;
03029
03030 function TZMySQL41PlainDriver.GetFieldTable(Field: PZMySQLField): PChar;
03031 begin
03032 Result := ZPlainMySql41.PMYSQL_FIELD(Field)^.table;
03033 end;
03034
03035 function TZMySQL41PlainDriver.GetFieldData(Row: PZMySQLRow;
03036 Offset: Cardinal): PChar;
03037 begin
03038 Result := ZPlainMySql41.PMYSQL_ROW(ROW)[Offset];
03039 end;
03040
03041 function TZMySQL41PlainDriver.GetLastErrorCode(Handle: PZMySQLConnect): Integer;
03042 begin
03043 Result := MYSQL_API.mysql_errno(ZPlainMySql41.PMYSQL(Handle));
03044 end;
03045
03046 function TZMySQL41PlainDriver.GetClientVersion: Integer;
03047 begin
03048 Result := MYSQL_API.mysql_get_client_version;
03049 end;
03050
03051 function TZMySQL41PlainDriver.GetServerVersion(
03052 Handle: PZMySQLConnect): Integer;
03053 begin
03054 Result := MYSQL_API.mysql_get_server_version(Handle);
03055 end;
03056
03057 procedure TZMySQL41PlainDriver.BuildArguments(Options: TStrings);
03058 begin
03059
03060 end;
03061
03062 { TZMySQLD41PlainDriver }
03063
03064 function TZMySQLD41PlainDriver.GetProtocol: string;
03065 begin
03066 Result := 'mysqld-4.1';
03067 end;
03068
03069 function TZMySQLD41PlainDriver.GetDescription: string;
03070 begin
03071 Result := 'Native Plain Driver for Embedded MySQL 4.1+';
03072 end;
03073
03074 function TZMySQLD41PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
03075 begin
03076 if @MYSQL_API.mysql_server_init <> nil then
03077 MYSQL_API.mysql_server_init(ServerArgsLen, ServerArgs, @SERVER_GROUPS);
03078
03079 Handle := MYSQL_API.mysql_init(nil);
03080 Result := Handle;
03081 end;
03082
03083 procedure TZMySQLD41PlainDriver.Initialize;
03084 begin
03085 ZPlainMySql41.LibraryLoaderEmbedded.LoadIfNeeded;
03086 MYSQL_API := ZPlainMySql41.LibraryLoaderEmbedded.api_rec;
03087 end;
03088
03089 procedure TZMySQLD41PlainDriver.BuildArguments(Options: TStrings);
03090 begin
03091 BuildServerArguments(Options);
03092 end;
03093
03094 { TZMySQL5PlainDriver }
03095
03096 constructor TZMySQL5PlainDriver.Create;
03097 begin
03098 end;
03099
03100 function TZMySQL5PlainDriver.GetProtocol: string;
03101 begin
03102 Result := 'mysql-5';
03103 end;
03104
03105 function TZMySQL5PlainDriver.GetDescription: string;
03106 begin
03107 Result := 'Native Plain Driver for MySQL 5.0+';
03108 end;
03109
03110 procedure TZMySQL5PlainDriver.Initialize;
03111 begin
03112 ZPlainMySql5.LibraryLoader.LoadIfNeeded;
03113 MYSQL_API := ZPlainMySql5.LibraryLoader.api_rec;
03114 end;
03115
03116 procedure TZMySQL5PlainDriver.Close(Handle: PZMySQLConnect);
03117 begin
03118 MYSQL_API.mysql_close(Handle);
03119 end;
03120
03121 function TZMySQL5PlainDriver.Connect(Handle: PZMySQLConnect; const Host,
03122 User, Password: PChar): PZMySQLConnect;
03123 begin
03124 Result := MYSQL_API.mysql_connect(Handle, Host, User, Password);
03125 end;
03126
03127 function TZMySQL5PlainDriver.SslSet(Handle: PZMySQLConnect;
03128 Const Key, Cert, Ca, Capath, Cipher: PChar): Integer;
03129 begin
03130 Result := MYSQL_API.mysql_ssl_set(Handle, Key, Cert, Ca, Capath, Cipher);
03131 end;
03132
03133 function TZMySQL5PlainDriver.CreateDatabase(Handle: PZMySQLConnect;
03134 const Database: PChar): Integer;
03135 begin
03136 Result := MYSQL_API.mysql_create_db(Handle, Database);
03137 end;
03138
03139 procedure TZMySQL5PlainDriver.Debug(Debug: PChar);
03140 begin
03141 MYSQL_API.mysql_debug(Debug);
03142 end;
03143
03144 function TZMySQL5PlainDriver.DropDatabase(Handle: PZMySQLConnect;
03145 const Database: PChar): Integer;
03146 begin
03147 Result := MYSQL_API.mysql_drop_db(Handle, Database);
03148 end;
03149
03150 function TZMySQL5PlainDriver.DumpDebugInfo(Handle: PZMySQLConnect): Integer;
03151 begin
03152 Result := MYSQL_API.mysql_dump_debug_info(Handle);
03153 end;
03154
03155 function TZMySQL5PlainDriver.ExecQuery(Handle: PZMySQLConnect;
03156 const Query: PChar): Integer;
03157 begin
03158 Result := MYSQL_API.mysql_query(Handle, Query);
03159 end;
03160
03161 function TZMySQL5PlainDriver.ExecRealQuery(Handle: PZMySQLConnect;
03162 const Query: PChar; Length: Integer): Integer;
03163 begin
03164 Result := MYSQL_API.mysql_real_query(Handle, Query, Length);
03165 end;
03166
03167 function TZMySQL5PlainDriver.FetchField(Res: PZMySQLResult): PZMySQLField;
03168 begin
03169 Result := MYSQL_API.mysql_fetch_field(Res);
03170 end;
03171
03172 function TZMySQL5PlainDriver.FetchLengths(Res: PZMySQLResult): PLongInt;
03173 begin
03174 Result := MYSQL_API.mysql_fetch_lengths(Res);
03175 end;
03176
03177 function TZMySQL5PlainDriver.FetchRow(Res: PZMySQLResult): PZMySQLRow;
03178 begin
03179 Result := MYSQL_API.mysql_fetch_row(Res);
03180 end;
03181
03182 procedure TZMySQL5PlainDriver.FreeResult(Res: PZMySQLResult);
03183 begin
03184 MYSQL_API.mysql_free_result(Res);
03185 end;
03186
03187 function TZMySQL5PlainDriver.GetAffectedRows(Handle: PZMySQLConnect): Int64;
03188 begin
03189 Result := MYSQL_API.mysql_affected_rows(Handle);
03190 end;
03191
03192 function TZMySQL5PlainDriver.GetClientInfo: PChar;
03193 begin
03194 Result := MYSQL_API.mysql_get_client_info;
03195 end;
03196
03197 function TZMySQL5PlainDriver.GetEscapeString(StrTo, StrFrom: PChar;
03198 Length: Cardinal): Cardinal;
03199 begin
03200 Result := MYSQL_API.mysql_escape_string(StrTo, StrFrom, Length);
03201 end;
03202
03203 function TZMySQL5PlainDriver.GetHostInfo(Handle: PZMySQLConnect): PChar;
03204 begin
03205 Result := MYSQL_API.mysql_get_host_info(Handle);
03206 end;
03207
03208 function TZMySQL5PlainDriver.GetListDatabases(Handle: PZMySQLConnect;
03209 Wild: PChar): PZMySQLResult;
03210 begin
03211 Result := MYSQL_API.mysql_list_dbs(Handle, Wild);
03212 end;
03213
03214 function TZMySQL5PlainDriver.GetListFields(Handle: PZMySQLConnect;
03215 const Table, Wild: PChar): PZMySQLResult;
03216 begin
03217 Result := MYSQL_API.mysql_list_fields(Handle, Table, Wild);
03218 end;
03219
03220 function TZMySQL5PlainDriver.GetListProcesses(
03221 Handle: PZMySQLConnect): PZMySQLResult;
03222 begin
03223 Result := MYSQL_API.mysql_list_processes(Handle);
03224 end;
03225
03226 function TZMySQL5PlainDriver.GetListTables(Handle: PZMySQLConnect;
03227 const Wild: PChar): PZMySQLResult;
03228 begin
03229 Result := MYSQL_API.mysql_list_tables(Handle, Wild);
03230 end;
03231
03232 function TZMySQL5PlainDriver.GetNumRows(Res: PZMySQLResult): Int64;
03233 Begin
03234 if (Res = nil) then
03235 Result := 0
03236 else
03237 Result := MYSQL_API.mysql_num_rows (Res);
03238 End;
03239
03240 function TZMySQL5PlainDriver.GetProtoInfo(Handle: PZMySQLConnect): Cardinal;
03241 begin
03242 Result := MYSQL_API.mysql_get_proto_info(Handle);
03243 end;
03244
03245 function TZMySQL5PlainDriver.GetServerInfo(Handle: PZMySQLConnect): PChar;
03246 begin
03247 Result := MYSQL_API.mysql_get_server_info(Handle);
03248 end;
03249
03250 function TZMySQL5PlainDriver.GetStatInfo(Handle: PZMySQLConnect): PChar;
03251 begin
03252 Result := MYSQL_API.mysql_stat(Handle);
03253 end;
03254
03255 function TZMySQL5PlainDriver.GetThreadId(Handle: PZMySQLConnect): Cardinal;
03256 begin
03257 Result := MYSQL_API.mysql_thread_id(Handle);
03258 end;
03259
03260 function TZMySQL5PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
03261 begin
03262 if @MYSQL_API.mysql_server_init <> nil then
03263 MYSQL_API.mysql_server_init(1, nil, nil);
03264 Handle := MYSQL_API.mysql_init(nil);
03265 Result := Handle;
03266 end;
03267
03268 function TZMySQL5PlainDriver.getLastInsertID (Handle: PZMySQLConnect): Int64;
03269 begin
03270 Result := MYSQL_API.mysql_insert_id(ZPlainMySql5.PMYSQL(Handle));
03271 end;
03272
03273 procedure TZMySQL5PlainDriver.Despose(var Handle: PZMySQLConnect);
03274 begin
03275 Handle := nil;
03276 end;
03277
03278 function TZMySQL5PlainDriver.Kill(Handle: PZMySQLConnect;
03279 Pid: Integer): Integer;
03280 begin
03281 Result := MYSQL_API.mysql_kill(Handle, Pid);
03282 end;
03283
03284 function TZMySQL5PlainDriver.Ping(Handle: PZMySQLConnect): Integer;
03285 begin
03286 Result := MYSQL_API.mysql_ping(Handle);
03287 end;
03288
03289 function TZMySQL5PlainDriver.RealConnect(Handle: PZMySQLConnect;
03290 const Host, User, Password, Db: PChar; Port: Cardinal; UnixSocket: PChar;
03291 ClientFlag: Cardinal): PZMySQLConnect;
03292 begin
03293 Result := MYSQL_API.mysql_real_connect(Handle, Host, User, Password, Db,
03294 Port, UnixSocket, ClientFlag);
03295 end;
03296
03297 function TZMySQL5PlainDriver.GetRealEscapeString(Handle: PZMySQLConnect; StrTo, StrFrom: PChar;
03298 Length: Cardinal): Cardinal;
03299 begin
03300 Result := MYSQL_API.mysql_real_escape_string(Handle, StrTo, StrFrom, Length);
03301 end;
03302
03303 function TZMySQL5PlainDriver.Refresh(Handle: PZMySQLConnect;
03304 Options: Cardinal): Integer;
03305 begin
03306 Result := MYSQL_API.mysql_refresh(Handle, Options);
03307 end;
03308
03309 procedure TZMySQL5PlainDriver.SeekData(Res: PZMySQLResult;
03310 Offset: Cardinal);
03311 begin
03312 MYSQL_API.mysql_data_seek(Res, Offset);
03313 end;
03314
03315 function TZMySQL5PlainDriver.SeekField(Res: PZMySQLResult;
03316 Offset: Cardinal): Cardinal;
03317 begin
03318 Result := MYSQL_API.mysql_field_seek(Res, Offset);
03319 end;
03320
03321 function TZMySQL5PlainDriver.SeekRow(Res: PZMySQLResult;
03322 Row: PZMySQLRowOffset): PZMySQLRowOffset;
03323 begin
03324 Result := MYSQL_API.mysql_row_seek(Res, Row);
03325 end;
03326
03327 function TZMySQL5PlainDriver.SelectDatabase(Handle: PZMySQLConnect;
03328 const Database: PChar): Integer;
03329 begin
03330 Result := MYSQL_API.mysql_select_db(Handle, Database);
03331 end;
03332
03333 function TZMySQL5PlainDriver.SetOptions(Handle: PZMySQLConnect;
03334 Option: TZMySQLOption; const Arg: PChar): Integer;
03335 begin
03336 Result := MYSQL_API.mysql_options(Handle,
03337 ZPlainMySql5.TMySqlOption(Option), Arg);
03338 end;
03339
03340 function TZMySQL5PlainDriver.Shutdown(Handle: PZMySQLConnect; shutdown_level: TMysqlShutdownLevel = ZPlainMySqlConstants.SHUTDOWN_DEFAULT): Integer;
03341 begin
03342 Result := MYSQL_API.mysql_shutdown(Handle,shutdown_level);
03343 end;
03344
03345 function TZMySQL5PlainDriver.SetAutocommit(Handle: PZMySQLConnect; mode: Boolean): Boolean;
03346 var
03347 my_bool, my_mode: Byte;
03348 begin
03349 if (mode = True) then
03350 my_mode := 1
03351 else
03352 my_mode := 0;
03353 my_bool := MYSQL_API.mysql_autocommit(ZPlainMySql5.PMYSQL(Handle), my_mode);
03354 Result := (my_bool = 0);
03355 end;
03356
03357 function TZMySQL5PlainDriver.Commit(Handle: PZMySQLConnect): Boolean;
03358 var
03359 my_bool: Byte;
03360 begin
03361 my_bool := MYSQL_API.mysql_commit(ZPlainMySql5.PMYSQL(Handle));
03362 Result := (my_bool = 0);
03363 end;
03364
03365 function TZMySQL5PlainDriver.CheckAnotherRowset(Handle: PZMySQLConnect): Boolean;
03366 var
03367 my_bool: Byte;
03368 Begin
03369 my_bool := MYSQL_API.mysql_more_results (ZPlainMySql5.PMYSQL(Handle));
03370 if (my_bool = 0) then
03371 Result := False
03372 else
03373 Result := True;
03374 End;
03375
03376 function TZMySQL5PlainDriver.RetrieveNextRowset(Handle: PZMySQLConnect): Integer;
03377 Begin
03378 Result := MYSQL_API.mysql_next_result (ZPlainMySql5.PMYSQL(Handle));
03379 End;
03380
03381 function TZMySQL5PlainDriver.Rollback (Handle: PZMySQLConnect): Boolean;
03382 var
03383 my_bool: Byte;
03384 begin
03385 my_bool := MYSQL_API.mysql_rollback(ZPlainMySql5.PMYSQL(Handle));
03386 Result := (my_bool = 0);
03387 end;
03388
03389 function TZMySQL5PlainDriver.getSQLState (Handle: PZMySQLConnect): AnsiString;
03390 begin
03391 Result := MYSQL_API.mysql_sqlstate (ZPlainMySql5.PMYSQL(Handle));
03392 end;
03393
03394 function TZMySQL5PlainDriver.GetPreparedAffectedRows(Handle: PZMySqlPrepStmt): Int64;
03395 Begin
03396 Result := MYSQL_API.mysql_stmt_affected_rows (ZPlainMySql5.PMYSQL_STMT(Handle));
03397 End;
03398
03399 function TZMySQL5PlainDriver.BindParameters(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
03400 Begin
03401 Result := MYSQL_API.mysql_stmt_bind_param (ZPlainMySql5.PMYSQL_STMT(Handle), PMYSQL_BIND2(bindArray));
03402 End;
03403
03404 function TZMySQL5PlainDriver.BindResult(Handle: PZMySqlPrepStmt; bindArray: PZMysqlBindArray): Byte;
03405 Begin
03406 Result := MYSQL_API.mysql_stmt_bind_result (ZPlainMySql5.PMYSQL_STMT(Handle), PMYSQL_BIND2(bindArray));
03407 End;
03408
03409 function TZMySQL5PlainDriver.ClosePrepStmt (PrepStmtHandle: PZMySqlPrepStmt): PZMySqlPrepStmt;
03410 var
03411 my_bool: Byte;
03412 begin
03413 my_bool := MYSQL_API.mysql_stmt_close(ZPlainMySql5.PMYSQL_STMT(PrepStmtHandle));
03414 if (my_bool = 0) then
03415 Result := nil
03416 else
03417 Result := PrepStmtHandle;
03418 end;
03419
03420 procedure TZMySQL5PlainDriver.SeekPreparedData(PrepStmtHandle: PZMySqlPrepStmt; Offset: Cardinal);
03421 begin
03422 MYSQL_API.mysql_stmt_data_seek(ZPlainMySql5.PMYSQL_STMT(PrepStmtHandle), Offset);
03423 end;
03424
03425 function TZMySQL5PlainDriver.GetLastPreparedErrorCode(Handle: PZMySqlPrepStmt):Integer;
03426 Begin
03427 Result := MYSQL_API.mysql_stmt_errno(ZPlainMySql5.PMYSQL_STMT(Handle));
03428 End;
03429
03430 function TZMySQL5PlainDriver.GetLastPreparedError(Handle: PZMySqlPrepStmt):AnsiString;
03431 begin
03432 Result := MYSQL_API.mysql_stmt_error(ZPlainMySql5.PMYSQL_STMT(Handle));
03433 end;
03434
03435 function TZMySQL5PlainDriver.ExecuteStmt(Handle: PZMySqlPrepStmt): Integer;
03436 Begin
03437 Result := MYSQL_API.mysql_stmt_execute (ZPlainMySql5.PMYSQL_STMT(Handle));
03438 End;
03439
03440 function TZMySQL5PlainDriver.FetchBoundResults(Handle: PZMySqlPrepStmt): Integer;
03441 Begin
03442 Result := MYSQL_API.mysql_stmt_fetch (ZPlainMySql5.PMYSQL_STMT(Handle));
03443 End;
03444
03445 function TZMySQL5PlainDriver.GetPreparedFieldCount(Handle: PZMySqlPrepStmt): Integer;
03446 Begin
03447 Result := MYSQL_API.mysql_stmt_field_count(ZPlainMySql5.PMYSQL_STMT(Handle));
03448 End;
03449
03450 function TZMySQL5PlainDriver.InitializePrepStmt (Handle: PZMySQLConnect): PZMySqlPrepStmt;
03451 begin
03452 Result := MYSQL_API.mysql_stmt_init(ZPlainMySql5.PMYSQL(Handle));
03453 end;
03454
03455 function TZMySQL5PlainDriver.GetPreparedInsertID(Handle: PZMySqlPrepStmt): Int64;
03456 Begin
03457 Result := MYSQL_API.mysql_stmt_insert_id (ZPlainMySql5.PMYSQL_STMT(Handle));
03458 End;
03459
03460 function TZMySQL5PlainDriver.GetPreparedNumRows(Handle: PZMySqlPrepStmt): Int64;
03461 Begin
03462 if (Handle = nil) then
03463 Result := 0
03464 else
03465 Result := MYSQL_API.mysql_stmt_num_rows (ZPlainMySql5.PMYSQL_STMT(Handle));
03466 End;
03467
03468 function TZMySQL5PlainDriver.GetPreparedBindMarkers (Handle: PZMySqlPrepStmt): Cardinal;
03469 Begin
03470 Result := MYSQL_API.mysql_stmt_param_count (ZPlainMySql5.PMYSQL_STMT(Handle));
03471 End;
03472
03473 function TZMySQL5PlainDriver.PrepareStmt (PrepStmtHandle: PZMySqlPrepStmt; const Query: PChar; Length: Integer): Integer;
03474 begin
03475 Result := MYSQL_API.mysql_stmt_prepare(ZPlainMySql5.PMYSQL_STMT(PrepStmtHandle), Query, Length);
03476 end;
03477
03478 function TZMySQL5PlainDriver.GetPreparedMetaData (Handle: PZMySqlPrepStmt): PZMySQLResult;
03479 Begin
03480 Result := MYSQL_API.mysql_stmt_result_metadata (ZPlainMySql5.PMYSQL_STMT(Handle));
03481 End;
03482
03483 function TZMySQL5PlainDriver.SeekPreparedRow(Handle: PZMySqlPrepStmt; Row: PZMySQLRowOffset): PZMySQLRowOffset;
03484 Begin
03485 Result := MYSQL_API.mysql_stmt_row_seek (ZPlainMySql5.PMYSQL_STMT(Handle), Row);
03486 End;
03487
03488 function TZMySQL5PlainDriver.GetPreparedSQLState(Handle: PZMySqlPrepStmt): PChar;
03489 begin
03490 Result := MYSQL_API.mysql_stmt_sqlstate (ZPlainMySql5.PMYSQL_STMT(Handle));
03491 end;
03492
03493 function TZMySQL5PlainDriver.StorePreparedResult (Handle: PZMySqlPrepStmt): Integer;
03494 Begin
03495 Result := MYSQL_API.mysql_stmt_store_result (ZPlainMySql5.PMYSQL_STMT(Handle));
03496 End;
03497
03498 function TZMySQL5PlainDriver.StoreResult(
03499 Handle: PZMySQLConnect): PZMySQLResult;
03500 begin
03501 Result := MYSQL_API.mysql_store_result(Handle);
03502 end;
03503
03504 function TZMySQL5PlainDriver.UseResult(Handle: PZMySQLConnect): PZMySQLResult;
03505 begin
03506 Result := MYSQL_API.mysql_use_result(Handle);
03507 end;
03508
03509 function TZMySQL5PlainDriver.GetLastError(Handle: PZMySQLConnect): PChar;
03510 begin
03511 Result := MYSQL_API.mysql_error(Handle);
03512 end;
03513
03514 function TZMySQL5PlainDriver.GetFieldType(Field: PZMySQLField): Byte;
03515 begin
03516 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^._type;
03517 end;
03518
03519 function TZMySQL5PlainDriver.GetFieldFlags(Field: PZMySQLField): Integer;
03520 begin
03521 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.flags;
03522 end;
03523
03524 function TZMySQL5PlainDriver.GetRowCount(Res: PZMySQLResult): Int64;
03525 begin
03526 Result := MYSQL_API.mysql_num_rows(Res);
03527 end;
03528
03529 {$IFDEF ENABLE_MYSQL_DEPRECATED}
03530 function TZMySQL5PlainDriver.GetStatus(Handle: PZMySQLConnect): TZMySQLStatus;
03531 begin
03532 Result := TZMySQLStatus(ZPlainMySql5.PMYSQL(Handle).status);
03533 end;
03534 {$ENDIF ENABLE_MYSQL_DEPRECATED}
03535
03536 function TZMySQL5PlainDriver.ResultSetExists(Handle: PZMySQLConnect): Boolean;
03537 begin
03538 result := MYSQL_API.mysql_field_count(Handle)<>0;
03539
03540 end;
03541
03542 function TZMySQL5PlainDriver.GetFieldCount(Res: PZMySQLResult): Integer;
03543 begin
03544 Result := MYSQL_API.mysql_num_fields(Res);
03545 end;
03546
03547 function TZMySQL5PlainDriver.GetFieldDecimals(Field: PZMySQLField): Integer;
03548 begin
03549 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.decimals;
03550 end;
03551
03552 function TZMySQL5PlainDriver.GetFieldLength(Field: PZMySQLField): Integer;
03553 begin
03554 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.length;
03555 end;
03556
03557 function TZMySQL5PlainDriver.GetFieldMaxLength(Field: PZMySQLField): Integer;
03558 begin
03559 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.max_length;
03560 end;
03561
03562 function TZMySQL5PlainDriver.GetFieldName(Field: PZMySQLField): PChar;
03563 begin
03564 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.name;
03565 end;
03566
03567 function TZMySQL5PlainDriver.GetFieldTable(Field: PZMySQLField): PChar;
03568 begin
03569 Result := ZPlainMySql5.PMYSQL_FIELD(Field)^.table;
03570 end;
03571
03572 function TZMySQL5PlainDriver.GetFieldData(Row: PZMySQLRow;
03573 Offset: Cardinal): PChar;
03574 begin
03575 Result := ZPlainMySql5.PMYSQL_ROW(ROW)[Offset];
03576 end;
03577
03578 function TZMySQL5PlainDriver.GetLastErrorCode(Handle: PZMySQLConnect): Integer;
03579 begin
03580 Result := MYSQL_API.mysql_errno(ZPlainMySql5.PMYSQL(Handle));
03581 end;
03582
03583 function TZMySQL5PlainDriver.GetClientVersion: Integer;
03584 begin
03585 Result := MYSQL_API.mysql_get_client_version;
03586 end;
03587
03588 function TZMySQL5PlainDriver.GetServerVersion(
03589 Handle: PZMySQLConnect): Integer;
03590 begin
03591 Result := MYSQL_API.mysql_get_server_version(Handle);
03592 end;
03593
03594 procedure TZMySQL5PlainDriver.BuildArguments(Options: TStrings);
03595 begin
03596
03597 end;
03598
03599 { TZMySQLD5PlainDriver }
03600
03601 function TZMySQLD5PlainDriver.GetProtocol: string;
03602 begin
03603 Result := 'mysqld-5';
03604 end;
03605
03606 function TZMySQLD5PlainDriver.GetDescription: string;
03607 begin
03608 Result := 'Native Plain Driver for Embedded MySQL 5+';
03609 end;
03610
03611 function TZMySQLD5PlainDriver.Init(var Handle: PZMySQLConnect): PZMySQLConnect;
03612 begin
03613 if @MYSQL_API.mysql_server_init <> nil then
03614 MYSQL_API.mysql_server_init(ServerArgsLen, ServerArgs, @SERVER_GROUPS);
03615
03616 Handle := MYSQL_API.mysql_init(nil);
03617 Result := Handle;
03618 end;
03619
03620 procedure TZMySQLD5PlainDriver.Initialize;
03621 begin
03622 ZPlainMySql5.LibraryLoaderEmbedded.LoadIfNeeded;
03623 MYSQL_API := ZPlainMySql5.LibraryLoaderEmbedded.api_rec;
03624 end;
03625
03626 procedure TZMySQLD5PlainDriver.BuildArguments(Options: TStrings);
03627 begin
03628 BuildServerArguments(Options);
03629 end;
03630
03631 end.
03632
03633