Skip to content

Commit 9b73345

Browse files
committed
Feature and tests parity with Node SDK
1 parent 3ba4d1e commit 9b73345

File tree

108 files changed

+4279
-7743
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+4279
-7743
lines changed

google-cloud-firestore/clirr-ignored-differences.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,4 +299,21 @@
299299
<className>com/google/cloud/firestore/collection/StandardComparator</className>
300300
<to>*</to>
301301
</difference>
302+
303+
<!-- Pipeline Queries -->
304+
<difference>
305+
<differenceType>7012</differenceType>
306+
<className>com/google/cloud/firestore/Firestore</className>
307+
<method>com.google.cloud.firestore.PipelineSource pipeline()</method>
308+
</difference>
309+
<difference>
310+
<differenceType>7013</differenceType>
311+
<className>com/google/cloud/firestore/Transaction</className>
312+
<method>com.google.api.core.ApiFuture execute(com.google.cloud.firestore.Pipeline)</method>
313+
</difference>
314+
<difference>
315+
<differenceType>7012</differenceType>
316+
<className>com/google/cloud/firestore/spi/v1/FirestoreRpc</className>
317+
<method>com.google.api.gax.rpc.ServerStreamingCallable executePipelineCallable()</method>
318+
</difference>
302319
</differences>

google-cloud-firestore/src/main/java/com/google/cloud/firestore/AggregateQuery.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.cloud.firestore;
1818

19+
import static com.google.cloud.firestore.pipeline.expressions.Expr.and;
1920
import static com.google.cloud.firestore.telemetry.TraceUtil.ATTRIBUTE_KEY_ATTEMPT;
2021
import static com.google.cloud.firestore.telemetry.TraceUtil.SPAN_NAME_RUN_AGGREGATION_QUERY;
2122

@@ -28,7 +29,8 @@
2829
import com.google.api.gax.rpc.StatusCode;
2930
import com.google.api.gax.rpc.StreamController;
3031
import com.google.cloud.Timestamp;
31-
import com.google.cloud.firestore.pipeline.expressions.ExprWithAlias;
32+
import com.google.cloud.firestore.pipeline.expressions.AliasedAggregate;
33+
import com.google.cloud.firestore.pipeline.expressions.BooleanExpr;
3234
import com.google.cloud.firestore.telemetry.TraceUtil;
3335
import com.google.cloud.firestore.telemetry.TraceUtil.Scope;
3436
import com.google.cloud.firestore.v1.FirestoreSettings;
@@ -49,6 +51,7 @@
4951
import java.util.Map;
5052
import java.util.Objects;
5153
import java.util.Set;
54+
import java.util.stream.Collectors;
5255
import javax.annotation.Nonnull;
5356
import javax.annotation.Nullable;
5457

@@ -81,12 +84,27 @@ public Query getQuery() {
8184
@Nonnull
8285
@BetaApi
8386
public Pipeline pipeline() {
84-
return getQuery()
85-
.pipeline()
86-
.aggregate(
87-
this.aggregateFieldList.stream()
88-
.map(PipelineUtils::toPipelineAggregatorTarget)
89-
.toArray(ExprWithAlias[]::new));
87+
Pipeline pipeline = getQuery().pipeline();
88+
89+
List<BooleanExpr> existsExprs =
90+
this.aggregateFieldList.stream()
91+
.map(PipelineUtils::toPipelineExistsExpr)
92+
.filter(Objects::nonNull)
93+
.collect(Collectors.toList());
94+
if (existsExprs.size() == 1) {
95+
pipeline = pipeline.where(existsExprs.get(0));
96+
} else if (existsExprs.size() > 1) {
97+
pipeline =
98+
pipeline.where(
99+
and(
100+
existsExprs.get(0),
101+
existsExprs.subList(1, existsExprs.size()).toArray(new BooleanExpr[0])));
102+
}
103+
104+
return pipeline.aggregate(
105+
this.aggregateFieldList.stream()
106+
.map(PipelineUtils::toPipelineAggregatorTarget)
107+
.toArray(AliasedAggregate[]::new));
90108
}
91109

92110
/**

0 commit comments

Comments
 (0)