summaryrefslogtreecommitdiff
path: root/packages/fcl-db/src/sqldb/mysql
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-db/src/sqldb/mysql')
-rw-r--r--packages/fcl-db/src/sqldb/mysql/Makefile94
-rw-r--r--packages/fcl-db/src/sqldb/mysql/fpmake.inc2
-rw-r--r--packages/fcl-db/src/sqldb/mysql/mysqlconn.inc38
3 files changed, 115 insertions, 19 deletions
diff --git a/packages/fcl-db/src/sqldb/mysql/Makefile b/packages/fcl-db/src/sqldb/mysql/Makefile
index 75dab6bce8..300e713dab 100644
--- a/packages/fcl-db/src/sqldb/mysql/Makefile
+++ b/packages/fcl-db/src/sqldb/mysql/Makefile
@@ -1,9 +1,9 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-02-06 rev 26692]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2014-12-07 rev 29213]
#
default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-android jvm-java jvm-android i8086-msdos
-BSDs = freebsd netbsd openbsd darwin
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-dragonfly arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-msdos
+BSDs = freebsd netbsd openbsd darwin dragonfly
UNIXs = linux $(BSDs) solaris qnx haiku aix
LIMIT83fs = go32v2 os2 emx watcom msdos
OSNeedsComspecToRunBatch = go32v2 watcom
@@ -184,6 +184,12 @@ $(error When compiling for arm-embedded, a sub-architecture (e.g. SUBARCH=armv4t
endif
override FPCOPT+=-Cp$(SUBARCH)
endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic32mx) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
TARGETSUFFIX=$(OS_TARGET)
SOURCESUFFIX=$(OS_SOURCE)
@@ -390,6 +396,9 @@ endif
ifeq ($(FULL_TARGET),i386-android)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),i386-aros)
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -477,6 +486,9 @@ endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -531,6 +543,9 @@ endif
ifeq ($(FULL_TARGET),mipsel-linux)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),mipsel-android)
override TARGET_UNITS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -612,6 +627,9 @@ endif
ifeq ($(FULL_TARGET),i386-android)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),i386-aros)
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -699,6 +717,9 @@ endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -753,6 +774,9 @@ endif
ifeq ($(FULL_TARGET),mipsel-linux)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
+endif
ifeq ($(FULL_TARGET),mipsel-android)
override TARGET_RSTS+=mysql40conn mysql41conn mysql50conn mysql51conn mysql55conn mysql56conn
endif
@@ -835,6 +859,9 @@ endif
ifeq ($(FULL_TARGET),i386-android)
override COMPILER_OPTIONS+=-S2
endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_OPTIONS+=-S2
+endif
ifeq ($(FULL_TARGET),m68k-linux)
override COMPILER_OPTIONS+=-S2
endif
@@ -922,6 +949,9 @@ endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override COMPILER_OPTIONS+=-S2
endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override COMPILER_OPTIONS+=-S2
+endif
ifeq ($(FULL_TARGET),arm-linux)
override COMPILER_OPTIONS+=-S2
endif
@@ -976,6 +1006,9 @@ endif
ifeq ($(FULL_TARGET),mipsel-linux)
override COMPILER_OPTIONS+=-S2
endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
ifeq ($(FULL_TARGET),mipsel-android)
override COMPILER_OPTIONS+=-S2
endif
@@ -1230,6 +1263,12 @@ EXEEXT=
HASSHAREDLIB=1
SHORTSUFFIX=lnx
endif
+ifeq ($(OS_TARGET),dragonfly)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=df
+endif
ifeq ($(OS_TARGET),freebsd)
BATCHEXT=.sh
EXEEXT=
@@ -1275,6 +1314,11 @@ EXEEXT=
SHAREDLIBEXT=.library
SHORTSUFFIX=amg
endif
+ifeq ($(OS_TARGET),aros)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=aros
+endif
ifeq ($(OS_TARGET),morphos)
EXEEXT=
SHAREDLIBEXT=.library
@@ -1857,6 +1901,16 @@ REQUIRE_PACKAGES_FPMKUNIT=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_MYSQL=1
endif
+ifeq ($(FULL_TARGET),i386-aros)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_MYSQL=1
+endif
ifeq ($(FULL_TARGET),m68k-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_PASZLIB=1
@@ -2147,6 +2201,16 @@ REQUIRE_PACKAGES_FPMKUNIT=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_MYSQL=1
endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_MYSQL=1
+endif
ifeq ($(FULL_TARGET),arm-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_PASZLIB=1
@@ -2327,6 +2391,16 @@ REQUIRE_PACKAGES_FPMKUNIT=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_MYSQL=1
endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_MYSQL=1
+endif
ifeq ($(FULL_TARGET),mipsel-android)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_PASZLIB=1
@@ -2784,7 +2858,7 @@ endif
ifdef CREATESHARED
override FPCOPT+=-Cg
endif
-ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifneq ($(findstring $(OS_TARGET),dragonfly freebsd openbsd netbsd linux solaris),)
ifeq ($(CPU_TARGET),x86_64)
override FPCOPT+=-Cg
endif
@@ -2814,17 +2888,23 @@ ifdef ACROSSCOMPILE
override FPCOPT+=$(CROSSOPT)
endif
override COMPILER:=$(strip $(FPC) $(FPCOPT))
-ifeq (,$(findstring -s ,$(COMPILER)))
+ifneq (,$(findstring -sh ,$(COMPILER)))
+UseEXECPPAS=1
+endif
+ifneq (,$(findstring -s ,$(COMPILER)))
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+UseEXECPPAS=1
+endif
+endif
+ifneq ($(UseEXECPPAS),1)
EXECPPAS=
else
-ifeq ($(FULL_SOURCE),$(FULL_TARGET))
ifdef RUNBATCH
EXECPPAS:=@$(RUNBATCH) $(PPAS)
else
EXECPPAS:=@$(PPAS)
endif
endif
-endif
.PHONY: fpc_units
ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
override ALLTARGET+=fpc_units
diff --git a/packages/fcl-db/src/sqldb/mysql/fpmake.inc b/packages/fcl-db/src/sqldb/mysql/fpmake.inc
index 50fcd03c85..87491373c9 100644
--- a/packages/fcl-db/src/sqldb/mysql/fpmake.inc
+++ b/packages/fcl-db/src/sqldb/mysql/fpmake.inc
@@ -6,4 +6,4 @@
Targets.ResetDefaults;
Targets.DefaultDir:='db/sqldb/mysql';
{ Drivers only for the following OSes }
-Targets.DefaultOS:=[win32,openbsd,netbsd,freebsd,darwin,linux,haiku];
+Targets.DefaultOS:=[win32,openbsd,netbsd,freebsd,darwin,linux,haiku,dragonfly];
diff --git a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
index 648227e822..49839fbd0a 100644
--- a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
+++ b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
@@ -59,6 +59,12 @@ Const
{$endif}
{$endif}
{$ENDIF}
+ MariaDBVersion =
+{$IFDEF mysql56} // MariaDB 10.0 is compatible with MySQL 5.6
+ '10.0';
+{$ELSE} // MariaDB 5.1..5.5 presumably report the same version number as MySQL
+ MySQLVersion;
+{$ENDIF}
Type
TTransactionName = Class(TSQLHandle)
@@ -93,11 +99,11 @@ Type
procedure ExecuteDirectMySQL(const query : string);
function EscapeString(const Str : string) : string;
protected
- function StrToStatementType(s : string) : TStatementType; override;
Procedure ConnectToServer; virtual;
Procedure SelectDatabase; virtual;
function MySQLDataType(AField: PMYSQL_FIELD; var NewType: TFieldType; var NewSize: Integer): Boolean;
function MySQLWriteData(AField: PMYSQL_FIELD; FieldDef: TFieldDef; Source, Dest: PChar; Len: integer; out CreateBlob : boolean): Boolean;
+
// SQLConnection methods
procedure DoInternalConnect; override;
procedure DoInternalDisconnect; override;
@@ -110,6 +116,7 @@ Type
Procedure DeAllocateCursorHandle(var cursor : TSQLCursor); override;
Function AllocateTransactionHandle : TSQLHandle; override;
+ function StrToStatementType(s : string) : TStatementType; override;
procedure PrepareStatement(cursor: TSQLCursor;ATransaction : TSQLTransaction;buf : string; AParams : TParams); override;
procedure UnPrepareStatement(cursor:TSQLCursor); override;
procedure FreeFldBuffers(cursor : TSQLCursor); override;
@@ -127,6 +134,7 @@ Type
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
procedure UpdateIndexDefs(IndexDefs : TIndexDefs;TableName : string); override;
function RowsAffected(cursor: TSQLCursor): TRowsCount; override;
+ function RefreshLastInsertID(Query : TCustomSQLQuery; Field : TField): Boolean; override;
Public
constructor Create(AOwner : TComponent); override;
procedure GetFieldNames(const TableName : string; List : TStrings); override;
@@ -323,7 +331,7 @@ begin
Result := mysql_stat(FMYSQL);
end;
-function TConnectionName.GetInsertID: Int64;
+Function TConnectionName.GetInsertID: int64;
begin
CheckConnected;
Result:=mysql_insert_id(GetHandle);
@@ -398,14 +406,14 @@ begin
end;
-procedure TConnectionName.ConnectToServer;
+Procedure TConnectionName.ConnectToServer;
begin
ConnectMySQL(FMySQL);
FServerInfo := strpas(mysql_get_server_info(FMYSQL));
FHostInfo := strpas(mysql_get_host_info(FMYSQL));
end;
-procedure TConnectionName.SelectDatabase;
+Procedure TConnectionName.SelectDatabase;
begin
if mysql_select_db(FMySQL,pchar(DatabaseName))<>0 then
MySQLError(FMySQL,SErrDatabaseSelectFailed,Self);
@@ -459,13 +467,15 @@ end;
procedure TConnectionName.DoInternalConnect;
var
- FullVersion,
- ClientVerStr: string;
+ FullVersion: string;
begin
InitialiseMysql;
Fullversion:=strpas(mysql_get_client_info());
- ClientVerStr := copy(FullVersion,1,3);
- If (ClientVerStr<>MySQLVersion) then
+ // Version string should start with version number:
+ // Note: in case of MariaDB version mismatch: tough luck, we report MySQL
+ // version only.
+ if (pos(MySQLVersion, Fullversion) <> 1) and
+ (pos(MariaDBVersion, Fullversion) <> 1) then
Raise EInOutError.CreateFmt(SErrVersionMisMatch,[ClassName,MySQLVersion,FullVersion]);
inherited DoInternalConnect;
ConnectToServer;
@@ -485,7 +495,7 @@ begin
Result:=FMySQL;
end;
-function TConnectionName.AllocateCursorHandle: TSQLCursor;
+Function TConnectionName.AllocateCursorHandle: TSQLCursor;
begin
{$IFDEF mysql56}
Result:=TMySQL56Cursor.Create;
@@ -516,7 +526,7 @@ begin
FreeAndNil(cursor);
end;
-function TConnectionName.AllocateTransactionHandle: TSQLHandle;
+Function TConnectionName.AllocateTransactionHandle: TSQLHandle;
begin
// Result:=TTransactionName.Create;
Result := nil;
@@ -1110,11 +1120,17 @@ begin
Result := -1;
end;
+function TConnectionName.RefreshLastInsertID(Query: TCustomSQLQuery; Field: TField): Boolean;
+begin
+ Field.AsLargeInt:=GetInsertID;
+ Result := True;
+end;
+
constructor TConnectionName.Create(AOwner: TComponent);
const SingleBackQoutes: TQuoteChars = ('`','`');
begin
inherited Create(AOwner);
- FConnOptions := FConnOptions + [sqEscapeRepeat] + [sqEscapeSlash];
+ FConnOptions := [sqEscapeRepeat, sqEscapeSlash, sqImplicitTransaction, sqLastInsertID];
FieldNameQuoteChars:=SingleBackQoutes;
FMySQL := Nil;
end;