limit_Default(
filter_Default(
groupScan_Default(group),
Collections.singleton(grandparentRowType)),
1);
final UpdatePlannable updatePlan =
update_Default(scanPlan,
new UpdateFunction()
{
@Override
public Row evaluate(Row original, QueryContext context, QueryBindings bindings)
{
OverlayingRow updatedRow = new OverlayingRow(original);
long i = original.value(0).getInt64();
updatedRow.overlay(0, i - 1000000);
return updatedRow;
}
@Override
public boolean rowIsSelected(Row row)
{
return true;
}
});
final UpdatePlannable revertPlan =
update_Default(scanPlan,
new UpdateFunction()
{
@Override
public Row evaluate(Row original, QueryContext context, QueryBindings bindings)
{
OverlayingRow updatedRow = new OverlayingRow(original);
long i = original.value(0).getInt64();
updatedRow.overlay(0, i + 1000000);
return updatedRow;
}
@Override
public boolean rowIsSelected(Row row)
{
return true;
}
});
long start = Long.MIN_VALUE;
for (int s = 0; s < WARMUP_SCANS + SCANS; s++) {
final int sFinal = s;
long mightBeStartTime = transactionally(
new Callable<Long>()
{
@Override
public Long call() throws Exception
{
long start = -1L;
if (sFinal == WARMUP_SCANS) {
Tap.setEnabled(".*propagate.*", true);
start = System.nanoTime();
}
updatePlan.run(queryContext, queryBindings);
revertPlan.run(queryContext, queryBindings);
return start;
}
});
if (mightBeStartTime != -1L) {
start = mightBeStartTime;