Browse Source

* synchronized with trunk

git-svn-id: branches/wasm@48715 -
nickysn 4 years ago
parent
commit
286ad1df4d

+ 4 - 0
.gitattributes

@@ -3404,6 +3404,7 @@ packages/fcl-db/src/datadict/fpddmysql51.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddmysql55.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddmysql56.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddmysql57.pp svneol=native#text/plain
+packages/fcl-db/src/datadict/fpddmysql80.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddodbc.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddoracle.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddpq.pp svneol=native#text/plain
@@ -3535,6 +3536,7 @@ packages/fcl-db/src/sqldb/mysql/mysql51conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysql55conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysql56conn.pas svneol=native#text/pascal
 packages/fcl-db/src/sqldb/mysql/mysql57conn.pas svneol=native#text/plain
+packages/fcl-db/src/sqldb/mysql/mysql80conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysqlconn.inc svneol=native#text/plain
 packages/fcl-db/src/sqldb/odbc/Makefile svneol=native#text/plain
 packages/fcl-db/src/sqldb/odbc/Makefile.fpc svneol=native#text/plain
@@ -3921,6 +3923,7 @@ packages/fcl-pdf/Makefile svneol=native#text/plain
 packages/fcl-pdf/Makefile.fpc svneol=native#text/plain
 packages/fcl-pdf/examples/diamond.png -text svneol=unset#image/png
 packages/fcl-pdf/examples/metautf16.pp svneol=native#text/plain
+packages/fcl-pdf/examples/monospacetext.pp svneol=native#text/plain
 packages/fcl-pdf/examples/poppy.jpg -text
 packages/fcl-pdf/examples/testfppdf.lpi svneol=native#text/plain
 packages/fcl-pdf/examples/testfppdf.lpr svneol=native#text/plain
@@ -7766,6 +7769,7 @@ packages/mysql/src/mysql55.pp svneol=native#text/plain
 packages/mysql/src/mysql55dyn.pp svneol=native#text/plain
 packages/mysql/src/mysql56dyn.pp svneol=native#text/plain
 packages/mysql/src/mysql57dyn.pp svneol=native#text/plain
+packages/mysql/src/mysql80dyn.pp svneol=native#text/plain
 packages/ncurses/Makefile svneol=native#text/plain
 packages/ncurses/Makefile.fpc svneol=native#text/plain
 packages/ncurses/Makefile.fpc.fpcmake svneol=native#text/plain

+ 4 - 0
compiler/aarch64/cgcpu.pas

@@ -1797,12 +1797,16 @@ implementation
             reference_reset_base(ref,NR_SP,-16,ctempposinvalid,16,[]);
             ref.addressmode:=AM_PREINDEXED;
             list.concat(taicpu.op_reg_reg_ref(A_STP,NR_FP,NR_LR,ref));
+            current_asmdata.asmcfi.cfa_def_cfa_offset(list,2*sizeof(pint));
+            current_asmdata.asmcfi.cfa_offset(list,NR_FP,-16);
+            current_asmdata.asmcfi.cfa_offset(list,NR_LR,-8);
             if target_info.system=system_aarch64_win64 then
               list.concat(cai_seh_directive.create_offset(ash_savefplr_x,16));
             { initialise frame pointer }
             if current_procinfo.procdef.proctypeoption<>potype_exceptfilter then
               begin
                 a_load_reg_reg(list,OS_ADDR,OS_ADDR,NR_SP,NR_FP);
+                current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_FP);
                 if target_info.system=system_aarch64_win64 then
                   list.concat(cai_seh_directive.create(ash_setfp));
               end

+ 1 - 1
compiler/aarch64/cpubase.pas

@@ -303,7 +303,7 @@ unit cpubase;
 
       NR_MM_RESULT_REG  = NR_D0;
 
-      NR_RETURN_ADDRESS_REG = NR_FUNCTION_RETURN_REG;
+      NR_RETURN_ADDRESS_REG = NR_LR;
 
       { Offset where the parent framepointer is pushed }
       PARENT_FRAMEPOINTER_OFFSET = 0;

+ 13 - 1
compiler/arm/cgcpu.pas

@@ -1907,7 +1907,7 @@ unit cgcpu;
          r : byte;
          mmregs,
          regs, saveregs : tcpuregisterset;
-         registerarea,
+         registerarea, offset,
          r7offset,
          stackmisalignment : pint;
          imm1, imm2: DWord;
