Skip to content

Tomandersen/pipelines evaluate #6962

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 52 commits into
base: tomandersen/pipelines
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
ae034da
Realtime Pipeline Proto changes
tom-andersen May 12, 2025
4e4a4b2
RealtimePipeline evaluate initial implementation
tom-andersen May 15, 2025
1b1f208
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen May 15, 2025
0cdb909
API
tom-andersen May 15, 2025
c2d442c
Cleanup
tom-andersen May 15, 2025
db7c444
Additional Realtime Expression Support
tom-andersen May 21, 2025
2062c94
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen May 22, 2025
9ea166b
Timestamp expressions WIP
tom-andersen May 22, 2025
e823b63
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen May 23, 2025
59eb4ae
fix after merge
tom-andersen May 23, 2025
38b2268
Implement offline evaluation of map
tom-andersen May 27, 2025
6a024dc
Add array
tom-andersen May 27, 2025
13077e6
Remove broken test
tom-andersen May 28, 2025
742546d
Add Arithmetic tests
tom-andersen May 28, 2025
5eff0fa
Add comparison tests
tom-andersen May 29, 2025
e875d1a
Add comparison tests
tom-andersen May 29, 2025
4e7d6db
Add comparison tests
tom-andersen May 29, 2025
00211cc
Refactor
tom-andersen May 29, 2025
8c516fd
Implement and test realtime array functions
tom-andersen May 30, 2025
37e25e7
Implement and test realtime debug functions
tom-andersen May 30, 2025
2cb2f45
Implement and test realtime field and logical functions
tom-andersen May 30, 2025
2e68d65
Implement and test realtime string functions
tom-andersen Jun 2, 2025
6332029
Implement and test realtime timestamp functions
tom-andersen Jun 2, 2025
f5fdcf6
Test offline mirroring semantics
tom-andersen Jun 2, 2025
5b822c7
Add realtime tests for mapGet. Fixup implementation.
tom-andersen Jun 2, 2025
5c8f2ce
Comments
tom-andersen Jun 3, 2025
254a6d6
Comments
tom-andersen Jun 3, 2025
4e98dfc
Add copyright
tom-andersen Jun 3, 2025
b1f4006
Where tests
tom-andersen Jun 4, 2025
bbe85f4
Sort tests
tom-andersen Jun 4, 2025
77dfc07
Fixes
tom-andersen Jun 4, 2025
60eb272
Fixes
tom-andersen Jun 4, 2025
fbb3cd1
Limit tests
tom-andersen Jun 4, 2025
9461e3b
Style
tom-andersen Jun 4, 2025
28f8845
Add Null Semantics Tests
tom-andersen Jun 4, 2025
5324096
Pretty
tom-andersen Jun 5, 2025
38b6f39
Number Semantics Test
tom-andersen Jun 5, 2025
86ea2cc
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen Jun 5, 2025
64f26ea
Fix after merge
tom-andersen Jun 5, 2025
bcbf83f
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen Jun 5, 2025
285a529
Spotless
tom-andersen Jun 5, 2025
7ddca59
Generate API
tom-andersen Jun 5, 2025
1263e8e
Refactor Values
tom-andersen Jun 5, 2025
b754f23
Inequality tests
tom-andersen Jun 5, 2025
a2d0d46
Pretty
tom-andersen Jun 6, 2025
8756f20
Merge branch 'tomandersen/pipelines' into tomandersen/pipelines-evaluate
tom-andersen Jun 6, 2025
2708d15
Copyright
tom-andersen Jun 6, 2025
4fcdf17
Unicode Tests
tom-andersen Jun 6, 2025
387bbe0
Nested properties Tests
tom-andersen Jun 6, 2025
79f0444
DisjunctiveTests
tom-andersen Jun 6, 2025
49001b8
Pretty
tom-andersen Jun 9, 2025
b9eacff
Collection Group Tests
tom-andersen Jun 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 31 additions & 5 deletions firebase-firestore/api.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
// Signature format: 3.0
package com.google.firebase.firestore {

public class AbstractPipeline {
method protected final com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute(com.google.firebase.firestore.pipeline.InternalOptions? options);
}

public abstract class AggregateField {
method public static com.google.firebase.firestore.AggregateField.AverageAggregateField average(com.google.firebase.firestore.FieldPath);
method public static com.google.firebase.firestore.AggregateField.AverageAggregateField average(String);
Expand Down Expand Up @@ -419,14 +423,14 @@ package com.google.firebase.firestore {
method public com.google.firebase.firestore.PersistentCacheSettings.Builder setSizeBytes(long);
}

public final class Pipeline {
public final class Pipeline extends com.google.firebase.firestore.AbstractPipeline {
method public com.google.firebase.firestore.Pipeline addFields(com.google.firebase.firestore.pipeline.Selectable field, com.google.firebase.firestore.pipeline.Selectable... additionalFields);
method public com.google.firebase.firestore.Pipeline aggregate(com.google.firebase.firestore.pipeline.AggregateStage aggregateStage);
method public com.google.firebase.firestore.Pipeline aggregate(com.google.firebase.firestore.pipeline.AggregateWithAlias accumulator, com.google.firebase.firestore.pipeline.AggregateWithAlias... additionalAccumulators);
method public com.google.firebase.firestore.Pipeline distinct(com.google.firebase.firestore.pipeline.Selectable group, java.lang.Object... additionalGroups);
method public com.google.firebase.firestore.Pipeline distinct(String groupField, java.lang.Object... additionalGroups);
method public com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute();
method public com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute(com.google.firebase.firestore.pipeline.PipelineOptions options);
method public com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute(com.google.firebase.firestore.pipeline.RealtimePipelineOptions options);
method public com.google.firebase.firestore.Pipeline findNearest(com.google.firebase.firestore.pipeline.Field vectorField, com.google.firebase.firestore.VectorValue vectorValue, com.google.firebase.firestore.pipeline.FindNearestStage.DistanceMeasure distanceMeasure);
method public com.google.firebase.firestore.Pipeline findNearest(com.google.firebase.firestore.pipeline.Field vectorField, double[] vectorValue, com.google.firebase.firestore.pipeline.FindNearestStage.DistanceMeasure distanceMeasure);
method public com.google.firebase.firestore.Pipeline findNearest(com.google.firebase.firestore.pipeline.FindNearestStage stage);
Expand Down Expand Up @@ -560,6 +564,25 @@ package com.google.firebase.firestore {
method public <T> java.util.List<T!> toObjects(Class<T!>, com.google.firebase.firestore.DocumentSnapshot.ServerTimestampBehavior);
}

public final class RealtimePipeline extends com.google.firebase.firestore.AbstractPipeline {
method public com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute();
method public com.google.android.gms.tasks.Task<com.google.firebase.firestore.PipelineSnapshot> execute(com.google.firebase.firestore.pipeline.PipelineOptions options);
method public com.google.firebase.firestore.RealtimePipeline limit(int limit);
method public com.google.firebase.firestore.RealtimePipeline offset(int offset);
method public com.google.firebase.firestore.RealtimePipeline select(com.google.firebase.firestore.pipeline.Selectable selection, java.lang.Object... additionalSelections);
method public com.google.firebase.firestore.RealtimePipeline select(String fieldName, java.lang.Object... additionalSelections);
method public com.google.firebase.firestore.RealtimePipeline sort(com.google.firebase.firestore.pipeline.Ordering order, com.google.firebase.firestore.pipeline.Ordering... additionalOrders);
method public com.google.firebase.firestore.RealtimePipeline where(com.google.firebase.firestore.pipeline.BooleanExpr condition);
}

public final class RealtimePipelineSource {
method public com.google.firebase.firestore.RealtimePipeline collection(com.google.firebase.firestore.CollectionReference ref);
method public com.google.firebase.firestore.RealtimePipeline collection(com.google.firebase.firestore.pipeline.CollectionSource stage);
method public com.google.firebase.firestore.RealtimePipeline collection(String path);
method public com.google.firebase.firestore.RealtimePipeline collectionGroup(String collectionId);
method public com.google.firebase.firestore.RealtimePipeline pipeline(com.google.firebase.firestore.pipeline.CollectionGroupSource stage);
}

@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) public @interface ServerTimestamp {
}

Expand Down Expand Up @@ -1048,7 +1071,7 @@ package com.google.firebase.firestore.pipeline {
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lt(com.google.firebase.firestore.pipeline.Expr left, Object right);
method public final com.google.firebase.firestore.pipeline.BooleanExpr lt(Object value);
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, com.google.firebase.firestore.pipeline.Expr expression);
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, Object right);
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, Object value);
method public final com.google.firebase.firestore.pipeline.BooleanExpr lte(com.google.firebase.firestore.pipeline.Expr other);
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lte(com.google.firebase.firestore.pipeline.Expr left, com.google.firebase.firestore.pipeline.Expr right);
method public static final com.google.firebase.firestore.pipeline.BooleanExpr lte(com.google.firebase.firestore.pipeline.Expr left, Object right);
Expand Down Expand Up @@ -1369,7 +1392,7 @@ package com.google.firebase.firestore.pipeline {
method public com.google.firebase.firestore.pipeline.BooleanExpr lt(com.google.firebase.firestore.pipeline.Expr left, com.google.firebase.firestore.pipeline.Expr right);
method public com.google.firebase.firestore.pipeline.BooleanExpr lt(com.google.firebase.firestore.pipeline.Expr left, Object right);
method public com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, com.google.firebase.firestore.pipeline.Expr expression);
method public com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, Object right);
method public com.google.firebase.firestore.pipeline.BooleanExpr lt(String fieldName, Object value);
method public com.google.firebase.firestore.pipeline.BooleanExpr lte(com.google.firebase.firestore.pipeline.Expr left, com.google.firebase.firestore.pipeline.Expr right);
method public com.google.firebase.firestore.pipeline.BooleanExpr lte(com.google.firebase.firestore.pipeline.Expr left, Object right);
method public com.google.firebase.firestore.pipeline.BooleanExpr lte(String fieldName, com.google.firebase.firestore.pipeline.Expr expression);
Expand Down Expand Up @@ -1589,6 +1612,9 @@ package com.google.firebase.firestore.pipeline {
method public com.google.firebase.firestore.pipeline.RawStage ofName(String name);
}

