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();
         }