@@ -2005,14 +2005,24 @@ unit cgcpu;
                              break;
                            end;
                      list.concat(setoppostfix(taicpu.op_ref_regset(A_STM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
+                     current_asmdata.asmcfi.cfa_def_cfa_offset(list,registerarea);
                    end;
 
                 if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
                   begin
+                    offset:=-4;
+                    for r:=RS_R15 downto RS_R0 do
+                      if r in regs then
+                        begin
+                          current_asmdata.asmcfi.cfa_offset(list,newreg(R_INTREGISTER,r,R_SUBWHOLE),offset);
+                          dec(offset,4);
+                        end;
                     { the framepointer now points to the saved R15, so the saved
                       framepointer is at R11-12 (for get_caller_frame) }
                     list.concat(taicpu.op_reg_reg_const(A_SUB,NR_FRAME_POINTER_REG,NR_R12,4));
                     a_reg_dealloc(list,NR_R12);
+                    current_asmdata.asmcfi.cfa_def_cfa_register(list,current_procinfo.framepointer);
+                    current_asmdata.asmcfi.cfa_def_cfa_offset(list,4);
                   end;
               end
             else
@@ -2095,6 +2105,8 @@ unit cgcpu;
                     list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,NR_R12));
                     a_reg_dealloc(list,NR_R12);
                   end;
+                if current_procinfo.framepointer=NR_STACK_POINTER_REG then
+                  current_asmdata.asmcfi.cfa_def_cfa_offset(list,registerarea+localsize);
               end;
 
             if (mmregs<>[]) or

+ 57 - 19
compiler/cfidwarf.pas

@@ -244,8 +244,6 @@ implementation
           datatype:=dt_none;
       end;
 
-
-
 {****************************************************************************
                              TDwarfAsmCFILowLevel
 ****************************************************************************}
@@ -292,22 +290,16 @@ implementation
 {$elseif defined(arm)}
     procedure TDwarfAsmCFILowLevel.generate_initial_instructions(list:TAsmList);
       begin
-        if GenerateThumbCode then
-          begin
-            list.concat(tai_const.create_8bit(DW_CFA_def_cfa));
-            list.concat(tai_const.create_uleb128bit(dwarf_reg(NR_STACK_POINTER_REG)));
-            list.concat(tai_const.create_uleb128bit(0));
-          end
-        else
-          begin
-            { FIXME!!! }
-            list.concat(tai_const.create_8bit(DW_CFA_def_cfa));
-            list.concat(tai_const.create_uleb128bit(dwarf_reg(NR_STACK_POINTER_REG)));
-            list.concat(tai_const.create_uleb128bit(sizeof(aint)));
-            list.concat(tai_const.create_8bit(DW_CFA_offset_extended));
-            list.concat(tai_const.create_uleb128bit(dwarf_reg(NR_RETURN_ADDRESS_REG)));
-            list.concat(tai_const.create_uleb128bit((-sizeof(aint)) div data_alignment_factor));
-          end;
+        list.concat(tai_const.create_8bit(DW_CFA_def_cfa));
+        list.concat(tai_const.create_uleb128bit(dwarf_reg(NR_STACK_POINTER_REG)));
+        list.concat(tai_const.create_uleb128bit(0));
+      end;
+{$elseif defined(aarch64)}
+    procedure TDwarfAsmCFILowLevel.generate_initial_instructions(list:TAsmList);
+      begin
+        list.concat(tai_const.create_8bit(DW_CFA_def_cfa));
+        list.concat(tai_const.create_uleb128bit(dwarf_reg(NR_STACK_POINTER_REG)));
+        list.concat(tai_const.create_uleb128bit(0));
       end;
 {$else}
     { if more cpu dependend stuff is implemented, this needs more refactoring }
@@ -555,12 +547,58 @@ implementation
     procedure TDwarfAsmCFILowLevel.cfa_advance_loc(list:TAsmList);
       var
         currloclabel : tasmlabel;
+        hp : tai;
+        instrcount : longint;
+        dwarfloc: Integer;
       begin
         if FLastloclabel=nil then
           internalerror(200404082);
+        { search the list backwards and check if we really need an advance loc,
+          i.e. if real code/data has been generated since the last cfa_advance_loc
+          call
+        }
+        hp:=tai(list.Last);
+        while assigned(hp) do
+          begin
+            { if we encounter FLastloclabel without encountering code/data, see check below,
+              we do not need insert an advance_loc entry }
+            if (hp.typ=ait_label) and (tai_label(hp).labsym=FLastloclabel) then
+              exit;
+            { stop if we find any tai which results in code or data }
+            if not(hp.typ in ([ait_label]+SkipInstr)) then
+              break;
+            hp:=tai(hp.Previous);
+          end;
+
+        { check if the last advance entry is less then 8 instructions away:
+          as x86 instructions might not be bigger than 15 bytes and most other
+          CPUs use only 4 byte instructions or smaller, this is safe
+          we could search even more but this takes more time and 8 instructions should be normally enough
+        }
+        hp:=tai(list.Last);
+        instrcount:=0;
+        dwarfloc:=DW_CFA_advance_loc4;
+        while assigned(hp) and (instrcount<8) do
+          begin
+            { stop if we find any tai which results in code or data }
+            if not(hp.typ in ([ait_label,ait_instruction]+SkipInstr)) then
+              break;
+            if (hp.typ=ait_label) and (tai_label(hp).labsym=FLastloclabel) then
+              begin
+                dwarfloc:=DW_CFA_advance_loc1;
+                break;
+              end;
+            if hp.typ=ait_instruction then
+              inc(instrcount);
+            hp:=tai(hp.Previous);
+          end;
+
         current_asmdata.getlabel(currloclabel,alt_dbgframe);
         list.concat(tai_label.create(currloclabel));
-        DwarfList.concat(tdwarfitem.create_reloffset(DW_CFA_advance_loc4,doe_32bit,FLastloclabel,currloclabel));
+        if dwarfloc=DW_CFA_advance_loc1 then
+          DwarfList.concat(tdwarfitem.create_reloffset(DW_CFA_advance_loc1,doe_8bit,FLastloclabel,currloclabel))
+        else
+          DwarfList.concat(tdwarfitem.create_reloffset(DW_CFA_advance_loc4,doe_32bit,FLastloclabel,currloclabel));
         FLastloclabel:=currloclabel;
       end;
 

+ 10 - 4
compiler/dbgstabs.pas

@@ -1597,6 +1597,7 @@ implementation
       var
         st : string;
         ss : ansistring;
+        i : longint;
       begin
         ss:='';
         { Don't write info for default parameter values, the N_Func breaks
@@ -1609,10 +1610,15 @@ implementation
           conststring:
             begin
               if sym.value.len<200 then
-                if target_dbg.id=dbg_stabs then
-                  st:='s'''+backspace_quote(octal_quote(strpas(pchar(sym.value.valueptr)),[#0..#9,#11,#12,#14..#31,'''']),['"','\',#10,#13])+''''
-                else
-                  st:='s'''+stabx_quote_const(octal_quote(strpas(pchar(sym.value.valueptr)),[#0..#9,#11,#12,#14..#31,'''']))+''''
+                begin
+                  setlength(ss,sym.value.len);
+                  for i:=0 to sym.value.len-1 do
+                    ss[i+1]:=pchar(sym.value.valueptr)[i];
+                  if target_dbg.id=dbg_stabs then
+                    st:='s'''+backspace_quote(octal_quote(ss,[#0..#9,#11,#12,#14..#31,'''']),['"','\',#10,#13])+''''
+                  else
+                    st:='s'''+stabx_quote_const(octal_quote(ss,[#0..#9,#11,#12,#14..#31,'''']))+'''';
+                end
               else
                 st:='<constant string too long>';
             end;

+ 19 - 0
packages/fcl-db/fpmake.pp

@@ -473,6 +473,14 @@ begin
           AddUnit('fpddsqldb');
           AddUnit('mysql57conn');
         end;
+    T:=P.Targets.AddUnit('fpddmysql80.pp', DatadictOSes);
+      with T.Dependencies do
+        begin
+          AddUnit('sqldb');
+          AddUnit('fpdatadict');
+          AddUnit('fpddsqldb');
+          AddUnit('mysql80conn');
+        end;
     T:=P.Targets.AddUnit('fpddodbc.pp', DatadictOSes);
       with T.Dependencies do
         begin
@@ -716,6 +724,17 @@ begin
           AddUnit('dbconst');
         end;
 
+    T:=P.Targets.AddUnit('mysql80conn.pas', SqldbConnectionOSes);
+    T.ResourceStrings:=true;
+      with T.Dependencies do
+        begin
+          AddInclude('mysqlconn.inc');
+          AddUnit('bufdataset');
+          AddUnit('sqldb');
+          AddUnit('db');
+          AddUnit('dbconst');
+        end;
+
     T:=P.Targets.AddUnit('odbcconn.pas', SqldbConnectionOSes);
       with T.Dependencies do
         begin

+ 17 - 7
packages/fcl-db/src/base/bufdataset.pas

@@ -1465,6 +1465,7 @@ var
   i,r  : integer;
   iGetResult : TGetResult;
   pc : TRecordBuffer;
+  CurBufIndex: TBufDatasetIndex;
 
 begin
   FOpen:=False;
@@ -1514,10 +1515,17 @@ begin
   if FAutoIncValue>-1 then FAutoIncValue:=1;
   if assigned(FParser) then FreeAndNil(FParser);
   For I:=FIndexes.Count-1 downto 0 do
-    if (BufIndexDefs[i].IndexType in [itDefault,itCustom]) or (BufIndexDefs[i].DiscardOnClose) then
-       BufIndexDefs[i].Free
+    begin
+    CurBufIndex:=BufIndexDefs[i];
+    if (CurBufIndex.IndexType in [itDefault,itCustom]) or (CurBufIndex.DiscardOnClose) then
+      begin
+      if FCurrentIndexDef=CurBufIndex then
+        FCurrentIndexDef:=nil;
+      CurBufIndex.Free;
+      end
     else
-       FreeAndNil(BufIndexDefs[i].FBufferIndex);
+      FreeAndNil(CurBufIndex.FBufferIndex);
+    end;
 end;
 
 procedure TCustomBufDataset.InternalFirst;
@@ -3149,16 +3157,18 @@ function TCustomBufDataset.GetIndexFieldNames: String;
 var
   i, p: integer;
   s: string;
+  IndexBuf: TBufIndex;
 
 begin
   Result := FIndexFieldNames;
-  if (CurrentIndexBuf=Nil) then
+  IndexBuf:=CurrentIndexBuf;
+  if (IndexBuf=Nil) then
     Exit;
   Result:='';
-  for i := 1 to WordCount(CurrentIndexBuf.FieldsName, [Limiter]) do
+  for i := 1 to WordCount(IndexBuf.FieldsName, [Limiter]) do
   begin
-    s := ExtractDelimited(i, CurrentIndexBuf.FieldsName, [Limiter]);
-    p := Pos(s, CurrentIndexBuf.DescFields);
+    s := ExtractDelimited(i, IndexBuf.FieldsName, [Limiter]);
+    p := Pos(s, IndexBuf.DescFields);
     if p>0 then
       s := s + Desc;
     Result := Result + Limiter + s;

+ 74 - 0
packages/fcl-db/src/datadict/fpddmysql80.pp

@@ -0,0 +1,74 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2007 by Michael Van Canneyt, member of the
+    Free Pascal development team
+
+    MySQL 8.0 Data Dictionary Engine Implementation.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+unit fpddmysql80;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, sqldb, fpdatadict, fpddsqldb;
+  
+Type
+  { TSQLDBMySql80DDEngine }
+
+  TSQLDBMySql80DDEngine = Class(TSQLDBDDEngine)
+  Protected
+    Function CreateConnection(AConnectString  : String) : TSQLConnection; override;
+  Public
+    Class function Description : string; override;
+    Class function DBType : String; override;
+  end;
+
+Procedure RegisterMySQL80DDEngine;
+Procedure UnRegisterMySQL80DDEngine;
+
+implementation
+
+uses mysql80conn;
+
+Procedure RegisterMySQL80DDEngine;
+
+begin
+  RegisterDictionaryEngine(TSQLDBMySQL80DDEngine);
+end;
+
+Procedure UnRegisterMySQL80DDEngine;
+
+begin
+  UnRegisterDictionaryEngine(TSQLDBMySQL80DDEngine);
+end;
+
+{ TSQLDBMySql80DDEngine }
+
+function TSQLDBMySql80DDEngine.CreateConnection(AConnectString: String
+  ): TSQLConnection;
+begin
+  Result:=mysql80conn.TMySQL80Connection.Create(Self);
+end;
+
+class function TSQLDBMySql80DDEngine.Description: string;
+begin
+  Result:='Mysql 8.0 connection using SQLDB';
+end;
+
+class function TSQLDBMySql80DDEngine.DBType: String;
+begin
+  Result:='MySQL 8.0';
+end;
+
+end.
+

+ 208 - 208
packages/fcl-db/src/sqldb/mysql/Makefile

@@ -350,634 +350,634 @@ endif
 override PACKAGE_NAME=fcl-db
 PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Makefile.fpc,$(PACKAGESDIR))))))
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-aros)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-macosclassic)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-sinclairql)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-macosclassic)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-haiku)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-iphonesim)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-aros)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-dragonfly)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-netbsd)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-aros)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-freertos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-ios)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mips64el-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-win16)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-darwin)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-win64)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-android)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-ios)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),wasm32-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),wasm32-wasi)
 override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
 endif
 ifeq ($(FULL_TARGET),sparc64-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv32-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv32-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv64-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv64-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-linux)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-freertos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-embedded)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-zxspectrum)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-msxdos)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-amstradcpc)
