@@ -554,87 +554,58 @@ std::shared_ptr<api::Expr> ToPipelineBooleanExpr(const Filter& filter) {
554554 const google_firestore_v1_Value& value = field_filter.value ();
555555 FieldFilter::Operator op = field_filter.op ();
556556
557- if (model::IsNaNValue (value)) {
558- auto is_nan_expr = std::make_shared<api::FunctionExpr>(
559- " is_nan" , std::vector<std::shared_ptr<api::Expr>>{api_field});
560- if (op == FieldFilter::Operator::Equal) {
561- return std::make_shared<api::FunctionExpr>(
562- " and" ,
563- std::vector<std::shared_ptr<api::Expr>>{exists_expr, is_nan_expr});
564- } else { // Assuming NotEqual for IsNotNan
565- auto is_not_nan_expr = std::make_shared<api::FunctionExpr>(
566- " not" , std::vector<std::shared_ptr<api::Expr>>{is_nan_expr});
567- return std::make_shared<api::FunctionExpr>(
568- " and" , std::vector<std::shared_ptr<api::Expr>>{exists_expr,
569- is_not_nan_expr});
557+ auto api_constant =
558+ std::make_shared<api::Constant>(model::DeepClone (value));
559+ std::shared_ptr<api::Expr> comparison_expr;
560+ std::string func_name;
561+
562+ switch (op) {
563+ case FieldFilter::Operator::LessThan:
564+ func_name = " lt" ;
565+ break ;
566+ case FieldFilter::Operator::LessThanOrEqual:
567+ func_name = " lte" ;
568+ break ;
569+ case FieldFilter::Operator::GreaterThan:
570+ func_name = " gt" ;
571+ break ;
572+ case FieldFilter::Operator::GreaterThanOrEqual:
573+ func_name = " gte" ;
574+ break ;
575+ case FieldFilter::Operator::Equal:
576+ func_name = " eq" ;
577+ break ;
578+ case FieldFilter::Operator::NotEqual:
579+ func_name = " neq" ;
580+ break ;
581+ case FieldFilter::Operator::ArrayContains:
582+ func_name = " array_contains" ;
583+ break ;
584+ case FieldFilter::Operator::In:
585+ case FieldFilter::Operator::NotIn:
586+ case FieldFilter::Operator::ArrayContainsAny: {
587+ HARD_ASSERT (
588+ model::IsArray (value),
589+ " Value for IN, NOT_IN, ARRAY_CONTAINS_ANY must be an array." );
590+
591+ if (op == FieldFilter::Operator::In)
592+ func_name = " eq_any" ;
593+ else if (op == FieldFilter::Operator::NotIn)
594+ func_name = " not_eq_any" ;
595+ else if (op == FieldFilter::Operator::ArrayContainsAny)
596+ func_name = " array_contains_any" ;
597+ break ;
570598 }
571- } else if (model::IsNullValue (value)) {
572- auto is_null_expr = std::make_shared<api::FunctionExpr>(
573- " is_null" , std::vector<std::shared_ptr<api::Expr>>{api_field});
574- if (op == FieldFilter::Operator::Equal) {
575- return std::make_shared<api::FunctionExpr>(
576- " and" ,
577- std::vector<std::shared_ptr<api::Expr>>{exists_expr, is_null_expr});
578- } else { // Assuming NotEqual for IsNotNull
579- auto is_not_null_expr = std::make_shared<api::FunctionExpr>(
580- " not" , std::vector<std::shared_ptr<api::Expr>>{is_null_expr});
581- return std::make_shared<api::FunctionExpr>(
582- " and" , std::vector<std::shared_ptr<api::Expr>>{exists_expr,
583- is_not_null_expr});
584- }
585- } else {
586- auto api_constant =
587- std::make_shared<api::Constant>(model::DeepClone (value));
588- std::shared_ptr<api::Expr> comparison_expr;
589- std::string func_name;
590-
591- switch (op) {
592- case FieldFilter::Operator::LessThan:
593- func_name = " lt" ;
594- break ;
595- case FieldFilter::Operator::LessThanOrEqual:
596- func_name = " lte" ;
597- break ;
598- case FieldFilter::Operator::GreaterThan:
599- func_name = " gt" ;
600- break ;
601- case FieldFilter::Operator::GreaterThanOrEqual:
602- func_name = " gte" ;
603- break ;
604- case FieldFilter::Operator::Equal:
605- func_name = " eq" ;
606- break ;
607- case FieldFilter::Operator::NotEqual:
608- func_name = " neq" ;
609- break ;
610- case FieldFilter::Operator::ArrayContains:
611- func_name = " array_contains" ;
612- break ;
613- case FieldFilter::Operator::In:
614- case FieldFilter::Operator::NotIn:
615- case FieldFilter::Operator::ArrayContainsAny: {
616- HARD_ASSERT (
617- model::IsArray (value),
618- " Value for IN, NOT_IN, ARRAY_CONTAINS_ANY must be an array." );
619-
620- if (op == FieldFilter::Operator::In)
621- func_name = " eq_any" ;
622- else if (op == FieldFilter::Operator::NotIn)
623- func_name = " not_eq_any" ;
624- else if (op == FieldFilter::Operator::ArrayContainsAny)
625- func_name = " array_contains_any" ;
626- break ;
627- }
628- default :
629- HARD_FAIL (" Unexpected FieldFilter operator." );
630- }
631- comparison_expr = std::make_shared<api::FunctionExpr>(
632- func_name,
633- std::vector<std::shared_ptr<api::Expr>>{api_field, api_constant});
634- return std::make_shared<api::FunctionExpr>(
635- " and" , std::vector<std::shared_ptr<api::Expr>>{exists_expr,
636- comparison_expr});
599+ default :
600+ HARD_FAIL (" Unexpected FieldFilter operator." );
637601 }
602+ comparison_expr = std::make_shared<api::FunctionExpr>(
603+ func_name,
604+ std::vector<std::shared_ptr<api::Expr>>{api_field, api_constant});
605+ return std::make_shared<api::FunctionExpr>(
606+ " and" ,
607+ std::vector<std::shared_ptr<api::Expr>>{exists_expr, comparison_expr});
608+
638609 } else if (filter.type () == FieldFilter::Type::kCompositeFilter ) {
639610 const auto & composite_filter = static_cast <const CompositeFilter&>(filter);
640611 std::vector<std::shared_ptr<api::Expr>> sub_exprs;
0 commit comments