You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/06/10 12:53:04 UTC

[11/11] jena git commit: JENA-1192: Support for the MariaDB JDBC driver.

JENA-1192: Support for the MariaDB JDBC driver.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/edba1313
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/edba1313
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/edba1313

Branch: refs/heads/master
Commit: edba13136e2dd201e26e24a62e3f1b8a5c20e81e
Parents: 9dd5ac3
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jun 10 13:44:38 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jun 10 13:44:58 2016 +0100

----------------------------------------------------------------------
 .../jena/sdb/layout2/LoaderTuplesNodes.java     |  3 +-
 .../apache/jena/sdb/layout2/NodeLayout2.java    |  2 +-
 .../main/java/org/apache/jena/sdb/sql/JDBC.java | 36 ++++++++++++++++----
 .../org/apache/jena/sdb/store/DatabaseType.java |  7 ++--
 .../org/apache/jena/sdb/store/StoreFactory.java | 21 +++++++++++-
 .../org/apache/jena/sdb/util/StoreUtils.java    | 11 +++---
 6 files changed, 60 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
index 395a8ee..0fee236 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
@@ -285,8 +285,7 @@ public class LoaderTuplesNodes
     		if (currentLoader == null) { // make a new loader
     			try {
 					currentLoader =
-						tupleLoaderClass.getConstructor(SDBConnection.class, TableDesc.class, 
-								Integer.TYPE).newInstance(connection(), tuple.table, chunkSize);
+						tupleLoaderClass.getConstructor(SDBConnection.class, TableDesc.class, Integer.TYPE).newInstance(connection(), tuple.table, chunkSize);
 				} catch (Exception e) {
 					throw new SDBException("Problem making new tupleloader", e);
 				}

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
index bbe174d..6fa56b6 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
 
 public class NodeLayout2
 {
-    // Turn into the lexcial form
+    // Turn into the lexical form
 
     public static String nodeToLex(Node node)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
index ca55fcd..f1da4bd 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
@@ -40,9 +40,13 @@ public class JDBC
     // The "well known" not a JDBC connection really scheme
     public static final String jdbcNone = "jdbc:none" ;
 
+    public static final String jdbcDriverClassMySQL ; 
+    public static final String jdbcDriverClassMariaDB ;
+    
     private static Map<DatabaseType, String> driver = new HashMap<DatabaseType, String>() ;
     static {
         driver.put(DatabaseType.MySQL,      "com.mysql.jdbc.Driver") ;
+        driver.put(DatabaseType.MariaDB,    "org.mariadb.jdbc.Driver") ;
         driver.put(DatabaseType.PostgreSQL, "org.postgresql.Driver") ;
         driver.put(DatabaseType.H2,         "org.h2.Driver") ;
         driver.put(DatabaseType.HSQLDB,     "org.hsqldb.jdbcDriver") ;
@@ -52,6 +56,9 @@ public class JDBC
         driver.put(DatabaseType.Oracle,     "oracle.jdbc.driver.OracleDriver") ;
         driver.put(DatabaseType.DB2,        "com.ibm.db2.jcc.DB2Driver") ;
         driver.put(DatabaseType.SAP,        "com.sap.db.jdbc.Driver") ;
+        
+        jdbcDriverClassMySQL       = driver.get(DatabaseType.MySQL) ;
+        jdbcDriverClassMariaDB     = driver.get(DatabaseType.MariaDB) ;
     }
     
     static public String getDriver(DatabaseType dbType) { return driver.get(dbType) ; }
@@ -62,6 +69,8 @@ public class JDBC
     static public void loadDriverH2()  { loadDriver(driver.get(DatabaseType.H2)) ; }
     /** Explicitly load the MySQL driver */ 
     static public void loadDriverMySQL() { loadDriver(driver.get(DatabaseType.MySQL)) ; }
+    /** Explicitly load the MariaDB driver */ 
+    static public void loadDriverMariaDB() { loadDriver(driver.get(DatabaseType.MariaDB)) ; }
     /** Explicitly load the PostgreSQL driver */ 
     static public void loadDriverPGSQL() { loadDriver(driver.get(DatabaseType.PostgreSQL)); }
     /** Explicitly load the Derby driver */ 
@@ -99,16 +108,28 @@ public class JDBC
         return DriverManager.getConnection(url, user, password) ;
     }
     
-//    static public void loadClass(String className)
-//    { Loader.loadClass(className) ; }
-
     static private void loadClass(String className)
     { 
-        try { Class.forName(className); }
+        try { Class.forName(className); return ; }
         catch (ClassNotFoundException ex)
-        { throw new SDBNotFoundException("Class.forName("+className+")", ex) ; } 
+        {
+            // Ir MySQL or MariaDB, try the other one.
+            if ( className.equals(jdbcDriverClassMySQL) || className.equals(jdbcDriverClassMariaDB) ) {
+                String classNameAlt = null ; 
+                if ( className.equals(jdbcDriverClassMySQL) )
+                    classNameAlt = jdbcDriverClassMariaDB ;
+                else if ( className.equals(jdbcDriverClassMariaDB) )
+                    classNameAlt = jdbcDriverClassMySQL ;
+                try { Class.forName(classNameAlt) ; return ; }
+                catch (ClassNotFoundException ex2) {}
+            }
+            throw new SDBNotFoundException("Class.forName("+className+")", ex) ; }
     }
 
+    static private void loadClass1(String className) {
+        
+    }
+    
     public static String makeURL(String type, String host, String dbName)
     { return makeURL(type, host, dbName, null, null) ; }
 
@@ -125,8 +146,11 @@ public class JDBC
         if ( password == null )
             password = Access.getPassword() ;
         
-        if ( type.equals("mysql") )
+        if ( type.equals("mysql") || type.equals("mariadb") )
         {
+            // MariaDB responds to jdbc:mysql:... 
+            // but MySQL does not respond to jdbc:mariadb:...
+            type = "mysql" ;
             String s = String.format("jdbc:%s://%s/%s", type, host, dbName) ;
             return s ;
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java b/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
index 5e3d83b..685b0ca 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
@@ -35,6 +35,8 @@ public class DatabaseType extends Symbol implements Named
     public static final DatabaseType H2              = new DatabaseType("H2") ;
     public static final DatabaseType HSQLDB          = new DatabaseType("HSQLDB") ;
     public static final DatabaseType MySQL           = new DatabaseType("MySQL") ;
+    // MariaDB is currently treated as MySQL - the only difference is that a different JDBC driver is loaded.  
+    public static final DatabaseType MariaDB         = new DatabaseType("MariaDB") ;
     public static final DatabaseType PostgreSQL      = new DatabaseType("PostgreSQL") ;
     public static final DatabaseType SQLServer       = new DatabaseType("SQLServer") ;
     public static final DatabaseType Oracle          = new DatabaseType("Oracle") ;
@@ -63,7 +65,6 @@ public class DatabaseType extends Symbol implements Named
     
     static void init()
     {
-        // Java databases
         register(Derby) ;
         registerName("JavaDB", Derby) ;
         
@@ -78,14 +79,12 @@ public class DatabaseType extends Symbol implements Named
         registerName("h2:tcp", H2) ;
         registerName("h2", H2) ;
         
-        // Open source DBs
         register(MySQL) ;
-        // registerName("MySQL5", HSQLDB) ;      // am I right in assuming that "HSQLDB" should actually be "MySQL"
+        register(MariaDB) ;
         registerName("MySQL5", MySQL) ;
         
         register(PostgreSQL) ;
         
-        // Commercial DBs
         register(SQLServer) ;
         registerName("MSSQLServer" , SQLServer) ;
         registerName("MSSQLServerExpress" , SQLServer) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java b/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
index a9cb925..58f6e46 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
@@ -173,6 +173,13 @@ public class StoreFactory
                     @Override
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreTriplesNodesHashMySQL(conn, desc, desc.engineType) ; } }) ;
+        
+        // Treat as MySQL
+        register(MariaDB, LayoutTripleNodesHash,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreTriplesNodesHashMySQL(conn, desc, desc.engineType) ; } }) ;
 
         register(PostgreSQL, LayoutTripleNodesHash,
                  new StoreMaker() {
@@ -232,6 +239,12 @@ public class StoreFactory
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreTriplesNodesIndexMySQL(conn, desc, desc.engineType) ; } }) ;
 
