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


Reply via email to