Browse Source

--- Merging r26197 into '.':
C packages/fcl-db/tests/testfieldtypes.pas
C packages/fcl-db/tests/sqldbtoolsunit.pas
U packages/fcl-db/src/sqldb/mysql/mysql50conn.pas
U packages/fcl-db/src/sqldb/mysql/mysql51conn.pas
U packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
U packages/fcl-db/src/sqldb/mysql/mysql55conn.pas
A packages/fcl-db/src/sqldb/mysql/mysql56conn.pas
Summary of conflicts:
Text conflicts: 2

# revisions: 26197
r26197 | lacak | 2013-12-08 10:44:46 +0100 (Sun, 08 Dec 2013) | 1 line
Changed paths:
M /trunk/packages/fcl-db/src/sqldb/mysql/mysql50conn.pas
M /trunk/packages/fcl-db/src/sqldb/mysql/mysql51conn.pas
M /trunk/packages/fcl-db/src/sqldb/mysql/mysql55conn.pas
A /trunk/packages/fcl-db/src/sqldb/mysql/mysql56conn.pas
M /trunk/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
M /trunk/packages/fcl-db/tests/sqldbtoolsunit.pas
M /trunk/packages/fcl-db/tests/testfieldtypes.pas

fcl-db: mysql: add support for MySQL 5.6

git-svn-id: branches/fixes_2_6@26322 -

marco 11 years ago
parent
commit
d2b841d1bb

+ 1 - 0
.gitattributes

@@ -1976,6 +1976,7 @@ packages/fcl-db/src/sqldb/mysql/mysql4conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysql50conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysql50conn.pas svneol=native#text/plain
 packages/fcl-db/src/sqldb/mysql/mysql51conn.pas svneol=native#text/plain
 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/mysql55conn.pas svneol=native#text/plain
+packages/fcl-db/src/sqldb/mysql/mysql56conn.pas svneol=native#text/pascal
 packages/fcl-db/src/sqldb/mysql/mysqlconn.inc 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 svneol=native#text/plain
 packages/fcl-db/src/sqldb/odbc/Makefile.fpc svneol=native#text/plain
 packages/fcl-db/src/sqldb/odbc/Makefile.fpc svneol=native#text/plain

+ 1 - 1
packages/fcl-db/src/sqldb/mysql/mysql50conn.pas

@@ -4,7 +4,7 @@
 
 
 unit mysql50conn;
 unit mysql50conn;
 
 
-{$DEFINE MYSQL50_up}
+{$DEFINE MYSQL50_UP}
 {$DEFINE MYSQL50}
 {$DEFINE MYSQL50}
 
 
 {$i mysqlconn.inc}
 {$i mysqlconn.inc}

+ 0 - 1
packages/fcl-db/src/sqldb/mysql/mysql51conn.pas

@@ -4,7 +4,6 @@
 
 
 unit mysql51conn;
 unit mysql51conn;
 
 
-{$DEFINE MYSQL50_UP}
 {$DEFINE MYSQL51_UP}
 {$DEFINE MYSQL51_UP}
 {$DEFINE MYSQL51}
 {$DEFINE MYSQL51}
 
 

+ 1 - 2
packages/fcl-db/src/sqldb/mysql/mysql55conn.pas

@@ -4,8 +4,7 @@
 
 
 unit mysql55conn;
 unit mysql55conn;
 
 
-{$DEFINE MYSQL50_UP}
-{$DEFINE MYSQL51_UP}
+{$DEFINE MYSQL55_UP}
 {$DEFINE MYSQL55}
 {$DEFINE MYSQL55}
 
 
 {$i mysqlconn.inc}
 {$i mysqlconn.inc}

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

@@ -0,0 +1,12 @@
+{
+  Contains the TMysqlConnection for MySQL 5.6
+}
+
+unit mysql56conn;
+
+{$DEFINE MYSQL56_UP}
+{$DEFINE MYSQL56}
+
+{$i mysqlconn.inc}
+
+end.

+ 72 - 53
packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