+        register(MariaDB, LayoutTripleNodesIndex,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreTriplesNodesIndexMySQL(conn, desc, desc.engineType) ; } }) ;
+        
         register(PostgreSQL, LayoutTripleNodesIndex,
                  new StoreMaker() {
                     @Override
@@ -290,6 +303,12 @@ public class StoreFactory
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreSimpleMySQL(conn, desc, desc.engineType) ; } }) ;
 
+        register(MariaDB,  LayoutSimple,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreSimpleMySQL(conn, desc, desc.engineType) ; } }) ;
+ 
         register(PostgreSQL, LayoutSimple,
                  new StoreMaker() {
                     @Override
@@ -323,7 +342,7 @@ public class StoreFactory
     
     static private void checkRegistry()
     {
-        DatabaseType[] dbTypes = {Derby, HSQLDB, H2, MySQL, PostgreSQL, SQLServer, Oracle, SAP} ;
+        DatabaseType[] dbTypes = {Derby, HSQLDB, H2, MySQL, MariaDB, PostgreSQL, SQLServer, Oracle, SAP} ;
         LayoutType[] layoutTypes = {LayoutTripleNodesHash, LayoutTripleNodesIndex, LayoutSimple} ;
         
         Set <StoreMaker> seen = new HashSet<StoreMaker>() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java b/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
index c259279..70248ab 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
@@ -18,13 +18,9 @@
 
 package org.apache.jena.sdb.util;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Collection;
-import java.util.HashSet;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.* ;
 
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Dataset ;
@@ -67,7 +63,10 @@ public class StoreUtils
 
     public static boolean isMySQL(Store store)
     {
-        return store.getDatabaseType().equals(DatabaseType.MySQL) ;
+        DatabaseType type = store.getDatabaseType() ;
+        
+        return Objects.equals(type, DatabaseType.MySQL) ||
+               Objects.equals(type, DatabaseType.MariaDB) ;
     }
     
     public static boolean isSQLServer(Store store)