Author: reschke
Date: Fri Oct 23 13:18:27 2015
New Revision: 1710205

URL: http://svn.apache.org/viewvc?rev=1710205&view=rev
Log:
OAK-3532: simple tool for dumping RDB tables (WIP: version info, MySQL/MSSQL 
support)

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

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java?rev=1710205&r1=1710204&r2=1710205&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
 Fri Oct 23 13:18:27 2015
@@ -24,11 +24,14 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.PrintStream;
+import java.nio.charset.Charset;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.sql.Types;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -41,12 +44,15 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
 import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
 import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
+import org.apache.jackrabbit.oak.util.OakVersion;
 
 /**
  * Utility for dumping contents from {@link RDBDocumentStore}'s tables.
  */
 public class RDBExport {
 
+    private static final Charset UTF8 = Charset.forName("UTF-8");
+
     public static void main(String[] args) throws ClassNotFoundException, 
SQLException, IOException {
 
         String url = null, user = null, pw = null, table = "nodes", query = 
null, dumpfile = null;
@@ -77,6 +83,9 @@ public class RDBExport {
                     dumpfile = args[++i];
                 } else if ("--jsonArray".equals(param)) {
                     asArray = true;
+                } else if ("--version".equals(param)) {
+                    System.out.println(RDBExport.class.getName() + " version " 
+ OakVersion.getVersion());
+                    System.exit(0);
                 } else {
                     System.err.println(RDBExport.class.getName() + ": invalid 
parameter " + args[i]);
                     printUsage();
@@ -105,7 +114,7 @@ public class RDBExport {
 
     private static void dumpFile(String filename, boolean asArray, PrintStream 
out, RDBDocumentSerializer ser) throws IOException {
         FileInputStream fis = new FileInputStream(new File(filename));
-        InputStreamReader ir = new InputStreamReader(fis, "UTF-8");
+        InputStreamReader ir = new InputStreamReader(fis, UTF8);
         BufferedReader br = new BufferedReader(ir);
         // scan for column names
         String prev = null;
@@ -185,6 +194,7 @@ public class RDBExport {
             }
             line = br.readLine();
         }
+        br.close();
         if (asArray) {
             out.println("]");
         }
@@ -212,8 +222,14 @@ public class RDBExport {
             out.println("[");
         }
         boolean needComma = asArray;
+        ResultSetMetaData rsm = null;
+        boolean idIsAscii = true;
         while (rs.next()) {
-            String id = rs.getString("ID");
+            if (rsm == null) {
+                rsm = rs.getMetaData();
+                idIsAscii = !isBinaryType(rsm.getColumnType(1));
+            }
+            String id = idIsAscii ? rs.getString("ID") : new 
String(rs.getBytes("ID"), UTF8);
             long modified = rs.getLong("MODIFIED");
             long modcount = rs.getLong("MODCOUNT");
             long cmodcount = rs.getLong("CMODCOUNT");
@@ -250,8 +266,12 @@ public class RDBExport {
         return fulljson;
     }
 
+    private static boolean isBinaryType(int sqlType) {
+        return sqlType == Types.VARBINARY || sqlType == Types.BINARY || 
sqlType == Types.LONGVARBINARY;
+    }
+
     private static void printUsage() {
         System.err.println("Usage: " + RDBExport.class.getName()
-                + " [-j/--jdbc-url JDBC-URL] [-u/--username username] 
[-p/--password password] [-c/--collection table] [-q/--query 
query][--jsonArray]");
+                + " [-j/--jdbc-url JDBC-URL] [-u/--username username] 
[-p/--password password] [-c/--collection table] [-q/--query query] [-o/--out 
file] [--jsonArray] [--version]");
     }
 }


Reply via email to