Skip to content

Commit 29818b8

Browse files
jckingcopybara-github
authored andcommitted
Remove portable expression factory
PiperOrigin-RevId: 690743957
1 parent 80f0b11 commit 29818b8

6 files changed

Lines changed: 118 additions & 937 deletions

eval/public/BUILD

Lines changed: 15 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -570,13 +570,26 @@ cc_library(
570570
],
571571
deps = [
572572
":cel_expression",
573+
":cel_function",
573574
":cel_options",
574-
":portable_cel_expr_builder_factory",
575+
"//base:kind",
576+
"//base/ast_internal:ast_impl",
577+
"//common:memory",
578+
"//eval/compiler:cel_expression_builder_flat_impl",
579+
"//eval/compiler:comprehension_vulnerability_check",
580+
"//eval/compiler:constant_folding",
575581
"//eval/compiler:flat_expr_builder",
576-
"//eval/public/structs:proto_message_type_adapter",
582+
"//eval/compiler:flat_expr_builder_extensions",
583+
"//eval/compiler:qualified_reference_resolver",
584+
"//eval/compiler:regex_precompilation_optimization",
577585
"//eval/public/structs:protobuf_descriptor_type_provider",
586+
"//extensions:select_optimization",
587+
"//extensions/protobuf:memory_manager",
578588
"//internal:proto_util",
589+
"//runtime:runtime_options",
590+
"@com_google_absl//absl/log:absl_log",
579591
"@com_google_absl//absl/status",
592+
"@com_google_absl//absl/status:statusor",
580593
"@com_google_protobuf//:protobuf",
581594
],
582595
)
@@ -1095,35 +1108,6 @@ cc_library(
10951108
],
10961109
)
10971110

1098-
cc_library(
1099-
name = "portable_cel_expr_builder_factory",
1100-
srcs = ["portable_cel_expr_builder_factory.cc"],
1101-
hdrs = ["portable_cel_expr_builder_factory.h"],
1102-
deps = [
1103-
":cel_expression",
1104-
":cel_function",
1105-
":cel_options",
1106-
"//base:kind",
1107-
"//base/ast_internal:ast_impl",
1108-
"//common:memory",
1109-
"//common:value",
1110-
"//eval/compiler:cel_expression_builder_flat_impl",
1111-
"//eval/compiler:comprehension_vulnerability_check",
1112-
"//eval/compiler:constant_folding",
1113-
"//eval/compiler:flat_expr_builder",
1114-
"//eval/compiler:flat_expr_builder_extensions",
1115-
"//eval/compiler:qualified_reference_resolver",
1116-
"//eval/compiler:regex_precompilation_optimization",
1117-
"//eval/public/structs:legacy_type_provider",
1118-
"//extensions:select_optimization",
1119-
"//extensions/protobuf:memory_manager",
1120-
"//runtime:runtime_options",
1121-
"@com_google_absl//absl/log:absl_log",
1122-
"@com_google_absl//absl/status",
1123-
"@com_google_absl//absl/status:statusor",
1124-
],
1125-
)
1126-
11271111
cc_library(
11281112
name = "string_extension_func_registrar",
11291113
srcs = ["string_extension_func_registrar.cc"],
@@ -1151,29 +1135,3 @@ cc_test(
11511135
"@com_google_protobuf//:protobuf",
11521136
],
11531137
)
1154-
1155-
cc_test(
1156-
name = "portable_cel_expr_builder_factory_test",
1157-
srcs = ["portable_cel_expr_builder_factory_test.cc"],
1158-
deps = [
1159-
":activation",
1160-
":builtin_func_registrar",
1161-
":cel_options",
1162-
":cel_value",
1163-
":portable_cel_expr_builder_factory",
1164-
"//eval/public/structs:legacy_type_adapter",
1165-
"//eval/public/structs:legacy_type_info_apis",
1166-
"//eval/public/structs:legacy_type_provider",
1167-
"//eval/testutil:test_message_cc_proto",
1168-
"//extensions/protobuf:memory_manager",
1169-
"//internal:casts",
1170-
"//internal:proto_time_encoding",
1171-
"//internal:testing",
1172-
"//parser",
1173-
"@com_google_absl//absl/container:node_hash_set",
1174-
"@com_google_absl//absl/status",
1175-
"@com_google_absl//absl/status:statusor",
1176-
"@com_google_absl//absl/strings:string_view",
1177-
"@com_google_protobuf//:protobuf",
1178-
],
1179-
)

eval/public/cel_expr_builder_factory.cc

Lines changed: 99 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,56 @@
1717
#include "eval/public/cel_expr_builder_factory.h"
1818

1919
#include <memory>
20-
#include <string>
21-
#include <utility>
2220

21+
#include "absl/log/absl_log.h"
2322
#include "absl/status/status.h"
23+
#include "absl/status/statusor.h"
24+
#include "base/ast_internal/ast_impl.h"
25+
#include "base/kind.h"
26+
#include "common/memory.h"
27+
#include "eval/compiler/cel_expression_builder_flat_impl.h"
28+
#include "eval/compiler/comprehension_vulnerability_check.h"
29+
#include "eval/compiler/constant_folding.h"
2430
#include "eval/compiler/flat_expr_builder.h"
31+
#include "eval/compiler/flat_expr_builder_extensions.h"
32+
#include "eval/compiler/qualified_reference_resolver.h"
33+
#include "eval/compiler/regex_precompilation_optimization.h"
34+
#include "eval/public/cel_expression.h"
35+
#include "eval/public/cel_function.h"
2536
#include "eval/public/cel_options.h"
26-
#include "eval/public/portable_cel_expr_builder_factory.h"
27-
#include "eval/public/structs/proto_message_type_adapter.h"
2837
#include "eval/public/structs/protobuf_descriptor_type_provider.h"
38+
#include "extensions/protobuf/memory_manager.h"
39+
#include "extensions/select_optimization.h"
2940
#include "internal/proto_util.h"
41+
#include "runtime/runtime_options.h"
42+
#include "google/protobuf/descriptor.h"
43+
#include "google/protobuf/message.h"
3044

