4747#include " checker/type_checker_builder_factory.h"
4848#include " common/ast.h"
4949#include " common/ast_proto.h"
50- #include " common/decl.h"
5150#include " common/decl_proto_v1alpha1.h"
5251#include " common/expr.h"
5352#include " common/internal/value_conversion.h"
5453#include " common/source.h"
55- #include " common/type.h"
5654#include " common/value.h"
5755#include " eval/public/activation.h"
5856#include " eval/public/builtin_func_registrar.h"
7068#include " extensions/math_ext_macros.h"
7169#include " extensions/proto_ext.h"
7270#include " extensions/protobuf/enum_adapter.h"
71+ #include " extensions/select_optimization.h"
7372#include " extensions/strings.h"
7473#include " internal/status_macros.h"
7574#include " parser/macro.h"
@@ -340,7 +339,7 @@ absl::Status CheckImpl(google::protobuf::Arena* arena,
340339class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
341340 public:
342341 static absl::StatusOr<std::unique_ptr<LegacyConformanceServiceImpl>> Create (
343- bool optimize, bool recursive) {
342+ bool optimize, bool recursive, bool select_optimization ) {
344343 static auto * constant_arena = new Arena ();
345344
346345 google::protobuf::LinkMessageReflection<
@@ -385,6 +384,11 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
385384 options.constant_arena = constant_arena;
386385 }
387386
387+ if (select_optimization) {
388+ std::cerr << " Enabling select optimizations" << std::endl;
389+ options.enable_select_optimization = true ;
390+ }
391+
388392 if (recursive) {
389393 options.max_recursion_depth = 48 ;
390394 }
@@ -526,7 +530,7 @@ class LegacyConformanceServiceImpl : public ConformanceServiceInterface {
526530class ModernConformanceServiceImpl : public ConformanceServiceInterface {
527531 public:
528532 static absl::StatusOr<std::unique_ptr<ModernConformanceServiceImpl>> Create (
529- bool optimize, bool recursive) {
533+ bool optimize, bool recursive, bool select_optimization ) {
530534 google::protobuf::LinkMessageReflection<
531535 cel::expr::conformance::proto3::TestAllTypes>();
532536 google::protobuf::LinkMessageReflection<
@@ -565,8 +569,8 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
565569 options.max_recursion_depth = 48 ;
566570 }
567571
568- return absl::WrapUnique (
569- new ModernConformanceServiceImpl ( options, optimize));
572+ return absl::WrapUnique (new ModernConformanceServiceImpl (
573+ options, optimize, select_optimization ));
570574 }
571575
572576 absl::StatusOr<std::unique_ptr<const cel::Runtime>> Setup (
@@ -583,6 +587,9 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
583587 }
584588 CEL_RETURN_IF_ERROR (cel::EnableReferenceResolver (
585589 builder, cel::ReferenceResolverEnabled::kAlways ));
590+ if (enable_select_optimization_) {
591+ CEL_RETURN_IF_ERROR (cel::extensions::EnableSelectOptimization (builder));
592+ }
586593
587594 auto & type_registry = builder.type_registry ();
588595 // Use linked pbs in the generated descriptor pool.
@@ -704,10 +711,12 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
704711 }
705712
706713 private:
707- explicit ModernConformanceServiceImpl (const RuntimeOptions& options,
708- bool enable_optimizations)
709- : options_(options), enable_optimizations_(enable_optimizations) {}
710-
714+ ModernConformanceServiceImpl (const RuntimeOptions& options,
715+ bool enable_optimizations,
716+ bool enable_select_optimization)
717+ : options_(options),
718+ enable_optimizations_ (enable_optimizations),
719+ enable_select_optimization_(enable_select_optimization) {}
711720
712721 static absl::StatusOr<std::unique_ptr<cel::TraceableProgram>> Plan (
713722 const cel::Runtime& runtime,
@@ -737,6 +746,7 @@ class ModernConformanceServiceImpl : public ConformanceServiceInterface {
737746
738747 RuntimeOptions options_;
739748 bool enable_optimizations_;
749+ bool enable_select_optimization_;
740750};
741751
742752} // namespace
@@ -749,10 +759,10 @@ absl::StatusOr<std::unique_ptr<ConformanceServiceInterface>>
749759NewConformanceService (const ConformanceServiceOptions& options) {
750760 if (options.modern ) {
751761 return google::api::expr::runtime::ModernConformanceServiceImpl::Create (
752- options.optimize , options.recursive );
762+ options.optimize , options.recursive , options. select_optimization );
753763 } else {
754764 return google::api::expr::runtime::LegacyConformanceServiceImpl::Create (
755- options.optimize , options.recursive );
765+ options.optimize , options.recursive , options. select_optimization );
756766 }
757767}
758768
0 commit comments