Skip to content

Conversation

@wu-hui
Copy link
Contributor

@wu-hui wu-hui commented Dec 9, 2025

No description provided.

@gemini-code-assist
Copy link
Contributor

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

📝 PRs merging into main branch

Our main branch should always be in a releasable state. If you are working on a larger change, or if you don't want this change to see the light of the day just yet, consider using a feature branch first, and only merge into the main branch when the code complete and ready to be released.

@google-cla
Copy link

google-cla bot commented Dec 9, 2025

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@wu-hui wu-hui force-pushed the feat/pipeline/public-preview branch from 0283543 to 3f07dab Compare December 9, 2025 21:24
@google-oss-bot
Copy link
Contributor

google-oss-bot commented Dec 9, 2025

Size Report 1

Affected Products

  • firebase-firestore

    TypeBase (8e6f17f)Merge (ceae28f)Diff
    aar1.43 MB2.16 MB+729 kB (+50.9%)
    apk (aggressive)618 kB621 kB+2.76 kB (+0.4%)
    apk (release)12.9 MB13.7 MB+771 kB (+6.0%)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/7x8UxO3YDG.html

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Dec 9, 2025

Coverage Report 1

Affected Products

  • firebase-database

    Overall coverage changed from 50.42% (8e6f17f) to 50.37% (ceae28f) by -0.05%.

    FilenameBase (8e6f17f)Merge (ceae28f)Diff
    ChildChangeAccumulator.java96.67%83.33%-13.33%
    QueryParams.java90.36%89.76%-0.60%
  • firebase-firestore

    Overall coverage changed from 46.03% (8e6f17f) to 46.15% (ceae28f) by +0.12%.

    75 individual files with coverage change

    FilenameBase (8e6f17f)Merge (ceae28f)Diff
    AggregateField.java31.03%28.13%-2.91%
    aggregates.kt?0.00%?
    Arithmetic.kt?25.61%?
    Array.kt?95.56%?
    AsyncQueue.java74.13%80.10%+5.97%
    AutoValue_FieldIndex_IndexOffset.java55.17%58.62%+3.45%
    BasePath.java82.54%81.25%-1.29%
    BiFunction.java?0.00%?
    CollectionReference.java31.82%36.36%+4.55%
    Comparison.kt?100.00%?
    CompositeFilter.java90.91%90.54%-0.37%
    DatabaseId.java70.37%85.19%+14.81%
    Datastore.java21.70%17.29%-4.40%
    Debug.kt?100.00%?
    DeleteMutation.java90.48%95.24%+4.76%
    DocumentChange.java67.61%75.00%+7.39%
    DocumentReference.java18.49%19.87%+1.37%
    EvaluateResult.kt?90.91%?
    EventManager.java92.31%92.37%+0.07%
    ExecutePipelineRequest.java?0.00%?
    ExecutePipelineRequestOrBuilder.java?0.00%?
    ExecutePipelineResponse.java?0.00%?
    ExecutePipelineResponseOrBuilder.java?0.00%?
    expressions.kt?37.45%?
    FieldFilter.java94.37%81.44%-12.92%
    FirebaseFirestore.java41.57%40.66%-0.91%
    FirestoreClient.java38.30%37.76%-0.54%
    FirestoreGrpc.java3.13%2.96%-0.17%
    FunctionOrBuilder.java?0.00%?
    FunctionRegistry.kt?100.00%?
    Generics.kt?72.73%?
    IntFunction.java?0.00%?
    LocalDocumentsView.java100.00%99.02%-0.98%
    LocalSerializer.java97.35%97.53%+0.18%
    LocalStore.java99.10%99.12%+0.01%
    Logical.kt?93.41%?
    Maps.kt?95.65%?
    MemoryRemoteDocumentCache.java98.31%98.44%+0.13%
    MutableDocument.java100.00%98.59%-1.41%
    NumberComparisonHelper.java100.00%86.96%-13.04%
    ObjectValue.java98.43%98.39%-0.04%
    options.kt?13.51%?
    PatchMutation.java98.39%100.00%+1.61%
    Pipeline.java?24.57%?
    Pipeline.kt?0.00%?
    PipelineOrBuilder.java?0.00%?
    PipelineProto.java?0.00%?
    PipelineUtil.kt?82.14%?
    Predicate.java?0.00%?
    Query.java4.12%4.10%-0.03%
    QueryEngine.java99.00%97.27%-1.73%
    QueryListener.java98.68%98.75%+0.07%
    QuerySnapshot.java76.36%78.33%+1.97%
    RealtimePipeline.kt?53.18%?
    RemoteSerializer.java81.53%82.49%+0.96%
    RemoteStore.java88.80%87.45%-1.35%
    SetMutation.java94.44%97.22%+2.78%
    SQLitePersistence.java86.41%87.50%+1.09%
    SQLiteRemoteDocumentCache.java93.86%94.02%+0.16%
    stage.kt?28.27%?
    Strings.kt?88.94%?
    StructuredPipeline.java?22.14%?
    StructuredPipelineOrBuilder.java?0.00%?
    TargetData.java77.78%78.26%+0.48%
    Timestamp.kt?60.55%?
    UserData.java68.00%69.00%+1.00%
    UserDataReader.java71.30%65.14%-6.15%
    Util.java73.61%69.72%-3.89%
    Utils.kt?87.68%?
    Value.java41.48%39.00%-2.48%
    Values.kt?95.28%?
    Vector.kt?72.00%?
    VectorValue.java46.67%36.36%-10.30%
    View.java96.86%96.26%-0.59%
    WatchChangeAggregator.java98.63%98.64%+0.01%

  • firebase-inappmessaging

    Overall coverage changed from ? (8e6f17f) to 39.06% (ceae28f) by ?.

    148 individual files with coverage change

    FilenameBase (8e6f17f)Merge (ceae28f)Diff
    AbtIntegrationHelper.java?60.87%?
    AbtIntegrationHelper_Factory.java?0.00%?
    Action.java?76.47%?
    Analytics.java?0.00%?
    AnalyticsConstants.java?0.00%?
    AnalyticsEventsManager.java?85.19%?
    AnalyticsEventsModule.java?0.00%?
    AnalyticsEventsModule_ProvidesAnalyticsConnectorEventsFactory.java?0.00%?
    AnalyticsEventsModule_ProvidesAnalyticsEventsManagerFactory.java?0.00%?
    AnalyticsListener.java?0.00%?
    ApiClient.java?100.00%?
    ApiClientModule.java?0.00%?
    ApiClientModule_ProvidesApiClientFactory.java?0.00%?
    ApiClientModule_ProvidesDataCollectionHelperFactory.java?0.00%?
    ApiClientModule_ProvidesFirebaseAppFactory.java?0.00%?
    ApiClientModule_ProvidesFirebaseInstallationsFactory.java?0.00%?
    ApiClientModule_ProvidesSharedPreferencesUtilsFactory.java?0.00%?
    ApiClientModule_ProvidesTestDeviceHelperFactory.java?0.00%?
    AppComponent.java?0.00%?
    AppForeground.java?0.00%?
    ApplicationModule.java?0.00%?
    ApplicationModule_DeveloperListenerManagerFactory.java?0.00%?
    ApplicationModule_ProvidesApplicationFactory.java?0.00%?
    AppMeasurementModule.java?0.00%?
    AppMeasurementModule_ProvidesAnalyticsConnectorFactory.java?0.00%?
    AppMeasurementModule_ProvidesSubsriberFactory.java?0.00%?
    AutoValue_InstallationIdResult.java?33.33%?
    AutoValue_RateLimit.java?44.68%?
    BannerMessage.java?75.00%?
    Button.java?61.76%?
    CampaignAnalytics.java?33.22%?
    CampaignAnalyticsOrBuilder.java?0.00%?
    CampaignCache.java?0.00%?
    CampaignCacheClient.java?88.00%?
    CampaignCacheClient_Factory.java?0.00%?
    CampaignImpression.java?38.96%?
    CampaignImpressionList.java?39.25%?
    CampaignImpressionListOrBuilder.java?0.00%?
    CampaignImpressionOrBuilder.java?0.00%?
    CampaignMetadata.java?100.00%?
    CampaignProto.java?27.23%?
    CardMessage.java?78.48%?
    ClientAppInfo.java?35.79%?
    ClientAppInfoOrBuilder.java?0.00%?
    Clock.java?0.00%?
    CommonTypesProto.java?9.87%?
    DaggerAppComponent.java?0.00%?
    DaggerUniversalComponent.java?0.00%?
    DataCollectionHelper.java?87.50%?
    DataCollectionHelper_Factory.java?0.00%?
    DeveloperListenerManager.java?100.00%?
    DismissType.java?82.61%?
    DisplayCallbacksFactory.java?100.00%?
    DisplayCallbacksFactory_Factory.java?0.00%?
    DisplayCallbacksImpl.java?93.46%?
    EventType.java?76.19%?
    ExecutorsModule.java?0.00%?
    ExecutorsModule_ProvidesBackgroundExecutorFactory.java?0.00%?
    ExecutorsModule_ProvidesBlockingExecutorFactory.java?0.00%?
    ExecutorsModule_ProvidesLightWeightExecutorFactory.java?0.00%?
    ExperimentPayloadProto.java?6.05%?
    FetchEligibleCampaignsRequest.java?32.98%?
    FetchEligibleCampaignsRequestOrBuilder.java?0.00%?
    FetchEligibleCampaignsResponse.java?42.86%?
    FetchEligibleCampaignsResponseOrBuilder.java?0.00%?
    FetchErrorReason.java?52.17%?
    FiamAnalyticsConnectorListener.java?100.00%?
    FiamFetchService.java?0.00%?
    FirebaseAppScope.java?0.00%?
    FirebaseInAppMessaging.java?80.60%?
    FirebaseInAppMessagingCampaignAnalyticsProto.java?0.00%?
    FirebaseInAppMessagingClickListener.java?0.00%?
    FirebaseInAppMessagingContextualTrigger.java?0.00%?
    FirebaseInAppMessagingDismissListener.java?0.00%?
    FirebaseInAppMessagingDisplay.java?0.00%?
    FirebaseInAppMessagingDisplayCallbacks.java?100.00%?
    FirebaseInAppMessagingDisplayErrorListener.java?0.00%?
    FirebaseInAppMessagingImpressionListener.java?0.00%?
    FirebaseInAppMessagingRegistrar.java?0.00%?
    FirebaseInAppMessaging_Factory.java?0.00%?
    ForegroundFlowableModule.java?0.00%?
    ForegroundFlowableModule_ProvidesAppForegroundEventStreamFactory.java?0.00%?
    ForegroundNotifier.java?76.00%?
    GrpcChannelModule.java?0.00%?
    GrpcChannelModule_ProvidesGrpcChannelFactory.java?0.00%?
    GrpcChannelModule_ProvidesServiceHostFactory.java?0.00%?
    GrpcClient.java?100.00%?
    GrpcClientModule.java?0.00%?
    GrpcClientModule_ProvidesApiKeyHeadersFactory.java?0.00%?
    GrpcClientModule_ProvidesInAppMessagingSdkServingStubFactory.java?0.00%?
    GrpcClient_Factory.java?0.00%?
    ImageData.java?71.43%?
    ImageOnlyMessage.java?75.86%?
    ImpressionStorageClient.java?100.00%?
    ImpressionStorageClient_Factory.java?0.00%?
    ImpressionStore.java?0.00%?
    InAppMessage.java?24.24%?
    InAppMessageStreamManager.java?91.40%?
    InAppMessageStreamManager_Factory.java?0.00%?
    InAppMessaging.kt?0.00%?
    InAppMessagingSdkServingGrpc.java?45.95%?
    InstallationIdResult.java?100.00%?
    Logging.java?0.00%?
    MessagesProto.java?36.03%?
    MessageType.java?100.00%?
    MetricsLoggerClient.java?94.29%?
    ModalMessage.java?74.07%?
    ProgramaticContextualTriggers.java?0.00%?
    ProgrammaticContextualTriggerFlowableModule.java?0.00%?
    ProgrammaticContextualTriggerFlowableModule_ProvidesProgramaticContextualTriggersFactory.java?0.00%?
    ProgrammaticContextualTriggerFlowableModule_ProvidesProgramaticContextualTriggerStreamFactory.java?0.00%?
    ProgrammaticTrigger.java?0.00%?
    ProtoMarshallerClient.java?91.40%?
    ProtoMarshallerClient_Factory.java?0.00%?
    ProtoStorageClient.java?100.00%?
    ProtoStorageClientModule.java?0.00%?
    ProtoStorageClientModule_ProvidesProtoStorageClientForCampaignFactory.java?0.00%?
    ProtoStorageClientModule_ProvidesProtoStorageClientForImpressionStoreFactory.java?0.00%?
    ProtoStorageClientModule_ProvidesProtoStorageClientForLimiterStoreFactory.java?0.00%?
    ProviderInstaller.java?37.50%?
    ProviderInstaller_Factory.java?0.00%?
    ProxyAnalyticsConnector.java?67.95%?
    RateLimit.java?0.00%?
    RateLimiterClient.java?100.00%?
    RateLimiterClient_Factory.java?0.00%?
    RateLimitModule.java?0.00%?
    RateLimitModule_ProvidesAppForegroundRateLimitFactory.java?0.00%?
    RateLimitProto.java?52.69%?
    RenderErrorReason.java?82.61%?
    SchedulerModule.java?0.00%?
    SchedulerModule_ProvidesComputeSchedulerFactory.java?0.00%?
    SchedulerModule_ProvidesIOSchedulerFactory.java?0.00%?
    SchedulerModule_ProvidesMainThreadSchedulerFactory.java?0.00%?
    Schedulers.java?87.50%?
    Schedulers_Factory.java?0.00%?
    SharedPreferencesUtils.java?40.35%?
    SharedPreferencesUtils_Factory.java?0.00%?
    SystemClock.java?100.00%?
    SystemClockModule.java?0.00%?
    SystemClockModule_ProvidesSystemClockModuleFactory.java?0.00%?
    SystemClock_Factory.java?0.00%?
    TestDeviceHelper.java?100.00%?
    TestDeviceHelper_Factory.java?0.00%?
    Text.java?67.74%?
    TransportClientModule.java?0.00%?
    TransportClientModule_ProvidesMetricsLoggerClientFactory.java?0.00%?
    TriggeredInAppMessage.java?100.00%?
    UniversalComponent.java?0.00%?

  • firebase-storage

    Overall coverage changed from 84.93% (8e6f17f) to 85.27% (ceae28f) by +0.34%.

    FilenameBase (8e6f17f)Merge (ceae28f)Diff
    StorageException.java65.45%69.09%+3.64%
    StorageTask.java83.38%83.99%+0.60%
    StreamDownloadTask.java88.89%88.41%-0.48%
    UploadTask.java81.52%83.17%+1.65%

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/1dhuLnWcD9.html

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Dec 9, 2025