public final class RealtimePipelineOptions extends com.google.firebase.firestore.pipeline.AbstractOptions<com.google.firebase.firestore.pipeline.RealtimePipelineOptions> {
}

public final class SampleStage extends com.google.firebase.firestore.pipeline.Stage<com.google.firebase.firestore.pipeline.SampleStage> {
method public static com.google.firebase.firestore.pipeline.SampleStage withDocLimit(int documents);
method public static com.google.firebase.firestore.pipeline.SampleStage withPercentage(double percentage);
Expand All @@ -1615,7 +1641,7 @@ package com.google.firebase.firestore.pipeline {
ctor public Selectable();
}

public abstract class Stage<T extends com.google.firebase.firestore.pipeline.Stage<T>> {
public abstract sealed class Stage<T extends com.google.firebase.firestore.pipeline.Stage<T>> {
method protected final String getName();
method public final T with(String key, boolean value);
method public final T with(String key, com.google.firebase.firestore.pipeline.Field value);
Expand Down
1 change: 1 addition & 0 deletions firebase-firestore/firebase-firestore.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ dependencies {
implementation libs.grpc.stub
implementation libs.kotlin.stdlib
implementation libs.kotlinx.coroutines.core
implementation 'com.google.re2j:re2j:1.6'

compileOnly libs.autovalue.annotations
compileOnly libs.javax.annotation.jsr250
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public final class DocumentReference {
}

/** @hide */
static DocumentReference forPath(ResourcePath path, FirebaseFirestore firestore) {
public static DocumentReference forPath(ResourcePath path, FirebaseFirestore firestore) {
if (path.length() % 2 != 0) {
throw new IllegalArgumentException(
"Invalid document reference. Document references must have an even number "
Expand Down
Loading
Loading