Author: reschke
Date: Wed Jan 29 15:02:02 2020
New Revision: 1873308

URL: http://svn.apache.org/viewvc?rev=1873308&view=rev
Log:
OAK-8882: RDBBlobStore: dump table structure on startup

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1873308&r1=1873307&r2=1873308&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
 Wed Jan 29 15:02:02 2020
@@ -32,10 +32,12 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
@@ -196,6 +198,7 @@ public class RDBBlobStore extends Cachin
 
         List<String> tablesCreated = new ArrayList<String>();
         List<String> tablesPresent = new ArrayList<String>();
+        Map<String, String> tableInfo = new HashMap<>();
 
         Statement createStatement = null;
 
@@ -205,13 +208,18 @@ public class RDBBlobStore extends Cachin
                 try {
                     // avoid PreparedStatement due to weird DB2 behavior 
(OAK-6237)
                     checkStatement = con.createStatement();
-                    checkStatement.executeQuery("select ID from " + tableName 
+ " where ID = '0'").close();
-                    checkStatement.close();
-                    checkStatement = null;
+                    ResultSet checkResultSet = 
checkStatement.executeQuery("select ID from " + tableName + " where ID = '0'");
+
+                    // try to discover metadata
+                    tableInfo.put(tableName, 
RDBJDBCTools.dumpResultSetMeta(checkResultSet.getMetaData()));
+
+                    closeResultSet(checkResultSet);
+                    checkStatement = closeStatement(checkStatement);
                     con.commit();
+
                     tablesPresent.add(tableName);
                 } catch (SQLException ex) {
-                    closeStatement(checkStatement);
+                    checkStatement = closeStatement(checkStatement);
  
                     // table does not appear to exist
                     con.rollback();
@@ -237,6 +245,16 @@ public class RDBBlobStore extends Cachin
 
                     con.commit();
 
+                    ResultSet checkResultSet = null;
+                    try {
+                        checkStatement = con.createStatement();
+                        checkResultSet = checkStatement.executeQuery("select * 
from " + tableName + " where ID = '0'");
+                        tableInfo.put(tableName, 
RDBJDBCTools.dumpResultSetMeta(checkResultSet.getMetaData()));
+                    } finally {
+                        closeResultSet(checkResultSet);
+                        closeStatement(checkStatement);
+                    }
+
                     tablesCreated.add(tableName);
                 }
             }
@@ -246,7 +264,8 @@ public class RDBBlobStore extends Cachin
             }
 
             LOG.info("RDBBlobStore (" + getModuleVersion() + ") instantiated 
for database " + dbDesc + ", using driver: "
-                    + driverDesc + ", connecting to: " + dbUrl + ", 
transaction isolation level: " + isolationDiags);
+                    + driverDesc + ", connecting to: " + dbUrl + ", 
transaction isolation level: " + isolationDiags + ", "
+                    + tableInfo);
             if (!tablesPresent.isEmpty()) {
                 LOG.info("Tables present upon startup: " + tablesPresent);
             }


Reply via email to