Startup Time Report 1

The report is too large (117,065 chars) to be displayed on GitHub. Please check this report on GCS.

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/w2F6iWv6k9/index.html

@davidmotson davidmotson added the cla: yes Override cla label Dec 15, 2025
@google-cla google-cla bot added cla: no and removed cla: yes Override cla labels Dec 15, 2025
@davidmotson davidmotson added cla: yes Override cla and removed cla: no labels Dec 15, 2025
@google-cla google-cla bot added cla: no cla: yes Override cla and removed cla: yes Override cla cla: no labels Dec 15, 2025
@wu-hui wu-hui requested a review from MarkDuckworth December 16, 2025 18:22
@wu-hui wu-hui force-pushed the feat/pipeline/public-preview branch from 3f39257 to 106b64e Compare December 16, 2025 18:52
@google-cla google-cla bot added cla: no and removed cla: yes Override cla labels Dec 16, 2025
@wu-hui wu-hui force-pushed the feat/pipeline/public-preview branch from 106b64e to 6f1525f Compare December 16, 2025 19:32
Copy link
Contributor

@MarkDuckworth MarkDuckworth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First set of files, up to firebase-firestore/src/main/java/com/google/firebase/firestore/pipeline/FunctionRegistry.kt.

Nothing major other than making sure realtime pipelines stay private for launch


