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;