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/03/25 17:44:17 UTC
svn commit: r1581412 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Author: reschke
Date: Tue Mar 25 16:44:16 2014
New Revision: 1581412
URL: http://svn.apache.org/r1581412
Log:
OAK-1544 - change table creation logic to use databasemeta's product name (sigh)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
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=1581412&r1=1581411&r2=1581412&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 Tue Mar 25 16:44:16 2014
@@ -40,6 +40,7 @@ import javax.annotation.Nonnull;
import javax.sql.DataSource;
import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.commons.query.sql2.SQL2QOMBuilder;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.cache.CacheValue;
@@ -266,13 +267,39 @@ public class RDBDocumentStore implements
try {
con.setAutoCommit(false);
- Statement stmt = con.createStatement();
- stmt.execute("create table if not exists CLUSTERNODES(ID varchar(1000) primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA blob)");
- stmt.execute("create table if not exists NODES(ID varchar(1000) primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA blob)");
- stmt.execute("create table if not exists SETTINGS(ID varchar(1000) primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA blob)");
- stmt.close();
+ for (String tableName : new String[] { "CLUSTERNODES", "NODES", "SETTINGS"}) {
+ try {
+ PreparedStatement stmt = con.prepareStatement("select ID from " + tableName + " where ID = ?");
+ stmt.setString(1, "0:/");
+ stmt.executeQuery();
+ }
+ catch(SQLException ex) {
+ // table does not appear to exist
+ con.rollback();
+
+ String dbtype = con.getMetaData().getDatabaseProductName();
+ LOG.info("Attempting to create table " + tableName + " in " + dbtype);
+
+ Statement stmt = con.createStatement();
+
+ // the code below likely will need to be extended for new database types
+ if ("PostgreSQL".equals(dbtype)) {
+ stmt.execute("create table " + tableName
+ + " (ID varchar(1000) not null primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA bytea)");
+ }
+ else if ("DB2".equals(dbtype) || (dbtype != null && dbtype.startsWith("DB2/"))) {
+ stmt.execute("create table " + tableName
+ + " (ID varchar(1000) not null primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA blob)");
+ }
+ else {
+ stmt.execute("create table " + tableName
+ + " (ID varchar(1000) not null primary key, MODIFIED bigint, MODCOUNT bigint, DATA varchar(16384), BDATA blob)");
+ }
+ stmt.close();
- con.commit();
+ con.commit();
+ }
+ }
} finally {
con.close();
}