Bulk load change and patch set data, reuse approvals
When querying for change information, try to bulk load any change records or current patch set records that are not yet loaded, and reuse any patch set approvals to avoid repeated scans of the same data during a single query. Change-Id: I4656925c4d2cf406d0a3be99fd554aa505af6e34
This commit is contained in:
@@ -9,7 +9,9 @@ import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.rules.PrologEnvironment;
|
||||
import com.google.gerrit.rules.StoredValues;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.util.Providers;
|
||||
|
||||
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
||||
import com.googlecode.prolog_cafe.lang.JavaException;
|
||||
@@ -45,9 +47,17 @@ class PRED__load_commit_labels_1 extends Predicate.P1 {
|
||||
PrologEnvironment env = (PrologEnvironment) engine.control;
|
||||
ReviewDb db = StoredValues.REVIEW_DB.get(engine);
|
||||
PatchSet patchSet = StoredValues.PATCH_SET.get(engine);
|
||||
ChangeData cd = StoredValues.CHANGE_DATA.getOrNull(engine);
|
||||
ApprovalTypes types = env.getInjector().getInstance(ApprovalTypes.class);
|
||||
|
||||
for (PatchSetApproval a : db.patchSetApprovals().byPatchSet(patchSet.getId())) {
|
||||
Iterable<PatchSetApproval> approvals;
|
||||
if (cd != null) {
|
||||
approvals = cd.currentApprovals(Providers.of(db));
|
||||
} else {
|
||||
approvals = db.patchSetApprovals().byPatchSet(patchSet.getId());
|
||||
}
|
||||
|
||||
for (PatchSetApproval a : approvals) {
|
||||
if (a.getValue() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
Reference in New Issue
Block a user