-
Notifications
You must be signed in to change notification settings - Fork 641
[realppl 3] Replace query and target with QueryOrPipeline and TargetOrPipeline #7351
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
base: wuandy/RealPpl_2
Are you sure you want to change the base?
Conversation
Firebase AI Mock Responses Check
|
Generated by 🚫 Danger |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @wu-hui, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request introduces foundational changes to the Firestore client library by abstracting query and target representations. It lays the groundwork for integrating a new "pipeline" query execution model, allowing the system to handle both traditional queries and more complex pipeline operations uniformly. This refactoring is crucial for expanding the query capabilities of the client.
Highlights
- Abstraction of Query and Target Types: Introduced
QueryOrPipeline
andTargetOrPipeline
sealed classes to unify the representation of traditionalQuery
objects and the newPipeline
objects, allowing for a more flexible and extensible query execution model. - Core Component Refactoring: Refactored numerous core Firestore components, including
EventManager
,SyncEngine
,LocalStore
, andView
, to operate on the newQueryOrPipeline
andTargetOrPipeline
types, ensuring compatibility with both existing queries and future pipeline functionality. - Query to Pipeline Conversion: Updated the
Query.java
class to include methods for converting a standardQuery
into aRealtimePipeline
, facilitating the transition and integration of pipeline-based query execution within the system. - Pipeline Class Enhancements: Significantly modified
Pipeline.kt
to refine thePipeline
andRealtimePipeline
classes, adjusting constructors, execution logic, and source handling, and introducing a newFunctionRegistry
for pipeline functions. - New Pipeline-Specific Tests: Added new test files (
MemoryLocalStorePipelineTest
,MemoryQueryEnginePipelineTest
,SQLiteLocalStorePipelineTest
,SQLiteQueryEnginePipelineTest
) to validate the behavior of the local store and query engine when operating with the new pipeline functionality.
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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
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.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces a significant and well-executed refactoring to abstract over queries and pipelines using QueryOrPipeline
and TargetOrPipeline
. The changes are extensive, touching many core components, but appear consistent and correct. I have a few minor suggestions for code cleanup and consistency to improve readability.
|
||
private fun toExecutePipelineRequest(options: InternalOptions?): ExecutePipelineRequest { | ||
val database = firestore.databaseId | ||
val database = firestore!!.databaseId |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
val request = toExecutePipelineRequest(options) | ||
val observerTask = ObserverSnapshotTask() | ||
firestore.callClient { call -> call!!.executePipeline(request, observerTask) } | ||
firestore?.callClient { call -> call!!.executePipeline(request, observerTask) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
results.add( | ||
PipelineResult( | ||
firestore, | ||
firestore!!, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
internal fun comparator(): Comparator<Document> = | ||
getLastEffectiveSortStage().comparator(evaluateContext()) | ||
|
||
internal fun toStructurePipelineProto(): StructuredPipeline { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There seems to be a typo in the method name. It should probably be toStructuredPipelineProto
to match the class it returns (StructuredPipeline
) and for consistency with other similar methods.
internal fun toStructurePipelineProto(): StructuredPipeline { | |
internal fun toStructuredPipelineProto(): StructuredPipeline { |
The public api surface has changed for the subproject firebase-firestore: Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly. |
Size Report 1Affected Products
Test Logs |
4ccfac6
to
76763e4
Compare
bfc920f
to
34bbc4a
Compare
The public api surface has changed for the subproject firebase-firestore: Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly. |
1 similar comment
The public api surface has changed for the subproject firebase-firestore: Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly. |
No description provided.