@@ -994,6 +994,22 @@ private void processObjectLoweringStack(ArrayDeque<ObjectLoweringFrame> stack)
994994 break ;
995995 }
996996
997+ Object exprType = map .get ("exprType" );
998+ if (exprType instanceof String
999+ && "variable" .equals (((String ) exprType ).toLowerCase (Locale .ROOT ))) {
1000+ Object nameValue = map .get ("name" );
1001+ if (!(nameValue instanceof String ) || ((String ) nameValue ).isEmpty ()) {
1002+ throw new ReactNativeFirebaseFirestorePipelineExecutor .PipelineValidationException (
1003+ "pipelineExecute() expected "
1004+ + currentFieldName
1005+ + ".name to be a non-empty string." );
1006+ }
1007+ enterFrame .box .value =
1008+ applyPendingUnaryExpressionFunctions (
1009+ Expression .variable ((String ) nameValue ), pendingUnaryFunctions );
1010+ break ;
1011+ }
1012+
9971013 Object name = map .get ("name" );
9981014 if (name instanceof String ) {
9991015 String functionName = (String ) name ;
@@ -1022,7 +1038,7 @@ private void processObjectLoweringStack(ArrayDeque<ObjectLoweringFrame> stack)
10221038 break ;
10231039 }
10241040
1025- Object exprType = map .get ("exprType" );
1041+ exprType = map .get ("exprType" );
10261042 if (exprType instanceof String ) {
10271043 String normalizedType = ((String ) exprType ).toLowerCase (Locale .ROOT );
10281044 if ("field" .equals (normalizedType )) {
@@ -3287,6 +3303,19 @@ private Object serializeExpressionNode(
32873303 continue ;
32883304 }
32893305
3306+ if (expression
3307+ instanceof ReactNativeFirebaseFirestorePipelineParser .ParsedVariableExpressionNode ) {
3308+ Map <String , Object > output = new LinkedHashMap <>();
3309+ output .put ("__kind" , "expression" );
3310+ output .put ("exprType" , "Variable" );
3311+ output .put (
3312+ "name" ,
3313+ ((ReactNativeFirebaseFirestorePipelineParser .ParsedVariableExpressionNode ) expression )
3314+ .name );
3315+ enterFrame .box .value = output ;
3316+ continue ;
3317+ }
3318+
32903319 ReactNativeFirebaseFirestorePipelineParser .ParsedFunctionExpressionNode function =
32913320 (ReactNativeFirebaseFirestorePipelineParser .ParsedFunctionExpressionNode ) expression ;
32923321 List <SerializedValueBox > argBoxes = new ArrayList <>(function .args .size ());
@@ -3532,6 +3561,19 @@ private Object serializeValueNode(
35323561 continue ;
35333562 }
35343563
3564+ if (expression
3565+ instanceof ReactNativeFirebaseFirestorePipelineParser .ParsedVariableExpressionNode ) {
3566+ Map <String , Object > output = new LinkedHashMap <>();
3567+ output .put ("__kind" , "expression" );
3568+ output .put ("exprType" , "Variable" );
3569+ output .put (
3570+ "name" ,
3571+ ((ReactNativeFirebaseFirestorePipelineParser .ParsedVariableExpressionNode ) expression )
3572+ .name );
3573+ enterFrame .box .value = output ;
3574+ continue ;
3575+ }
3576+
35353577 ReactNativeFirebaseFirestorePipelineParser .ParsedFunctionExpressionNode function =
35363578 (ReactNativeFirebaseFirestorePipelineParser .ParsedFunctionExpressionNode ) expression ;
35373579 List <SerializedValueBox > argBoxes = new ArrayList <>(function .args .size ());
0 commit comments