@@ -1,3 +1,12 @@
+{$IFDEF MYSQL56_UP}
+  {$DEFINE MYSQL55_UP}
+{$ENDIF}
+{$IFDEF MYSQL55_UP}
+  {$DEFINE MYSQL51_UP}
+{$ENDIF}
+{$IFDEF MYSQL51_UP}
+  {$DEFINE MYSQL50_UP}
+{$ENDIF}
 
 
 {$mode objfpc}{$H+}
 {$mode objfpc}{$H+}
 
 
@@ -5,9 +14,12 @@ interface
 
 
 uses
 uses
   Classes, SysUtils,bufdataset,sqldb,db,ctypes,
   Classes, SysUtils,bufdataset,sqldb,db,ctypes,
- {$IFDEF mysql55}
+{$IFDEF mysql56}
+  mysql56dyn;
+{$ELSE}
+{$IFDEF mysql55}
   mysql55dyn;
   mysql55dyn;
- {$ELSE}
+{$ELSE}
 {$IFDEF mysql51}
 {$IFDEF mysql51}
    mysql51dyn;
    mysql51dyn;
 {$ELSE}  
 {$ELSE}  
@@ -17,38 +29,37 @@ uses
     {$IfDef mysql41}
     {$IfDef mysql41}
       mysql41dyn;
       mysql41dyn;
     {$ELSE}
     {$ELSE}