3145
namespace google::api::expr::runtime {
3246

3347
namespace {
48+
49+
using ::cel::MemoryManagerRef;
50+
using ::cel::ast_internal::AstImpl;
51+
using ::cel::extensions::CreateSelectOptimizationProgramOptimizer;
52+
using ::cel::extensions::kCelAttribute;
53+
using ::cel::extensions::kCelHasField;
54+
using ::cel::extensions::ProtoMemoryManagerRef;
55+
using ::cel::extensions::SelectOptimizationAstUpdater;
56+
using ::cel::runtime_internal::CreateConstantFoldingOptimizer;
3457
using ::google::api::expr::internal::ValidateStandardMessageTypes;
58+
59+
// Adapter for a raw arena* pointer. Manages a MemoryManager object for the
60+
// constant folding extension.
61+
struct ArenaBackedConstfoldingFactory {
62+
MemoryManagerRef memory_manager;
63+
64+
absl::StatusOr<std::unique_ptr<ProgramOptimizer>> operator()(
65+
PlannerContext& ctx, const AstImpl& ast) const {
66+
return CreateConstantFoldingOptimizer(memory_manager)(ctx, ast);
67+
}
68+
};
69+
3570
} // namespace
3671

3772
std::unique_ptr<CelExpressionBuilder> CreateCelExpressionBuilder(
@@ -49,10 +84,67 @@ std::unique_ptr<CelExpressionBuilder> CreateCelExpressionBuilder(
4984
return nullptr;
5085
}
5186

87+
cel::RuntimeOptions runtime_options = ConvertToRuntimeOptions(options);
5288
auto builder =
53-
CreatePortableExprBuilder(std::make_unique<ProtobufDescriptorProvider>(
54-
descriptor_pool, message_factory),
55-
options);
89+
std::make_unique<CelExpressionBuilderFlatImpl>(runtime_options);
90+
91+
builder->GetTypeRegistry()
92+
->InternalGetModernRegistry()
93+
.set_use_legacy_container_builders(options.use_legacy_container_builders);
94+
95+
builder->GetTypeRegistry()->RegisterTypeProvider(
96+
std::make_unique<ProtobufDescriptorProvider>(descriptor_pool,
97+
message_factory));
98+
99+
FlatExprBuilder& flat_expr_builder = builder->flat_expr_builder();
100+
101+
flat_expr_builder.AddAstTransform(NewReferenceResolverExtension(
102+
(options.enable_qualified_identifier_rewrites)
103+
? ReferenceResolverOption::kAlways
104+
: ReferenceResolverOption::kCheckedOnly));
105+
106+
if (options.enable_comprehension_vulnerability_check) {
107+
builder->flat_expr_builder().AddProgramOptimizer(
108+
CreateComprehensionVulnerabilityCheck());
109+
}
110+
111+
if (options.constant_folding) {
112+
builder->flat_expr_builder().AddProgramOptimizer(
113+
ArenaBackedConstfoldingFactory{
114+
ProtoMemoryManagerRef(options.constant_arena)});
115+
}
116+
117+
if (options.enable_regex_precompilation) {
118+
flat_expr_builder.AddProgramOptimizer(
119+
CreateRegexPrecompilationExtension(options.regex_max_program_size));
120+
}
121+
122+
if (options.enable_select_optimization) {
123+
// Add AST transform to update select branches on a stored
124+
// CheckedExpression. This may already be performed by a type checker.
125+
flat_expr_builder.AddAstTransform(
126+
std::make_unique<SelectOptimizationAstUpdater>());
127+
// Add overloads for select optimization signature.
128+
// These are never bound, only used to prevent the builder from failing on
129+
// the overloads check.
130+
absl::Status status =
131+
builder->GetRegistry()->RegisterLazyFunction(CelFunctionDescriptor(
132+
kCelAttribute, false, {cel::Kind::kAny, cel::Kind::kList}));
133+
if (!status.ok()) {
134+
ABSL_LOG(ERROR) << "Failed to register " << kCelAttribute << ": "
135+
<< status;
136+
}
137+
status = builder->GetRegistry()->RegisterLazyFunction(CelFunctionDescriptor(
138+
kCelHasField, false, {cel::Kind::kAny, cel::Kind::kList}));
139+
if (!status.ok()) {
140+
ABSL_LOG(ERROR) << "Failed to register " << kCelHasField << ": "
141+
<< status;
142+
}
143+
// Add runtime implementation.
144+
flat_expr_builder.AddProgramOptimizer(
145+
CreateSelectOptimizationProgramOptimizer());
146+
}
147+
56148
return builder;
57149
}
58150

eval/public/cel_expr_builder_factory.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
#ifndef THIRD_PARTY_CEL_CPP_EVAL_PUBLIC_CEL_EXPR_BUILDER_FACTORY_H_
22
#define THIRD_PARTY_CEL_CPP_EVAL_PUBLIC_CEL_EXPR_BUILDER_FACTORY_H_
33

4-
#include "google/protobuf/descriptor.h"
4+
#include <memory>
5+
56
#include "eval/public/cel_expression.h"
67
#include "eval/public/cel_options.h"
8+
#include "google/protobuf/descriptor.h"
9+
#include "google/protobuf/message.h"
710

811
namespace google {
912
namespace api {

eval/public/portable_cel_expr_builder_factory.cc

Lines changed: 0 additions & 139 deletions
This file was deleted.

0 commit comments

Comments
 (0)