2
0
Эх сурвалжийг харах

+ Split everything in version 3 and version 4

michael 21 жил өмнө
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
 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
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) sunos qnx
 UNIXs = linux $(BSDs) sunos qnx
 FORCE:
 FORCE:
@@ -215,8 +215,8 @@ endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 override PACKAGE_NAME=mysql
 override PACKAGE_NAME=mysql
 override PACKAGE_VERSION=1.9.4
 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
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -552,12 +552,6 @@ STATICLIBPREFIX=
 FPCMADE=fpcmade.nw
 FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 ZIPSUFFIX=nw
 endif
 endif
-ifeq ($(OS_TARGET),netwlibc)
-EXEEXT=.nlm
-STATICLIBPREFIX=
-FPCMADE=fpcmade.nwl
-ZIPSUFFIX=nwl
-endif
 ifeq ($(OS_TARGET),macos)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
 EXEEXT=
 EXEEXT=
@@ -710,18 +704,6 @@ FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 ZIPSUFFIX=nw
 EXEEXT=.nlm
 EXEEXT=.nlm
 endif
 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)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
 PPUEXT=.ppu
 PPUEXT=.ppu
@@ -1124,11 +1106,6 @@ ifeq ($(CPU_TARGET),powerpc)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 endif
 endif
 endif
 endif
-ifeq ($(OS_TARGET),netwlibc)
-ifeq ($(CPU_TARGET),i386)
-REQUIRE_PACKAGES_RTL=1
-endif
-endif
 ifdef REQUIRE_PACKAGES_RTL
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_RTL),)
 ifneq ($(PACKAGEDIR_RTL),)

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

@@ -7,8 +7,8 @@ name=mysql
 version=1.9.4
 version=1.9.4
 
 
 [target]
 [target]
-units=mysql_com mysql_version mysql
-examples=testdb
+units=mysql4_com mysql4_version mysql4 mysql3_com mysql3_version mysql3
+examples=testdb4 testdb3
 
 
 [require]
 [require]
 libc=y
 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 the mysql libraries are.
 - You must know where libgcc is.
 - 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'
 Both these things must be set in the Makefile. After that a simple 'make'
 and 'make install' should compile and install everything.
 and 'make install' should compile and install everything.
 
 
@@ -16,10 +21,6 @@ database available. If not, you must run
   rmdb databasename
   rmdb databasename
 manually. You need create permission on the database for this to work.
 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. 
 Win32 users: There are multiple .dll files circulating around. 
 you should fix the statement
 you should fix the statement
 mysqllib = 'libmysql'
 mysqllib = 'libmysql'
@@ -27,4 +28,6 @@ in the mysql unit, so it matches the version you have.
 
 
 Enjoy !
 Enjoy !
 
 
+
+
 Michael.
 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
 interface
 
 
 {
 {
@@ -11,17 +11,17 @@ interface
     mysql_com.ph
     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 }
 { Extra manually added types }
     PVIO = Pointer;
     PVIO = Pointer;
@@ -53,178 +53,123 @@ interface
    }
    }
   { Field/table name length  }
   { 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_LONG,FIELD_TYPE_FLOAT,FIELD_TYPE_DOUBLE,
        FIELD_TYPE_NULL,FIELD_TYPE_TIMESTAMP,
        FIELD_TYPE_NULL,FIELD_TYPE_TIMESTAMP,
        FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,
        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
 interface
 
 
 {
 {

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

@@ -1,27 +1,16 @@
-#include <mysql.h>
-#include <mysql_com.h>
 #include <stdio.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));
   writeln ('USED_MEM : ',sizeof(TUSED_MEM));
 end.
 end.
   $Log$
   $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
     * old logs removed and tabs fixed
 
 
   Revision 1.1  2002/01/29 17:54:54  peter
   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;
 program qtest;
 
 
-uses mysql;
+uses 
+  mysql4;
 
 
 Const
 Const
   DataBase : Pchar = 'testdb';
   DataBase : Pchar = 'testdb';
@@ -83,7 +84,10 @@ begin
   halt(0);
   halt(0);
 end.
 end.
   $Log$
   $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
   + Some compatibility issues fixed
 
 
   Revision 1.3  2002/09/07 15:42:53  peter
   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}
 {$linklib mysqlclient}
 {$endif}
 {$endif}
 
 
-{ All is 4-byte aligned on my machine. }
-{$packrecords 4}
+{$packrecords C}
 
 
 type
 type
    my_bool = byte;
    my_bool = byte;
@@ -379,7 +378,10 @@ end.
 
 
 {
 {
   $Log$
   $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
   + Moved to subdir, switching to version 4.0
 
 
   Revision 1.6  2004/08/05 10:36:26  olle
   Revision 1.6  2004/08/05 10:36:26  olle