Browse Source

+ Split everything in version 3 and version 4

michael 21 years ago
parent
commit
b2a1cf91b0

+ 4 - 27
packages/base/mysql/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/09/04]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/08/31]
 #
 default: all
-MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) sunos qnx
 FORCE:
@@ -215,8 +215,8 @@ endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 override PACKAGE_NAME=mysql
 override PACKAGE_VERSION=1.9.4
-override TARGET_UNITS+=mysql_com mysql_version mysql
-override TARGET_EXAMPLES+=testdb
+override TARGET_UNITS+=mysql4_com mysql4_version mysql4 mysql3_com mysql3_version mysql3
+override TARGET_EXAMPLES+=testdb4 testdb3
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -552,12 +552,6 @@ STATICLIBPREFIX=
 FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 endif
-ifeq ($(OS_TARGET),netwlibc)
-EXEEXT=.nlm
-STATICLIBPREFIX=
-FPCMADE=fpcmade.nwl
-ZIPSUFFIX=nwl
-endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 EXEEXT=
@@ -710,18 +704,6 @@ FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 EXEEXT=.nlm
 endif
-ifeq ($(OS_TARGET),netwlibc)
-STATICLIBPREFIX=
-PPUEXT=.ppu
-OEXT=.o
-ASMEXT=.s
-SMARTEXT=.sl
-STATICLIBEXT=.a
-SHAREDLIBEXT=.nlm
-FPCMADE=fpcmade.nwl
-ZIPSUFFIX=nwl
-EXEEXT=.nlm
-endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 PPUEXT=.ppu
@@ -1124,11 +1106,6 @@ ifeq ($(CPU_TARGET),powerpc)
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
-ifeq ($(OS_TARGET),netwlibc)
-ifeq ($(CPU_TARGET),i386)
-REQUIRE_PACKAGES_RTL=1
-endif
-endif
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_RTL),)

+ 2 - 2
packages/base/mysql/Makefile.fpc

@@ -7,8 +7,8 @@ name=mysql
 version=1.9.4
 
 [target]
-units=mysql_com mysql_version mysql
-examples=testdb
+units=mysql4_com mysql4_version mysql4 mysql3_com mysql3_version mysql3
+examples=testdb4 testdb3
 
 [require]
 libc=y

+ 7 - 4
packages/base/mysql/README

@@ -6,6 +6,11 @@ To Compile under Linux
 - You must know where the mysql libraries are.
 - You must know where libgcc is.
 
+The units come in 2 flavours:
+- mysql3*.pp  : version 3.23 of mysql.
+- mysql4*.pp  : version 4.0 of mysql.
+These versions are substantially different.
+
 Both these things must be set in the Makefile. After that a simple 'make'
 and 'make install' should compile and install everything.
 
@@ -16,10 +21,6 @@ database available. If not, you must run
   rmdb databasename
 manually. You need create permission on the database for this to work.
 
-Redhat 5.1 and later users: You must ADD to the path the location of the
-libc5 libraries. It will NOT work with glibc 6. I hope to fix this in the
-future.
-
 Win32 users: There are multiple .dll files circulating around. 
 you should fix the statement
 mysqllib = 'libmysql'
@@ -27,4 +28,6 @@ in the mysql unit, so it matches the version you have.
 
 Enjoy !
 
+
+
 Michael.

+ 0 - 641
packages/base/mysql/mysql.pp

