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 2015/10/22 12:13:39 UTC
svn commit: r1709978 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
Author: reschke
Date: Thu Oct 22 10:13:38 2015
New Revision: 1709978
URL: http://svn.apache.org/viewvc?rev=1709978&view=rev
Log:
JCR-3532: simple tool for dumping RDB tables (WIP: various mongoexport inspired command line switches, always move _id in front)
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=1709978&r1=1709977&r2=1709978&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 Thu Oct 22 10:13:38 2015
@@ -16,31 +16,68 @@
*/
package org.apache.jackrabbit.oak.plugins.document.rdb;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
+import java.util.Set;
+import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.plugins.document.Collection;
+import org.apache.jackrabbit.oak.plugins.document.Document;
import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
+/**
+ * Utility for dumping contents from {@link RDBDocumentStore}'s tables.
+ */
public class RDBExport {
- public static void main(String[] args) throws ClassNotFoundException, SQLException {
- String url = null, user = null, pw = null, table = null, query = null;
- RDBDocumentSerializer ser = new RDBDocumentSerializer(new MemoryDocumentStore(), new HashSet<String>());
+ public static void main(String[] args)
+ throws ClassNotFoundException, SQLException, UnsupportedEncodingException, FileNotFoundException {
+
+ String url = null, user = null, pw = null, table = "nodes", query = null;
+ boolean asArray = false;
+ PrintStream out = System.out;
+ Set<String> excl = new HashSet<String>();
+ excl.add(Document.ID);
+ RDBDocumentSerializer ser = new RDBDocumentSerializer(new MemoryDocumentStore(), excl);
+ String param = null;
try {
- url = args[0];
- user = args[1];
- pw = args[2];
- table = args[3];
- query = args.length >= 5 ? args[4] : null;
+ for (int i = 0; i < args.length; i++) {
+ param = args[i];
+ if ("-u".equals(param) || "--username".equals(param)) {
+ user = args[++i];
+ } else if ("-p".equals(param) || "--password".equals(param)) {
+ pw = args[++i];
+ } else if ("-c".equals(param) || "--collection".equals(param)) {
+ table = args[++i];
+ } else if ("-j".equals(param) || "--jdbc-url".equals(param)) {
+ url = args[++i];
+ } else if ("-q".equals(param) || "--query".equals(param)) {
+ query = args[++i];
+ } else if ("-o".equals(param) || "--out".equals(param)) {
+ OutputStream os = new FileOutputStream(args[++i]);
+ out = new PrintStream(os, true, "UTF-8");
+ } else if ("--jsonArray".equals(param)) {
+ asArray = true;
+ } else {
+ System.err.println(RDBExport.class.getName() + ": invalid parameter " + args[i]);
+ printUsage();
+ System.exit(2);
+ }
+ }
} catch (IndexOutOfBoundsException ex) {
- System.err.println("Usage: ... " + RDBCreator.class.getName() + " JDBC-URL username password table [query]");
+ System.err.println(RDBExport.class.getName() + ": value missing for parameter " + param);
+ printUsage();
System.exit(2);
}
@@ -48,7 +85,7 @@ public class RDBExport {
try {
Class.forName(driver);
} catch (ClassNotFoundException ex) {
- System.err.println("Attempt to load class " + driver + " failed.");
+ System.err.println(RDBExport.class.getName() + ":attempt to load class " + driver + " failed:" + ex.getMessage());
}
Connection c = DriverManager.getConnection(url, user, pw);
c.setReadOnly(true);
@@ -59,21 +96,47 @@ public class RDBExport {
}
sql += " order by id";
ResultSet rs = stmt.executeQuery(sql);
+
+ if (asArray) {
+ out.println("[");
+ }
+ boolean needComma = asArray;
while (rs.next()) {
- String id = rs.getString(1);
- long modified = rs.getLong(2);
- long modcount = rs.getLong(3);
- long cmodcount = rs.getLong(4);
- long hasBinary = rs.getLong(5);
- long deletedOnce = rs.getLong(6);
- String data = rs.getString(7);
- byte[] bdata = rs.getBytes(8);
+ String id = rs.getString("ID");
+ long modified = rs.getLong("MODIFIED");
+ long modcount = rs.getLong("MODCOUNT");
+ long cmodcount = rs.getLong("CMODCOUNT");
+ long hasBinary = rs.getLong("HASBINARY");
+ long deletedOnce = rs.getLong("DELETEDONCE");
+ String data = rs.getString("DATA");
+ byte[] bdata = rs.getBytes("BDATA");
RDBRow row = new RDBRow(id, hasBinary == 1, deletedOnce == 1, modified, modcount, cmodcount, data, bdata);
NodeDocument doc = ser.fromRow(Collection.NODES, row);
- System.out.println(ser.asString(doc));
+
+ String docjson = ser.asString(doc);
+ StringBuilder fulljson = new StringBuilder();
+ fulljson.append("{\"_id\":\"");
+ JsopBuilder.escape(id, fulljson);
+ fulljson.append("\",");
+ fulljson.append(docjson);
+ fulljson.append("}");
+ if (asArray && needComma && !rs.isLast()) {
+ fulljson.append(",");
+ }
+ out.println(fulljson);
+ needComma = true;
+ }
+ if (asArray) {
+ out.println("]");
}
+ out.close();
rs.close();
stmt.close();
c.close();
}
+
+ 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]");
+ }
}