-      {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-        mysql40dyn;
-      {$ELSE}
-        mysql40dyn;
-      {$EndIf}
+      mysql40dyn;
     {$EndIf}
     {$EndIf}
   {$EndIf}
   {$EndIf}
 {$endif}
 {$endif}
 {$endif}
 {$endif}
+{$ENDIF}
 
 
 Const
 Const
+  MySQLVersion =
+{$IFDEF mysql56}
+    '5.6';
+{$ELSE}
 {$IFDEF mysql55}
 {$IFDEF mysql55}
-   MySQLVersion = '5.5';
-{$else}
+    '5.5';
+{$ELSE}
 {$IFDEF mysql51}
 {$IFDEF mysql51}
-    MySQLVersion = '5.1';
+    '5.1';
 {$else}    
 {$else}    
   {$IfDef mysql50}
   {$IfDef mysql50}
-    MySQLVersion = '5.0';
+    '5.0';
   {$ELSE}
   {$ELSE}
     {$IfDef mysql41}
     {$IfDef mysql41}
-      MySQLVersion = '4.1';
+      '4.1';
     {$ELSE}
     {$ELSE}
-      {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-        MySQLVersion = '4.0';
-      {$ELSE}
-        MySQLVersion = '4.0';
-      {$EndIf}
+      '4.0';
     {$EndIf}
     {$EndIf}
   {$EndIf}
   {$EndIf}
 {$endif}
 {$endif}
 {$endif}
 {$endif}
+{$ENDIF}
+
 Type
 Type
   TTransactionName = Class(TSQLHandle)
   TTransactionName = Class(TSQLHandle)
   protected
   protected
@@ -152,6 +163,12 @@ Type
 
 
 
 
   EMySQLError = Class(Exception);
   EMySQLError = Class(Exception);
+  {$IFDEF mysql56}
+    TMySQL56Connection = Class(TConnectionName);
+    TMySQL56ConnectionDef = Class(TMySQLConnectionDef);
+    TMySQL56Transaction = Class(TTransactionName);
+    TMySQL56Cursor = Class(TCursorName);
+  {$ELSE}
   {$ifdef mysql55}
   {$ifdef mysql55}
     TMySQL55Connection = Class(TConnectionName);
     TMySQL55Connection = Class(TConnectionName);
     TMySQL55ConnectionDef = Class(TMySQLConnectionDef);
     TMySQL55ConnectionDef = Class(TMySQLConnectionDef);
@@ -176,21 +193,15 @@ Type
           TMySQL41Transaction = Class(TTransactionName);
           TMySQL41Transaction = Class(TTransactionName);
           TMySQL41Cursor = Class(TCursorName);
           TMySQL41Cursor = Class(TCursorName);
         {$ELSE}
         {$ELSE}
-          {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-            TMySQLConnection = Class(TConnectionName);
-            TMySQL40ConnectionDef = Class(TMySQLConnectionDef);
-            TMySQLTransaction = Class(TTransactionName);
-            TMySQLCursor = Class(TCursorName);
-          {$ELSE}
-            TMySQL40Connection = Class(TConnectionName);
-            TMySQL40ConnectionDef = Class(TMySQLConnectionDef);
-            TMySQL40Transaction = Class(TTransactionName);
-            TMySQL40Cursor = Class(TCursorName);
-          {$EndIf}
+          TMySQL40Connection = Class(TConnectionName);
+          TMySQL40ConnectionDef = Class(TMySQLConnectionDef);
+          TMySQL40Transaction = Class(TTransactionName);
+          TMySQL40Cursor = Class(TCursorName);
         {$EndIf}
         {$EndIf}
       {$endif}
       {$endif}
     {$EndIf}
     {$EndIf}
   {$ENDIF}
   {$ENDIF}
+  {$ENDIF}
 
 
 implementation
 implementation
 
 
@@ -214,9 +225,17 @@ const
 {$IFDEF MYSQL50_UP}
 {$IFDEF MYSQL50_UP}
      ,'MYSQL_REPORT_DATA_TRUNCATION', 'MYSQL_OPT_RECONNECT'
      ,'MYSQL_REPORT_DATA_TRUNCATION', 'MYSQL_OPT_RECONNECT'
 {$IFDEF mysql51_UP}
 {$IFDEF mysql51_UP}
-         ,'MYSQL_OPT_SSL_VERIFY_SERVER_CERT'
-{$IFDEF mysql55}
-         ,'MYSQL_PLUGIN_DIR', 'MYSQL_DEFAULT_AUTH'
+     ,'MYSQL_OPT_SSL_VERIFY_SERVER_CERT'
+{$IFDEF mysql55_UP}
+     ,'MYSQL_PLUGIN_DIR', 'MYSQL_DEFAULT_AUTH'
+{$IFDEF MYSQL56_UP}
+     ,'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'
+{$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
@@ -469,6 +488,9 @@ end;
 
 
 function TConnectionName.AllocateCursorHandle: TSQLCursor;
 function TConnectionName.AllocateCursorHandle: TSQLCursor;
 begin
 begin
+  {$IFDEF mysql56}
+    Result:=TMySQL56Cursor.Create;
+  {$ELSE}
   {$IfDef mysql55}
   {$IfDef mysql55}
     Result:=TMySQL55Cursor.Create;
     Result:=TMySQL55Cursor.Create;
   {$ELSE}
   {$ELSE}
@@ -481,15 +503,12 @@ begin
         {$IfDef mysql41}
         {$IfDef mysql41}
           Result:=TMySQL41Cursor.Create;
           Result:=TMySQL41Cursor.Create;
         {$ELSE}
         {$ELSE}
-          {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-            Result:=TMySQLCursor.Create;
-          {$ELSE}
-            Result:=TMySQL40Cursor.Create;
-          {$EndIf}
+          Result:=TMySQL40Cursor.Create;
         {$EndIf}
         {$EndIf}
       {$EndIf}
       {$EndIf}
     {$EndIf}
     {$EndIf}
-  {$endif}
+  {$EndIf}
+  {$ENDIF}
 end;
 end;
 
 
 Procedure TConnectionName.DeAllocateCursorHandle(var cursor : TSQLCursor);
 Procedure TConnectionName.DeAllocateCursorHandle(var cursor : TSQLCursor);
@@ -1216,6 +1235,9 @@ end;
 
 
 class function TMySQLConnectionDef.ConnectionClass: TSQLConnectionClass;
 class function TMySQLConnectionDef.ConnectionClass: TSQLConnectionClass;
 begin
 begin
+  {$IFDEF mysql56}
+    Result:=TMySQL56Connection;
+  {$ELSE}
   {$IfDef mysql55}
   {$IfDef mysql55}
      Result:=TMySQL55Connection;
      Result:=TMySQL55Connection;
   {$ELSE}
   {$ELSE}
@@ -1228,15 +1250,12 @@ begin
         {$IfDef mysql41}
         {$IfDef mysql41}
           Result:=TMySQL41Connection;
           Result:=TMySQL41Connection;
         {$ELSE}
         {$ELSE}
-          {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-            Result:=TMySQLConnection;
-          {$ELSE}
-            Result:=TMySQL40Connection;
-          {$EndIf}
+          Result:=TMySQL40Connection;
         {$EndIf}
         {$EndIf}
       {$EndIf}
       {$EndIf}
     {$endif}
     {$endif}
   {$endif}
   {$endif}
+  {$ENDIF}
 end;
 end;
 
 
 class function TMySQLConnectionDef.Description: String;
 class function TMySQLConnectionDef.Description: String;
@@ -1264,6 +1283,12 @@ begin
   Result:=MysqlLoadedLibrary;
   Result:=MysqlLoadedLibrary;
 end;
 end;
 
 
+{$IFDEF mysql56}
+  initialization
+    RegisterConnection(TMySQL56ConnectionDef);
+  finalization
+    UnRegisterConnection(TMySQL56ConnectionDef);
+{$ELSE}
 {$IfDef mysql55}
 {$IfDef mysql55}
   initialization
   initialization
     RegisterConnection(TMySQL55ConnectionDef);
     RegisterConnection(TMySQL55ConnectionDef);
@@ -1288,20 +1313,14 @@ end;
         finalization
         finalization
           UnRegisterConnection(TMySQL41ConnectionDef);
           UnRegisterConnection(TMySQL41ConnectionDef);
       {$ELSE}
       {$ELSE}
-        {$IFDEF mysql4} // temporary backwards compatibility for Lazarus
-          initialization
-            RegisterConnection(TMySQL40ConnectionDef);
-          finalization
-            UnRegisterConnection(TMySQL40ConnectionDef);
-        {$ELSE}
-          initialization
-            RegisterConnection(TMySQL40ConnectionDef);
-          finalization
-            UnRegisterConnection(TMySQL40ConnectionDef);
-        {$EndIf}
+        initialization
+          RegisterConnection(TMySQL40ConnectionDef);
+        finalization
+          UnRegisterConnection(TMySQL40ConnectionDef);
       {$EndIf}
       {$EndIf}
     {$EndIf}
     {$EndIf}
   {$ENDIF}
   {$ENDIF}
 {$endif}
 {$endif}
+{$ENDIF}
 
 
 end.
 end.

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

@@ -7,7 +7,8 @@ interface
 uses
 uses
   Classes, SysUtils, toolsunit
   Classes, SysUtils, toolsunit
   ,db, sqldb
   ,db, sqldb
-  ,mysql40conn, mysql41conn, mysql50conn, mysql51conn, mysql55conn,ibconnection
+  ,mysql40conn, mysql41conn, mysql50conn, mysql51conn, mysql55conn, mysql56conn
+  ,ibconnection
   {$IFNDEF WIN64}
   {$IFNDEF WIN64}
   {See packages\fcl-db\src\sqldb\postgres\fpmake.pp: postgres connector won't be present on Win64}
   {See packages\fcl-db\src\sqldb\postgres\fpmake.pp: postgres connector won't be present on Win64}
   ,pqconnection
   ,pqconnection
@@ -25,13 +26,13 @@ uses
   ;
   ;
 
 
 type
 type
-  TSQLConnType = (mysql40,mysql41,mysql50,mysql51,mysql55,postgresql,interbase,odbc,oracle,sqlite3,mssql,sybase);
+  TSQLConnType = (mysql40,mysql41,mysql50,mysql51,mysql55,mysql56,postgresql,interbase,odbc,oracle,sqlite3,mssql,sybase);
   TSQLServerType = (ssFirebird, ssInterbase, ssMSSQL, ssMySQL, ssOracle, ssPostgreSQL, ssSQLite, ssSybase, ssUnknown);
   TSQLServerType = (ssFirebird, ssInterbase, ssMSSQL, ssMySQL, ssOracle, ssPostgreSQL, ssSQLite, ssSybase, ssUnknown);
 
 
 const
 const
-  MySQLConnTypes = [mysql40,mysql41,mysql50,mysql51,mysql55];
+  MySQLConnTypes = [mysql40,mysql41,mysql50,mysql51,mysql55,mysql56];
   SQLConnTypesNames : Array [TSQLConnType] of String[19] =
   SQLConnTypesNames : Array [TSQLConnType] of String[19] =
-        ('MYSQL40','MYSQL41','MYSQL50','MYSQL51','MYSQL55','POSTGRESQL','INTERBASE','ODBC','ORACLE','SQLITE3','MSSQL','SYBASE');
+        ('MYSQL40','MYSQL41','MYSQL50','MYSQL51','MYSQL55','MYSQL56','POSTGRESQL','INTERBASE','ODBC','ORACLE','SQLITE3','MSSQL','SYBASE');
              
              
   STestNotApplicable = 'This test does not apply to this sqldb-connection type';
   STestNotApplicable = 'This test does not apply to this sqldb-connection type';
 
 
@@ -140,7 +141,7 @@ const
 
 
   // fall back mapping (e.g. in case GetConnectionInfo(citServerType) is not implemented)
   // fall back mapping (e.g. in case GetConnectionInfo(citServerType) is not implemented)
   SQLConnTypeToServerTypeMap : array[TSQLConnType] of TSQLServerType =
   SQLConnTypeToServerTypeMap : array[TSQLConnType] of TSQLServerType =
-    (ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssPostgreSQL,ssFirebird,ssUnknown,ssOracle,ssSQLite,ssMSSQL,ssSybase);
+    (ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssMySQL,ssPostgreSQL,ssFirebird,ssUnknown,ssOracle,ssSQLite,ssMSSQL,ssSybase);
 
 
 
 
 { TSQLDBConnector }
 { TSQLDBConnector }
@@ -158,6 +159,7 @@ begin
   if SQLConnType = MYSQL50 then Fconnection := TMySQL50Connection.Create(nil);
   if SQLConnType = MYSQL50 then Fconnection := TMySQL50Connection.Create(nil);
   if SQLConnType = MYSQL51 then Fconnection := TMySQL51Connection.Create(nil);
   if SQLConnType = MYSQL51 then Fconnection := TMySQL51Connection.Create(nil);
   if SQLConnType = MYSQL55 then Fconnection := TMySQL55Connection.Create(nil);
   if SQLConnType = MYSQL55 then Fconnection := TMySQL55Connection.Create(nil);
+  if SQLConnType = MYSQL56 then Fconnection := TMySQL56Connection.Create(nil);
   if SQLConnType = SQLITE3 then Fconnection := TSQLite3Connection.Create(nil);
   if SQLConnType = SQLITE3 then Fconnection := TSQLite3Connection.Create(nil);
   if SQLConnType = POSTGRESQL then Fconnection := TPQConnection.Create(nil);
   if SQLConnType = POSTGRESQL then Fconnection := TPQConnection.Create(nil);
   if SQLConnType = INTERBASE then Fconnection := TIBConnection.Create(nil);
   if SQLConnType = INTERBASE then Fconnection := TIBConnection.Create(nil);
@@ -230,8 +232,9 @@ begin
       end;
       end;
     ssMySQL:
     ssMySQL:
       begin
       begin
+      // Add into my.ini: sql-mode="...,PAD_CHAR_TO_FULL_LENGTH,ANSI_QUOTES"
       FieldtypeDefinitions[ftWord] := 'SMALLINT UNSIGNED';
       FieldtypeDefinitions[ftWord] := 'SMALLINT UNSIGNED';
-      //MySQL recognizes BOOLEAN, but as synonym for TINYINT, not true sql boolean datatype
+      // MySQL recognizes BOOLEAN, but as synonym for TINYINT, not true sql boolean datatype
       FieldtypeDefinitions[ftBoolean]  := '';
       FieldtypeDefinitions[ftBoolean]  := '';
       // Use 'DATETIME' for datetime-fields instead of timestamp, because
       // Use 'DATETIME' for datetime-fields instead of timestamp, because
       // mysql's timestamps are only valid in the range 1970-2038.
       // mysql's timestamps are only valid in the range 1970-2038.