@@ -1,641 +0,0 @@
-unit mysql;
-interface
-
-uses mysql_com;
-
-{
-  Automatically converted by H2Pas 0.99.15 from mysql.ph
-  The following command line parameters were used:
-    -p
-    -D
-    -l
-    mysqlclient
-    mysql.ph
-}
-
-  const
-    External_library='mysqlclient'; {Setup as you need}
-
-  { Pointers to basic pascal types, inserted by h2pas conversion program.}
-  Type
-    PLongint  = ^Longint;
-    PSmallInt = ^SmallInt;
-    PByte     = ^Byte;
-    PWord     = ^Word;
-    PDWord    = ^DWord;
-    PDouble   = ^Double;
-
-{$PACKRECORDS C}
-
-  { Copyright (C) 2000 MySQL AB
-
-     This program is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published by
-     the Free Software Foundation; either version 2 of the License, or
-     (at your option) any later version.
-
-     This program is distributed in the hope that it will be useful,
-     but WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-     GNU General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with this program; if not, write to the Free Software
-     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  }
-
-  type
-
-     Pmy_bool = ^my_bool;
-     my_bool = char;
-
-     Pgptr = ^gptr;
-     gptr = char;
-
-     Pmy_socket = ^my_socket;
-     my_socket = longint;
-
-    var
-       mysql_port : dword;cvar;external;
-       mysql_unix_port : Pchar;cvar;external;
-
-    type
-
-       Pst_mysql_field = ^st_mysql_field;
-       st_mysql_field = record
-            name : Pchar;
-            table : Pchar;
-            org_table : Pchar;
-            db : Pchar;
-            def : Pchar;
-            length : dword;
-            max_length : dword;
-            flags : dword;
-            decimals : dword;
-            _type : enum_field_types;
-         end;
-       MYSQL_FIELD = st_mysql_field;
-       TMYSQL_FIELD = ^MYSQL_FIELD;
-       PMYSQL_FIELD = ^MYSQL_FIELD;
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_PRI_KEY(n : longint) : Boolean;
-
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_NOT_NULL(n : longint) :  Boolean;
-
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_BLOB(n : longint) : boolean;
-
-(* error
-#define IS_NUM(t)       ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR)
-in define line 32 *)
-    { was #define dname(params) para_def_expr }
-    { argument types are unknown }
-    { return type might be wrong }
-    function IS_NUM_FIELD(f : Pst_mysql_field) : boolean;
-
-(* error
-#define INTERNAL_NUM_FIELD(f) (((f)->type <= FIELD_TYPE_INT24 && ((f)->type != FIELD_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == FIELD_TYPE_YEAR)
-in define line 34 *)
-    { Name of column  }
-    { Table of column if column was a field  }
-    { Org table name if table was an alias  }
-    { Database for table  }
-    { Default value (set by mysql_list_fields)  }
-    { Width of column  }
-    { Max width of selected set  }
-    { Div flags  }
-    { Number of decimals in field  }
-    { Type of field. Se mysql_com.h for types  }
-
-type
-       PMYSQL_ROW = ^MYSQL_ROW;
-       MYSQL_ROW = ppchar;
-       TMYSQL_ROW = MYSQL_ROW;
-    { return data as array of strings  }
-
-       PMYSQL_FIELD_OFFSET = ^MYSQL_FIELD_OFFSET;
-       MYSQL_FIELD_OFFSET = dword;
-    { offset to current field  }
-
-       Pmy_ulonglong = ^my_ulonglong;
-       my_ulonglong = qword;
-    { was #define dname def_expr }
-    function MYSQL_COUNT_ERROR : longint;
-        { return type might be wrong }
-
-    { list of rows  }
-
-    type
-
-       Pst_mysql_rows = ^st_mysql_rows;
-       st_mysql_rows = record
-            next : Pst_mysql_rows;
-            data : MYSQL_ROW;
-         end;
-       MYSQL_ROWS = st_mysql_rows;
-       PMYSQL_ROWS = ^MYSQL_ROWS;
-
-       PMYSQL_ROW_OFFSET = ^MYSQL_ROW_OFFSET;
-       MYSQL_ROW_OFFSET = MYSQL_ROWS;
-    { offset to current row  }
-    { struct for once_alloc  }
-    { Next block in use  }
-    { memory left in block   }
-    { size of block  }
-
-       Pst_used_mem = ^st_used_mem;
-       st_used_mem = record
-            next : Pst_used_mem;
-            left : dword;
-            size : dword;
-         end;
-       USED_MEM = st_used_mem;
-       PUSED_MEM = ^USED_MEM;
-
-       Pst_mem_root = ^st_mem_root;
-       st_mem_root = record
-            free : PUSED_MEM;
-            used : PUSED_MEM;
-            pre_alloc : PUSED_MEM;
-            min_malloc : dword;
-            block_size : dword;
-            error_handler : procedure ;cdecl;
-         end;
-       MEM_ROOT = st_mem_root;
-       PMEM_ROOT = ^MEM_ROOT;
-
-       Pst_mysql_data = ^st_mysql_data;
-       st_mysql_data = record
-            rows : my_ulonglong;
-            fields : dword;
-            data : PMYSQL_ROWS;
-            alloc : MEM_ROOT;
-         end;
-       MYSQL_DATA = st_mysql_data;
-       PMYSQL_DATA = ^MYSQL_DATA;
-    { PEM key file  }
-    { PEM cert file  }
-    { PEM CA file  }
-    { PEM directory of CA-s?  }
-    { cipher to use  }
-    { if to use SSL or not  }
-    {
-       on connect, find out the replication role of the server, and
-       establish connections to all the peers
-      }
-    {
-        each call to mysql_real_query() will parse it to tell if it is a read
-        or a write, and direct it to the slave or the master
-      }
-    {
-       if set, never read from a master,only from slave, when doing
-       a read that is replication-aware
-      }
-       Pst_mysql_options = ^st_mysql_options;
-       st_mysql_options = record
-            connect_timeout : dword;
-            client_flag : dword;
-            port : dword;
-            host : Pchar;
-            init_command : Pchar;
-            user : Pchar;
-            password : Pchar;
-            unix_socket : Pchar;
-            db : Pchar;
-            my_cnf_file : Pchar;
-            my_cnf_group : Pchar;
-            charset_dir : Pchar;
-            charset_name : Pchar;
-            ssl_key : Pchar;
-            ssl_cert : Pchar;
-            ssl_ca : Pchar;
-            ssl_capath : Pchar;
-            ssl_cipher : Pchar;
-            use_ssl : my_bool;
-            compress : my_bool;
-            named_pipe : my_bool;
-            rpl_probe : my_bool;
-            rpl_parse : my_bool;
-            no_master_reads : my_bool;
-         end;
-
-       mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
-         MYSQL_OPT_NAMED_PIPE,MYSQL_INIT_COMMAND,
-         MYSQL_READ_DEFAULT_FILE,MYSQL_READ_DEFAULT_GROUP,
-         MYSQL_SET_CHARSET_DIR,MYSQL_SET_CHARSET_NAME
-         );
-
-       mysql_status = (MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
-         MYSQL_STATUS_USE_RESULT);
-
-    {
-      There are three types of queries - the ones that have to go to
-      the master, the ones that go to a slave, and the adminstrative
-      type which must happen on the pivot connectioin
-     }
-       mysql_rpl_type = (MYSQL_RPL_MASTER,MYSQL_RPL_SLAVE,MYSQL_RPL_ADMIN
-         );
-
-    { Communication parameters  }
-    { ConnectorFd for SSL  }
-    { id if insert on table with NEXTNR  }
-    { Used by mysqlshow  }
-    { Id for connection in server  }
-    { If free in mysql_close  }
-    { set to 1 if automatic reconnect  }
-    {
-       Set if this is the original connection, not a master or a slave we have
-       added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
-      }
-    { pointers to the master, and the next slave
-        connections, points to itself if lone connection   }
-    { needed for round-robin slave pick  }
-    { needed for send/read/store/use result to work correctly with replication  }
-
-       Pst_mysql = ^st_mysql;
-       st_mysql = record
-            net : NET;
-            connector_fd : gptr;
-            host : Pchar;
-            user : Pchar;
-            passwd : Pchar;
-            unix_socket : Pchar;
-            server_version : Pchar;
-            host_info : Pchar;
-            info : Pchar;
-            db : Pchar;
-            charset : Pointer;  //!! Was Pcharset_info_st;
-            fields : PMYSQL_FIELD;
-            field_alloc : MEM_ROOT;
-            affected_rows : my_ulonglong;
-            insert_id : my_ulonglong;
-            extra_info : my_ulonglong;
-            thread_id : dword;
-            packet_length : dword;
-            port : dword;
-            client_flag : dword;
-            server_capabilities : dword;
-            protocol_version : dword;
-            field_count : dword;
-            server_status : dword;
-            server_language : dword;
-            options : st_mysql_options;
-            status : mysql_status;
-            free_me : my_bool;
-            reconnect : my_bool;
-            scramble_buff : array[0..8] of char;
-            rpl_pivot : my_bool;
-            master : Pst_mysql;
-            next_slave : Pst_mysql;
-            last_used_slave : Pst_mysql;
-            last_used_con : Pst_mysql;
-         end;
-       TMYSQL = st_mysql;
-       PMYSQL = ^TMYSQL;
-    { column lengths of current row  }
-    { for unbuffered reads  }
-    { If unbuffered read  }
-    { buffer to current row  }
-    { Used by mysql_fetch_row  }
-
-       Pst_mysql_res = ^st_mysql_res;
-       st_mysql_res = record
-            row_count : my_ulonglong;
-            fields : PMYSQL_FIELD;
-            data : PMYSQL_DATA;
-            data_cursor : PMYSQL_ROWS;
-            lengths : Pdword;
-            handle : PMYSQL;
-            field_alloc : MEM_ROOT;
-            field_count : dword;
-            current_field : dword;
-            row : MYSQL_ROW;
-            current_row : MYSQL_ROW;
-            eof : my_bool;
-         end;
-       MYSQL_RES = st_mysql_res;
-       PMYSQL_RES = ^MYSQL_RES;
-
-    const
-       MAX_MYSQL_MANAGER_ERR = 256;
-       MAX_MYSQL_MANAGER_MSG = 256;
-       MANAGER_OK = 200;
-       MANAGER_INFO = 250;
-       MANAGER_ACCESS = 401;
-       MANAGER_CLIENT_ERR = 450;
-       MANAGER_INTERNAL_ERR = 500;
-
-    type
-
-       Pst_mysql_manager = ^st_mysql_manager;
-       st_mysql_manager = record
-            net : NET;
-            host : Pchar;
-            user : Pchar;
-            passwd : Pchar;
-            port : dword;
-            free_me : my_bool;
-            eof : my_bool;
-            cmd_status : longint;
-            last_errno : longint;
-            net_buf : Pchar;
-            net_buf_pos : Pchar;
-            net_data_end : Pchar;
-            net_buf_size : longint;
-            last_error : array[0..(MAX_MYSQL_MANAGER_ERR)-1] of char;
-         end;
-       MYSQL_MANAGER = st_mysql_manager;
-       PMYSQL_MANAGER = ^MYSQL_MANAGER;
-    { Set up and bring down the server; to ensure that applications will
-       work when linked against either the standard client library or the
-       embedded server library, these functions should be called.  }
-
-    function mysql_server_init(argc:longint; argv:PPchar; groups:PPchar):longint;cdecl;external External_library name 'mysql_server_init';
-
-    procedure mysql_server_end;cdecl;external External_library name 'mysql_server_end';
-
-    { Set up and bring down a thread; these function should be called
-       for each thread in an application which opens at least one MySQL
-       connection.  All uses of the connection(s) should be between these
-       function calls.  }
-    function mysql_thread_init:my_bool;cdecl;external External_library name 'mysql_thread_init';
-
-    procedure mysql_thread_end;cdecl;external External_library name 'mysql_thread_end';
-
-    { Functions to get information from the MYSQL and MYSQL_RES structures  }
-    { Should definitely be used if one uses shared libraries  }
-    function mysql_num_rows(res:PMYSQL_RES):my_ulonglong;cdecl;external External_library name 'mysql_num_rows';
-
-    function mysql_num_fields(res:PMYSQL_RES):dword;cdecl;external External_library name 'mysql_num_fields';
-
-    function mysql_eof(res:PMYSQL_RES):my_bool;cdecl;external External_library name 'mysql_eof';
-
-    function mysql_fetch_field_direct(res:PMYSQL_RES; fieldnr:dword):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_field_direct';
-
-    function mysql_fetch_fields(res:PMYSQL_RES):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_fields';
-
-    function mysql_row_tell(res:PMYSQL_RES):PMYSQL_ROWS;cdecl;external External_library name 'mysql_row_tell';
-
-    function mysql_field_tell(res:PMYSQL_RES):dword;cdecl;external External_library name 'mysql_field_tell';
-
-    function mysql_field_count(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_field_count';
-
-    function mysql_affected_rows(mysql:PMYSQL):my_ulonglong;cdecl;external External_library name 'mysql_affected_rows';
-
-    function mysql_insert_id(mysql:PMYSQL):my_ulonglong;cdecl;external External_library name 'mysql_insert_id';
-
-    function mysql_errno(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_errno';
-
-    function mysql_error(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_error';
-
-    function mysql_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_info';
-
-    function mysql_thread_id(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_thread_id';
-
-(* Const before type ignored *)
-    function mysql_character_set_name(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_character_set_name';
-
-    function mysql_init(mysql:PMYSQL):PMYSQL;cdecl;external External_library name 'mysql_init';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_ssl_set(mysql:PMYSQL; key:Pchar; cert:Pchar; ca:Pchar; capath:Pchar;
-               cipher:Pchar):longint;cdecl;external External_library name 'mysql_ssl_set';
-
-    function mysql_ssl_clear(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_ssl_clear';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_change_user(mysql:PMYSQL; user:Pchar; passwd:Pchar; db:Pchar):my_bool;cdecl;external External_library name 'mysql_change_user';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_real_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar; db:Pchar;
-               port:dword; unix_socket:Pchar; clientflag:dword):PMYSQL;cdecl;external External_library name 'mysql_real_connect';
-
-    procedure mysql_close(sock:PMYSQL);cdecl;external External_library name 'mysql_close';
-
-(* Const before type ignored *)
-    function mysql_select_db(mysql:PMYSQL; db:Pchar):longint;cdecl;external External_library name 'mysql_select_db';
-
-(* Const before type ignored *)
-    function mysql_query(mysql:PMYSQL; q:Pchar):longint;cdecl;external External_library name 'mysql_query';
-
-(* Const before type ignored *)
-    function mysql_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_send_query';
-
-    function mysql_read_query_result(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_read_query_result';
-
-(* Const before type ignored *)
-    function mysql_real_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_real_query';
-
-    { perform query on master  }
-(* Const before type ignored *)
-    function mysql_master_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_master_query';
-
-(* Const before type ignored *)
-    function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_master_send_query';
-
-    { perform query on slave  }
-(* Const before type ignored *)
-    function mysql_slave_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_slave_query';
-
-(* Const before type ignored *)
-    function mysql_slave_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_slave_send_query';
-
-    {
-      enable/disable parsing of all queries to decide if they go on master or
-      slave
-     }
-    procedure mysql_enable_rpl_parse(mysql:PMYSQL);cdecl;external External_library name 'mysql_enable_rpl_parse';
-
-    procedure mysql_disable_rpl_parse(mysql:PMYSQL);cdecl;external External_library name 'mysql_disable_rpl_parse';
-
-    { get the value of the parse flag  }
-    function mysql_rpl_parse_enabled(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_rpl_parse_enabled';
-
-    {  enable/disable reads from master  }
-    procedure mysql_enable_reads_from_master(mysql:PMYSQL);cdecl;external External_library name 'mysql_enable_reads_from_master';
-
-    procedure mysql_disable_reads_from_master(mysql:PMYSQL);cdecl;external External_library name 'mysql_disable_reads_from_master';
-
-    { get the value of the master read flag  }
-    function mysql_reads_from_master_enabled(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_reads_from_master_enabled';
-
-(* error
-enum mysql_rpl_type      mysql_rpl_query_type(const char* q, int len);
-in declaration at line 291 *)
-    { discover the master and its slaves  }
-    function mysql_rpl_probe(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_rpl_probe';
-
-    { set the master, close/free the old one, if it is not a pivot  }
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_set_master(mysql:PMYSQL; host:Pchar; port:dword; user:Pchar; passwd:Pchar):longint;cdecl;external External_library name 'mysql_set_master';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_add_slave(mysql:PMYSQL; host:Pchar; port:dword; user:Pchar; passwd:Pchar):longint;cdecl;external External_library name 'mysql_add_slave';
-
-    function mysql_shutdown(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_shutdown';
-
-    function mysql_dump_debug_info(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_dump_debug_info';
-
-    function mysql_refresh(mysql:PMYSQL; refresh_options:dword):longint;cdecl;external External_library name 'mysql_refresh';
-
-    function mysql_kill(mysql:PMYSQL; pid:dword):longint;cdecl;external External_library name 'mysql_kill';
-
-    function mysql_ping(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_ping';
-
-    function mysql_stat(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_stat';
-
-    function mysql_get_server_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_get_server_info';
-
-    function mysql_get_client_info:Pchar;cdecl;external External_library name 'mysql_get_client_info';
-
-    function mysql_get_host_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_get_host_info';
-
-    function mysql_get_proto_info(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_get_proto_info';
-
-(* Const before type ignored *)
-    function mysql_list_dbs(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_dbs';
-
-(* Const before type ignored *)
-    function mysql_list_tables(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_tables';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_list_fields(mysql:PMYSQL; table:Pchar; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_fields';
-
-    function mysql_list_processes(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_list_processes';
-
-    function mysql_store_result(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_store_result';
-
-    function mysql_use_result(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_use_result';
-
-(* Const before type ignored *)
-    function mysql_options(mysql:PMYSQL; option:mysql_option; arg:Pchar):longint;cdecl;external External_library name 'mysql_options';
-
-    procedure mysql_free_result(result:PMYSQL_RES);cdecl;external External_library name 'mysql_free_result';
-
-    procedure mysql_data_seek(result:PMYSQL_RES; offset:my_ulonglong);cdecl;external External_library name 'mysql_data_seek';
-
-    function mysql_row_seek(result:PMYSQL_RES; _para2:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;cdecl;external External_library name 'mysql_row_seek';
-
-    function mysql_field_seek(result:PMYSQL_RES; offset:MYSQL_FIELD_OFFSET):MYSQL_FIELD_OFFSET;cdecl;external External_library name 'mysql_field_seek';
-
-    function mysql_fetch_row(result:PMYSQL_RES):MYSQL_ROW;cdecl;external External_library name 'mysql_fetch_row';
-
-    function mysql_fetch_lengths(result:PMYSQL_RES):Pdword;cdecl;external External_library name 'mysql_fetch_lengths';
-
-    function mysql_fetch_field(result:PMYSQL_RES):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_field';
-
-(* Const before type ignored *)
-    function mysql_escape_string(_to:Pchar; from:Pchar; from_length:dword):dword;cdecl;external External_library name 'mysql_escape_string';
-
-(* Const before type ignored *)
-    function mysql_real_escape_string(mysql:PMYSQL; _to:Pchar; from:Pchar; length:dword):dword;cdecl;external External_library name 'mysql_real_escape_string';
-
-(* Const before type ignored *)
-    procedure mysql_debug(debug:Pchar);cdecl;external External_library name 'mysql_debug';
-
-(* Const before type ignored *)
-Type
-  TExdendBuffer = function (_para1:pointer; _to:Pchar; length:Pdword):Pchar;
-
-    function mysql_odbc_escape_string(mysql:PMYSQL; _to:Pchar; to_length:dword; from:Pchar; from_length:dword;
-               param:pointer; extend_buffer: TExdendBuffer):Pchar;cdecl;external External_library name 'mysql_odbc_escape_string';
-
-    procedure myodbc_remove_escape(mysql:PMYSQL; name:Pchar);cdecl;external External_library name 'myodbc_remove_escape';
-
-    function mysql_thread_safe:dword;cdecl;external External_library name 'mysql_thread_safe';
-
-    function mysql_manager_init(con:PMYSQL_MANAGER):PMYSQL_MANAGER;cdecl;external External_library name 'mysql_manager_init';
-
-(* Const before type ignored *)
-(* Const before type ignored *)
-(* Const before type ignored *)
-    function mysql_manager_connect(con:PMYSQL_MANAGER; host:Pchar; user:Pchar; passwd:Pchar; port:dword):PMYSQL_MANAGER;cdecl;external External_library name 'mysql_manager_connect';
-
-    procedure mysql_manager_close(con:PMYSQL_MANAGER);cdecl;external External_library name 'mysql_manager_close';
-
-(* Const before type ignored *)
-    function mysql_manager_command(con:PMYSQL_MANAGER; cmd:Pchar; cmd_len:longint):longint;cdecl;external External_library name 'mysql_manager_command';
-
-    function mysql_manager_fetch_line(con:PMYSQL_MANAGER; res_buf:Pchar; res_buf_size:longint):longint;cdecl;external External_library name 'mysql_manager_fetch_line';
-
-    { was #define dname(params) para_def_expr }
-    { argument types are unknown }
-    { return type might be wrong }
-    function mysql_reload(mysql : pmysql) : longint;
-
-    {
-      The following functions are mainly exported because of mysqlbinlog;
-      They are not for general usage
-     }
-(* Const before type ignored *)
-    function simple_command(mysql:PMYSQL; command:enum_server_command; arg:Pchar; length:dword; skipp_check:my_bool):longint;cdecl;external External_library name 'simple_command';
-
-    function net_safe_read(mysql:PMYSQL):dword;cdecl;external External_library name 'net_safe_read';
-
-
-implementation
-
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_PRI_KEY(n : longint) : Boolean;
-    begin
-       IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
-    end;
-
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_NOT_NULL(n : longint) : Boolean;
-    begin
-       IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
-    end;
-
-  { was #define dname(params) para_def_expr }
-  { argument types are unknown }
-  function IS_BLOB(n : longint) : Boolean;
-    begin
-       IS_BLOB:=(n and BLOB_FLAG)<>0;
-    end;
-
-    { was #define dname(params) para_def_expr }
-    { argument types are unknown }
-    { return type might be wrong }
-    function IS_NUM_FIELD(f : Pst_mysql_field) : Boolean;
-      begin
-         IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
-      end;
-
-    { was #define dname def_expr }
-    function MYSQL_COUNT_ERROR : longint;
-        { return type might be wrong }
-        begin
-           MYSQL_COUNT_ERROR:= not (my_ulonglong(0));
-        end;
-
-    { was #define dname(params) para_def_expr }
-    { argument types are unknown }
-    { return type might be wrong }
-    function mysql_reload(mysql : pmysql) : longint;
-      begin
-         mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
-      end;
-
-
-end.

+ 402 - 0
packages/base/mysql/mysql3.pp

@@ -0,0 +1,402 @@
+{ $Id$ }
+
+unit mysql3;
+
+{$undef use_mysql_321} { if undefined, use mysql 3.23 interface }
+
+{
+  Import unit for the mysql header files.
+
+  Translated form the original mysql.h by Michael Van Canneyt
+  ([email protected])
+
+  updated to mysql version 3.23 header files by Bernhard Steffen
+  ([email protected])
+  }
+{$r+,i+,o+}
+
+interface
+
+uses mysql3_com, mysql3_version;
+{$ifdef win32}
+Const mysqllib = 'libmysql';
+{$else}
+Const mysqllib = 'mysqlclient';
+{$endif}
+
+{$ifndef win32}
+{$linklib c}
+{$linklib m}
+{$linklib mysqlclient}
+{$endif}
+
+{$packrecords C}
+
+type
+   my_bool = byte;
+   gptr   = pchar;
+   Socket = Longint;
+   PCardinal = ^Cardinal;
+
+{$ifdef linux}
+Var
+  mysql_port : cardinal; external name 'mysql_port';
+  mysql_unix_port : pchar; external name 'mysql_unix_port';
+{$endif}
+
+{$ifdef darwin}
+Var
+  mysql_port : cardinal; external mysqllib name 'mysql_port'; 
+  mysql_unix_port : pchar; external mysqllib name 'mysql_unix_port';
+{$endif}
+
+{
+#define IS_PRI_KEY(n)   ((n) & PRI_KEY_FLAG)
+#define IS_NOT_NULL(n)  ((n) & NOT_NULL_FLAG)
+#define IS_BLOB(n)      ((n) & BLOB_FLAG)
+#define IS_NUM(t)       ((t) <= FIELD_TYPE_INT24)
+}
+Type
+st_mysql_field = record
+  name : Pchar;                 { Name of column }
+  table : pchar;                { Table of column if column was a field }
+  def: pchar;                   { Default value (set by mysql_list_fields) }
+  ftype : enum_field_types;     { Type of field. See mysql_com.h for types }
+  length : cardinal;            { Width of column }
+  max_length : cardinal;        { Max width of selected set }
+  flags : cardinal;             { Div flags }
+  decimals : cardinal;  { Number of decimals in field }
+end;
+TMYSQL_FIELD = st_mysql_field;
+PMYSQL_FIELD = ^TMYSQL_FIELD;
+
+TMYSQL_ROW = PPchar;             { return data as array of strings }
+TMYSQL_FIELD_OFFSET = cardinal;  { offset to current field }
+
+{$ifndef oldmysql}
+  my_ulonglong=qword;
+{$else}
+  my_longlong=cardinal;
+{$endif}
+
+PST_MYSQL_Rows = ^st_mysql_rows;
+st_mysql_rows = Record
+  next : pst_mysql_rows;                { list of rows }
+  Data : TMYSQL_ROW;
+end;
+TMYSQL_ROWS = st_mysql_rows;
+PMYSQL_ROWS = ^TMYSQL_ROWS;
+
+
+TMYSQL_ROW_OFFSET = PMYSQL_ROWS;        { offset to current row }
+
+st_mysql_data  = record
+  rows   : my_ulonglong;
+  fields : cardinal;
+  data : PMYSQL_ROWS;
+  alloc : TMEM_ROOT;
+end;
+
+TMYSQL_DATA = st_mysql_data;
+PMYSQL_DATA = ^TMYSQL_DATA;
+
+st_mysql_options = record
+  connect_timeout,client_flag : cardinal;
+  compress,named_pipe : my_bool;
+  port : cardinal;
+  host,init_command,user,password,unix_socket,db : pchar;
+  my_cnf_file,my_cnf_group : pchar;
+{$ifndef use_mysql_321}
+  charset_dir, charset_name : pchar;
+  use_ssl : my_bool;
+  ssl_key, ssl_cert, ssl_ca, ssl_capath : pchar;
+{$endif}
+end;
+
+{$ifndef use_mysql_321}
+mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
+                    MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND,
+                    MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
+                    MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME);
+{$endif}
+
+mysql_status = (MYSQL_STATUS_READY,
+                MYSQL_STATUS_GET_RESULT,
+                MYSQL_STATUS_USE_RESULT);
+
+{$ifndef use_mysql_321}
+(*
+charset_info_st = Record
+        number : cardinal;
+        name : pchar;
+        ctype : pointer {uchar*};
+        to_lower : pointer {uchar*};
+        to_upper : pointer {uchar*};
+        sort_order : pointer {uchar*};
+        strxfrm_multiply : cardinal;
+
+        { einige nicht näher definierte Felder }
+        a, strxfrm, strnncoll, strnxfrm, like_range : pointer;
+        mbmaxlen : cardinal;
+        ismbchar, ismbhead, mbcharlen : pointer;
+end;
+*)
+{$endif}
+
+st_mysql = Record
+  NET : TNET;                   { Communication parameters }
+{$ifndef use_mysql_321}
+  connector_fd : gptr;
+{$endif}
+  host,user,passwd,unix_socket,server_version,host_info,
+  info,db : pchar;
+  port,client_flag,server_capabilities : cardinal;
+  protocol_version : cardinal;
+  field_count : cardinal;
+{$ifndef use_mysql_321}
+  server_status : cardinal;
+{$endif}
+  thread_id : cardinal;         { Id for connection in server }
+  affected_rows : my_ulonglong;
+  insert_id : my_ulonglong;             { id if insert on table with NEXTNR }
+  extra_info : my_ulonglong;            { Used by mysqlshow }
+  packet_length : cardinal;
+  status : mysql_status;
+  fields : PMYSQL_FIELD;
+  field_alloc : TMEM_ROOT;
+  free_me : my_bool;            { If free in mysql_close }
+  reconnect : my_bool;          { set to 1 if automatic reconnect }
+  options : st_mysql_options;
+{$ifndef use_mysql_321}
+  scramble_buf : array[0..8] of char;
+  charset : pointer { struct charset_info_st};
+  server_language : cardinal;
+{$endif}
+end;
+TMYSQL = st_mysql;
+PMYSQL = ^TMYSQL;
+
+
+st_mysql_res = record
+  row_count : my_ulonglong;
+  field_count, current_field : cardinal;
+  fields :         PMYSQL_FIELD;
+  data :           PMYSQL_DATA;
+  data_cursor :    PMYSQL_ROWS;
+  field_alloc :    TMEM_ROOT;
+  row :            TMYSQL_ROW;                  { If unbuffered read }
+  current_row :    TMYSQL_ROW;          { buffer to current row }
+  lengths :        pcardinal;           { column lengths of current row }
+  handle :         PMYSQL;              { for unbuffered reads }
+  eof :            my_bool;                     { Used my mysql_fetch_row }
+end;
+TMYSQL_RES  = st_mysql_res;
+PMYSQL_RES  = ^TMYSQL_RES;
+
+
+{ Translated Macros }
+
+Function mysql_num_rows (res : PMYSQL_RES) : my_ulonglong;
+Function mysql_num_fields(res : PMYSQL_RES) : Cardinal;
+Function mysql_eof(res : PMYSQL_RES) : my_bool;
+Function mysql_fetch_field_direct(res : PMYSQL_RES; fieldnr : Cardinal) : TMYSQL_FIELD;
+Function mysql_fetch_fields(res : PMYSQL_RES) : PMYSQL_FIELD;
+Function mysql_row_tell(res : PMYSQL_RES) : PMYSQL_ROWS;
+Function mysql_field_tell(res : PMYSQL_RES) : Cardinal;
+Function mysql_affected_rows(mysql : PMYSQL): my_ulonglong;
+Function mysql_insert_id(mysql : PMYSQL): my_ulonglong;
+Function mysql_errno(mysql : PMYSQL) : Cardinal;
+Function mysql_info(mysql : PMYSQL): Pchar;
+Function mysql_reload(mysql : PMYSQL) : Longint;
+Function mysql_thread_id(mysql : PMYSQL) : Cardinal;
+Function mysql_error(mysql : PMYSQL) : pchar;
+
+{ Original functions }
+
+Function mysql_connect (mysql : PMYSQL; host,user,passwd: pchar) : PMYSQL; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_real_connect (mysql : PMYSQL; const host,user,passwd : pchar;
+                                   port : cardinal;
+                                   unix_socket : pchar;
+                                   clientflag : cardinal) : PMYSQL;{$ifdef win32}stdcall{$else}cdecl{$endif};
+
+Function mysql_close(sock : PMYSQL) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_select_db(MYSQL : PMYSQL; db : Pchar) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_query(mysql : PMYSQL; q : pchar) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_real_query(mysql : PMYSQL; q : Pchar; length : longint) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_create_db(mysql : PMYSQL; db : pchar) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_drop_db(mysql : PMYSQL; DB : Pchar) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_shutdown(mysql : PMYSQL) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_dump_debug_info(mysql : PMYSQL) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_refresh(mysql : PMYSQL; refresh_options : cardinal) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_kill(mysql : PMYSQL; pid : Cardinal) : longint; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_stat(mysql : PMYSQL) : Pchar; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_get_server_info(mysql : PMYSQL) : pchar; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_get_client_info : pchar; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_get_host_info(mysql : PMYSQL) : pchar; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_get_proto_info(mysql : PMYSQL) : Cardinal; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_list_dbs(mysql : PMYSQL;wild : Pchar) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function  mysql_list_tables(mysql : PMYSQL;Wild : Pchar) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function  mysql_list_fields(mysql : PMYSQL; table,wild : pchar) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function  mysql_list_processes(mysql : PMYSQL) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function  mysql_store_result(mysql : PMYSQL) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function  mysql_use_result(mysql : PMYSQL) : PMYSQL_RES; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Procedure mysql_free_result(res : PMYSQL_RES);{$ifdef win32}stdcall{$else}cdecl{$endif};
+Procedure mysql_data_seek(mysql : PMYSQL_RES; offs : cardinal);{$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_row_seek(mysql : PMYSQL_RES; Offs: TMYSQL_ROW_OFFSET): TMYSQL_ROW_OFFSET; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_field_seek(musql : PMYSQL_RES;offs : TMYSQL_FIELD_OFFSET): TMYSQL_FIELD_OFFSET; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_fetch_row(mysql : PMYSQL_RES) : TMYSQL_ROW; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_fetch_lengths(mysql : PMYSQL_RES) : PCardinal; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_fetch_field(handle : PMYSQL_RES) : PMYSQL_FIELD; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Function mysql_escape_string(escto,escfrom : pchar; length : Cardinal) : cardinal; {$ifdef win32}stdcall{$else}cdecl{$endif};
+Procedure mysql_debug(debug : pchar);{$ifdef win32}stdcall{$else}cdecl{$endif};
+
+implementation
+
+
+function mysql_connect (mysql : PMYSQL; host,user,passwd: pchar) : PMYSQL;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_connect';
+function mysql_real_connect (mysql : PMYSQL; const host,user,passwd : pchar;
+                                   port : cardinal;
+                                   unix_socket : pchar;
+                                   clientflag : cardinal) : PMYSQL;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib;
+
+function mysql_close(sock : PMYSQL) : longint ;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_close';
+function mysql_select_db(MYSQL : PMYSQL; db : Pchar) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_select_db';
+function mysql_query(mysql : PMYSQL; q : pchar) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_query';
+function mysql_real_query(mysql : PMYSQL; q : Pchar; length : longint) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_real_query';
+function mysql_create_db(mysql : PMYSQL; db : pchar) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_create_db';
+Function mysql_drop_db(mysql : PMYSQL; DB : Pchar) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_drop_db';
+Function mysql_shutdown(mysql : PMYSQL) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_shutdown';
+Function mysql_dump_debug_info(mysql : PMYSQL) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_dump_debug_info';
+Function mysql_refresh(mysql : PMYSQL; refresh_options : cardinal) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_refresh';
+Function mysql_kill(mysql : PMYSQL; pid : Cardinal) : longint;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_kill';
+Function mysql_stat(mysql : PMYSQL) : Pchar;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_stat';
+Function mysql_get_server_info(mysql : PMYSQL) : pchar;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_get_server_info';
+Function mysql_get_client_info : pchar;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib;
+Function mysql_get_host_info(mysql : PMYSQL) : pchar;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_get_host_info';
+Function mysql_get_proto_info(mysql : PMYSQL) : Cardinal;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_get_proto_info';
+Function mysql_list_dbs(mysql : PMYSQL;wild : Pchar) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_list_dbs';
+Function mysql_list_tables(mysql : PMYSQL;Wild : Pchar) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_list_tables';
+Function mysql_list_fields(mysql : PMYSQL; table,wild : pchar) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_list_fields';
+Function mysql_list_processes(mysql : PMYSQL) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_list_processes';
+Function mysql_store_result(mysql : PMYSQL) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_store_result';
+Function mysql_use_result(mysql : PMYSQL) : PMYSQL_RES;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_use_result';
+Procedure mysql_free_result(res : PMYSQL_RES);{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_free_result';
+Procedure mysql_data_seek(mysql : PMYSQL_RES; offs : cardinal);{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_data_seek';
+Function mysql_row_seek(mysql : PMYSQL_RES; Offs: TMYSQL_ROW_OFFSET): TMYSQL_ROW_OFFSET;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_row_seek';
+Function mysql_field_seek(musql : PMYSQL_RES;offs : TMYSQL_FIELD_OFFSET): TMYSQL_FIELD_OFFSET;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_field_seek';
+function mysql_fetch_row(mysql : PMYSQL_RES) : TMYSQL_ROW;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_fetch_row';
+function mysql_fetch_lengths(mysql : PMYSQL_RES) : PCardinal;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_fetch_lengths';
+function mysql_fetch_field(handle : PMYSQL_RES) : PMYSQL_FIELD;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_fetch_field';
+Function mysql_escape_string(escto,escfrom : pchar; length : Cardinal) : cardinal;{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_escape_string';
+Procedure mysql_debug(debug : pchar);{$ifdef win32}stdcall{$else}cdecl{$endif}; external mysqllib name 'mysql_debug';
+
+Function  mysql_error(mysql : PMYSQL) : pchar;
+
+begin
+ mysql_error:=mysql^.net.last_error
+end;
+
+Function mysql_num_rows (res : PMYSQL_RES) : my_ulonglong;
+
+begin
+  mysql_num_rows:=res^.row_count
+end;
+
+Function mysql_num_fields(res : PMYSQL_RES) : Cardinal;
+
+begin
+  mysql_num_fields:=res^.field_count
+end;
+
+Function mysql_eof(res : PMYSQL_RES) : my_bool;
+
+begin
+  mysql_eof:=res^.eof
+end;
+
+Function mysql_fetch_field_direct(res : PMYSQL_RES; fieldnr : Cardinal) : TMYSQL_FIELD;
+
+begin
+  mysql_fetch_field_direct:=res^.fields[fieldnr];
+end;
+
+Function mysql_fetch_fields(res : PMYSQL_RES) : PMYSQL_FIELD;
+
+begin
+ mysql_fetch_fields:=res^.fields
+end;
+
+Function mysql_row_tell(res : PMYSQL_RES) : PMYSQL_ROWS;
+
+begin
+  mysql_row_tell:=res^.data_cursor
+end;
+
+Function mysql_field_tell(res : PMYSQL_RES) : Cardinal;
+
+begin
+  mysql_field_tell:=res^.current_field
+end;
+
+Function mysql_affected_rows(mysql : PMYSQL): my_ulonglong;
+
+begin
+  mysql_affected_rows:=mysql^.affected_rows
+end;
+
+Function mysql_insert_id(mysql : PMYSQL): my_ulonglong;
+
+begin
+  mysql_insert_id:=mysql^.insert_id
+end;
+
+Function mysql_errno(mysql : PMYSQL) : Cardinal;
+
+begin
+  mysql_errno:=mysql^.net.last_errno
+end;
+
+Function mysql_info(mysql : PMYSQL): Pchar;
+
+begin
+  mysql_info:=mysql^.info
+end;
+
+Function mysql_reload(mysql : PMYSQL) : Longint;
+
+begin
+   mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT)
+end;
+
+Function mysql_thread_id(mysql : PMysql) : Cardinal;
+
+begin
+  mysql_thread_id:=mysql^.thread_id
+end;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.1  2004/09/28 18:38:23  michael
+  + Moved to subdir, switching to version 4.0
+
+  Revision 1.6  2004/08/05 10:36:26  olle
+    + added, on unixes, $linklib mysqlclient
+
+  Revision 1.5  2004/03/29 18:16:02  florian
+    + darwin support
+
+  Revision 1.4  2002/09/10 19:44:28  michael
+  + Changed stdcall to appropriate OS calling declaration
+
+  Revision 1.3  2002/09/07 15:42:52  peter
+    * old logs removed and tabs fixed
+
+  Revision 1.2  2002/08/26 17:52:31  michael
+  + Upgraded to 3.23
+
+}

+ 312 - 0
packages/base/mysql/mysql3_com.pp

@@ -0,0 +1,312 @@
+unit mysql3_com;
+
+{$undef use_mysql_321} { if undefined, use mysql 3.23 interface }
+
+{ updated to match version 3.23 header files of mysql by Bernhard Steffen
+  ([email protected])
+}
+
+interface
+
+uses
+  mysql3_version;
+
+{$ifdef win32}
+Const mysqllib = 'libmysql';
+{$else}
+Const mysqllib = 'mysqlclient';
+{$endif}
+
+{$ifndef win32}
+{$linklib c}
+{$linklib m}
+{$linklib mysqlclient}
+{$endif}
+{$r+,i+,o+}
+
+
+{
+ Common definition between mysql server & client
+}
+
+{$packrecords 4}
+{ Extra types introduced for pascal }
+Type
+  pbyte = ^byte;
+  pcardinal = ^cardinal;
+  Socket = longint;
+  my_bool = byte;
+
+Const
+ NAME_LEN  = 64 ;               { Field/table name length }
+ LOCAL_HOST : pchar = 'localhost' ;
+
+ MYSQL_PORT = 3306;             { Alloced by ISI for MySQL }
+ MYSQL_UNIX_ADDR  : pchar = '/tmp/mysql.sock';
+
+Type
+ enum_server_command = ( COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
+                          COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,COM_REFRESH,
+                          COM_SHUTDOWN,COM_STATISTICS,
+                          COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
+                          COM_DEBUG);
+
+Const
+ NOT_NULL_FLAG       = 1;               { Field can't be NULL }
+ PRI_KEY_FLAG        = 2;               { Field is part of a primary key }
+ UNIQUE_KEY_FLAG     = 4;               { Field is part of a unique key }
+ MULTIPLE_KEY_FLAG   = 8;               { Field is part of a key }
+ BLOB_FLAG           = 16;              { Field is a blob }
+ UNSIGNED_FLAG       = 32;              { Field is unsigned }
+ ZEROFILL_FLAG       = 64;              { Field is zerofill }
+ BINARY_FLAG         = 128;
+{ The following are only sent to new clients }
+ ENUM_FLAG           = 256;             { field is an enum }
+ AUTO_INCREMENT_FLAG = 512;             { field is a autoincrement field }
+ TIMESTAMP_FLAG      = 1024;            { Field is a timestamp }
+ PART_KEY_FLAG       = 16384;           { Intern; Part of some key }
+ GROUP_FLAG          = 32768;           { Intern group field }
+{$ifndef use_mysql_321}
+ UNIQUE_FLAG         = 65536;           { Intern: Used by sql_yacc }
+{$endif}
+
+ REFRESH_GRANT          = 1;    { Refresh grant tables }
+ REFRESH_LOG            = 2;    { Start on new log file }
+ REFRESH_TABLES         = 4;    { close all tables }
+{$ifndef use_mysql_321}
+ REFRESH_HOSTS          = 8;    { Flush host cache }
+ REFRESH_STATUS         = 16;   { Flush status variables }
+ REFRESH_THREADS        = 32;   { Flush status variables }
+ REFRESH_SLAVE          = 64;      { Reset master info and restart slave
+                                           thread }
+ REFRESH_MASTER          = 128;     { Remove all bin logs in the index
+                                           and truncate the index }
+{$endif}
+
+{$ifndef use_mysql_321}
+{ The following can't be set with mysql_refresh() }
+ REFRESH_READ_LOCK      = 16384;        { Lock tables for read }
+ REFRESH_FAST           = 32768;        { Intern flag }
+{$endif}
+
+ CLIENT_LONG_PASSWORD   = 1;    { new more secure passwords }
+ CLIENT_FOUND_ROWS      = 2;    { Found instead of affected rows }
+ CLIENT_LONG_FLAG       = 4;    { Get all column flags }
+{$ifndef use_mysql_321}
+ CLIENT_CONNECT_WITH_DB = 8;    { One can specify db on connect }
+ CLIENT_NO_SCHEMA       = 16;   { Don't allow database.table.column }
+ CLIENT_COMPRESS        = 32;   { Can use compression protocol }
+ CLIENT_ODBC            = 64;   { Odbc client }
+ CLIENT_LOCAL_FILES     = 128;  { Can use LOAD DATA LOCAL }
+ CLIENT_IGNORE_SPACE    = 256;  { Ignore spaces before '(' }
+ CLIENT_CHANGE_USER     = 512;  { Support the mysql_change_user() }
+ CLIENT_INTERACTIVE     = 1024; { This is an interactive client }
+ CLIENT_SSL             = 2048;     { Switch to SSL after handshake }
+ CLIENT_IGNORE_SIGPIPE  = 4096;     { IGNORE sigpipes }
+ CLIENT_TRANSACTIONS    = 8192; { Client knows about transactions }
+
+ SERVER_STATUS_IN_TRANS  = 1;   { Transaction has started }
+ SERVER_STATUS_AUTOCOMMIT = 2;  { Server in auto_commit mode }
+{$endif}
+
+ MYSQL_ERRMSG_SIZE      = 200;
+ NET_READ_TIMEOUT       = 30;           { Timeout on read }
+ NET_WRITE_TIMEOUT      = 60;           { Timeout on write }
+ NET_WAIT_TIMEOUT       = 8*60*60;      { Wait for new query }
+
+Type
+pst_used_mem = ^st_used_mem;
+st_used_mem  = record                           { struct for once_alloc }
+  next : pst_used_mem;                          { Next block in use }
+  left : cardinal;                              { memory left in block  }
+  size : cardinal;                              { size of block }
+end;
+
+TUSED_MEM = st_used_mem;
+PUSED_MEM = ^TUSED_MEM;
+
+TError_handler = Procedure;
+
+st_mem_root =  record
+  free : PUSED_MEM;
+  used : PUSED_MEM;
+{$ifndef use_mysql_321}
+  pre_alloc: PUSED_MEM;
+{$endif use_mysql_321}
+  min_malloc : cardinal;
+  block_size : cardinal;
+  error_handler : TERROR_Handler;
+end;
+TMEM_ROOT = st_mem_root;
+PMEM_ROOT = ^TMEM_ROOT;
+
+Type
+net_type = (NET_TYPE_TCPIP, NET_TYPE_SOCKET, NETTYPE_NAMEDPIPE);
+st_net  = record
+  nettype : net_type; //DT
+  fd : Socket;
+  fcntl : Longint;
+  buff,buff_end,write_pos,read_pos : Pchar;//DT
+  last_error : array [0..MYSQL_ERRMSG_SIZE-1] of char;
+  last_errno,max_packet,timeout,pkt_nr : Cardinal;
+  error,return_errno : my_bool;
+  compress : my_bool; //DT
+{$ifndef use_mysql_321}
+  no_send_ok : my_bool;
+{$endif}
+  remain_in_buf,r_length, buf_length, where_b : cardinal; //DT
+{$ifndef use_mysql_321}
+  return_status : ^Cardinal;
+  reading_or_writing : my_bool;
+{$else}
+  more : my_bool;//DT
+{$endif}
+  save_char : char; //DT
+end;
+TNET = st_net;
+PNET = ^TNET;
+
+Const
+  packet_error : longint = -1;
+
+Type
+ enum_field_types = ( FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
+                        FIELD_TYPE_SHORT,  FIELD_TYPE_LONG,
+                        FIELD_TYPE_FLOAT,  FIELD_TYPE_DOUBLE,
+                        FIELD_TYPE_NULL,   FIELD_TYPE_TIMESTAMP,
+                        FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,
+                        FIELD_TYPE_DATE,   FIELD_TYPE_TIME,
+                        FIELD_TYPE_DATETIME,
+{$ifndef use_mysql_321}
+                        FIELD_TYPE_YEAR,
+                        FIELD_TYPE_NEWDATE,
+{$endif}
+                        FIELD_TYPE_ENUM := 247,
+                        FIELD_TYPE_SET := 248,
+                        FIELD_TYPE_TINY_BLOB := 249,
+                        FIELD_TYPE_MEDIUM_BLOB := 250,
+                        FIELD_TYPE_LONG_BLOB :=251,
+                        FIELD_TYPE_BLOB :=252,
+                        FIELD_TYPE_VAR_STRING :=253,
+                        FIELD_TYPE_STRING:=254);
+
+Const
+FIELD_TYPE_CHAR = FIELD_TYPE_TINY;              { For compability }
+FIELD_TYPE_INTERVAL = FIELD_TYPE_ENUM;          { For compability }
+
+Procedure sql_free (root : PMEM_ROOT);stdcall;
+Procedure init_alloc_root (root: PMEM_ROOT;block_size : Cardinal);stdcall;
+Function sql_alloc_first_block(root : PMEM_ROOT) : my_bool;stdcall;
+Function sql_alloc_root(mem_root : PMEM_ROOT;len : Cardinal) : longint;stdcall;
+Function sql_strdup_root(root : PMEM_ROOT;st : pchar) : pchar;stdcall;
+Function sql_memdup_root(root: PMEM_ROOT;st : pchar; len : Cardinal): longint;stdcall;
+
+{
+extern unsigned long max_allowed_packet;
+extern unsigned long net_buffer_length;
+}
+
+{
+#define net_new_transaction(net) ((net)->pkt_nr=0)
+}
+
+Function  my_net_init(net :PNET; fd : Socket) : Longint;stdcall;
+procedure net_end(net : PNET);stdcall;
+Procedure net_clear(net : PNET);stdcall;
+Function  net_flush(net : PNET) : longint;stdcall;
+Function  my_net_write(net : PNET;packet : pbyte;len : cardinal) : longint;stdcall;
+Function  net_write_command(net : PNET; command : char;packet : pbyte;len : cardinal) : longint;stdcall;
+Function  net_real_write(net : PNET;packet : pbyte; len : Cardinal) : longint;stdcall;
+Function  my_net_read(net : PNET) : Cardinal;stdcall;
+
+Type
+TRand_struct  = record
+  seed,seed2,max_value : Cardinal;
+  max_value_dbl : double;
+end;
+PRand_struct = ^TRand_struct;
+
+{ The following is for user defined functions }
+
+Item_result = (STRING_RESULT,REAL_RESULT,INT_RESULT);
+
+st_udf_args = record
+  arg_count : cardinal;                 { Number of arguments }
+  arg_type : ^Item_result;              { Pointer to item_results }
+  args : ppchar;                        { Pointer to argument }
+  lengths : PCardinal;                  { Length of string arguments }
+end;
+TUDF_ARGS = st_udf_args;
+PUDPF_ARGS = ^TUDF_ARGS;
+
+  { This holds information about the result }
+
+st_udf_init = record
+  maybe_null : my_bool;                 { 1 if function can return NULL }
+  decimals : cardinal;                  { for real functions }
+  max_length : Cardinal;                { For string functions }
+  ptr : PChar;                          { free pointer for function data }
+end;
+TUDF_INIT = st_udf_init;
+PUDF_INIT = TUDF_INIT;
+
+  { Prototypes to password functions }
+
+procedure randominit(rand : Prand_struct; seed1,seed2 : Cardinal);stdcall;
+Function  rnd(rand : Prand_struct) : double;stdcall;
+procedure make_scrambled_password(toarg, passwd : Pchar);stdcall;
+procedure get_salt_from_password(res : pcardinal; password : pchar);stdcall;
+procedure scramble(toarg,message,password : pchar; old_ver : my_bool);stdcall;
+function  check_scramble(scramble,message : pchar; salt : cardinal;old_ver:my_bool) : my_bool;stdcall;
+function  get_tty_password(opt_message:  pchar) : pchar;stdcall;
+
+{
+#define NULL_LENGTH ((unsigned long) ~0) { For net_store_length }
+}
+
+implementation
+
+Procedure sql_free (root : PMEM_ROOT);stdcall;external;
+Procedure init_alloc_root (root: PMEM_ROOT;block_size : Cardinal);stdcall;external;
+Function sql_alloc_first_block(root : PMEM_ROOT) : my_bool;stdcall;external;
+Function sql_alloc_root(mem_root : PMEM_ROOT;len : Cardinal) : longint;stdcall;external;
+Function sql_strdup_root(root : PMEM_ROOT;st : pchar) : pchar;stdcall;external;
+Function sql_memdup_root(root: PMEM_ROOT;st : pchar; len : Cardinal) : longint;stdcall;external;
+Function  my_net_init(net :PNET; fd : Socket) : Longint;stdcall;external;
+procedure net_end(net : PNET);stdcall;external;
+Procedure net_clear(net : PNET);stdcall;external;
+Function  net_flush(net : PNET) : longint;stdcall;external;
+Function  my_net_write(net : PNET;packet : pbyte;len : cardinal) : longint;stdcall;external;
+Function  net_write_command(net : PNET; command : char;packet : pbyte;len : cardinal) : longint;stdcall;external;
+Function  net_real_write(net : PNET;packet : pbyte; len : Cardinal) : longint;stdcall;external;
+Function  my_net_read(net : PNET) : Cardinal;stdcall;external;
+procedure randominit(rand : Prand_struct; seed1,seed2 : Cardinal);stdcall;external;
+Function  rnd(rand : Prand_struct) : double;stdcall;external;
+procedure make_scrambled_password(toarg, passwd : Pchar);stdcall;external;
+procedure get_salt_from_password(res : pcardinal; password : pchar);stdcall;external;
+procedure scramble(toarg,message,password : pchar; old_ver : my_bool);stdcall;external;
+function  check_scramble(scramble,message : pchar; salt : cardinal;old_ver:my_bool) : my_bool;stdcall;external;
+function  get_tty_password(opt_message:  pchar) : pchar;stdcall;external;
+
+end.
+  $Log$
+  Revision 1.1  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.1  2004/09/28 18:38:23  michael
+  + Moved to subdir, switching to version 4.0
+
+  Revision 1.5  2004/08/05 10:36:25  olle
+    + added, on unixes, $linklib mysqlclient
+
+  Revision 1.4  2004/07/01 20:04:17  jonas
+    * fixed st_mem_root record (only changed for 3.23, may still be wrong for
+      3.21)
+
+  Revision 1.3  2002/09/07 15:42:52  peter
+    * old logs removed and tabs fixed
+
+  Revision 1.2  2002/08/26 17:52:31  michael
+  + Upgraded to 3.23
+
+}

+ 46 - 0
packages/base/mysql/mysql3_version.pp

@@ -0,0 +1,46 @@
+unit mysql3_version;
+
+{$undef use_mysql_321} { if undefined, use mysql 3.23 interface }
+
+
+{
+  Translated from mysql_version.h by Michael Van Canneyt
+  ([email protected])
+
+  updated to match version 3.23 header files of mysql by Bernhard Steffen
+  ([email protected])
+}
+
+interface
+
+
+{ Version numbers for protocol & mysqld }
+Const
+
+{$ifdef use_mysql_321}
+  MYSQL_SERVER_VERSION : pchar ='3.21.28-gamma';
+  FRM_VER = 6;
+  MYSQL_VERSION_ID =32128;
+{$else}
+  MYSQL_SERVER_VERSION : pchar ='3.23.34';
+  FRM_VER = 6; { ??? }
+  MYSQL_VERSION_ID =32334;
+{$endif}
+
+implementation
+
+end.
+  $Log$
+  Revision 1.1  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.1  2004/09/28 18:38:23  michael
+  + Moved to subdir, switching to version 4.0
+
+  Revision 1.3  2002/09/07 15:42:53  peter
+    * old logs removed and tabs fixed
+
+  Revision 1.2  2002/08/26 17:52:31  michael
+  + Upgraded to 3.23
+
+}

+ 409 - 0
packages/base/mysql/mysql4.pp

@@ -0,0 +1,409 @@
+unit mysql4;
+interface
+
+uses mysql4_com;
+
+{
+  Automatically converted by H2Pas 0.99.15 from mysql.ph
+  The following command line parameters were used:
+    -p
+    -D
+    -l
+    mysqlclient
+    mysql.ph
+}
+
+  const
+    External_library='mysqlclient'; {Setup as you need}
+
+  { Pointers to basic pascal types, inserted by h2pas conversion program.}
+  Type
+    PLongint  = ^Longint;
+    PSmallInt = ^SmallInt;
+    PByte     = ^Byte;
+    PWord     = ^Word;
+    PDWord    = ^DWord;
+    PDouble   = ^Double;
+
+{$PACKRECORDS C}
+
+  { Copyright (C) 2000 MySQL AB
+
+     This program is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 2 of the License, or
+     (at your option) any later version.
+
+     This program is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with this program; if not, write to the Free Software
+     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  }
+
+type
+
+  Pmy_bool = ^my_bool;
+  my_bool = char;
+
+  Pgptr = ^gptr;
+  gptr = char;
+
+  Pmy_socket = ^my_socket;
+  my_socket = longint;
+
+var
+  mysql_port : dword;cvar;external;
+  mysql_unix_port : Pchar;cvar;external;
+
+type
+  Pst_mysql_field = ^st_mysql_field;
+  st_mysql_field = record
+       name : Pchar;
+       table : Pchar;
+       org_table : Pchar;
+       db : Pchar;
+       def : Pchar;
+       length : dword;
+       max_length : dword;
+       flags : dword;
+       decimals : dword;
+       ftype : enum_field_types;
+    end;
+  MYSQL_FIELD = st_mysql_field;
+  TMYSQL_FIELD = MYSQL_FIELD;
+  PMYSQL_FIELD = ^MYSQL_FIELD;
+
+  function IS_PRI_KEY(n : longint) : Boolean;
+  function IS_NOT_NULL(n : longint) :  Boolean;
+  function IS_BLOB(n : longint) : boolean;
+
+type
+  MYSQL_ROW = ppchar;
+  PMYSQL_ROW = ^MYSQL_ROW;
+  TMYSQL_ROW = MYSQL_ROW;
+
+  PMYSQL_FIELD_OFFSET = ^MYSQL_FIELD_OFFSET;
+  MYSQL_FIELD_OFFSET = dword;
+
+  Pmy_ulonglong = ^my_ulonglong;
+  my_ulonglong = qword;
+
+  function MYSQL_COUNT_ERROR : longint;
+
+type
+  Pst_mysql_rows = ^st_mysql_rows;
+  st_mysql_rows = record
+     next : Pst_mysql_rows;
+     data : MYSQL_ROW;
+  end;
+  MYSQL_ROWS = st_mysql_rows;
+  TMYSQL_ROWS = MYSQL_ROWS;
+  PMYSQL_ROWS = ^MYSQL_ROWS;
+
+  MYSQL_ROW_OFFSET = MYSQL_ROWS;
+  PMYSQL_ROW_OFFSET = ^MYSQL_ROW_OFFSET;
+
+  Pst_used_mem = ^st_used_mem;
+  st_used_mem = record
+    next : Pst_used_mem;
+    left : dword;
+    size : dword;
+  end;
+
+  USED_MEM  = st_used_mem;
+  TUSED_MEM = USED_MEM;
+  PUSED_MEM = ^USED_MEM;
+
+  Pst_mem_root = ^st_mem_root;
+  st_mem_root = record
+       free : PUSED_MEM;
+       used : PUSED_MEM;
+       pre_alloc : PUSED_MEM;
+       min_malloc : dword;
+       block_size : dword;
+       block_num : dword;
+       first_block_usage : dword;
+       error_handler : procedure ;cdecl;
+    end;
+  MEM_ROOT = st_mem_root;
+  TMEM_ROOT = MEM_ROOT;
+  PMEM_ROOT = ^MEM_ROOT;
+
+  Pst_mysql_data = ^st_mysql_data;
+  st_mysql_data = record
+       rows : my_ulonglong;
+       fields : dword;
+       data : PMYSQL_ROWS;
+       alloc : MEM_ROOT;
+    end;
+  MYSQL_DATA = st_mysql_data;
+  TMYSQL_DATA = MYSQL_DATA;
+  PMYSQL_DATA = ^MYSQL_DATA;
+
+  Pst_mysql_options = ^st_mysql_options;
+  st_mysql_options = record
+       connect_timeout : dword;
+       client_flag : dword;
+       port : dword;
+       host : Pchar;
+       init_command : Pchar;
+       user : Pchar;
+       password : Pchar;
+       unix_socket : Pchar;
+       db : Pchar;
+       my_cnf_file : Pchar;
+       my_cnf_group : Pchar;
+       charset_dir : Pchar;
+       charset_name : Pchar;
+       ssl_key : Pchar;
+       ssl_cert : Pchar;
+       ssl_ca : Pchar;
+       ssl_capath : Pchar;
+       ssl_cipher : Pchar;
+       max_allowed_packet : Cardinal;
+       use_ssl : my_bool;
+       compress : my_bool;
+       named_pipe : my_bool;
+       rpl_probe : my_bool;
+       rpl_parse : my_bool;
+       no_master_reads : my_bool;
+    end;
+  TMYSQL_OPTIONS = st_mysql_options;
+  PTMYSQL_OPTIONS = ^TMYSQL_OPTIONS;
+  
+  mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
+    MYSQL_OPT_NAMED_PIPE,MYSQL_INIT_COMMAND,
+    MYSQL_READ_DEFAULT_FILE,MYSQL_READ_DEFAULT_GROUP,
+    MYSQL_SET_CHARSET_DIR,MYSQL_SET_CHARSET_NAME
+    );
+
+  mysql_status = (MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
+    MYSQL_STATUS_USE_RESULT);
+
+  mysql_rpl_type = (MYSQL_RPL_MASTER,MYSQL_RPL_SLAVE,MYSQL_RPL_ADMIN );
+
+  Pst_mysql = ^st_mysql;
+  st_mysql = record
+       net : NET;
+       connector_fd : gptr;
+       host : Pchar;
+       user : Pchar;
+       passwd : Pchar;
+       unix_socket : Pchar;
+       server_version : Pchar;
+       host_info : Pchar;
+       info : Pchar;
+       db : Pchar;
+       charset : Pointer;  //!! Was Pcharset_info_st;
+       fields : PMYSQL_FIELD;
+       field_alloc : MEM_ROOT;
+       affected_rows : my_ulonglong;
+       insert_id : my_ulonglong;
+       extra_info : my_ulonglong;
+       thread_id : dword;
+       packet_length : dword;
+       port : dword;
+       client_flag : dword;
+       server_capabilities : dword;
+       protocol_version : dword;
+       field_count : dword;
+       server_status : dword;
+       server_language : dword;
+       options : st_mysql_options;
+       status : mysql_status;
+       free_me : my_bool;
+       reconnect : my_bool;
+       scramble_buff : array[0..8] of char;
+       rpl_pivot : my_bool;
+       master : Pst_mysql;
+       next_slave : Pst_mysql;
+       last_used_slave : Pst_mysql;
+       last_used_con : Pst_mysql;
+    end;
+  TMYSQL = st_mysql;
+  PMYSQL = ^TMYSQL;
+
+  Pst_mysql_res = ^st_mysql_res;
+  st_mysql_res = record
+       row_count : my_ulonglong;
+       fields : PMYSQL_FIELD;
+       data : PMYSQL_DATA;
+       data_cursor : PMYSQL_ROWS;
+       lengths : Pdword;
+       handle : PMYSQL;
+       field_alloc : MEM_ROOT;
+       field_count : dword;
+       current_field : dword;
+       row : MYSQL_ROW;
+       current_row : MYSQL_ROW;
+       eof : my_bool;
+    end;
+  MYSQL_RES = st_mysql_res;
+  TMYSQL_RES = MYSQL_RES;
+  PMYSQL_RES = ^MYSQL_RES;
+
+const
+  MAX_MYSQL_MANAGER_ERR = 256;
+  MAX_MYSQL_MANAGER_MSG = 256;
+  MANAGER_OK = 200;
+  MANAGER_INFO = 250;
+  MANAGER_ACCESS = 401;
+  MANAGER_CLIENT_ERR = 450;
+  MANAGER_INTERNAL_ERR = 500;
+
+type
+
+  Pst_mysql_manager = ^st_mysql_manager;
+  st_mysql_manager = record
+       net : NET;
+       host : Pchar;
+       user : Pchar;
+       passwd : Pchar;
+       port : dword;
+       free_me : my_bool;
+       eof : my_bool;
+       cmd_status : longint;
+       last_errno : longint;
+       net_buf : Pchar;
+       net_buf_pos : Pchar;
+       net_data_end : Pchar;
+       net_buf_size : longint;
+       last_error : array[0..(MAX_MYSQL_MANAGER_ERR)-1] of char;
+    end;
+  MYSQL_MANAGER = st_mysql_manager;
+  PMYSQL_MANAGER = ^MYSQL_MANAGER;
+
+function mysql_server_init(argc:longint; argv:PPchar; groups:PPchar):longint;cdecl;external External_library name 'mysql_server_init';
+procedure mysql_server_end;cdecl;external External_library name 'mysql_server_end';
+function mysql_thread_init:my_bool;cdecl;external External_library name 'mysql_thread_init';
+procedure mysql_thread_end;cdecl;external External_library name 'mysql_thread_end';
+function mysql_num_rows(res:PMYSQL_RES):my_ulonglong;cdecl;external External_library name 'mysql_num_rows';
+function mysql_num_fields(res:PMYSQL_RES):dword;cdecl;external External_library name 'mysql_num_fields';
+function mysql_eof(res:PMYSQL_RES):my_bool;cdecl;external External_library name 'mysql_eof';
+function mysql_fetch_field_direct(res:PMYSQL_RES; fieldnr:dword):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_field_direct';
+function mysql_fetch_fields(res:PMYSQL_RES):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_fields';
+function mysql_row_tell(res:PMYSQL_RES):PMYSQL_ROWS;cdecl;external External_library name 'mysql_row_tell';
+function mysql_field_tell(res:PMYSQL_RES):dword;cdecl;external External_library name 'mysql_field_tell';
+function mysql_field_count(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_field_count';
+function mysql_affected_rows(mysql:PMYSQL):my_ulonglong;cdecl;external External_library name 'mysql_affected_rows';
+function mysql_insert_id(mysql:PMYSQL):my_ulonglong;cdecl;external External_library name 'mysql_insert_id';
+function mysql_errno(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_errno';
+function mysql_error(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_error';
+function mysql_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_info';
+function mysql_thread_id(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_thread_id';
+function mysql_character_set_name(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_character_set_name';
+function mysql_init(mysql:PMYSQL):PMYSQL;cdecl;external External_library name 'mysql_init';
+function mysql_ssl_set(mysql:PMYSQL; key:Pchar; cert:Pchar; ca:Pchar; capath:Pchar;
+           cipher:Pchar):longint;cdecl;external External_library name 'mysql_ssl_set';
+function mysql_ssl_clear(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_ssl_clear';
+function mysql_change_user(mysql:PMYSQL; user:Pchar; passwd:Pchar; db:Pchar):my_bool;cdecl;external External_library name 'mysql_change_user';
+function mysql_real_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar; db:Pchar;
+           port:dword; unix_socket:Pchar; clientflag:dword):PMYSQL;cdecl;external External_library name 'mysql_real_connect';
+procedure mysql_close(sock:PMYSQL);cdecl;external External_library name 'mysql_close';
+function mysql_select_db(mysql:PMYSQL; db:Pchar):longint;cdecl;external External_library name 'mysql_select_db';
+function mysql_query(mysql:PMYSQL; q:Pchar):longint;cdecl;external External_library name 'mysql_query';
+function mysql_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_send_query';
+function mysql_read_query_result(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_read_query_result';
+function mysql_real_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_real_query';
+function mysql_master_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_master_query';
+function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_master_send_query';
+function mysql_slave_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_slave_query';
+function mysql_slave_send_query(mysql:PMYSQL; q:Pchar; length:dword):longint;cdecl;external External_library name 'mysql_slave_send_query';
+
+procedure mysql_enable_rpl_parse(mysql:PMYSQL);cdecl;external External_library name 'mysql_enable_rpl_parse';
+procedure mysql_disable_rpl_parse(mysql:PMYSQL);cdecl;external External_library name 'mysql_disable_rpl_parse';
+function mysql_rpl_parse_enabled(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_rpl_parse_enabled';
+procedure mysql_enable_reads_from_master(mysql:PMYSQL);cdecl;external External_library name 'mysql_enable_reads_from_master';
+procedure mysql_disable_reads_from_master(mysql:PMYSQL);cdecl;external External_library name 'mysql_disable_reads_from_master';
+function mysql_reads_from_master_enabled(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_reads_from_master_enabled';
+(* error
+enum mysql_rpl_type      mysql_rpl_query_type(const char* q, int len);
+in declaration at line 291 *)
+
+function mysql_rpl_probe(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_rpl_probe';
+function mysql_set_master(mysql:PMYSQL; host:Pchar; port:dword; user:Pchar; passwd:Pchar):longint;cdecl;external External_library name 'mysql_set_master';
+function mysql_add_slave(mysql:PMYSQL; host:Pchar; port:dword; user:Pchar; passwd:Pchar):longint;cdecl;external External_library name 'mysql_add_slave';
+function mysql_shutdown(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_shutdown';
+function mysql_dump_debug_info(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_dump_debug_info';
+function mysql_refresh(mysql:PMYSQL; refresh_options:dword):longint;cdecl;external External_library name 'mysql_refresh';
+function mysql_kill(mysql:PMYSQL; pid:dword):longint;cdecl;external External_library name 'mysql_kill';
+function mysql_ping(mysql:PMYSQL):longint;cdecl;external External_library name 'mysql_ping';
+function mysql_stat(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_stat';
+function mysql_get_server_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_get_server_info';
+function mysql_get_client_info:Pchar;cdecl;external External_library name 'mysql_get_client_info';
+function mysql_get_host_info(mysql:PMYSQL):Pchar;cdecl;external External_library name 'mysql_get_host_info';
+function mysql_get_proto_info(mysql:PMYSQL):dword;cdecl;external External_library name 'mysql_get_proto_info';
+function mysql_list_dbs(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_dbs';
+function mysql_list_tables(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_tables';
+function mysql_list_fields(mysql:PMYSQL; table:Pchar; wild:Pchar):PMYSQL_RES;cdecl;external External_library name 'mysql_list_fields';
+function mysql_list_processes(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_list_processes';
+function mysql_store_result(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_store_result';
+function mysql_use_result(mysql:PMYSQL):PMYSQL_RES;cdecl;external External_library name 'mysql_use_result';
+function mysql_options(mysql:PMYSQL; option:mysql_option; arg:Pchar):longint;cdecl;external External_library name 'mysql_options';
+procedure mysql_free_result(result:PMYSQL_RES);cdecl;external External_library name 'mysql_free_result';
+procedure mysql_data_seek(result:PMYSQL_RES; offset:my_ulonglong);cdecl;external External_library name 'mysql_data_seek';
+function mysql_row_seek(result:PMYSQL_RES; _para2:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;cdecl;external External_library name 'mysql_row_seek';
+function mysql_field_seek(result:PMYSQL_RES; offset:MYSQL_FIELD_OFFSET):MYSQL_FIELD_OFFSET;cdecl;external External_library name 'mysql_field_seek';
+function mysql_fetch_row(result:PMYSQL_RES):MYSQL_ROW;cdecl;external External_library name 'mysql_fetch_row';
+function mysql_fetch_lengths(result:PMYSQL_RES):Pdword;cdecl;external External_library name 'mysql_fetch_lengths';
+function mysql_fetch_field(result:PMYSQL_RES):PMYSQL_FIELD;cdecl;external External_library name 'mysql_fetch_field';
+function mysql_escape_string(_to:Pchar; from:Pchar; from_length:dword):dword;cdecl;external External_library name 'mysql_escape_string';
+function mysql_real_escape_string(mysql:PMYSQL; _to:Pchar; from:Pchar; length:dword):dword;cdecl;external External_library name 'mysql_real_escape_string';
+procedure mysql_debug(debug:Pchar);cdecl;external External_library name 'mysql_debug';
+
+Type
+  TExdendBuffer = function (_para1:pointer; _to:Pchar; length:Pdword):Pchar;
+    function mysql_odbc_escape_string(mysql:PMYSQL; _to:Pchar; to_length:dword; from:Pchar; from_length:dword;
+               param:pointer; extend_buffer: TExdendBuffer):Pchar;cdecl;external External_library name 'mysql_odbc_escape_string';
+    procedure myodbc_remove_escape(mysql:PMYSQL; name:Pchar);cdecl;external External_library name 'myodbc_remove_escape';
+    function mysql_thread_safe:dword;cdecl;external External_library name 'mysql_thread_safe';
+    function mysql_manager_init(con:PMYSQL_MANAGER):PMYSQL_MANAGER;cdecl;external External_library name 'mysql_manager_init';
+    function mysql_manager_connect(con:PMYSQL_MANAGER; host:Pchar; user:Pchar; passwd:Pchar; port:dword):PMYSQL_MANAGER;cdecl;external External_library name 'mysql_manager_connect';
+    procedure mysql_manager_close(con:PMYSQL_MANAGER);cdecl;external External_library name 'mysql_manager_close';
+    function mysql_manager_command(con:PMYSQL_MANAGER; cmd:Pchar; cmd_len:longint):longint;cdecl;external External_library name 'mysql_manager_command';
+    function mysql_manager_fetch_line(con:PMYSQL_MANAGER; res_buf:Pchar; res_buf_size:longint):longint;cdecl;external External_library name 'mysql_manager_fetch_line';
+    function mysql_reload(mysql : pmysql) : longint;
+    function simple_command(mysql:PMYSQL; command:enum_server_command; arg:Pchar; length:dword; skipp_check:my_bool):longint;cdecl;external External_library name 'simple_command';
+    function net_safe_read(mysql:PMYSQL):dword;cdecl;external External_library name 'net_safe_read';
+
+implementation
+
+function IS_PRI_KEY(n : longint) : Boolean;
+begin
+   IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
+end;
+
+
+function IS_NOT_NULL(n : longint) : Boolean;
+begin
+   IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
+end;
+
+
+function IS_BLOB(n : longint) : Boolean;
+begin
+   IS_BLOB:=(n and BLOB_FLAG)<>0;
+end;
+
+
+function IS_NUM_FIELD(f : Pst_mysql_field) : Boolean;
+begin
+   IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
+end;
+
+
+function MYSQL_COUNT_ERROR : longint;
+begin
+  MYSQL_COUNT_ERROR:= not (my_ulonglong(0));
+end;
+
+
+function mysql_reload(mysql : pmysql) : longint;
+begin
+  mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
+end;
+
+end.

+ 128 - 183
packages/base/mysql/mysql_com.pp → packages/base/mysql/mysql4_com.pp

@@ -1,4 +1,4 @@
-unit mysql_com;
+unit mysql4_com;
 interface
 
 {
@@ -11,17 +11,17 @@ interface
     mysql_com.ph
 }
 
-  const
-    External_library='mysqlclient'; {Setup as you need}
+const
+  External_library='mysqlclient'; {Setup as you need}
 
-  { Pointers to basic pascal types, inserted by h2pas conversion program.}
-  Type
-    PLongint  = ^Longint;
-    PSmallInt = ^SmallInt;
-    PByte     = ^Byte;
-    PWord     = ^Word;
-    PDWord    = ^DWord;
-    PDouble   = ^Double;
+{ Pointers to basic pascal types, inserted by h2pas conversion program.}
+Type
+  PLongint  = ^Longint;
+  PSmallInt = ^SmallInt;
+  PByte     = ^Byte;
+  PWord     = ^Word;
+  PDWord    = ^DWord;
+  PDouble   = ^Double;
 
 { Extra manually added types }
     PVIO = Pointer;
@@ -53,178 +53,123 @@ interface
    }
   { Field/table name length  }
 
-  const
-     NAME_LEN = 64;
-     HOSTNAME_LENGTH = 60;
-     USERNAME_LENGTH = 16;
-     SERVER_VERSION_LENGTH = 60;
-     LOCAL_HOST = 'localhost';
-     LOCAL_HOST_NAMEDPIPE = '.';
-
-  type
-     enum_server_command = (COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
-       COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,
-       COM_REFRESH,COM_SHUTDOWN,COM_STATISTICS,
-       COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
-       COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT,
-       COM_CHANGE_USER,COM_BINLOG_DUMP,COM_TABLE_DUMP,
-       COM_CONNECT_OUT,COM_REGISTER_SLAVE);
-
-  { Field can't be NULL  }
-
-  const
-     NOT_NULL_FLAG = 1;
-  { Field is part of a primary key  }
-     PRI_KEY_FLAG = 2;
-  { Field is part of a unique key  }
-     UNIQUE_KEY_FLAG = 4;
-  { Field is part of a key  }
-     MULTIPLE_KEY_FLAG = 8;
-  { Field is a blob  }
-     BLOB_FLAG = 16;
-  { Field is unsigned  }
-     UNSIGNED_FLAG = 32;
-  { Field is zerofill  }
-     ZEROFILL_FLAG = 64;
-     BINARY_FLAG = 128;
-  { The following are only sent to new clients  }
-  { field is an enum  }
-     ENUM_FLAG = 256;
-  { field is a autoincrement field  }
-     AUTO_INCREMENT_FLAG = 512;
-  { Field is a timestamp  }
-     TIMESTAMP_FLAG = 1024;
-  { field is a set  }
-     SET_FLAG = 2048;
-  { Field is num (for clients)  }
-     NUM_FLAG = 32768;
-  { Intern; Part of some key  }
-     PART_KEY_FLAG = 16384;
-  { Intern: Group field  }
-     GROUP_FLAG = 32768;
-  { Intern: Used by sql_yacc  }
-     UNIQUE_FLAG = 65536;
-  { Refresh grant tables  }
-     REFRESH_GRANT = 1;
-  { Start on new log file  }
-     REFRESH_LOG = 2;
-  { close all tables  }
-     REFRESH_TABLES = 4;
-  { Flush host cache  }
-     REFRESH_HOSTS = 8;
-  { Flush status variables  }
-     REFRESH_STATUS = 16;
-  { Flush status variables  }
-     REFRESH_THREADS = 32;
-  { Reset master info and restart slave
-                                           thread  }
-     REFRESH_SLAVE = 64;
-  { Remove all bin logs in the index
-                                           and truncate the index  }
-     REFRESH_MASTER = 128;
-  { The following can't be set with mysql_refresh()  }
-  { Lock tables for read  }
-     REFRESH_READ_LOCK = 16384;
-  { Intern flag  }
-     REFRESH_FAST = 32768;
-  { RESET (remove all queries) from query cache  }
-     REFRESH_QUERY_CACHE = 65536;
-  { pack query cache  }
-     REFRESH_QUERY_CACHE_FREE = $20000;
-     REFRESH_DES_KEY_FILE = $40000;
-  { new more secure passwords  }
-     CLIENT_LONG_PASSWORD = 1;
-  { Found instead of affected rows  }
-     CLIENT_FOUND_ROWS = 2;
-  { Get all column flags  }
-     CLIENT_LONG_FLAG = 4;
-  { One can specify db on connect  }
-     CLIENT_CONNECT_WITH_DB = 8;
-  { Don't allow database.table.column  }
-     CLIENT_NO_SCHEMA = 16;
-  { Can use compression protocol  }
-     CLIENT_COMPRESS = 32;
-  { Odbc client  }
-     CLIENT_ODBC = 64;
-  { Can use LOAD DATA LOCAL  }
-     CLIENT_LOCAL_FILES = 128;
-  { Ignore spaces before '('  }
-     CLIENT_IGNORE_SPACE = 256;
-  { Support the mysql_change_user()  }
-     CLIENT_CHANGE_USER = 512;
-  { This is an interactive client  }
-     CLIENT_INTERACTIVE = 1024;
-  { Switch to SSL after handshake  }
-     CLIENT_SSL = 2048;
-  { IGNORE sigpipes  }
-     CLIENT_IGNORE_SIGPIPE = 4096;
-  { Client knows about transactions  }
-     CLIENT_TRANSACTIONS = 8192;
-  { Transaction has started  }
-     SERVER_STATUS_IN_TRANS = 1;
-  { Server in auto_commit mode  }
-     SERVER_STATUS_AUTOCOMMIT = 2;
-     MYSQL_ERRMSG_SIZE = 200;
-  { Timeout on read  }
-     NET_READ_TIMEOUT = 30;
-  { Timeout on write  }
-     NET_WRITE_TIMEOUT = 60;
-  {
-  #define NET_WAIT_TIMEOUT      (8 60 60)
-   }
-  { Wait for new query  }
-  {
-  struct st_vio;                                        // Only C
-  typedef struct st_vio Vio;
-   }
-  { Default width for blob }
-     MAX_BLOB_WIDTH = 8192;
-  { For Perl DBI/dbd  }
-  {
-      The following variable is set if we are doing several queries in one
-      command ( as in LOAD TABLE ... FROM MASTER ),
-      and do not want to confuse the client with OK at the wrong time
-     }
-
-  type
-
-     Pst_net = ^st_net;
-     st_net = record
-          vio : PVio;
-          buff : Pbyte;
-          buff_end : Pbyte;
-          write_pos : Pbyte;
-          read_pos : Pbyte;
-          fd : my_socket;
-          max_packet : dword;
-          fcntl : longint;
-          last_errno : dword;
-          timeout : dword;
-          pkt_nr : dword;
-          compress_pkt_nr : dword;
-          last_error : array[0..(MYSQL_ERRMSG_SIZE)-1] of char;
-          error : byte;
-          return_errno : my_bool;
-          compress : my_bool;
-          remain_in_buf : dword;
-          length : dword;
-          buf_length : dword;
-          where_b : dword;
-          return_status : Pdword;
-          reading_or_writing : byte;
-          save_char : char;
-          no_send_ok : my_bool;
-          query_cache_query : gptr;
-       end;
-     NET = st_net;
-     PNET = ^NET;
-  { was #define dname def_expr }
-  function packet_error : longint;
-      { return type might be wrong }
-
-
-  type
-     enum_field_types = (FIELD_TYPE_DECIMAL,FIELD_TYPE_TINY,FIELD_TYPE_SHORT,
+const
+  NAME_LEN = 64;
+  HOSTNAME_LENGTH = 60;
+  USERNAME_LENGTH = 16;
+  SERVER_VERSION_LENGTH = 60;
+  LOCAL_HOST = 'localhost';
+  LOCAL_HOST_NAMEDPIPE = '.';
+
+type
+  enum_server_command = (COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
+     COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,
+     COM_REFRESH,COM_SHUTDOWN,COM_STATISTICS,
+     COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
+     COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT,
+     COM_CHANGE_USER,COM_BINLOG_DUMP,COM_TABLE_DUMP,
+     COM_CONNECT_OUT,COM_REGISTER_SLAVE);
+
+{ Field can't be NULL  }
+
+const
+   NOT_NULL_FLAG = 1;
+   PRI_KEY_FLAG = 2;
+   UNIQUE_KEY_FLAG = 4;
+   MULTIPLE_KEY_FLAG = 8;
+   BLOB_FLAG = 16;
+   UNSIGNED_FLAG = 32;
+   ZEROFILL_FLAG = 64;
+   BINARY_FLAG = 128;
+   ENUM_FLAG = 256;
+   AUTO_INCREMENT_FLAG = 512;
+   TIMESTAMP_FLAG = 1024;
+   SET_FLAG = 2048;
+   NUM_FLAG = 32768;
+   PART_KEY_FLAG = 16384;
+   GROUP_FLAG = 32768;
+   UNIQUE_FLAG = 65536;
+   REFRESH_GRANT = 1;
+   REFRESH_LOG = 2;
+   REFRESH_TABLES = 4;
+   REFRESH_HOSTS = 8;
+   REFRESH_STATUS = 16;
+   REFRESH_THREADS = 32;
+   REFRESH_SLAVE = 64;
+   REFRESH_MASTER = 128;
+   REFRESH_READ_LOCK = 16384;
+   REFRESH_FAST = 32768;
+   REFRESH_QUERY_CACHE = 65536;
+   REFRESH_QUERY_CACHE_FREE = $20000;
+   REFRESH_DES_KEY_FILE = $40000;
+   CLIENT_LONG_PASSWORD = 1;
+   CLIENT_FOUND_ROWS = 2;
+   CLIENT_LONG_FLAG = 4;
+   CLIENT_CONNECT_WITH_DB = 8;
+   CLIENT_NO_SCHEMA = 16;
+   CLIENT_COMPRESS = 32;
+   CLIENT_ODBC = 64;
+   CLIENT_LOCAL_FILES = 128;
+   CLIENT_IGNORE_SPACE = 256;
+   CLIENT_CHANGE_USER = 512;
+   CLIENT_INTERACTIVE = 1024;
+   CLIENT_SSL = 2048;
+   CLIENT_IGNORE_SIGPIPE = 4096;
+   CLIENT_TRANSACTIONS = 8192;
+   SERVER_STATUS_IN_TRANS = 1;
+   SERVER_STATUS_AUTOCOMMIT = 2;
+   MYSQL_ERRMSG_SIZE = 200;
+   NET_READ_TIMEOUT = 30;
+   NET_WRITE_TIMEOUT = 60;
+   MAX_BLOB_WIDTH = 8192;
+{
+#define NET_WAIT_TIMEOUT      (8 60 60)
+ }
+{
+struct st_vio;                                        // Only C
+typedef struct st_vio Vio;
+ }
+
+type
+  Pst_net = ^st_net;
+  st_net = record
+    vio : PVio;
+    buff : Pbyte;
+    buff_end : Pbyte;
+    write_pos : Pbyte;
+    read_pos : Pbyte;
+    fd : my_socket;
+    max_packet : dword;
+    max_packet_size : dword;
+    last_errno : dword;
+    pkt_nr : dword;
+    compress_pkt_nr : dword;
+    write_timeout : dword;
+    read_timeout : dword;
+    retry_count : dword;
+    fcntl : longint;
+    last_error : array[0..(MYSQL_ERRMSG_SIZE)-1] of char;
+    error : byte;
+    return_errno : my_bool;
+    compress : my_bool;
+    remain_in_buf : dword;
+    length : dword;
+    buf_length : dword;
+    where_b : dword;
+    return_status : Pdword;
+    reading_or_writing : byte;
+    save_char : char;
+    no_send_ok : my_bool;
+    query_cache_query : gptr;
+  end;
+  NET = st_net;
+  TNET = NET;
+  PNET = ^NET;
+
+function packet_error : longint;
+
+type
+  enum_field_types = (FIELD_TYPE_DECIMAL,FIELD_TYPE_TINY,FIELD_TYPE_SHORT,
        FIELD_TYPE_LONG,FIELD_TYPE_FLOAT,FIELD_TYPE_DOUBLE,
        FIELD_TYPE_NULL,FIELD_TYPE_TIMESTAMP,
        FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,

+ 1 - 1
packages/base/mysql/mysql_version.pp → packages/base/mysql/mysql4_version.pp

@@ -1,4 +1,4 @@
-unit mysql_version;
+unit mysql4_version;
 interface
 
 {

+ 13 - 24
packages/base/mysql/mysqls.c

@@ -1,27 +1,16 @@
-#include <mysql.h>
-#include <mysql_com.h>
 #include <stdio.h>
+#include <mysql/mysql.h>
 
-main ()
-{
-  my_bool i;
-  NET n;
-  enum enum_net_type nettype;
-  struct st_mysql_options options;
-  my_ulonglong llong;
-  
-  printf ("MYSQL : %d options : %d\n",sizeof(MYSQL),sizeof(options));
-  printf ("MYSQL_DATA : %d\n",sizeof(MYSQL_DATA));
-  printf ("MYSQL_ROWS : %d\n",sizeof(MYSQL_ROWS));
-  printf ("MYSQL_ROW : %d\n",sizeof(MYSQL_ROW));
-  printf ("MYSQL_FIELD : %d\n",sizeof(MYSQL_FIELD));
-  printf ("MYSQL_RES : %d\n",sizeof(MYSQL_RES));
-  printf ("MEM_ROOT : %d\n",sizeof(MEM_ROOT));
-  printf ("my_bool : %d\n",sizeof(my_bool));
-  printf ("NET : %d NET.nettype : %d\n",sizeof(NET),sizeof(nettype));
-  printf ("USED_MEM : %d\n",sizeof(USED_MEM));
-  printf ("new: %d\n",sizeof(char [MYSQL_ERRMSG_SIZE]));
-  printf ("longlong: %d\n",sizeof(llong));
-  i=n.error;
+main () {
+  printf("C\n");
+  printf("MYSQL : %d  options : %d\n",sizeof(MYSQL),sizeof(struct st_mysql_options));
+  printf("MYSQL_DATA : %d\n" ,sizeof(MYSQL_DATA));
+  printf("MYSQL_ROWS : %d\n",sizeof(MYSQL_ROWS));
+  printf("MYSQL_ROW : %d\n",sizeof(MYSQL_ROW));
+  printf("MYSQL_FIELD : %d\n",sizeof(MYSQL_FIELD));
+  printf("MYSQL_RES : %d \n",sizeof(MYSQL_RES));
+  printf("MEM_ROOT : %d \n",sizeof(MEM_ROOT));
+  printf("my_bool : %d \n",sizeof(my_bool));
+/*  printf("TNET : %d TNET.nettype : %d \n",sizeof(NET),sizeof(net_type)); */
+  printf("USED_MEM : %d \n",sizeof(USED_MEM));
 }
-

+ 7 - 1
packages/base/mysql/mysqls.pp

@@ -17,7 +17,13 @@ begin
   writeln ('USED_MEM : ',sizeof(TUSED_MEM));
 end.
   $Log$
-  Revision 1.2  2002-09-07 15:42:53  peter
+  Revision 1.3  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.1  2004/09/28 18:38:23  michael
+  + Moved to subdir, switching to version 4.0
+
+  Revision 1.2  2002/09/07 15:42:53  peter
     * old logs removed and tabs fixed
 
   Revision 1.1  2002/01/29 17:54:54  peter

+ 101 - 0
packages/base/mysql/testdb3.pp

@@ -0,0 +1,101 @@
+program testdb3;
+
+uses 
+  mysql3;
+
+Const
+  DataBase : Pchar = 'testdb';
+  Query    : Pchar = 'Select * from FPdev';
+
+var
+  count,num : longint;
+  code : integer;
+  sock : PMYSQL;
+  qmysql : TMYSQL;
+  qbuf : string [160];
+  rowbuf : TMYSQL_ROW;
+  dummy : string;
+  recbuf : PMYSQL_RES;
+
+begin
+  if paramcount=1 then
+    begin
+    Dummy:=Paramstr(1)+#0;
+    DataBase:=@Dummy[1];
+    end;
+  Write ('Connecting to MySQL...');
+  sock :=  mysql_connect(PMysql(@qmysql),nil,'michael','geen');
+  if sock=Nil then
+    begin
+    Writeln (stderr,'Couldn''t connect to MySQL.');
+    Writeln (stderr,mysql_error(@qmysql));
+    halt(1);
+    end;
+  Writeln ('Done.');
+  Writeln ('Connection data:');
+{$ifdef Unix}
+  writeln ('Mysql_port      : ',mysql_port);
+  writeln ('Mysql_unix_port : ',mysql_unix_port);
+{$endif}
+  writeln ('Host info       : ',mysql_get_host_info(sock));
+  writeln ('Server info     : ',mysql_stat(sock));
+  writeln ('Client info     : ',mysql_get_client_info);
+
+  Writeln ('Selecting Database ',DataBase,'...');
+  if mysql_select_db(sock,DataBase) < 0 then
+    begin
+    Writeln (stderr,'Couldn''t select database ',Database);
+    Writeln (stderr,mysql_error(sock));
+    halt (1);
+    end;
+
+  writeln ('Executing query : ',Query,'...');
+    if (mysql_query(sock,Query) < 0) then
+      begin
+      Writeln (stderr,'Query failed ');
+      writeln (stderr,mysql_error(sock));
+      Halt(1);
+      end;
+
+  recbuf := mysql_store_result(sock);
+  if RecBuf=Nil then
+    begin
+    Writeln ('Query returned nil result.');
+    mysql_close(sock);
+    halt (1);
+    end;
+  Writeln ('Number of records returned  : ',mysql_num_rows (recbuf));
+  Writeln ('Number of fields per record : ',mysql_num_fields(recbuf));
+
+  rowbuf := mysql_fetch_row(recbuf);
+  while (rowbuf <>nil) do
+       begin
+       Write  ('(Id: ', rowbuf[0]);
+       Write  (', Name: ', rowbuf[1]);
+       Writeln(', Email : ', rowbuf[2],')');
+       rowbuf := mysql_fetch_row(recbuf);
+       end;
+  Writeln ('Freeing memory occupied by result set...');
+  mysql_free_result (recbuf);
+
+  Writeln ('Closing connection with MySQL.');
+  mysql_close(sock);
+  halt(0);
+end.
+  $Log$
+  Revision 1.1  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.4  2004/09/28 19:08:09  michael
+  + Some compatibility issues fixed
+
+  Revision 1.3  2002/09/07 15:42:53  peter
+    * old logs removed and tabs fixed
+
+  Revision 1.2  2002/05/31 11:54:33  marco
+  * Renamefest for 1.0, many 1.1.x spots patched also.
+
+  Revision 1.1  2002/01/29 17:54:54  peter
+    * splitted to base and extra
+
+}

+ 6 - 2
packages/base/mysql/testdb.pp → packages/base/mysql/testdb4.pp

@@ -1,6 +1,7 @@
 program qtest;
 
-uses mysql;
+uses 
+  mysql4;
 
 Const
   DataBase : Pchar = 'testdb';
@@ -83,7 +84,10 @@ begin
   halt(0);
 end.
   $Log$
-  Revision 1.4  2004-09-28 19:08:09  michael
+  Revision 1.1  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.4  2004/09/28 19:08:09  michael
   + Some compatibility issues fixed
 
   Revision 1.3  2002/09/07 15:42:53  peter

+ 5 - 3
packages/base/mysql/ver323/mysql.pp

@@ -30,8 +30,7 @@ Const mysqllib = 'mysqlclient';
 {$linklib mysqlclient}
 {$endif}
 
-{ All is 4-byte aligned on my machine. }
-{$packrecords 4}
+{$packrecords C}
 
 type
    my_bool = byte;
@@ -379,7 +378,10 @@ end.
 
 {
   $Log$
-  Revision 1.1  2004-09-28 18:38:23  michael
+  Revision 1.2  2004-09-30 19:34:47  michael
+  + Split everything in version 3 and version 4
+
+  Revision 1.1  2004/09/28 18:38:23  michael
   + Moved to subdir, switching to version 4.0
 
   Revision 1.6  2004/08/05 10:36:26  olle