Skip to content

Pipelines Implementation #6710

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

Open
wants to merge 80 commits into
base: feat/pipelines
Choose a base branch
from
Open

Conversation

tom-andersen
Copy link
Contributor

No description provided.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Feb 20, 2025

Coverage Report 1

Affected Products

No changes between base commit (7999ab4) and merge commit (bb92d3c).

Test Logs

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

Copy link
Contributor

github-actions bot commented Feb 20, 2025

Test Results

 8 files   8 suites   1m 8s ⏱️
12 tests 12 ✅ 0 💤 0 ❌
24 runs  24 ✅ 0 💤 0 ❌

Results for commit ac26746.

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore:
error: Attempted to change parameter name from string to strings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from string to strings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from expr to stringExpressions in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from first to firstString in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from first to firstString in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.strConcat [ParameterNameChange]
error: Attempted to change parameter name from expr to stringExpression in method com.google.firebase.firestore.pipeline.Expr.strContains [ParameterNameChange]
error: Attempted to change parameter name from expr to stringExpression in method com.google.firebase.firestore.pipeline.Expr.strContains [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from first to firstString in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from first to firstString in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from rest to otherStrings in method com.google.firebase.firestore.pipeline.Expr.Companion.strConcat [ParameterNameChange]
error: Attempted to change parameter name from expr to stringExpression in method com.google.firebase.firestore.pipeline.Expr.Companion.strContains [ParameterNameChange]
error: Attempted to change parameter name from expr to stringExpression in method com.google.firebase.firestore.pipeline.Expr.Companion.strContains [ParameterNameChange]

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

The public api surface has changed for the subproject firebase-firestore:
error: Added method com.google.firebase.firestore.pipeline.Expr.add(Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(Number,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(Number,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

The public api surface has changed for the subproject firebase-firestore:
error: Added method com.google.firebase.firestore.Pipeline.addStage(com.google.firebase.firestore.pipeline.Stage) [AddedMethod]
error: Removed method com.google.firebase.firestore.Pipeline.genericStage(com.google.firebase.firestore.pipeline.GenericStage) [RemovedMethod]
error: Class com.google.firebase.firestore.pipeline.AggregateStage superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]
error: Added class com.google.firebase.firestore.pipeline.BaseStage [AddedClass]
error: Class com.google.firebase.firestore.pipeline.CollectionGroupSource superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]
error: Class com.google.firebase.firestore.pipeline.CollectionSource superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(Number,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(Number,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.add(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,Number) [AddedMethod]
error: Added method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr) [AddedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(String,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,Number,java.lang.Object...) [RemovedMethod]
error: Removed method com.google.firebase.firestore.pipeline.Expr.Companion.multiply(com.google.firebase.firestore.pipeline.Expr,com.google.firebase.firestore.pipeline.Expr,java.lang.Object...) [RemovedMethod]
error: Class com.google.firebase.firestore.pipeline.FindNearestStage superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]
error: Removed class com.google.firebase.firestore.pipeline.GenericStage [RemovedClass]
error: Class com.google.firebase.firestore.pipeline.SampleStage superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]
error: Class com.google.firebase.firestore.pipeline.Stage changed number of type parameters from 1 to 0 [ChangedType]
error: Added method com.google.firebase.firestore.pipeline.Stage.ofName(String) [AddedMethod]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Method com.google.firebase.firestore.pipeline.Stage.with has changed return type from T (extends com.google.firebase.firestore.pipeline.Stage) to com.google.firebase.firestore.pipeline.Stage [ChangedType]
error: Added method com.google.firebase.firestore.pipeline.Stage.withArguments(java.lang.Object...) [AddedMethod]
error: Added field com.google.firebase.firestore.pipeline.Stage.Companion [AddedField]
error: Added class com.google.firebase.firestore.pipeline.Stage.Companion [AddedClass]
error: Class com.google.firebase.firestore.pipeline.UnnestStage superclass changed from com.google.firebase.firestore.pipeline.Stage to com.google.firebase.firestore.pipeline.BaseStage [ChangedSuperclass]

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-firestore_api.txt:

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.

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.

Review is WIP. There is lots of great cleanup in this. Nice work. Only a few comments so far.

@@ -120,6 +120,15 @@ public String getPath() {
return key.getPath().canonicalString();
}

@RestrictTo(RestrictTo.Scope.LIBRARY)
@NonNull
public String getFullPath() {
Copy link
Contributor

Choose a reason for hiding this comment

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

Should javadocs for RestrictTo Library indicate that status? Or will this be visible even without use of the linter?

fun replace(field: String): Pipeline = replace(Expr.field(field))

/**
* Fully overwrites all fields in a document with those coming from a nested map.
Copy link
Contributor

Choose a reason for hiding this comment

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

i don't think this has to be a nested map, it can be any expression that evaluates to a map

unnest(Expr.field(arrayField).alias(alias))

/**
* Takes a specified array from the input documents and outputs a document for each element with
Copy link
Contributor

Choose a reason for hiding this comment

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

Same, i think this can be any Selectable with an expression that evaluates to an array.

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.

really impressive code. I learned a lot about kotlin. I'm offering a handful of questions and comments.


companion object {

@JvmStatic fun generic(name: String, vararg expr: Expr) = AggregateFunction(name, expr)
Copy link
Contributor

Choose a reason for hiding this comment

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

should this be raw?

*
* @return A new [AggregateFunction] representing the countAll aggregation.
*/
@JvmStatic fun countAll() = AggregateFunction("count")
Copy link
Contributor

Choose a reason for hiding this comment

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

should the SDK name and server API name match?

@JvmStatic
fun constant(value: Boolean): BooleanExpr {
val encodedValue = encodeValue(value)
return object : BooleanExpr("N/A", emptyArray()) {
Copy link
Contributor

Choose a reason for hiding this comment

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

It might be useful to include some documentation covering the reason why you are creating an anonymous BooleanExpr class here

* @return A new [Expr] constant instance representing the Blob.
*/
@JvmStatic
fun blob(bytes: ByteArray): Expr {
Copy link
Contributor

Choose a reason for hiding this comment

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

Possible discussion topic, but it might be more clear to indicate in the function name that this will create a Constant Expr. blobConstant(...)

* @return A [Expr] constant instance.
*/
@JvmStatic
fun vector(vector: DoubleArray): Expr {
Copy link
Contributor

Choose a reason for hiding this comment

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

Same, might be worth naming vectorConstant(...) or constantVector(...)


@JvmField val JSON = OutputFormat("json")

@JvmField val STRUCT = OutputFormat("struct")
Copy link
Contributor

Choose a reason for hiding this comment

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

I haven't seen 'struct' in the spec. Is this different from JSON?

}
}

class Verbosity private constructor(internal val value: String) {
Copy link
Contributor

Choose a reason for hiding this comment

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

same, i haven't seen this in the design. is this new?

}
}

class Profiles private constructor(internal val value: String) {
Copy link
Contributor

Choose a reason for hiding this comment

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

same, i haven't seen this in the design. is this new?

override fun args(userDataReader: UserDataReader): Sequence<Value> = emptySequence()
}

class CollectionSource
Copy link
Contributor

Choose a reason for hiding this comment

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

in node, i found that i liked calling all of these *StageOptions. It gave consistency and meaning across the Pipeline api. Maybe you would consider calling these *Stage.

E.g. CollectionStage or CollectionSourceStage, DatabaseStage, LimitStage, WhereStage, ...

fields.asSequence().map(Field::toProto)
}

internal class ReplaceStage
Copy link
Contributor

Choose a reason for hiding this comment

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

Do you have intent to make all of these internal stages public to support options overrides?

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.

3 participants