# 26.1.0

- [feature] Release Firestore Pipelines for Enterprise edition.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to mention the feature is in preview? This differentiates from a future release where we remove any flags on the API when we make it GA?

* com.google.firebase.firestore.conformance}) were modified to support the Android SDK.
*/
@RunWith(Parameterized.class)
@Ignore
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this @Ignore intentional? If so, should we add a comment or TODO to re-activate?

* @return {@code RealtimePipelineSource} for this Firestore instance.
*/
@NonNull
RealtimePipelineSource realtimePipeline() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be hidden in the initial public release?

* A `Snapshot` contains the results of a pipeline execution. It can be iterated to retrieve the
* individual `PipelineResult` objects.
*/
class Snapshot internal constructor(executionTime: Timestamp, results: List<PipelineResult>) :
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any reason we make Pipeline.Snapshot a nested class, but QuerySnapshot is not. I don't recall if this was part of the Pipelines API proposal. If so, then dismiss this comment

* @param field The first [String] name of field to remove.
* @param additionalFields Optional additional [String] name of fields to remove.
* @return A new [Pipeline] object with this stage appended to the stage list.
*/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Across the entire pipelines API, should we use some sort of attribute to mark the API as "beta"? Or should we add that to the description in each javadoc comment?

* The `__name__` field will not be returned if the query projects away this field. For example:
* ```
* // this query does not select the `__name__` field as part of the select stage,
* // so the __name__ field will not be in the output docs from this stage
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to verify if this is still true.

@@ -0,0 +1,693 @@
// Copyright 2025 Google LLC
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

skipping this file on initial review

}

@NonNull
public RealtimePipeline toRealtimePipeline(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide in current release?

}

// Many Pipelines require first parameter to be separated out from rest.
private static <T> T[] skipFirstToArray(List<T> list, IntFunction<T[]> generator) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra nit, this could call the function below with noop map function


private final Query query;
/** A pair of documents that represent the edges of a limit query. */
// TODO(pipeline): This is a direct port from C++. Ideally this should be a sumtype with variances
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling out this TODO in case it is something you intended to fix in this release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants