You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2014/06/02 18:07:26 UTC

svn commit: r1599253 - in /jackrabbit/oak/trunk: oak-core/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ oak-parent/

Author: reschke
Date: Mon Jun  2 16:07:25 2014
New Revision: 1599253

URL: http://svn.apache.org/r1599253
Log:
OAK-1266 - experimental support for MySQL

Modified:
    jackrabbit/oak/trunk/oak-core/pom.xml
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
    jackrabbit/oak/trunk/oak-parent/pom.xml

Modified: jackrabbit/oak/trunk/oak-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/pom.xml?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-core/pom.xml Mon Jun  2 16:07:25 2014
@@ -42,7 +42,7 @@
               <!-- OAK-1708 TODO: temporary workaround for embedding code for DocumentNodeStoreService-->
               commons-dbcp,commons-pool,h2,json-simple,
               <!-- OAK-1708 TODO: note these below will only embedded when build with the respective profiles from oak-parent -->
-              postgresql,db2,db2-license
+              postgresql,db2,db2-license,mysql-connector-java
             </Embed-Dependency>
             <Embed-Transitive>true</Embed-Transitive>
             <Import-Package>

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java Mon Jun  2 16:07:25 2014
@@ -96,8 +96,13 @@ public class RDBBlobStore extends Cachin
                     Statement stmt = con.createStatement();
 
                     if (tableName.equals("DATASTORE_META")) {
-                        stmt.execute("create table " + tableName
-                                + " (ID varchar(1000) not null primary key, LEVEL int, LASTMOD bigint)");
+                        if ("MySQL".equals(dbtype)) {
+                            stmt.execute("create table " + tableName
+                                    + " (ID varchar(767) not null primary key, LEVEL int, LASTMOD bigint)");
+                        } else {
+                            stmt.execute("create table " + tableName
+                                    + " (ID varchar(1000) not null primary key, LEVEL int, LASTMOD bigint)");
+                        }
                     } else {
                         // the code below likely will need to be extended for
                         // new database types
@@ -106,6 +111,8 @@ public class RDBBlobStore extends Cachin
                         } else if ("DB2".equals(dbtype) || (dbtype != null && dbtype.startsWith("DB2/"))) {
                             stmt.execute("create table " + tableName + " (ID varchar(1000) not null primary key, DATA blob("
                                     + MINBLOB + "))");
+                        } else if ("MySQL".equals(dbtype)) {
+                            stmt.execute("create table " + tableName + " (ID varchar(767) not null primary key, DATA mediumblob)");
                         } else {
                             stmt.execute("create table " + tableName + " (ID varchar(1000) not null primary key, DATA blob)");
                         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java Mon Jun  2 16:07:25 2014
@@ -54,7 +54,7 @@ public class RDBDataSourceFactory {
         } else {
             // try to determine driver from JDBC URL
             String defaultDriver = driverForDBType(jdbctype(url));
-            if (defaultDriver != null) {
+            if (defaultDriver != null && !defaultDriver.isEmpty()) {
                 LOG.info("trying to load {}", defaultDriver);
 
                 try {
@@ -111,6 +111,8 @@ public class RDBDataSourceFactory {
             return "org.postgresql.Driver";
         } else if ("db2".equals(type)) {
             return "com.ibm.db2.jcc.DB2Driver";
+        } else if ("mysql".equals(type)) {
+            return "com.mysql.jdbc.Driver";
         } else {
             return "";
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Mon Jun  2 16:07:25 2014
@@ -322,6 +322,10 @@ public class RDBDocumentStore implements
                         stmt.execute("create table "
                                 + tableName
                                 + " (ID varchar(1000) not null primary key, MODIFIED bigint, HASBINARY smallint, MODCOUNT bigint, SIZE bigint, DATA varchar(16384), BDATA blob)");
+                    } else if ("MySQL".equals(dbtype)) {
+                        stmt.execute("create table "
+                                + tableName
+                                + " (ID varchar(767) not null primary key, MODIFIED bigint, HASBINARY smallint, MODCOUNT bigint, SIZE bigint, DATA varchar(16384), BDATA mediumblob)");
                     } else {
                         stmt.execute("create table "
                                 + tableName
@@ -487,6 +491,7 @@ public class RDBDocumentStore implements
                                 oldDoc = readDocumentUncached(collection, update.getId());
                             }
                         }
+                        // TODO: handle case where document is gone, thus oldDoc == null
                         doc = applyChanges(collection, oldDoc, update, checkConditions);
                         if (doc == null) {
                             return null;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java Mon Jun  2 16:07:25 2014
@@ -72,7 +72,8 @@ public abstract class AbstractDocumentSt
     protected static Collection<Object[]> fixtures(boolean multi) {
         Collection<Object[]> result = new ArrayList<Object[]>();
         DocumentStoreFixture candidates[] = new DocumentStoreFixture[] { DocumentStoreFixture.MEMORY, DocumentStoreFixture.MONGO,
-                DocumentStoreFixture.RDB_H2, DocumentStoreFixture.RDB_PG, DocumentStoreFixture.RDB_DB2 };
+                DocumentStoreFixture.RDB_H2, DocumentStoreFixture.RDB_PG, DocumentStoreFixture.RDB_DB2,
+                DocumentStoreFixture.RDB_MYSQL };
 
         for (DocumentStoreFixture dsf : candidates) {
             if (dsf.isAvailable()) {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java Mon Jun  2 16:07:25 2014
@@ -38,6 +38,7 @@ public abstract class DocumentStoreFixtu
     public static final DocumentStoreFixture RDB_H2 = new RDBFixture("RDB-H2(file)", "jdbc:h2:file:./target/ds-test", "sa", "");
     public static final DocumentStoreFixture RDB_PG = new RDBFixture("RDB-Postgres", "jdbc:postgresql:oak", "postgres", "geheim");
     public static final DocumentStoreFixture RDB_DB2 = new RDBFixture("RDB-DB2", "jdbc:db2://localhost:50000/OAK", "oak", "geheim");
+    public static final DocumentStoreFixture RDB_MYSQL = new RDBFixture("RDB-MySQL", "jdbc:mysql://localhost:3306/oak", "root", "geheim");
     public static final DocumentStoreFixture MONGO = new MongoFixture("mongodb://localhost:27017/oak");
 
     public abstract String getName();
@@ -89,7 +90,7 @@ public abstract class DocumentStoreFixtu
             try {
                 dataSource = RDBDataSourceFactory.forJdbcUrl(url, username, passwd);
             } catch (Exception ex) {
-                LOG.info("Database instance not available at " + url + ", skipping tests...");
+                LOG.info("Database instance not available at " + url + ", skipping tests...", ex);
             }
         }
 

Modified: jackrabbit/oak/trunk/oak-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1599253&r1=1599252&r2=1599253&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-parent/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-parent/pom.xml Mon Jun  2 16:07:25 2014
@@ -445,6 +445,16 @@
       </build>
     </profile>
     <profile>
+      <id>rdb-mysql</id>
+      <dependencies>
+        <dependency>
+          <groupId>mysql</groupId>
+          <artifactId>mysql-connector-java</artifactId>
+          <version>5.1.30</version>
+        </dependency>
+      </dependencies>
+    </profile>
+    <profile>
       <id>rdb-postgres</id>
       <dependencies>
         <dependency>