Skip to content
This repository was archived by the owner on May 6, 2024. It is now read-only.

Commit 177fa70

Browse files
authored
[POAE7-2765] extended expression build and validate (#361)
* [POAE7-2765] extended expression build and validate * [POAE7-2842] eu generation from extended expression * rebase * fix build
1 parent 81abe39 commit 177fa70

14 files changed

+280
-278
lines changed

cpp/CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,20 @@ if(BDTK_ENABLE_CIDER)
142142
#
143143
# Subdirectories
144144
#
145+
# include_directories(src/cider) include_directories(src/cider/include)
146+
# add_subdirectory(src/cider)
147+
148+
if(CIDER_ENABLE_VELOX)
149+
add_subdirectory(thirdparty/velox)
150+
endif()
151+
145152
include_directories(src/cider)
146153
include_directories(src/cider/include)
147154
add_subdirectory(src/cider)
148-
149155
if(CIDER_ENABLE_VELOX)
150-
add_subdirectory(thirdparty/velox)
151156
add_subdirectory(src/cider-velox)
152157
endif()
158+
153159
endif()
154160

155161
if(BDTK_ENABLE_ICL)

cpp/src/cider/examples/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
# under the License.
1919

2020
add_executable(ExpressionEvalExample ExpressionEvalExample.cpp)
21-
target_link_libraries(ExpressionEvalExample test_utils cider_expr_builder cider
22-
substrait)
21+
target_link_libraries(ExpressionEvalExample dl cider_util test_utils
22+
cider_expr_builder substrait)
2323

2424
add_executable(CiderHashTableExample CiderHashTableExample.cpp)
2525
target_link_libraries(CiderHashTableExample cider cider_hashtable_join)

cpp/src/cider/exec/plan/builder/SubstraitExprBuilder.cpp

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,46 @@ SubstraitExprBuilder::SubstraitExprBuilder(std::vector<std::string> names,
3737
schema_ = makeNamedStruct(names, types);
3838
}
3939

40+
::substrait::ExtendedExpression* SubstraitExprBuilder::build(
41+
std::vector<ScalarExprRef> expr_refs) {
42+
::substrait::ExtendedExpression* ext_expr = new ::substrait::ExtendedExpression();
43+
for (auto expr_ref : expr_refs) {
44+
auto referred_expr = ext_expr->add_referred_expr();
45+
referred_expr->set_allocated_expression(expr_ref.expr);
46+
referred_expr->add_output_names(expr_ref.output_names);
47+
}
48+
using SimpleExtensionURI = ::substrait::extensions::SimpleExtensionURI;
49+
// Currently we don't introduce any substrait extension YAML files, so always
50+
// only have one dummy URI.
51+
SimpleExtensionURI* extensionUri = ext_expr->add_extension_uris();
52+
extensionUri->set_extension_uri_anchor(1);
53+
for (auto func_info : funcs_info_) {
54+
ext_expr->add_extensions()->set_allocated_extension_function(func_info);
55+
}
56+
ext_expr->set_allocated_base_schema(schema_);
57+
return ext_expr;
58+
}
59+
60+
::substrait::ExtendedExpression* SubstraitExprBuilder::build(
61+
std::vector<AggregationExprRef> expr_refs) {
62+
::substrait::ExtendedExpression* ext_expr = new ::substrait::ExtendedExpression();
63+
for (auto expr_ref : expr_refs) {
64+
auto referred_expr = ext_expr->add_referred_expr();
65+
referred_expr->set_allocated_measure(expr_ref.expr);
66+
referred_expr->add_output_names(expr_ref.output_names);
67+
}
68+
using SimpleExtensionURI = ::substrait::extensions::SimpleExtensionURI;
69+
// Currently we don't introduce any substrait extension YAML files, so always
70+
// only have one dummy URI.
71+
SimpleExtensionURI* extensionUri = ext_expr->add_extension_uris();
72+
extensionUri->set_extension_uri_anchor(1);
73+
for (auto func_info : funcs_info_) {
74+
ext_expr->add_extensions()->set_allocated_extension_function(func_info);
75+
}
76+
ext_expr->set_allocated_base_schema(schema_);
77+
return ext_expr;
78+
}
79+
4080
::substrait::NamedStruct* SubstraitExprBuilder::makeNamedStruct(
4181
std::vector<std::string> names,
4282
std::vector<::substrait::Type*> types) {
@@ -120,7 +160,7 @@ SubstraitExprBuilder::makeFunc(std::string func_name,
120160
func->set_name(func_sig);
121161
func->set_function_anchor(func_anchor_);
122162
func_anchor_ += 1;
123-
func->set_extension_uri_reference(2);
163+
func->set_extension_uri_reference(1);
124164
funcs_info_.push_back(func);
125165
return func;
126166
}

cpp/src/cider/exec/plan/builder/SubstraitExprBuilder.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,19 @@
2626

2727
#pragma once
2828
#include "substrait/algebra.pb.h"
29+
#include "substrait/extended_expression.pb.h"
2930
#include "substrait/type.pb.h"
3031

31-
struct ExpressionReference {
32+
struct ScalarExprRef {
3233
::substrait::Expression* expr;
3334
std::string output_names;
3435
};
3536

37+
struct AggregationExprRef {
38+
::substrait::AggregateFunction* expr;
39+
std::string output_names;
40+
};
41+
3642
class SubstraitExprBuilder {
3743
public:
3844
SubstraitExprBuilder(std::vector<std::string> names,
@@ -42,8 +48,9 @@ class SubstraitExprBuilder {
4248

4349
::substrait::Expression* makeFieldReference(std::string name);
4450

45-
// TODO: (yma11) build extended expression
46-
// ::substrait::ExtendedExpression* build(std::vector<ExpressionReference> expr_refs);
51+
::substrait::ExtendedExpression* build(std::vector<ScalarExprRef> expr_refs);
52+
53+
::substrait::ExtendedExpression* build(std::vector<AggregationExprRef> expr_refs);
4754

4855
::substrait::Expression* makeScalarExpr(std::string func_name,
4956
std::vector<::substrait::Expression*> args,

cpp/src/cider/exec/plan/parser/SubstraitExprBuilder.cpp

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

cpp/src/cider/exec/plan/parser/SubstraitExprBuilder.h

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

0 commit comments

Comments
 (0)