#351 - ENH: Add diff to Version beans returned from findVersions()

This commit is contained in:
Robin Bygrave
2015-07-24 20:12:26 +12:00
parent 71798afadd
commit c00484026c
9 changed files with 215 additions and 60 deletions
@@ -1,10 +1,14 @@
package com.avaje.ebeaninternal.server.query;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.avaje.ebean.ValuePair;
import com.avaje.ebean.Version;
import com.avaje.ebeaninternal.server.core.DiffHelp;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,6 +36,8 @@ public class CQueryEngine {
private static final String T0 = "t0";
private final DiffHelp diffHelp = new DiffHelp(true);
private final boolean forwardOnlyHintOnFindIterate;
private final CQueryBuilder queryBuilder;
@@ -180,6 +186,8 @@ public class CQueryEngine {
}
List<Version<T>> versions = cquery.readVersions();
deriveVersionDiffs(versions, request);
if (request.isLogSummary()) {
logFindManySummary(cquery);
}
@@ -196,6 +204,26 @@ public class CQueryEngine {
}
}
private <T> void deriveVersionDiffs(List<Version<T>> versions, OrmQueryRequest<T> request) {
BeanDescriptor<T> descriptor = request.getBeanDescriptor();
Version<T> current = versions.get(0);
for (int i = 1; i < versions.size(); i++) {
Version<T> next = versions.get(i);
deriveVersionDiff(current, next, descriptor);
current = next;
}
// put an empty map into the last one
current.setDiff(Collections.EMPTY_MAP);
}
private <T> void deriveVersionDiff(Version<T> current, Version<T> prior, BeanDescriptor<T> descriptor) {
Map<String, ValuePair> diff = diffHelp.diff(current.getBean(), prior.getBean(), descriptor);
current.setDiff(diff);
}
/**
* Return the lower sys_period given the table alias of the query or default.
*/