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>