-override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i386-aros)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-macosclassic)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),m68k-sinclairql)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-macosclassic)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-haiku)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-iphonesim)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-aros)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),x86_64-dragonfly)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-netbsd)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-aros)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-freertos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),arm-ios)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mipsel-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),mips64el-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),i8086-win16)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-darwin)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-win64)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-android)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),aarch64-ios)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),wasm32-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),wasm32-wasi)
 override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
 endif
 ifeq ($(FULL_TARGET),sparc64-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv32-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv32-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv64-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),riscv64-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-linux)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),xtensa-freertos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-embedded)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-zxspectrum)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-msxdos)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 ifeq ($(FULL_TARGET),z80-amstradcpc)
-override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)

+ 2 - 2
packages/fcl-db/src/sqldb/mysql/Makefile.fpc

@@ -6,8 +6,8 @@
 main=fcl-db
 
 [target]
-units=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
-rsts=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn
+units=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
+rsts=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn mysql57conn mysql80conn
 
 [require]
 packages=fcl-xml mysql

+ 12 - 0
packages/fcl-db/src/sqldb/mysql/mysql80conn.pas

@@ -0,0 +1,12 @@
+{
+  Contains the TMysqlConnection for MySQL 8.0
+}
+
+unit mysql80conn;
+
+{$DEFINE MYSQL80_UP}
+{$DEFINE MYSQL80}
+
+{$i mysqlconn.inc}
+
+end.

+ 91 - 16
packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

@@ -1,3 +1,6 @@
+{$IFDEF MYSQL80_UP}
+  {$DEFINE MYSQL57_UP}
+{$ENDIF}
 {$IFDEF MYSQL57_UP}
   {$DEFINE MYSQL56_UP}
 {$ENDIF}
@@ -17,6 +20,9 @@ interface
 
 uses
   Classes, SysUtils,bufdataset,sqldb,db,ctypes,fmtbcd,
+{$IFDEF mysql80}
+  mysql80dyn;
+{$ELSE}
 {$IFDEF mysql57}
   mysql57dyn;
 {$ELSE}
@@ -42,9 +48,13 @@ uses
 {$endif}
 {$ENDIF}
 {$ENDIF}
+{$ENDIF}
 
 Const
   MySQLVersion =
+{$IFDEF mysql80}
+    '8.0';
+{$ELSE}
 {$IFDEF mysql57}
     '5.7';
 {$ELSE}
@@ -69,6 +79,7 @@ Const
 {$endif}
 {$endif}
 {$ENDIF}
+{$ENDIF}
 {$ENDIF}
 
   MariaDBVersion =
@@ -96,6 +107,7 @@ Type
     FPreparedStatement : String;
     // Statement with param placeholders replaced with actual values.
     FActualStatement : String;
+    FStatement : String;
     Row : MYSQL_ROW;
     Lengths : pculong;                  { Lengths of the columns of the current row }
     RowsAffected : QWord;
