From e694897bb3bdea5f4606946dbad784ba7bf0af1c Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 15 Feb 2021 21:34:07 +0000 Subject: [PATCH 01/18] * initial implementation of CFI support for arm (non-thumb) git-svn-id: trunk@48684 - --- compiler/arm/cgcpu.pas | 14 +++++++++++++- compiler/cfidwarf.pas | 19 +++---------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas index c68bc59959..6a8b034df8 100644 --- a/compiler/arm/cgcpu.pas +++ b/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,6 +2005,7 @@ 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 @@ -2013,6 +2014,15 @@ unit cgcpu; 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); + 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; 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 diff --git a/compiler/cfidwarf.pas b/compiler/cfidwarf.pas index e27c2dee1c..ca2115f627 100644 --- a/compiler/cfidwarf.pas +++ b/compiler/cfidwarf.pas @@ -292,22 +292,9 @@ 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; {$else} { if more cpu dependend stuff is implemented, this needs more refactoring } From 09d6398942ffd3e1b139d72067cc20e8ccd7a400 Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 15 Feb 2021 22:25:18 +0000 Subject: [PATCH 02/18] * arm: better cfi git-svn-id: trunk@48685 - --- compiler/arm/cgcpu.pas | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas index 6a8b034df8..082ebf7985 100644 --- a/compiler/arm/cgcpu.pas +++ b/compiler/arm/cgcpu.pas @@ -2010,12 +2010,6 @@ unit cgcpu; if current_procinfo.framepointer<>NR_STACK_POINTER_REG then begin - { 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); offset:=-4; for r:=RS_R15 downto RS_R0 do if r in regs then @@ -2023,6 +2017,12 @@ unit cgcpu; 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 From 436a0d3f9ee306b55bb8d0b232587668c8ecf48a Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 15 Feb 2021 22:26:49 +0000 Subject: [PATCH 03/18] * generate advance_loc records only if there was code/data since the last advance_loc entry git-svn-id: trunk@48686 - --- compiler/cfidwarf.pas | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/compiler/cfidwarf.pas b/compiler/cfidwarf.pas index ca2115f627..8097590694 100644 --- a/compiler/cfidwarf.pas +++ b/compiler/cfidwarf.pas @@ -542,9 +542,26 @@ implementation procedure TDwarfAsmCFILowLevel.cfa_advance_loc(list:TAsmList); var currloclabel : tasmlabel; + hp : tai; 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; 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)); From 5b29e7a3ecfdc47203c64ee8b26e5db5cba35b60 Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 16 Feb 2021 21:16:54 +0000 Subject: [PATCH 04/18] + (safe) heuristics to use DW_CFA_advance_loc1 in CFI git-svn-id: trunk@48687 - --- compiler/cfidwarf.pas | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/compiler/cfidwarf.pas b/compiler/cfidwarf.pas index 8097590694..78f1dbdb72 100644 --- a/compiler/cfidwarf.pas +++ b/compiler/cfidwarf.pas @@ -543,6 +543,8 @@ implementation var currloclabel : tasmlabel; hp : tai; + instrcount : longint; + dwarfloc: Integer; begin if FLastloclabel=nil then internalerror(200404082); @@ -562,9 +564,36 @@ implementation 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; From 6a408fe97e037c63350314dbebba5b356334a730 Mon Sep 17 00:00:00 2001 From: pierre Date: Tue, 16 Feb 2021 23:15:08 +0000 Subject: [PATCH 05/18] Avoid writing characters after sym.value.len for conststring constant symbols git-svn-id: trunk@48688 - --- compiler/dbgstabs.pas | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/dbgstabs.pas b/compiler/dbgstabs.pas index 8b26099a61..6a7c6955c1 100644 --- a/compiler/dbgstabs.pas +++ b/compiler/dbgstabs.pas @@ -1609,10 +1609,14 @@ 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 + s:=strpas(pchar(sym.value.valueptr)); + s:=copy(s,1,sym.value.len); + if target_dbg.id=dbg_stabs then + st:='s'''+backspace_quote(octal_quote(s,[#0..#9,#11,#12,#14..#31,'''']),['"','\',#10,#13])+'''' + else + st:='s'''+stabx_quote_const(octal_quote(s,[#0..#9,#11,#12,#14..#31,'''']))+''''; + end else st:=''; end; From 34fd36f817dcbd2bd6d3d2d3100a29d62c5f573e Mon Sep 17 00:00:00 2001 From: pierre Date: Wed, 17 Feb 2021 07:09:55 +0000 Subject: [PATCH 06/18] Fix previous commit 48688 to avoid accessing 'invalid' positions in sym.value.valueptr git-svn-id: trunk@48689 - --- compiler/dbgstabs.pas | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/compiler/dbgstabs.pas b/compiler/dbgstabs.pas index 6a7c6955c1..2845df5be1 100644 --- a/compiler/dbgstabs.pas +++ b/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 @@ -1610,12 +1611,12 @@ implementation begin if sym.value.len<200 then begin - s:=strpas(pchar(sym.value.valueptr)); - s:=copy(s,1,sym.value.len); - if target_dbg.id=dbg_stabs then - st:='s'''+backspace_quote(octal_quote(s,[#0..#9,#11,#12,#14..#31,'''']),['"','\',#10,#13])+'''' + setlength(ss,sym.value.len); + for i:=0 to sym.value.len-1 do + ss[i_1]:=pchar(sym.value.valueptr)[i]; + st:='s'''+backspace_quote(octal_quote(ss,[#0..#9,#11,#12,#14..#31,'''']),['"','\',#10,#13])+'''' else - st:='s'''+stabx_quote_const(octal_quote(s,[#0..#9,#11,#12,#14..#31,'''']))+''''; + st:='s'''+stabx_quote_const(octal_quote(ss,[#0..#9,#11,#12,#14..#31,'''']))+''''; end else st:=''; From acf2567bda4a6fccfe7df3eabf9a2d78e51c508d Mon Sep 17 00:00:00 2001 From: pierre Date: Wed, 17 Feb 2021 09:46:37 +0000 Subject: [PATCH 07/18] Second trial to fix commit 48688 git-svn-id: trunk@48691 - --- compiler/dbgstabs.pas | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/dbgstabs.pas b/compiler/dbgstabs.pas index 2845df5be1..89ed3aea5f 100644 --- a/compiler/dbgstabs.pas +++ b/compiler/dbgstabs.pas @@ -1613,7 +1613,8 @@ implementation begin setlength(ss,sym.value.len); for i:=0 to sym.value.len-1 do - ss[i_1]:=pchar(sym.value.valueptr)[i]; + 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,'''']))+''''; From 0b8f98ab2426b958969608849a95041bc8c87505 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 17 Feb 2021 12:59:32 +0000 Subject: [PATCH 08/18] * Patch from Mattias Gaertner to add MySQL 8.0 support git-svn-id: trunk@48692 - --- .gitattributes | 3 + packages/fcl-db/fpmake.pp | 19 + packages/fcl-db/src/datadict/fpddmysql80.pp | 74 ++++ packages/fcl-db/src/sqldb/mysql/Makefile | 416 +++++++++--------- packages/fcl-db/src/sqldb/mysql/Makefile.fpc | 4 +- .../fcl-db/src/sqldb/mysql/mysql80conn.pas | 12 + packages/fcl-db/src/sqldb/mysql/mysqlconn.inc | 149 ++++--- packages/fcl-db/tests/sqldbtoolsunit.pas | 9 +- packages/mysql/fpmake.pp | 7 + packages/mysql/src/mysql.inc | 201 +++++++-- packages/mysql/src/mysql80dyn.pp | 12 + 11 files changed, 606 insertions(+), 300 deletions(-) create mode 100644 packages/fcl-db/src/datadict/fpddmysql80.pp create mode 100644 packages/fcl-db/src/sqldb/mysql/mysql80conn.pas create mode 100644 packages/mysql/src/mysql80dyn.pp diff --git a/.gitattributes b/.gitattributes index 6bcd8d2fc7..ef8b5e89bc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3363,6 +3363,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 @@ -3494,6 +3495,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 @@ -7725,6 +7727,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 diff --git a/packages/fcl-db/fpmake.pp b/packages/fcl-db/fpmake.pp index 15584bdcd8..a507cd82b9 100644 --- a/packages/fcl-db/fpmake.pp +++ b/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 diff --git a/packages/fcl-db/src/datadict/fpddmysql80.pp b/packages/fcl-db/src/datadict/fpddmysql80.pp new file mode 100644 index 0000000000..69be3a54eb --- /dev/null +++ b/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 5.7 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. + diff --git a/packages/fcl-db/src/sqldb/mysql/Makefile b/packages/fcl-db/src/sqldb/mysql/Makefile index 1cf725c068..9c57f42a79 100644 --- a/packages/fcl-db/src/sqldb/mysql/Makefile +++ b/packages/fcl-db/src/sqldb/mysql/Makefile @@ -350,628 +350,628 @@ 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),wasm-wasm) -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),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),wasm-wasm) -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),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) diff --git a/packages/fcl-db/src/sqldb/mysql/Makefile.fpc b/packages/fcl-db/src/sqldb/mysql/Makefile.fpc index a3a3eb4792..a737049d8f 100644 --- a/packages/fcl-db/src/sqldb/mysql/Makefile.fpc +++ b/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 diff --git a/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas b/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas new file mode 100644 index 0000000000..19f526752d --- /dev/null +++ b/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas @@ -0,0 +1,12 @@ +{ + Contains the TMysqlConnection for MySQL 5.7 +} + +unit mysql80conn; + +{$DEFINE MYSQL80_UP} +{$DEFINE MYSQL80} + +{$i mysqlconn.inc} + +end. diff --git a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc index 3aff95a893..a53b0da409 100644 --- a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc +++ b/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 = @@ -92,10 +103,7 @@ Type TCursorName = Class(TSQLCursor) protected FRes: PMYSQL_RES; { Record pointer } - // Statement with param placeholders $1 $2 etc. - 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; @@ -126,7 +134,6 @@ Type function InternalStrToDateTime(C: pchar; Len: integer): TDateTime; function InternalStrToFloat(C: pchar; Len: integer): Extended; function InternalStrToInt(C: pchar; Len: integer): integer; - function InternalStrToDWord(C: pchar; Len: integer): DWord; function InternalStrToInt64(C: pchar; Len: integer): Int64; function InternalStrToTime(C: pchar; Len: integer): TDateTime; function StrToMSecs(C: pchar; Len: integer): Word; @@ -209,6 +216,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 +268,7 @@ Type {$ENDIF} {$ENDIF} {$ENDIF} + {$ENDIF} implementation @@ -264,15 +278,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 +349,7 @@ const {$ENDIF} {$ENDIF} {$ENDIF} +{$ENDIF} {$ENDIF} ); @@ -300,9 +357,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'; @@ -518,6 +575,7 @@ begin // Version string should start with version number: // Note: in case of MariaDB version mismatch: tough luck, we report MySQL // version only. + writeln('TConnectionName.DoInternalConnect FullVersion=',FullVersion,' MySQLVersion=',MySQLVersion); if (pos(MySQLVersion, FullVersion) <> 1) and (pos(MariaDBVersion, FullVersion) <> 1) then Raise EInOutError.CreateFmt(SErrVersionMisMatch,[ClassName,MySQLVersion,FullVersion]); @@ -547,6 +605,9 @@ end; Function TConnectionName.AllocateCursorHandle: TSQLCursor; begin + {$IFDEF mysql80} + Result:=TMySQL80Cursor.Create; + {$ELSE} {$IFDEF mysql57} Result:=TMySQL57Cursor.Create; {$ELSE} @@ -572,6 +633,7 @@ begin {$EndIf} {$ENDIF} {$ENDIF} + {$ENDIF} end; Procedure TConnectionName.DeAllocateCursorHandle(var cursor : TSQLCursor); @@ -593,10 +655,9 @@ begin // DatabaseError('Parameters (not) yet supported for the MySQL SqlDB connection.',self); With Cursor as TCursorName do begin - FPreparedStatement:=Buf; + FStatement:=Buf; if assigned(AParams) and (AParams.count > 0) then - FPreparedStatement := AParams.ParseSQL(FPreparedStatement,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psSimulated,paramBinding,ParamReplaceString); - FPrepared:=True; + FStatement := AParams.ParseSQL(FStatement,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psSimulated,paramBinding,ParamReplaceString); end end; @@ -625,7 +686,6 @@ begin mysql_free_result(C.FRes); C.FRes:=Nil; end; - C.FInitFieldDef:=True; SetLength(c.MapDSRowToMSQLRow,0); inherited; end; @@ -653,19 +713,18 @@ begin ParamNames[AParams.count-i-1] := C.ParamReplaceString+inttostr(AParams[i].Index+1); ParamValues[AParams.count-i-1] := GetAsSQLText(AParams[i]); end; - C.FActualStatement := stringsreplace(C.FPreparedStatement,ParamNames,ParamValues,[rfReplaceAll]); - end - else - C.FActualStatement:=C.FPreparedStatement; + // paramreplacestring kan een probleem geven bij postgres als hij niet meer gewoon $ is? + C.FStatement := stringsreplace(C.FStatement,ParamNames,ParamValues,[rfReplaceAll]); + end; if LogEvent(detParamValue) then LogParams(AParams); if LogEvent(detExecute) then - Log(detExecute, C.FPreparedStatement); + Log(detExecute, C.FStatement); if LogEvent(detActualSQL) then - Log(detActualSQL,C.FActualStatement); + Log(detActualSQL,C.FStatement); - if mysql_query(FMySQL,Pchar(C.FActualStatement))<>0 then + if mysql_query(FMySQL,Pchar(C.FStatement))<>0 then begin if not ForcedClose then MySQLError(FMYSQL,SErrExecuting,Self) @@ -743,8 +802,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; @@ -929,17 +986,6 @@ begin Result:=StrToInt(S); end; -function TConnectionName.InternalStrToDWord(C: pchar; Len: integer): DWord; -Var - S : String; -begin - Result := 0; - if (Len=0) or (C=Nil) then - exit; - SetString(S,C,Len); - Result:=StrToDWord(S); -end; - function TConnectionName.InternalStrToInt64(C: pchar; Len: integer): Int64; Var @@ -1058,7 +1104,7 @@ begin Result := 0 else Result := EncodeDate(EY, EM, ED); - Result := ComposeDateTime(Result, EncodeTimeInterval(EH, EN, ES, EMS)); + Result := ComposeDateTime(Result, EncodeTime(EH, EN, ES, EMS)); end; function TConnectionName.InternalStrToTime(C: pchar; Len: integer): TDateTime; @@ -1126,7 +1172,6 @@ var VL: LargeInt; VS: Smallint; VW: Word; - VO: LongWord; VF: Double; VC: Currency; VD: TDateTime; @@ -1168,11 +1213,6 @@ begin VL := InternalStrToInt64(Source, Len); Move(VL, Dest^, SizeOf(LargeInt)); end; - ftLongWord: - begin - VO := InternalStrToDWord(Source, Len); - Move(VO, Dest^, SizeOf(LongWord)); - end; ftFloat: begin VF := InternalStrToFloat(Source, Len); @@ -1417,6 +1457,9 @@ end; class function TMySQLConnectionDef.ConnectionClass: TSQLConnectionClass; begin + {$IFDEF mysql80} + Result:=TMySQL80Connection; + {$ELSE} {$IFDEF mysql57} Result:=TMySQL57Connection; {$ELSE} @@ -1442,6 +1485,7 @@ begin {$endif} {$ENDIF} {$ENDIF} + {$ENDIF} end; class function TMySQLConnectionDef.Description: String; @@ -1469,6 +1513,12 @@ begin Result:=MysqlLoadedLibrary; end; +{$IFDEF mysql80} + initialization + RegisterConnection(TMySQL80ConnectionDef); + finalization + UnRegisterConnection(TMySQL80ConnectionDef); +{$ELSE} {$IFDEF mysql57} initialization RegisterConnection(TMySQL57ConnectionDef); @@ -1512,7 +1562,8 @@ end; {$EndIf} {$EndIf} {$ENDIF} -{$endif} +{$ENDIF} +{$ENDIF} {$ENDIF} {$ENDIF} diff --git a/packages/fcl-db/tests/sqldbtoolsunit.pas b/packages/fcl-db/tests/sqldbtoolsunit.pas index 7392e7c95f..e7fb53866d 100644 --- a/packages/fcl-db/tests/sqldbtoolsunit.pas +++ b/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'; @@ -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); diff --git a/packages/mysql/fpmake.pp b/packages/mysql/fpmake.pp index f36ee03852..0fc7d0a2cb 100644 --- a/packages/mysql/fpmake.pp +++ b/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'); diff --git a/packages/mysql/src/mysql.inc b/packages/mysql/src/mysql.inc index 94062396f0..a6febbbdbf 100644 --- a/packages/mysql/src/mysql.inc +++ b/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. diff --git a/packages/mysql/src/mysql80dyn.pp b/packages/mysql/src/mysql80dyn.pp new file mode 100644 index 0000000000..754435f2f3 --- /dev/null +++ b/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. From 54a48183bc82fc203be8888f0cc122a9a2a698cc Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 17 Feb 2021 13:26:18 +0000 Subject: [PATCH 09/18] * Fix from Joellin to correctly read monospace fonts git-svn-id: trunk@48694 - --- packages/fcl-pdf/src/fpparsettf.pp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/fcl-pdf/src/fpparsettf.pp b/packages/fcl-pdf/src/fpparsettf.pp index fc7c243b5c..9dc055fca4 100644 --- a/packages/fcl-pdf/src/fpparsettf.pp +++ b/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; +var + i: SizeInt; begin - Result := Widths[AIndex].AdvanceWidth; + // 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; From 3227c5953d87147cb9ea72dc2f553d6d887ae013 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Wed, 17 Feb 2021 13:26:23 +0000 Subject: [PATCH 10/18] fcl-db: clean up git-svn-id: trunk@48695 - --- packages/fcl-db/src/sqldb/mysql/mysqlconn.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc index a53b0da409..263917ffea 100644 --- a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc +++ b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc @@ -575,7 +575,6 @@ begin // Version string should start with version number: // Note: in case of MariaDB version mismatch: tough luck, we report MySQL // version only. - writeln('TConnectionName.DoInternalConnect FullVersion=',FullVersion,' MySQLVersion=',MySQLVersion); if (pos(MySQLVersion, FullVersion) <> 1) and (pos(MariaDBVersion, FullVersion) <> 1) then Raise EInOutError.CreateFmt(SErrVersionMisMatch,[ClassName,MySQLVersion,FullVersion]); From aa4fd5e6b10f29ac5f17a6875291ae3ab0d106ea Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 17 Feb 2021 13:32:03 +0000 Subject: [PATCH 11/18] * Fix issue ID #35251 (patch from Rumen Gyurov) git-svn-id: trunk@48696 - --- packages/fcl-pdf/src/fpttfsubsetter.pp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/fcl-pdf/src/fpttfsubsetter.pp b/packages/fcl-pdf/src/fpttfsubsetter.pp index df8976c36a..f290a3992d 100644 --- a/packages/fcl-pdf/src/fpttfsubsetter.pp +++ b/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; From e08a2ea86b43a2c037f0cf7c2b721951d3075492 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 17 Feb 2021 13:35:48 +0000 Subject: [PATCH 12/18] * Example for monospace fonts and subsetting git-svn-id: trunk@48697 - --- .gitattributes | 1 + packages/fcl-pdf/examples/monospacetext.pp | 56 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 packages/fcl-pdf/examples/monospacetext.pp diff --git a/.gitattributes b/.gitattributes index ef8b5e89bc..448fe222b0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3882,6 +3882,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 diff --git a/packages/fcl-pdf/examples/monospacetext.pp b/packages/fcl-pdf/examples/monospacetext.pp new file mode 100644 index 0000000000..af3d5190e2 --- /dev/null +++ b/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 '); + 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. + From 599ba8cc2a1d68bb9dc6dae9600cac6b1847d046 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 17 Feb 2021 20:43:37 +0000 Subject: [PATCH 13/18] + generate initial cfi for aarch64 git-svn-id: trunk@48701 - --- compiler/aarch64/cpubase.pas | 2 +- compiler/cfidwarf.pas | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/compiler/aarch64/cpubase.pas b/compiler/aarch64/cpubase.pas index 92d5da84e4..5032c573e0 100644 --- a/compiler/aarch64/cpubase.pas +++ b/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; diff --git a/compiler/cfidwarf.pas b/compiler/cfidwarf.pas index 78f1dbdb72..ddc3a13000 100644 --- a/compiler/cfidwarf.pas +++ b/compiler/cfidwarf.pas @@ -244,8 +244,6 @@ implementation datatype:=dt_none; end; - - {**************************************************************************** TDwarfAsmCFILowLevel ****************************************************************************} @@ -296,6 +294,13 @@ implementation 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 } procedure TDwarfAsmCFILowLevel.generate_initial_instructions(list:TAsmList); From 2da4113310137943b4a85c6afbeb3b1364c7e373 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 17 Feb 2021 21:07:57 +0000 Subject: [PATCH 14/18] * Cursor can be nil, patch from Mattias Gaertner git-svn-id: trunk@48702 - --- packages/fcl-db/src/sqldb/sqldb.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fcl-db/src/sqldb/sqldb.pp b/packages/fcl-db/src/sqldb/sqldb.pp index 3118e0f545..4be0edf413 100644 --- a/packages/fcl-db/src/sqldb/sqldb.pp +++ b/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 From 14dcf30988851b65b86ca6d2dd8fa00dc06273de Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 18 Feb 2021 09:20:44 +0000 Subject: [PATCH 15/18] fcl-db: fixed mysql transaction git-svn-id: trunk@48705 - --- packages/fcl-db/src/datadict/fpddmysql80.pp | 2 +- .../fcl-db/src/sqldb/mysql/mysql80conn.pas | 2 +- packages/fcl-db/src/sqldb/mysql/mysqlconn.inc | 45 ++++++++++++++----- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/packages/fcl-db/src/datadict/fpddmysql80.pp b/packages/fcl-db/src/datadict/fpddmysql80.pp index 69be3a54eb..c8e2a0bbfb 100644 --- a/packages/fcl-db/src/datadict/fpddmysql80.pp +++ b/packages/fcl-db/src/datadict/fpddmysql80.pp @@ -3,7 +3,7 @@ Copyright (c) 2007 by Michael Van Canneyt, member of the Free Pascal development team - MySQL 5.7 Data Dictionary Engine Implementation. + MySQL 8.0 Data Dictionary Engine Implementation. See the file COPYING.FPC, included in this distribution, for details about the copyright. diff --git a/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas b/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas index 19f526752d..739f68150d 100644 --- a/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas +++ b/packages/fcl-db/src/sqldb/mysql/mysql80conn.pas @@ -1,5 +1,5 @@ { - Contains the TMysqlConnection for MySQL 5.7 + Contains the TMysqlConnection for MySQL 8.0 } unit mysql80conn; diff --git a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc index 263917ffea..f90fd9f310 100644 --- a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc +++ b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc @@ -103,6 +103,10 @@ Type TCursorName = Class(TSQLCursor) protected FRes: PMYSQL_RES; { Record pointer } + // Statement with param placeholders $1 $2 etc. + 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 } @@ -134,6 +138,7 @@ Type function InternalStrToDateTime(C: pchar; Len: integer): TDateTime; function InternalStrToFloat(C: pchar; Len: integer): Extended; function InternalStrToInt(C: pchar; Len: integer): integer; + function InternalStrToDWord(C: pchar; Len: integer): DWord; function InternalStrToInt64(C: pchar; Len: integer): Int64; function InternalStrToTime(C: pchar; Len: integer): TDateTime; function StrToMSecs(C: pchar; Len: integer): Word; @@ -654,10 +659,11 @@ begin // DatabaseError('Parameters (not) yet supported for the MySQL SqlDB connection.',self); With Cursor as TCursorName do begin - FStatement:=Buf; + FPreparedStatement:=Buf; if assigned(AParams) and (AParams.count > 0) then - FStatement := AParams.ParseSQL(FStatement,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psSimulated,paramBinding,ParamReplaceString); - end + FPreparedStatement := AParams.ParseSQL(FPreparedStatement,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psSimulated,paramBinding,ParamReplaceString); + FPrepared:=True; + end; end; procedure TConnectionName.UnPrepareStatement(cursor: TSQLCursor); @@ -685,6 +691,7 @@ begin mysql_free_result(C.FRes); C.FRes:=Nil; end; + C.FInitFieldDef:=True; SetLength(c.MapDSRowToMSQLRow,0); inherited; end; @@ -712,18 +719,19 @@ begin ParamNames[AParams.count-i-1] := C.ParamReplaceString+inttostr(AParams[i].Index+1); ParamValues[AParams.count-i-1] := GetAsSQLText(AParams[i]); end; - // paramreplacestring kan een probleem geven bij postgres als hij niet meer gewoon $ is? - C.FStatement := stringsreplace(C.FStatement,ParamNames,ParamValues,[rfReplaceAll]); - end; + C.FActualStatement := stringsreplace(C.FPreparedStatement,ParamNames,ParamValues,[rfReplaceAll]); + end + else + C.FActualStatement:=C.FPreparedStatement; if LogEvent(detParamValue) then LogParams(AParams); if LogEvent(detExecute) then - Log(detExecute, C.FStatement); + Log(detExecute, C.FPreparedStatement); if LogEvent(detActualSQL) then - Log(detActualSQL,C.FStatement); + Log(detActualSQL,C.FActualStatement); - if mysql_query(FMySQL,Pchar(C.FStatement))<>0 then + if mysql_query(FMySQL,Pchar(C.FActualStatement))<>0 then begin if not ForcedClose then MySQLError(FMYSQL,SErrExecuting,Self) @@ -985,6 +993,17 @@ begin Result:=StrToInt(S); end; +function TConnectionName.InternalStrToDWord(C: pchar; Len: integer): DWord; +Var + S : String; +begin + Result := 0; + if (Len=0) or (C=Nil) then + exit; + SetString(S,C,Len); + Result:=StrToDWord(S); +end; + function TConnectionName.InternalStrToInt64(C: pchar; Len: integer): Int64; Var @@ -1103,7 +1122,7 @@ begin Result := 0 else Result := EncodeDate(EY, EM, ED); - Result := ComposeDateTime(Result, EncodeTime(EH, EN, ES, EMS)); + Result := ComposeDateTime(Result, EncodeTimeInterval(EH, EN, ES, EMS)); end; function TConnectionName.InternalStrToTime(C: pchar; Len: integer): TDateTime; @@ -1171,6 +1190,7 @@ var VL: LargeInt; VS: Smallint; VW: Word; + VO: LongWord; VF: Double; VC: Currency; VD: TDateTime; @@ -1212,6 +1232,11 @@ begin VL := InternalStrToInt64(Source, Len); Move(VL, Dest^, SizeOf(LargeInt)); end; + ftLongWord: + begin + VO := InternalStrToDWord(Source, Len); + Move(VO, Dest^, SizeOf(LongWord)); + end; ftFloat: begin VF := InternalStrToFloat(Source, Len); From 22ad12d5b7a578f21c9a59345ada3c6ad3f1872e Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 18 Feb 2021 15:09:04 +0000 Subject: [PATCH 16/18] * Fix compilation, additional mysql git-svn-id: trunk@48710 - --- packages/fcl-db/tests/sqldbtoolsunit.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fcl-db/tests/sqldbtoolsunit.pas b/packages/fcl-db/tests/sqldbtoolsunit.pas index e7fb53866d..22bc75c744 100644 --- a/packages/fcl-db/tests/sqldbtoolsunit.pas +++ b/packages/fcl-db/tests/sqldbtoolsunit.pas @@ -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; From 600a5dd13fa707280908935b2a5bd14879125874 Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 18 Feb 2021 15:10:05 +0000 Subject: [PATCH 17/18] * Fix from mattias Gartner for issue ID #38509, correctly rest index on close/reopen git-svn-id: trunk@48711 - --- packages/fcl-db/src/base/bufdataset.pas | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/fcl-db/src/base/bufdataset.pas b/packages/fcl-db/src/base/bufdataset.pas index 7d59e58086..e008cd1498 100644 --- a/packages/fcl-db/src/base/bufdataset.pas +++ b/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; From ef8d520e8277925f08c06e3b635a54ea80b2dfa7 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 18 Feb 2021 21:44:12 +0000 Subject: [PATCH 18/18] * more cfi support for aarch64 git-svn-id: trunk@48714 - --- compiler/aarch64/cgcpu.pas | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/compiler/aarch64/cgcpu.pas b/compiler/aarch64/cgcpu.pas index 2036e99534..9579181ddf 100644 --- a/compiler/aarch64/cgcpu.pas +++ b/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