@@ -71,8 +71,7 @@ VariantData ExpressionNode::compute(ProcessingUnit& seg) const {
71
71
}
72
72
73
73
std::optional<DataType> ExpressionNode::compute (ExpressionContext& expression_context,
74
- const std::unordered_map<std::string, DataType>& column_types,
75
- std::unordered_map<std::string, std::optional<DataType>>& computed_data) const {
74
+ const std::unordered_map<std::string, DataType>& column_types) const {
76
75
std::optional<DataType> res;
77
76
std::optional<DataType> left_type = util::variant_match (
78
77
left_,
@@ -86,15 +85,9 @@ std::optional<DataType> ExpressionNode::compute(ExpressionContext& expression_co
86
85
[&expression_context] (const ValueName& value_name) -> std::optional<DataType> {
87
86
return expression_context.values_ .get_value (value_name.value )->data_type_ ;
88
87
},
89
- [&expression_context, &column_types, &computed_data] (const ExpressionName& expression_name) -> std::optional<DataType> {
90
- if (auto it = computed_data.find (expression_name.value ); it != std::end (computed_data)) {
91
- return it->second ;
92
- } else {
93
- auto expr = expression_context.expression_nodes_ .get_value (expression_name.value );
94
- auto res = expr->compute (expression_context, column_types, computed_data);
95
- computed_data.try_emplace (expression_name.value , res);
96
- return res;
97
- }
88
+ [&expression_context, &column_types] (const ExpressionName& expression_name) -> std::optional<DataType> {
89
+ auto expr = expression_context.expression_nodes_ .get_value (expression_name.value );
90
+ return expr->compute (expression_context, column_types);
98
91
},
99
92
[] (auto &&) -> std::optional<DataType> {
100
93
internal::raise <ErrorCode::E_ASSERTION_FAILURE>(" Unexpected expression argument type" );
@@ -161,15 +154,9 @@ std::optional<DataType> ExpressionNode::compute(ExpressionContext& expression_co
161
154
empty_value_set = value_set->empty ();
162
155
return value_set->base_type ().data_type ();
163
156
},
164
- [&expression_context, &column_types, &computed_data] (const ExpressionName& expression_name) -> std::optional<DataType> {
165
- if (auto it = computed_data.find (expression_name.value ); it != std::end (computed_data)) {
166
- return it->second ;
167
- } else {
157
+ [&expression_context, &column_types] (const ExpressionName& expression_name) -> std::optional<DataType> {
168
158
auto expr = expression_context.expression_nodes_ .get_value (expression_name.value );
169
- auto res = expr->compute (expression_context, column_types, computed_data);
170
- computed_data.try_emplace (expression_name.value , res);
171
- return res;
172
- }
159
+ return expr->compute (expression_context, column_types);
173
160
},
174
161
[] (auto &&) -> std::optional<DataType> {
175
162
internal::raise <ErrorCode::E_ASSERTION_FAILURE>(" Unexpected expression argument type" );
0 commit comments