Author: reschke
Date: Thu Sep 17 12:16:11 2015
New Revision: 1703592
URL: http://svn.apache.org/r1703592
Log:
OAK-3414: RDBDocumentStore: improve DB2 diagnostics
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionHandler.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionWrapper.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionHandler.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionHandler.java?rev=1703592&r1=1703591&r2=1703592&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionHandler.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionHandler.java
Thu Sep 17 12:16:11 2015
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import java.io.Closeable;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -146,6 +147,19 @@ public class RDBConnectionHandler implem
return this.ds == null;
}
+ /**
+ * Return current schema name or {@code null} when unavailable
+ */
+ @CheckForNull
+ public String getSchema(Connection c) {
+ try {
+ return (String) c.getClass().getMethod("getSchema").invoke(c);
+ } catch (Throwable ex) {
+ // ignored, it's really best effort
+ return null;
+ }
+ }
+
@Override
public void close() throws IOException {
this.ds = null;
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java?rev=1703592&r1=1703591&r2=1703592&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
Thu Sep 17 12:16:11 2015
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.plugins.document.rdb;
+import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
@@ -28,6 +29,7 @@ import java.util.List;
import java.util.Map;
import javax.annotation.Nonnull;
+import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -117,14 +119,25 @@ public enum RDBDocumentStoreDB {
Map<String, String> result = new HashMap<String, String>();
try {
con = ch.getROConnection();
- // we can't look up by schema as con.getSchema is JDK 1.7
- stmt = con
- .prepareStatement("SELECT CODEPAGE, COLLATIONSCHEMA,
COLLATIONNAME, TABSCHEMA FROM SYSCAT.COLUMNS WHERE COLNAME=? and COLNO=0 AND
UPPER(TABNAME)=UPPER(?)");
+
+ // schema name will only be available with JDK 1.7
+ String conSchema = ch.getSchema(con);
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("SELECT CODEPAGE, COLLATIONSCHEMA, COLLATIONNAME,
TABSCHEMA FROM SYSCAT.COLUMNS WHERE COLNAME=? and COLNO=0 AND
UPPER(TABNAME)=UPPER(?)");
+ if (conSchema != null) {
+ conSchema = conSchema.trim();
+ sb.append(" AND UPPER(TABSCHEMA)=UPPER(?)");
+ }
+ stmt = con.prepareStatement(sb.toString());
stmt.setString(1, "ID");
stmt.setString(2, tableName);
+ if (conSchema != null) {
+ stmt.setString(3, conSchema);
+ }
+
rs = stmt.executeQuery();
while (rs.next() && result.size() < 20) {
- // thus including the schema name here
String schema = rs.getString("TABSCHEMA").trim();
result.put(schema + ".CODEPAGE",
rs.getString("CODEPAGE").trim());
result.put(schema + ".COLLATIONSCHEMA",
rs.getString("COLLATIONSCHEMA").trim());
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionWrapper.java?rev=1703592&r1=1703591&r2=1703592&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBConnectionWrapper.java
Thu Sep 17 12:16:11 2015
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.plugins.document.rdb;
+import java.lang.reflect.InvocationTargetException;
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
@@ -168,7 +169,19 @@ public class RDBConnectionWrapper implem
// needed in Java 7...
@SuppressWarnings("unused")
public String getSchema() throws SQLException {
- throw new SQLFeatureNotSupportedException();
+ try {
+ return (String)
connection.getClass().getMethod("getSchema").invoke(connection);
+ } catch (InvocationTargetException ex) {
+ if (ex.getCause() instanceof SQLException) {
+ throw (SQLException) ex.getCause();
+ } else {
+ // best effort otherwise
+ return null;
+ }
+ } catch (Throwable ex) {
+ // best effort otherwise
+ return null;
+ }
}
public int getTransactionIsolation() throws SQLException {