Skip to content

Commit 0ec127b

Browse files
committed
save
1 parent 879c18a commit 0ec127b

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/provider/foundationdb/query/FDBStreamAggregationTest.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
import com.apple.foundationdb.record.EvaluationContext;
2424
import com.apple.foundationdb.record.ExecuteProperties;
25+
import com.apple.foundationdb.record.RecordCursor;
26+
import com.apple.foundationdb.record.RecordCursorResult;
2527
import com.apple.foundationdb.record.RecordMetaData;
2628
import com.apple.foundationdb.record.TestRecords1Proto;
2729
import com.apple.foundationdb.record.provider.foundationdb.FDBRecordContext;
@@ -54,6 +56,7 @@
5456
import java.util.ArrayList;
5557
import java.util.Arrays;
5658
import java.util.Collections;
59+
import java.util.LinkedList;
5760
import java.util.List;
5861
import java.util.function.BiConsumer;
5962
import java.util.function.Function;
@@ -280,6 +283,47 @@ void aggregateNoRecordsNoGroupNoAggregate(final boolean useNestedResult) {
280283
}
281284
}
282285

286+
@ParameterizedTest(name = "[{displayName}-{index}] {0}")
287+
@BooleanSource
288+
void test(final boolean useNestedResult) {
289+
try (final var context = openContext()) {
290+
openSimpleRecordStore(context, NO_HOOK);
291+
292+
final var plan =
293+
new AggregationPlanBuilder(recordStore.getRecordMetaData(), "MySimpleRecord")
294+
.withAggregateValue("num_value_2", value -> new NumericAggregationValue.Sum(NumericAggregationValue.PhysicalOperator.SUM_I, value))
295+
.withGroupCriterion("num_value_3_indexed")
296+
.withGroupCriterion("str_value_indexed")
297+
.build(useNestedResult);
298+
299+
final var result = executePlanWithRecordScanLimit(plan, 2);
300+
assertResults(useNestedResult ? this::assertResultNested : this::assertResultFlattened, result, resultOf(0, "0", 1), resultOf(1, "0", 2), resultOf(1, "1", 3), resultOf(2, "1", 9));
301+
}
302+
}
303+
304+
private List<QueryResult> executePlanWithRecordScanLimit(final RecordQueryPlan plan, final int recordScanLimit) {
305+
byte[] continuation = null;
306+
List<QueryResult> queryResults = new LinkedList<>();
307+
while (true) {
308+
RecordCursor<QueryResult> currentCursor = executePlan(plan, 0, recordScanLimit, continuation);
309+
RecordCursorResult<QueryResult> currentCursorResult;
310+
while (true) {
311+
currentCursorResult = currentCursor.getNext();
312+
continuation = currentCursorResult.getContinuation().toBytes();
313+
if (!currentCursorResult.hasNext()) {
314+
break;
315+
}
316+
queryResults.add(currentCursorResult.get());
317+
System.out.println("current result:" + currentCursorResult.get().getMessage());
318+
}
319+
System.out.println("getNoNextReson:" + currentCursorResult.getNoNextReason());
320+
if (currentCursorResult.getNoNextReason() == RecordCursor.NoNextReason.SOURCE_EXHAUSTED) {
321+
break;
322+
}
323+
}
324+
return queryResults;
325+
}
326+
283327
private void populateDB(final int numRecords) throws Exception {
284328
try (FDBRecordContext context = openContext()) {
285329
openSimpleRecordStore(context);
@@ -307,6 +351,17 @@ private List<QueryResult> executePlan(final RecordQueryPlan plan) {
307351
}
308352
}
309353

354+
@Nonnull
355+
private List<QueryResult> executePlan(final RecordQueryPlan plan) {
356+
final var types = plan.getDynamicTypes();
357+
final var typeRepository = TypeRepository.newBuilder().addAllTypes(types).build();
358+
try {
359+
return plan.executePlan(recordStore, EvaluationContext.forTypeRepository(typeRepository), null, ExecuteProperties.SERIAL_EXECUTE).asList().get();
360+
} catch (final Throwable t) {
361+
throw Assertions.<RuntimeException>fail(t);
362+
}
363+
}
364+
310365
private void assertResults(@Nonnull final BiConsumer<QueryResult, List<?>> checkConsumer, @Nonnull final List<QueryResult> actual, @Nonnull final List<?>... expected) {
311366
Assertions.assertEquals(expected.length, actual.size());
312367
for (var i = 0 ; i < actual.size() ; i++) {

0 commit comments

Comments
 (0)