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 2014/11/04 10:11:50 UTC

svn commit: r1636523 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb: RDBDocumentSerializer.java RDBDocumentStore.java RDBRow.java

Author: reschke
Date: Tue Nov  4 09:11:50 2014
New Revision: 1636523

URL: http://svn.apache.org/r1636523
Log:
OAK-1941 - do not serialize _binary property into JSON, it's already a column property

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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java?rev=1636523&r1=1636522&r2=1636523&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java Tue Nov  4 09:11:50 2014
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Document;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
+import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
 import org.apache.jackrabbit.oak.plugins.document.Revision;
 import org.apache.jackrabbit.oak.plugins.document.StableRevisionComparator;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
@@ -52,6 +53,8 @@ public class RDBDocumentSerializer {
     private static final String MODIFIED = "_modified";
     private static final String MODCOUNT = "_modCount";
     private static final String ID = "_id";
+    private static final String HASBINARY = NodeDocument.HAS_BINARY_FLAG;
+
     private final Comparator<Revision> comparator = StableRevisionComparator.REVERSE;
 
     public RDBDocumentSerializer(DocumentStore store, Set<String> columnProperties) {
@@ -197,6 +200,9 @@ public class RDBDocumentSerializer {
         doc.put(ID, row.getId());
         doc.put(MODIFIED, row.getModified());
         doc.put(MODCOUNT, row.getModcount());
+        if (row.hasBinaryProperties()) {
+            doc.put(HASBINARY, NodeDocument.HAS_BINARY_VAL);
+        }
 
         JSONParser jp = new JSONParser();
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1636523&r1=1636522&r2=1636523&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Tue Nov  4 09:11:50 2014
@@ -353,7 +353,8 @@ public class RDBDocumentStore implements
             NodeDocument.HAS_BINARY_FLAG }));
 
     // set of properties not serialized to JSON
-    private static Set<String> COLUMNPROPERTIES = new HashSet<String>(Arrays.asList(new String[] { ID, MODIFIED, MODCOUNT }));
+    private static Set<String> COLUMNPROPERTIES = new HashSet<String>(Arrays.asList(new String[] { ID,
+            NodeDocument.HAS_BINARY_FLAG, MODIFIED, MODCOUNT }));
 
     private RDBDocumentSerializer SR = new RDBDocumentSerializer(this, COLUMNPROPERTIES);
 
@@ -977,12 +978,14 @@ public class RDBDocumentStore implements
         if (useCaseStatement) {
             // either we don't have a previous version of the document
             // or the database does not support CASE in SELECT
-            stmt = connection.prepareStatement("select MODIFIED, MODCOUNT, DATA, BDATA from " + tableName + " where ID = ?");
+            stmt = connection.prepareStatement("select MODIFIED, MODCOUNT, HASBINARY, DATA, BDATA from " + tableName
+                    + " where ID = ?");
         } else {
             // the case statement causes the actual row data not to be
             // sent in case we already have it
-            stmt = connection.prepareStatement("select MODIFIED, MODCOUNT, case MODCOUNT when ? then null else DATA end as DATA, "
-                    + "case MODCOUNT when ? then null else BDATA end as BDATA from " + tableName + " where ID = ?");
+            stmt = connection
+                    .prepareStatement("select MODIFIED, MODCOUNT, HASBINARY, case MODCOUNT when ? then null else DATA end as DATA, "
+                            + "case MODCOUNT when ? then null else BDATA end as BDATA from " + tableName + " where ID = ?");
         }
 
         try {
@@ -998,9 +1001,10 @@ public class RDBDocumentStore implements
             if (rs.next()) {
                 long modified = rs.getLong(1);
                 long modcount = rs.getLong(2);
-                String data = rs.getString(3);
-                byte[] bdata = rs.getBytes(4);
-                return new RDBRow(id, modified, modcount, data, bdata);
+                long hasBinary = rs.getLong(3);
+                String data = rs.getString(4);
+                byte[] bdata = rs.getBytes(5);
+                return new RDBRow(id, hasBinary == 1, modified, modcount, data, bdata);
             } else {
                 return null;
             }
@@ -1021,12 +1025,11 @@ public class RDBDocumentStore implements
 
     private List<RDBRow> dbQuery(Connection connection, String tableName, String minId, String maxId, String indexedProperty,
             long startValue, int limit) throws SQLException {
-        String t = "select ID, MODIFIED, MODCOUNT, DATA, BDATA from " + tableName + " where ID > ? and ID < ?";
+        String t = "select ID, MODIFIED, MODCOUNT, HASBINARY, DATA, BDATA from " + tableName + " where ID > ? and ID < ?";
         if (indexedProperty != null) {
             if (MODIFIED.equals(indexedProperty)) {
                 t += " and MODIFIED >= ?";
-            }
-            else if (NodeDocument.HAS_BINARY_FLAG.equals(indexedProperty)) {
+            } else if (NodeDocument.HAS_BINARY_FLAG.equals(indexedProperty)) {
                 if (startValue != NodeDocument.HAS_BINARY_VAL) {
                     throw new DocumentStoreException("unsupported value for property " + NodeDocument.HAS_BINARY_FLAG);
                 }
@@ -1057,9 +1060,10 @@ public class RDBDocumentStore implements
                 }
                 long modified = rs.getLong(2);
                 long modcount = rs.getLong(3);
-                String data = rs.getString(4);
-                byte[] bdata = rs.getBytes(5);
-                result.add(new RDBRow(id, modified, modcount, data, bdata));
+                long hasBinary = rs.getLong(4);
+                String data = rs.getString(5);
+                byte[] bdata = rs.getBytes(6);
+                result.add(new RDBRow(id, hasBinary == 1, modified, modcount, data, bdata));
             }
         } finally {
             stmt.close();

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBRow.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBRow.java?rev=1636523&r1=1636522&r2=1636523&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBRow.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBRow.java Tue Nov  4 09:11:50 2014
@@ -28,12 +28,15 @@ import javax.annotation.Nonnull;
  */
 public class RDBRow {
 
-    private final String id, data;
+    private final String id;
+    private final boolean hasBinaryProperties;
     private final long modified, modcount;
+    private final String data;
     private final byte[] bdata;
 
-    public RDBRow(String id, long modified, long modcount, String data, byte[] bdata) {
+    public RDBRow(String id, boolean hasBinaryProperties, long modified, long modcount, String data, byte[] bdata) {
         this.id = id;
+        this.hasBinaryProperties = hasBinaryProperties;
         this.modified = modified;
         this.modcount = modcount;
         this.data = data;
@@ -45,6 +48,10 @@ public class RDBRow {
         return id;
     }
 
+    public boolean hasBinaryProperties() {
+        return hasBinaryProperties;
+    }
+
     @CheckForNull
     public String getData() {
         return data;