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 2020/03/19 07:15:03 UTC

svn commit: r1875409 - in /jackrabbit/oak/branches/1.10: ./ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/

Author: reschke
Date: Thu Mar 19 07:15:03 2020
New Revision: 1875409

URL: http://svn.apache.org/viewvc?rev=1875409&view=rev
Log:
OAK-8913: RDB*Store: extract 'additionalDiagnostics' code into separate class for re-use from RDBBlobStore (merged r1874174 into 1.10)

Added:
    jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBCommonVendorSpecificCode.java
      - copied unchanged from r1874174, jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBCommonVendorSpecificCode.java
Modified:
    jackrabbit/oak/branches/1.10/   (props changed)
    jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java

Propchange: jackrabbit/oak/branches/1.10/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1874174

Modified: jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java?rev=1875409&r1=1875408&r2=1875409&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java (original)
+++ jackrabbit/oak/branches/1.10/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java Thu Mar 19 07:15:03 2020
@@ -16,15 +16,11 @@
  */
 package org.apache.jackrabbit.oak.plugins.document.rdb;
 
-import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBJDBCTools.closeResultSet;
-import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBJDBCTools.closeStatement;
-
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -124,7 +120,7 @@ public enum RDBDocumentStoreDB {
         }
     },
 
-    POSTGRES("PostgreSQL") {
+    POSTGRES("PostgreSQL", RDBCommonVendorSpecificCode.POSTGRES) {
         @Override
         public String checkVersion(DatabaseMetaData md) throws SQLException {
             String result = RDBJDBCTools.versionCheck(md, 9, 5, 9, 4, description);
@@ -170,33 +166,6 @@ public enum RDBDocumentStoreDB {
         }
 
         @Override
-        public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-            Connection con = null;
-            PreparedStatement stmt = null;
-            ResultSet rs = null;
-            Map<String, String> result = new HashMap<>();
-            try {
-                con = ch.getROConnection();
-                String cat = con.getCatalog();
-                stmt = con.prepareStatement("SELECT pg_encoding_to_char(encoding), datcollate FROM pg_database WHERE datname=?");
-                stmt.setString(1, cat);
-                rs = stmt.executeQuery();
-                while (rs.next()) {
-                    result.put("pg_encoding_to_char(encoding)", rs.getString(1));
-                    result.put("datcollate", rs.getString(2));
-                }
-                con.commit();
-            } catch (SQLException ex) {
-                LOG.debug("while getting diagnostics", ex);
-            } finally {
-                closeResultSet(rs);
-                closeStatement(stmt);
-                ch.closeConnection(con);
-            }
-            return result;
-        }
-
-        @Override
         public Map<String, String> getAdditionalStatistics(RDBConnectionHandler ch, String catalog, String tableName) {
             Map<String, String> result = new HashMap<String, String>();
             Connection con = null;
@@ -257,7 +226,7 @@ public enum RDBDocumentStoreDB {
         }
     },
 
-    DB2("DB2") {
+    DB2("DB2", RDBCommonVendorSpecificCode.DB2) {
         @Override
         public String checkVersion(DatabaseMetaData md) throws SQLException {
             return RDBJDBCTools.versionCheck(md, 10, 5, description);
@@ -288,50 +257,6 @@ public enum RDBDocumentStoreDB {
         }
 
         @Override
-        public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-            Connection con = null;
-            PreparedStatement stmt = null;
-            ResultSet rs = null;
-            Map<String, String> result = new HashMap<>();
-            try {
-                con = ch.getROConnection();
-
-                // 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) {
-                    String schema = rs.getString("TABSCHEMA").trim();
-                    result.put(schema + ".CODEPAGE", rs.getString("CODEPAGE").trim());
-                    result.put(schema + ".COLLATIONSCHEMA", rs.getString("COLLATIONSCHEMA").trim());
-                    result.put(schema + ".COLLATIONNAME", rs.getString("COLLATIONNAME").trim());
-                }
-                stmt.close();
-                con.commit();
-            } catch (SQLException ex) {
-                LOG.debug("while getting diagnostics", ex);
-            } finally {
-                closeResultSet(rs);
-                closeStatement(stmt);
-                ch.closeConnection(con);
-            }
-            return result;
-        }
-
-        @Override
         public Map<String, String> getAdditionalStatistics(RDBConnectionHandler ch, String catalog, String tableName) {
 
             Map<String, String> result = new HashMap<String, String>();
@@ -394,7 +319,7 @@ public enum RDBDocumentStoreDB {
         }
     },
 
-    ORACLE("Oracle") {
+    ORACLE("Oracle", RDBCommonVendorSpecificCode.ORACLE) {
         @Override
         public String checkVersion(DatabaseMetaData md) throws SQLException {
             return RDBJDBCTools.versionCheck(md, 12, 1, 12, 2, description);
@@ -423,32 +348,6 @@ public enum RDBDocumentStoreDB {
         }
 
         @Override
-        public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-            Connection con = null;
-            Statement stmt = null;
-            ResultSet rs = null;
-            Map<String, String> result = new HashMap<>();
-            try {
-                con = ch.getROConnection();
-                stmt = con.createStatement();
-                rs = stmt
-                        .executeQuery("SELECT PARAMETER, VALUE from NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_COMP', 'NLS_CHARACTERSET')");
-                while (rs.next()) {
-                    result.put(rs.getString(1), rs.getString(2));
-                }
-                stmt.close();
-                con.commit();
-            } catch (SQLException ex) {
-                LOG.debug("while getting diagnostics", ex);
-            } finally {
-                closeResultSet(rs);
-                closeStatement(stmt);
-                ch.closeConnection(con);
-            }
-            return result;
-        }
-
-        @Override
         public Map<String, String> getAdditionalStatistics(RDBConnectionHandler ch, String catalog, String tableName) {
 
             Map<String, String> result = new HashMap<String, String>();
@@ -514,7 +413,7 @@ public enum RDBDocumentStoreDB {
         }
     },
 
-    MYSQL("MySQL") {
+    MYSQL("MySQL", RDBCommonVendorSpecificCode.MYSQL) {
         @Override
         public String checkVersion(DatabaseMetaData md) throws SQLException {
             return RDBJDBCTools.versionCheck(md, 5, 5, description);
@@ -558,41 +457,6 @@ public enum RDBDocumentStoreDB {
         }
 
         @Override
-        public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-            Connection con = null;
-            PreparedStatement stmt = null;
-            ResultSet rs = null;
-            Map<String, String> result = new HashMap<>();
-            try {
-                con = ch.getROConnection();
-                stmt = con.prepareStatement("SHOW TABLE STATUS LIKE ?");
-                stmt.setString(1, tableName);
-                rs = stmt.executeQuery();
-                while (rs.next()) {
-                    result.put("collation", rs.getString("Collation"));
-                }
-                rs.close();
-                stmt.close();
-                stmt = con.prepareStatement(
-                        "SHOW VARIABLES WHERE variable_name LIKE 'character\\_set\\_%' OR variable_name LIKE 'collation%' OR variable_name = 'max_allowed_packet'");
-                rs = stmt.executeQuery();
-                while (rs.next()) {
-                    result.put(rs.getString(1), rs.getString(2));
-                }
-                rs.close();
-                stmt.close();
-                con.commit();
-            } catch (SQLException ex) {
-                LOG.debug("while getting diagnostics", ex);
-            } finally {
-                closeResultSet(rs);
-                closeStatement(stmt);
-                ch.closeConnection(con);
-            }
-            return result;
-        }
-
-        @Override
         public Map<String, String> getAdditionalStatistics(RDBConnectionHandler ch, String catalog, String tableName) {
 
             Map<String, String> result = new HashMap<String, String>();
@@ -647,7 +511,7 @@ public enum RDBDocumentStoreDB {
         }
     },
 
-    MSSQL("Microsoft SQL Server") {
+    MSSQL("Microsoft SQL Server", RDBCommonVendorSpecificCode.MSSQL) {
         @Override
         public String checkVersion(DatabaseMetaData md) throws SQLException {
             return RDBJDBCTools.versionCheck(md, 11, 0, description);
@@ -694,35 +558,6 @@ public enum RDBDocumentStoreDB {
             return "select datediff(second, dateadd(second, datediff(second, getutcdate(), getdate()), '1970-01-01'), getdate())";
         }
 
-        @Override
-        public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-            Connection con = null;
-            PreparedStatement stmt = null;
-            ResultSet rs = null;
-            Map<String, String> result = new HashMap<>();
-            try {
-                con = ch.getROConnection();
-                String cat = con.getCatalog();
-                stmt = con.prepareStatement("SELECT collation_name, create_date FROM sys.databases WHERE name=?");
-                stmt.setString(1, cat);
-                rs = stmt.executeQuery();
-                while (rs.next()) {
-                    result.put("collation_name", rs.getString("collation_name"));
-                    result.put("create_date", rs.getString("create_date"));
-                }
-                rs.close();
-                stmt.close();
-                con.commit();
-            } catch (SQLException ex) {
-                LOG.debug("while getting diagnostics", ex);
-            } finally {
-                closeResultSet(rs);
-                closeStatement(stmt);
-                ch.closeConnection(con);
-            }
-            return result;
-        }
-
         private long parseSize(String readable) {
             try {
                 if (readable != null && readable.endsWith(" KB")) {
@@ -898,7 +733,7 @@ public enum RDBDocumentStoreDB {
 
     @NotNull
     public Map<String, String> getAdditionalDiagnostics(RDBConnectionHandler ch, String tableName) {
-        return Collections.emptyMap();
+        return vendorCode.getAdditionalDiagnostics(ch, tableName);
     }
 
     /**
@@ -1014,6 +849,8 @@ public enum RDBDocumentStoreDB {
 
     protected String description;
 
+    protected RDBCommonVendorSpecificCode vendorCode = RDBCommonVendorSpecificCode.DEFAULT;
+
     protected String extractFields(ResultSet rs, String indexStats) throws SQLException {
         StringBuilder data = new StringBuilder();
         for (String f : indexStats.split(" ")) {
@@ -1031,6 +868,12 @@ public enum RDBDocumentStoreDB {
 
     private RDBDocumentStoreDB(String description) {
         this.description = description;
+        this.vendorCode = RDBCommonVendorSpecificCode.DEFAULT;
+    }
+
+    private RDBDocumentStoreDB(String description, RDBCommonVendorSpecificCode vendorCode) {
+        this.description = description;
+        this.vendorCode = vendorCode;
     }
 
     @Override