@@ -209,6 +221,12 @@ Type
   end;
 
 
+  {$IFDEF mysql80}
+    TMySQL80Connection = Class(TConnectionName);
+    TMySQL80ConnectionDef = Class(TMySQLConnectionDef);
+    TMySQL80Transaction = Class(TTransactionName);
+    TMySQL80Cursor = Class(TCursorName);
+  {$ELSE}
   {$IFDEF mysql57}
     TMySQL57Connection = Class(TConnectionName);
     TMySQL57ConnectionDef = Class(TMySQLConnectionDef);
@@ -255,6 +273,7 @@ Type
   {$ENDIF}
   {$ENDIF}
   {$ENDIF}
+  {$ENDIF}
 
 implementation
 
@@ -264,15 +283,57 @@ uses
   DateUtils;
 
 const
-  Mysql_Option_Names : array[mysql_option] of string = ('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_OPT_LOCAL_INFILE','MYSQL_OPT_PROTOCOL',
-     'MYSQL_SHARED_MEMORY_BASE_NAME','MYSQL_OPT_READ_TIMEOUT',
-     'MYSQL_OPT_WRITE_TIMEOUT','MYSQL_OPT_USE_RESULT',
-     'MYSQL_OPT_USE_REMOTE_CONNECTION','MYSQL_OPT_USE_EMBEDDED_CONNECTION',
-     'MYSQL_OPT_GUESS_CONNECTION','MYSQL_SET_CLIENT_IP',
+  Mysql_Option_Names : array[mysql_option] of string = (
+     '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_OPT_LOCAL_INFILE',
+     'MYSQL_OPT_PROTOCOL',
+     'MYSQL_SHARED_MEMORY_BASE_NAME',
+     'MYSQL_OPT_READ_TIMEOUT',
+     'MYSQL_OPT_WRITE_TIMEOUT',
+     'MYSQL_OPT_USE_RESULT'
+     {$IFDEF MYSQL80}
+     ,'MYSQL_REPORT_DATA_TRUNCATION',
+     'MYSQL_OPT_RECONNECT',
+     'MYSQL_PLUGIN_DIR',
+     'MYSQL_DEFAULT_AUTH',
+     'MYSQL_OPT_BIND',
+     'MYSQL_OPT_SSL_KEY',
+     'MYSQL_OPT_SSL_CERT',
+     'MYSQL_OPT_SSL_CA',
+     'MYSQL_OPT_SSL_CAPATH',
+     'MYSQL_OPT_SSL_CIPHER',
+     'MYSQL_OPT_SSL_CRL',
+     'MYSQL_OPT_SSL_CRLPATH',
+     'MYSQL_OPT_CONNECT_ATTR_RESET',
+     'MYSQL_OPT_CONNECT_ATTR_ADD',
+     'MYSQL_OPT_CONNECT_ATTR_DELETE',
+     'MYSQL_SERVER_PUBLIC_KEY',
+     'MYSQL_ENABLE_CLEARTEXT_PLUGIN',
+     'MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS',
+     'MYSQL_OPT_MAX_ALLOWED_PACKET',
+     'MYSQL_OPT_NET_BUFFER_LENGTH',
+     'MYSQL_OPT_TLS_VERSION',
+     'MYSQL_OPT_SSL_MODE',
+     'MYSQL_OPT_GET_SERVER_PUBLIC_KEY',
+     'MYSQL_OPT_RETRY_COUNT',
+     'MYSQL_OPT_OPTIONAL_RESULTSET_METADATA',
+     'MYSQL_OPT_SSL_FIPS_MODE',
+     'MYSQL_OPT_TLS_CIPHERSUITES',
+     'MYSQL_OPT_COMPRESSION_ALGORITHMS',
+     'MYSQL_OPT_ZSTD_COMPRESSION_LEVEL',
+     'MYSQL_OPT_LOAD_DATA_LOCAL_DIR'
+     {$ELSE}
+     ,'MYSQL_OPT_USE_REMOTE_CONNECTION',
+     'MYSQL_OPT_USE_EMBEDDED_CONNECTION',
+     'MYSQL_OPT_GUESS_CONNECTION',
+     'MYSQL_SET_CLIENT_IP',
      'MYSQL_SECURE_AUTH'
 {$IFDEF MYSQL50_UP}
      ,'MYSQL_REPORT_DATA_TRUNCATION', 'MYSQL_OPT_RECONNECT'
@@ -293,6 +354,7 @@ const
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
+{$ENDIF}
 {$ENDIF}
      );
 
@@ -300,9 +362,9 @@ Resourcestring
   SErrServerConnectFailed = 'Server connect failed.';
   SErrSetCharsetFailed = 'Failed to set connection character set: %s';
   SErrDatabaseSelectFailed = 'Failed to select database: %s';
-  SErrDatabaseCreate = 'Failed to create database: %s';
-  SErrDatabaseDrop = 'Failed to drop database: %s';
-  SErrNoData = 'No data for record';
+  //SErrDatabaseCreate = 'Failed to create database: %s';
+  //SErrDatabaseDrop = 'Failed to drop database: %s';
+  //SErrNoData = 'No data for record';
   SErrExecuting = 'Error executing query: %s';
   SErrFetchingdata = 'Error fetching row data: %s';
   SErrGettingResult = 'Error getting result set: %s';
@@ -547,6 +609,9 @@ end;
 
 Function TConnectionName.AllocateCursorHandle: TSQLCursor;
 begin
+  {$IFDEF mysql80}
+    Result:=TMySQL80Cursor.Create;
+  {$ELSE}
   {$IFDEF mysql57}
     Result:=TMySQL57Cursor.Create;
   {$ELSE}
@@ -572,6 +637,7 @@ begin
   {$EndIf}
   {$ENDIF}
   {$ENDIF}
+  {$ENDIF}
 end;
 
 Procedure TConnectionName.DeAllocateCursorHandle(var cursor : TSQLCursor);
@@ -597,7 +663,7 @@ begin
     if assigned(AParams) and (AParams.count > 0) then
       FPreparedStatement := AParams.ParseSQL(FPreparedStatement,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psSimulated,paramBinding,ParamReplaceString);
     FPrepared:=True;
-    end
+    end;
 end;
 
 procedure TConnectionName.UnPrepareStatement(cursor: TSQLCursor);
@@ -743,8 +809,6 @@ begin
       begin
       if AField^.flags and AUTO_INCREMENT_FLAG <> 0 then
         NewType := ftAutoInc
-      else if AField^.flags and UNSIGNED_FLAG <> 0 then
-        NewType := ftLongWord
       else
         NewType := ftInteger;
       end;
@@ -1417,6 +1481,9 @@ end;
 
 class function TMySQLConnectionDef.ConnectionClass: TSQLConnectionClass;
 begin
+  {$IFDEF mysql80}
+    Result:=TMySQL80Connection;
+  {$ELSE}
   {$IFDEF mysql57}
     Result:=TMySQL57Connection;
   {$ELSE}
@@ -1442,6 +1509,7 @@ begin
   {$endif}
   {$ENDIF}
   {$ENDIF}
+  {$ENDIF}
 end;
 
 class function TMySQLConnectionDef.Description: String;
@@ -1469,6 +1537,12 @@ begin
   Result:=MysqlLoadedLibrary;
 end;
 
+{$IFDEF mysql80}
+  initialization
+    RegisterConnection(TMySQL80ConnectionDef);
+  finalization
+    UnRegisterConnection(TMySQL80ConnectionDef);
+{$ELSE}
 {$IFDEF mysql57}
   initialization
     RegisterConnection(TMySQL57ConnectionDef);
@@ -1512,7 +1586,8 @@ end;
       {$EndIf}
     {$EndIf}
   {$ENDIF}
-{$endif}
+{$ENDIF}
+{$ENDIF}
 {$ENDIF}
 {$ENDIF}
 

+ 1 - 1
packages/fcl-db/src/sqldb/sqldb.pp

@@ -3137,7 +3137,7 @@ begin
       UpdateServerIndexDefs;
 
     FStatement.Execute;
-    if not Cursor.FSelectable then
+    if (Cursor=nil) or (not Cursor.FSelectable) then
       DatabaseError(SErrNoSelectStatement,Self);
 
     // InternalInitFieldDef is only called after a prepare. i.e. not twice if

+ 6 - 5
packages/fcl-db/tests/sqldbtoolsunit.pas

@@ -7,7 +7,7 @@ interface
 uses
   Classes, SysUtils, toolsunit
   ,db, sqldb
-  ,mysql40conn, mysql41conn, mysql50conn, mysql51conn, mysql55conn, mysql56conn, mysql57conn
+  ,mysql40conn, mysql41conn, mysql50conn, mysql51conn, mysql55conn, mysql56conn, mysql57conn, mysql80conn
   ,ibconnection
   ,pqconnection
   ,odbcconn
@@ -20,13 +20,13 @@ uses
   ;
 
 type
-  TSQLConnType = (mysql40,mysql41,mysql50,mysql51,mysql55,mysql56,mysql57,postgresql,interbase,odbc,oracle,sqlite3,mssql,sybase);
+  TSQLConnType = (mysql40,mysql41,mysql50,mysql51,mysql55,mysql56,mysql57,mysql80,postgresql,interbase,odbc,oracle,sqlite3,mssql,sybase);
   TSQLServerType = (ssFirebird, ssInterbase, ssMSSQL, ssMySQL, ssOracle, ssPostgreSQL, ssSQLite, ssSybase, ssUnknown);
 
 const
-  MySQLConnTypes = [mysql40,mysql41,mysql50,mysql51,mysql55,mysql56,mysql57];
+  MySQLConnTypes = [mysql40,mysql41,mysql50,mysql51,mysql55,mysql56,mysql57,mysql80];
   SQLConnTypesNames : Array [TSQLConnType] of String[19] =
-        ('MYSQL40','MYSQL41','MYSQL50','MYSQL51','MYSQL55','MYSQL56','MYSQL57','POSTGRESQL','INTERBASE','ODBC','ORACLE','SQLITE3','MSSQL','SYBASE');
+        ('MYSQL40','MYSQL41','MYSQL50','MYSQL51','MYSQL55','MYSQL56','MYSQL57','MYSQL80','POSTGRESQL','INTERBASE','ODBC','ORACLE','SQLITE3','MSSQL','SYBASE');
              
   STestNotApplicable = 'This test does not apply to this sqldb connection type';
 
@@ -150,7 +150,7 @@ const
 
   // fall back mapping (e.g. in case GetConnectionInfo(citServerType) is not implemented)
   SQLConnTypeToServerTypeMap : array[TSQLConnType] of TSQLServerType =
-    (ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssPostgreSQL,ssFirebird,ssUnknown,ssOracle,ssSQLite,ssMSSQL,ssSybase);
+    (ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMysql,ssPostgreSQL,ssFirebird,ssUnknown,ssOracle,ssSQLite,ssMSSQL,ssSybase);
 
 
 function IdentifierCase(const s: string): string;
@@ -183,6 +183,7 @@ begin
     MYSQL55:    Fconnection := TMySQL55Connection.Create(nil);
     MYSQL56:    Fconnection := TMySQL56Connection.Create(nil);
     MYSQL57:    Fconnection := TMySQL57Connection.Create(nil);
+    MYSQL80:    Fconnection := TMySQL80Connection.Create(nil);
     SQLITE3:    Fconnection := TSQLite3Connection.Create(nil);
     POSTGRESQL: Fconnection := TPQConnection.Create(nil);
     INTERBASE : Fconnection := TIBConnection.Create(nil);

+ 56 - 0
packages/fcl-pdf/examples/monospacetext.pp

@@ -0,0 +1,56 @@
+program monospacetext;
+
+{$mode objfpc}{$H+}
+{$codepage UTF8}
+
+uses
+  Classes, SysUtils,
+  fpPDF;
+
+var
+  PDF: TPDFDocument;
+  Font1, Font2, Font3, Font4: integer;
+begin
+  if ParamCount<1 then
+    begin
+    Writeln(stderr,'Usage : monospacetext <fontdir>');
+    Writeln(stderr,'Needed fonts : cour.ttf, arial.ttf, verdanab.ttf consola.ttf');
+    Halt(1);
+    end;
+  PDF := TPDFDocument.Create(nil);
+  PDF.Infos.Producer := '';
+  PDF.Infos.CreationDate := Now;
+  PDF.Options := [poPageOriginAtTop, {poNoEmbeddedFonts,} poSubsetFont, poCompressFonts, poCompressImages];
+  PDF.DefaultOrientation := ppoPortrait;
+  PDF.DefaultPaperType := ptA4;
+  PDF.DefaultUnitOfMeasure := uomMillimeters;
+  PDF.FontDirectory := paramstr(1);
+  PDF.StartDocument;
+  PDF.Sections.AddSection;
+  PDF.Sections[0].AddPage(PDF.Pages.AddPage);;
+
+  //FontIndex := PDF.AddFont('Courier');
+  Font1 := PDF.AddFont('cour.ttf', 'Courier New');
+  Font2 := PDF.AddFont('arial.ttf', 'Arial');
+  Font3 := PDF.AddFont('verdanab.ttf', 'Verdana');
+  Font4 := PDF.AddFont('consola.ttf', 'Consolas');
+  PDF.Pages[0].SetFont(Font1, 10);
+  PDF.Pages[0].WriteText(10,10,'AEIOU-ÁÉÍÓÚ-ČŠŇŽ');
+  PDF.Pages[0].WriteText(10,15,'----------------');
+
+  PDF.Pages[0].SetFont(Font2, 10);
+  PDF.Pages[0].WriteText(10,30,'AEIOU-ÁÉÍÓÚ-ČŠŇŽ');
+  PDF.Pages[0].WriteText(10,35,'----------------');
+
+  PDF.Pages[0].SetFont(Font3, 10);
+  PDF.Pages[0].WriteText(10,40,'AEIOU-ÁÉÍÓÚ-ČŠŇŽ');
+  PDF.Pages[0].WriteText(10,45,'----------------');
+
+  PDF.Pages[0].SetFont(Font4, 10);
+  PDF.Pages[0].WriteText(10,50,'AEIOU-ÁÉÍÓÚ-ČŠŇŽ');
+  PDF.Pages[0].WriteText(10,55,'----------------');
+
+  PDF.SaveToFile('test.pdf');
+  PDF.Free;
+end.
+

+ 18 - 7
packages/fcl-pdf/src/fpparsettf.pp

@@ -822,13 +822,13 @@ begin
   if embed and not Embeddable then
     raise ETTF.Create(rsFontEmbeddingNotAllowed);
   PrepareEncoding(Encoding);
-//  MissingWidth:=ToNatural(Widths[Chars[CharCodes^[32]]].AdvanceWidth);  // Char(32) - Space character
-  FMissingWidth := Widths[Chars[CharCodes^[32]]].AdvanceWidth;  // Char(32) - Space character
+//  MissingWidth:=ToNatural(GetAdvanceWidth(Chars[CharCodes^[32]]));  // Char(32) - Space character
+  FMissingWidth := GetAdvanceWidth(Chars[CharCodes^[32]]);  // Char(32) - Space character
   for I:=0 to 255 do
   begin
     if (CharCodes^[i]>=0) and (CharCodes^[i]<=High(Chars))
-    and (Widths[Chars[CharCodes^[i]]].AdvanceWidth> 0) and (CharNames^[i]<> '.notdef') then
-      CharWidth[I]:= ToNatural(Widths[Chars[CharCodes^[I]]].AdvanceWidth)
+    and (GetAdvanceWidth(Chars[CharCodes^[i]])> 0) and (CharNames^[i]<> '.notdef') then
+      CharWidth[I]:= ToNatural(GetAdvanceWidth(Chars[CharCodes^[I]]))
     else
       CharWidth[I]:= FMissingWidth;
   end;
@@ -930,8 +930,19 @@ begin
 end;
 
 function TTFFileInfo.GetAdvanceWidth(AIndex: word): word;
-begin
-  Result := Widths[AIndex].AdvanceWidth;
+var
+  i: SizeInt;
+begin
+  // There may be more glyphs than elements in the array, in which
+  // case the last entry is to be used.
+  // https://docs.microsoft.com/en-us/typography/opentype/spec/hmtx
+  i := Length(Widths);
+  if AIndex >= i then
+    Dec(i)
+  else
+    i := AIndex;
+
+  Result := Widths[i].AdvanceWidth;
 end;
 
 function TTFFileInfo.ItalicAngle: single;
@@ -972,7 +983,7 @@ function TTFFileInfo.GetMissingWidth: integer;
 begin
   if FMissingWidth = 0 then
   begin
-    FMissingWidth := Widths[Chars[CharCodes^[32]]].AdvanceWidth;  // 32 is in reference to the Space character
+    FMissingWidth := GetAdvanceWidth(Chars[CharCodes^[32]]);  // 32 is in reference to the Space character
   end;
   Result := FMissingWidth;
 end;

+ 8 - 2
packages/fcl-pdf/src/fpttfsubsetter.pp

@@ -940,12 +940,18 @@ end;
 function TFontSubsetter.buildHmtxTable: TStream;
 var
   n: integer;
+  GID: longint;
+  LastGID: longint;
 begin
   Result := TMemoryStream.Create;
+  LastGID := Length(FFontInfo.Widths)-1;
   for n := 0 to FGlyphIDs.Count-1 do
   begin
-    WriteUInt16(Result, FFontInfo.Widths[FGlyphIDs[n].GID].AdvanceWidth);
-    WriteInt16(Result, FFontInfo.Widths[FGlyphIDs[n].GID].LSB);
+    GID := FGlyphIDs[n].GID;
+    if GID > LastGID then
+      GID := LastGID;
+    WriteUInt16(Result, FFontInfo.Widths[GID].AdvanceWidth);
+    WriteInt16(Result, FFontInfo.Widths[GID].LSB);
   end;
 end;
 

+ 7 - 0
packages/mysql/fpmake.pp

@@ -151,6 +151,13 @@ begin
         end;
     T.ResourceStrings := True;
 
+    T:=P.Targets.AddUnit('mysql80dyn.pp');
+      with T.Dependencies do
+        begin
+          AddInclude('mysql.inc');
+        end;
+    T.ResourceStrings := True;
+
     P.ExamplePath.Add('examples');
     P.Targets.AddExampleProgram('testdb3.pp');
     P.Targets.AddExampleProgram('testdb4.pp');

+ 164 - 37
packages/mysql/src/mysql.inc

@@ -31,7 +31,9 @@ uses
   {$DEFINE extdecl:=cdecl}
   const
     mysqllib = 'libmysqlclient.'+sharedsuffix;
-  {$IF DEFINED(mysql57)}
+  {$IF DEFINED(mysql80)}
+    mysqlvlib = mysqllib+'.21';
+  {$ELSEIF DEFINED(mysql57)}
     mysqlvlib = mysqllib+'.20';
   {$ELSEIF DEFINED(mysql55) or DEFINED(mysql56)}
     mysqlvlib = mysqllib+'.18';
@@ -53,6 +55,10 @@ uses
 {$ENDIF}
 
 
+{$IFDEF mysql80}
+  {$DEFINE mysql57}
+{$ENDIF mysql80}
+
 {$IFDEF mysql57}
   {$DEFINE mysql56}
 {$ENDIF mysql57}
@@ -151,22 +157,46 @@ uses
      MYSQL_SERVICENAME = 'MySQL';
 
   type
-     enum_server_command = (COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
-       COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,
-       COM_REFRESH,COM_SHUTDOWN,COM_STATISTICS,
-       COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
-       COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT,
-       COM_CHANGE_USER,COM_BINLOG_DUMP,COM_TABLE_DUMP,
-       COM_CONNECT_OUT,COM_REGISTER_SLAVE,
+     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, // deprecated
+       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,
 {$IFDEF mysql50}
-       COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
-       COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH,
+       COM_STMT_PREPARE,
+       COM_STMT_EXECUTE,
+       COM_STMT_SEND_LONG_DATA,
+       COM_STMT_CLOSE,
+       COM_STMT_RESET,
+       COM_SET_OPTION,
+       COM_STMT_FETCH,
  {$IFDEF mysql51}
        COM_DAEMON,
   {$IFDEF mysql56}
        COM_BINLOG_DUMP_GTID,
    {$IFDEF mysql57}
        COM_RESET_CONNECTION,
+     {$IFDEF mysql80}
+       COM_CLONE,
+     {$ENDIF}
    {$ENDIF}
   {$ENDIF}
  {$ENDIF}
@@ -236,6 +266,11 @@ uses
        FIELD_IS_DROPPED = (1 shl 26);         // Intern: Field is being dropped
    {$IFDEF mysql57}
        EXPLICIT_NULL_FLAG = (1 shl 27);       // Field is explicitly specified as NULL by the user
+     {$IFDEF mysql80}
+       FIELD_IS_MARKED = (1 shl 28);       // Intern: field is marked, general purpose
+       NOT_SECONDARY_FLAG = (1 << 29); // Field will not be loaded in secondary engine.
+       FIELD_IS_INVISIBLE = (1 << 30); // Field is explicitly marked as invisible by the user.
+     {$ENDIF}
    {$ENDIF}
   {$ENDIF}
  {$ENDIF}
@@ -247,7 +282,8 @@ uses
        REFRESH_HOSTS = 8;          // Flush host cache
        REFRESH_STATUS = 16;        // Flush status variables
        REFRESH_THREADS = 32;       // Flush thread cache
-       REFRESH_SLAVE = 64;         // Reset master info and restart slave thread
+       REFRESH_REPLICA = 64;         // Reset master info and restart replica thread
+       REFRESH_SLAVE = REFRESH_REPLICA;  // Reset master info and restart slave thread
        REFRESH_MASTER = 128;       // Remove all bin logs in the index and truncate the index
        REFRESH_ERROR_LOG = 256;    // Rotate only the erorr log
        REFRESH_ENGINE_LOG = 512;   // Flush all storage engine logs
@@ -259,13 +295,19 @@ uses
     { The following can't be set with mysql_refresh()  }
        REFRESH_READ_LOCK = 16384;          // Lock tables for read
        REFRESH_FAST = 32768;               // Intern flag
+
+       {$IFNDEF mysql80}
        REFRESH_QUERY_CACHE = 65536;        // RESET (remove all queries) from query cache
        REFRESH_QUERY_CACHE_FREE = $20000;  // pack query cache
-
        REFRESH_DES_KEY_FILE = $40000;
+       {$ENDIF}
+
        REFRESH_USER_RESOURCES = $80000;
        REFRESH_FOR_EXPORT = $100000;       // FLUSH TABLES ... FOR EXPORT
        REFRESH_OPTIMIZER_COSTS = $200000;  // FLUSH OPTIMIZER_COSTS
+       {$IFDEF mysql80}
+       REFRESH_PERSIST = $400000;          // RESET PERSIST
+       {$ENDIF}
 
        CLIENT_LONG_PASSWORD = 1;           // new more secure passwords
        CLIENT_FOUND_ROWS = 2;              // Found instead of affected rows
@@ -292,6 +334,11 @@ uses
        CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS : cardinal = (1 shl 22);    // Don't close the connection for a connection with expired password.
        CLIENT_SESSION_TRACK : cardinal = (1 shl 23);  // Capable of handling server state change information. Its a hint to the server to include the state change information in Ok packet.
        CLIENT_DEPRECATE_EOF : cardinal = (1 shl 24);  // Client no longer needs EOF packet
+       {$IFDEF mysql80}
+       CLIENT_OPTIONAL_RESULTSET_METADATA : cardinal = (1 shl 25);  // client can handle optional metadata information in the resultset
+       CLIENT_ZSTD_COMPRESSION_ALGORITHM : cardinal = (1 shl 26); // Client sets this flag when it is configured to use zstd compression method
+       CLIENT_QUERY_ATTRIBUTES : cardinal = (1 shl 27); // Can send the optional part containing the query parameter set(s)
+       {$ENDIF}
        CLIENT_SSL_VERIFY_SERVER_CERT : cardinal = 1 shl 30;
        CLIENT_REMEMBER_OPTIONS : cardinal = 1 shl 31;
 
@@ -384,17 +431,17 @@ uses
             return_status: pcuint;
             reading_or_writing: cuchar;
             save_char: cchar;
-            unused1: my_bool;  // Please remove with the next incompatible ABI change
-            unused2: my_bool;  // Please remove with the next incompatible ABI change
+              unused1: my_bool;  // Please remove with the next incompatible ABI change
+              unused2: my_bool;  // Please remove with the next incompatible ABI change
             compress: my_bool;
-            unused3: my_bool;  // Please remove with the next incompatible ABI change
+              unused3: my_bool;  // Please remove with the next incompatible ABI change
             { Pointer to query object in query cache, do not equal NULL (0) for
               queries in cache that have not stored its results yet }
-            unused: pcuchar;
+              unused: pcuchar;
             last_errno: cuint;
             error: cuchar;
-            unused4: my_bool;  // Please remove with the next incompatible ABI change
-            unused5: my_bool;  // Please remove with the next incompatible ABI change
+              unused4: my_bool;  // Please remove with the next incompatible ABI change
+              unused5: my_bool;  // Please remove with the next incompatible ABI change
             { Client library error message buffer. Actually belongs to struct MYSQL. }
             last_error: array[0..MYSQL_ERRMSG_SIZE-1] of cchar;
             { Client library sqlstate buffer. Set along with the error message. }
@@ -462,25 +509,44 @@ uses
        packet_error : culong = culong(not(0));
 
     type
-       enum_field_types = (MYSQL_TYPE_DECIMAL,MYSQL_TYPE_TINY,
-         MYSQL_TYPE_SHORT,MYSQL_TYPE_LONG,MYSQL_TYPE_FLOAT,
-         MYSQL_TYPE_DOUBLE,MYSQL_TYPE_NULL,
-         MYSQL_TYPE_TIMESTAMP,MYSQL_TYPE_LONGLONG,
-         MYSQL_TYPE_INT24,MYSQL_TYPE_DATE,MYSQL_TYPE_TIME,
-         MYSQL_TYPE_DATETIME,MYSQL_TYPE_YEAR,
+       enum_field_types = (
+         MYSQL_TYPE_DECIMAL,
+         MYSQL_TYPE_TINY,
+         MYSQL_TYPE_SHORT,
+         MYSQL_TYPE_LONG,
+         MYSQL_TYPE_FLOAT,
+         MYSQL_TYPE_DOUBLE,
+         MYSQL_TYPE_NULL,
+         MYSQL_TYPE_TIMESTAMP,
+         MYSQL_TYPE_LONGLONG,
+         MYSQL_TYPE_INT24,
+         MYSQL_TYPE_DATE,
+         MYSQL_TYPE_TIME,
+         MYSQL_TYPE_DATETIME,
+         MYSQL_TYPE_YEAR,
          MYSQL_TYPE_NEWDATE,
 {$IFDEF mysql50}
          MYSQL_TYPE_VARCHAR, MYSQL_TYPE_BIT,
  {$IFDEF mysql56}
          MYSQL_TYPE_TIMESTAMP2, MYSQL_TYPE_DATETIME2, MYSQL_TYPE_TIME2,
+   {$IFDEF mysql80}
+         MYSQL_TYPE_TYPED_ARRAY, // Used for replication only
+         MYSQL_TYPE_INVALID := 243,
+         MYSQL_TYPE_BOOL := 244, // Currently just a placeholder
+         MYSQL_TYPE_JSON := 245,
+   {$ENDIF}
  {$ENDIF}
          MYSQL_TYPE_NEWDECIMAL := 246,
 {$ENDIF}
          MYSQL_TYPE_ENUM := 247,
-         MYSQL_TYPE_SET := 248,MYSQL_TYPE_TINY_BLOB := 249,
-         MYSQL_TYPE_MEDIUM_BLOB := 250,MYSQL_TYPE_LONG_BLOB := 251,
-         MYSQL_TYPE_BLOB := 252,MYSQL_TYPE_VAR_STRING := 253,
-         MYSQL_TYPE_STRING := 254,MYSQL_TYPE_GEOMETRY := 255
+         MYSQL_TYPE_SET := 248,
+         MYSQL_TYPE_TINY_BLOB := 249,
+         MYSQL_TYPE_MEDIUM_BLOB := 250,
+         MYSQL_TYPE_LONG_BLOB := 251,
+         MYSQL_TYPE_BLOB := 252,
+         MYSQL_TYPE_VAR_STRING := 253,
+         MYSQL_TYPE_STRING := 254,
+         MYSQL_TYPE_GEOMETRY := 255
          );
 
     { For backward compatibility  }
@@ -907,15 +973,57 @@ uses
        MYSQL_DATA = st_mysql_data;
        PMYSQL_DATA = ^MYSQL_DATA;
 
-       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_OPT_LOCAL_INFILE,MYSQL_OPT_PROTOCOL,
-         MYSQL_SHARED_MEMORY_BASE_NAME,MYSQL_OPT_READ_TIMEOUT,
-         MYSQL_OPT_WRITE_TIMEOUT,MYSQL_OPT_USE_RESULT,
-         MYSQL_OPT_USE_REMOTE_CONNECTION,MYSQL_OPT_USE_EMBEDDED_CONNECTION,
-         MYSQL_OPT_GUESS_CONNECTION,MYSQL_SET_CLIENT_IP,
+       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_OPT_LOCAL_INFILE,
+         MYSQL_OPT_PROTOCOL,
+         MYSQL_SHARED_MEMORY_BASE_NAME,
+         MYSQL_OPT_READ_TIMEOUT,
+         MYSQL_OPT_WRITE_TIMEOUT,
+         MYSQL_OPT_USE_RESULT,
+         {$IFDEF MYSQL80}
+         MYSQL_REPORT_DATA_TRUNCATION,
+         MYSQL_OPT_RECONNECT,
+         MYSQL_PLUGIN_DIR,
+         MYSQL_DEFAULT_AUTH,
+         MYSQL_OPT_BIND,
+         MYSQL_OPT_SSL_KEY,
+         MYSQL_OPT_SSL_CERT,
+         MYSQL_OPT_SSL_CA,
+         MYSQL_OPT_SSL_CAPATH,
+         MYSQL_OPT_SSL_CIPHER,
+         MYSQL_OPT_SSL_CRL,
+         MYSQL_OPT_SSL_CRLPATH,
+         MYSQL_OPT_CONNECT_ATTR_RESET,
+         MYSQL_OPT_CONNECT_ATTR_ADD,
+         MYSQL_OPT_CONNECT_ATTR_DELETE,
+         MYSQL_SERVER_PUBLIC_KEY,
+         MYSQL_ENABLE_CLEARTEXT_PLUGIN,
+         MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
+         MYSQL_OPT_MAX_ALLOWED_PACKET,
+         MYSQL_OPT_NET_BUFFER_LENGTH,
+         MYSQL_OPT_TLS_VERSION,
+         MYSQL_OPT_SSL_MODE,
+         MYSQL_OPT_GET_SERVER_PUBLIC_KEY,
+         MYSQL_OPT_RETRY_COUNT,
+         MYSQL_OPT_OPTIONAL_RESULTSET_METADATA,
+         MYSQL_OPT_SSL_FIPS_MODE,
+         MYSQL_OPT_TLS_CIPHERSUITES,
+         MYSQL_OPT_COMPRESSION_ALGORITHMS,
+         MYSQL_OPT_ZSTD_COMPRESSION_LEVEL,
+         MYSQL_OPT_LOAD_DATA_LOCAL_DIR
+         {$ELSE}
+         MYSQL_OPT_USE_REMOTE_CONNECTION,
+         MYSQL_OPT_USE_EMBEDDED_CONNECTION,
+         MYSQL_OPT_GUESS_CONNECTION,
+         MYSQL_SET_CLIENT_IP,
          MYSQL_SECURE_AUTH
 {$IFDEF MYSQL50}
          ,MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT
@@ -936,6 +1044,7 @@ uses
    {$ENDIF}
   {$ENDIF}
  {$ENDIF}
+{$ENDIF}
 {$ENDIF}
          );
 
@@ -1000,6 +1109,19 @@ uses
             shared_memory_base_name : Pchar;
 {$ENDIF}
             max_allowed_packet : culong;
+{$IFDEF Mysql80}
+            compress : my_bool;
+            named_pipe : my_bool;
+            bind_address: Pchar;
+            report_data_truncation: my_bool;
+            { function pointers for local infile support  }
+            local_infile_init : function (_para1:Ppointer; _para2:Pchar; _para3:pointer):cint;cdecl;
+            local_infile_read : function (_para1:pointer; _para2:Pchar; _para3:cuint):cint;
+            local_infile_end : procedure (_para1:pointer);
+            local_infile_error : function (_para1:pointer; _para2:Pchar; _para3:cuint):cint;
+            local_infile_userdata : pointer;
+            extension : ^st_mysql_options_extention;
+{$ELSE}
             use_ssl : my_bool;               // if to use SSL or not
             compress : my_bool;
             named_pipe : my_bool;
@@ -1043,6 +1165,7 @@ uses
 {$IFDEF mysql51}
             extension : ^st_mysql_options_extention;
 {$ENDIF}
+{$ENDIF}
 {$ENDIF}
          end;
 
@@ -1144,6 +1267,8 @@ uses
             free_me : my_bool;           // If free in mysql_close
             reconnect : my_bool;         // set to 1 if automatic reconnect
             scramble : array[0..(SCRAMBLE_LENGTH+1)-1] of char;  // session-wide random string
+{$IFDEF mysql80}
+{$ELSE}
     {  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()      }
             rpl_pivot : my_bool;
@@ -1153,6 +1278,7 @@ uses
             next_slave : Pst_mysql;
             last_used_slave : Pst_mysql; // needed for round-robin slave pick
             last_used_con : Pst_mysql;   // needed for send/read/store/use result to work correctly with replication
+{$ENDIF}
 {$IFDEF mysql41}
             stmts : Pointer;             // was PList, list of all statements
             methods : Pst_mysql_methods;
@@ -2099,3 +2225,4 @@ end;
 initialization
   Refcount := 0;
 {$ENDIF}
+end.

+ 12 - 0
packages/mysql/src/mysql80dyn.pp

@@ -0,0 +1,12 @@
+{
+  Contains the MySQL calls for MySQL 8.0
+}
+
+unit mysql80dyn;
+
+{$DEFINE LinkDynamically}
+{$DEFINE MYSQL80}
+
+{$i mysql.inc}
+
+end.