Skip to content

Commit 212f087

Browse files
authored
feat: add inclusive metrics evaluator (#357)
1 parent 4401ceb commit 212f087

11 files changed

+2159
-183
lines changed

src/iceberg/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ set(ICEBERG_SOURCES
2525
expression/evaluator.cc
2626
expression/expression.cc
2727
expression/expressions.cc
28+
expression/inclusive_metrics_evaluator.cc
2829
expression/literal.cc
2930
expression/predicate.cc
3031
expression/rewrite_not.cc

src/iceberg/expression/expressions.cc

Lines changed: 0 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -156,226 +156,87 @@ std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::IsNull(
156156
return IsNull<BoundReference>(Ref(std::move(name)));
157157
}
158158

159-
template <typename B>
160-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::IsNull(
161-
std::shared_ptr<UnboundTerm<B>> expr) {
162-
ICEBERG_ASSIGN_OR_THROW(
163-
auto pred,
164-
UnboundPredicateImpl<B>::Make(Expression::Operation::kIsNull, std::move(expr)));
165-
return pred;
166-
}
167-
168159
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotNull(
169160
std::string name) {
170161
return NotNull<BoundReference>(Ref(std::move(name)));
171162
}
172163

173-
template <typename B>
174-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotNull(
175-
std::shared_ptr<UnboundTerm<B>> expr) {
176-
ICEBERG_ASSIGN_OR_THROW(
177-
auto pred,
178-
UnboundPredicateImpl<B>::Make(Expression::Operation::kNotNull, std::move(expr)));
179-
return pred;
180-
}
181-
182164
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::IsNaN(
183165
std::string name) {
184166
return IsNaN<BoundReference>(Ref(std::move(name)));
185167
}
186168

187-
template <typename B>
188-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::IsNaN(
189-
std::shared_ptr<UnboundTerm<B>> expr) {
190-
ICEBERG_ASSIGN_OR_THROW(auto pred, UnboundPredicateImpl<B>::Make(
191-
Expression::Operation::kIsNan, std::move(expr)));
192-
return pred;
193-
}
194-
195169
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotNaN(
196170
std::string name) {
197171
return NotNaN<BoundReference>(Ref(std::move(name)));
198172
}
199173

200-
template <typename B>
201-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotNaN(
202-
std::shared_ptr<UnboundTerm<B>> expr) {
203-
ICEBERG_ASSIGN_OR_THROW(
204-
auto pred,
205-
UnboundPredicateImpl<B>::Make(Expression::Operation::kNotNan, std::move(expr)));
206-
return pred;
207-
}
208-
209174
// Template implementations for comparison predicates
210175

211176
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::LessThan(
212177
std::string name, Literal value) {
213178
return LessThan<BoundReference>(Ref(std::move(name)), std::move(value));
214179
}
215180

216-
template <typename B>
217-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::LessThan(
218-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
219-
ICEBERG_ASSIGN_OR_THROW(
220-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kLt,
221-
std::move(expr), std::move(value)));
222-
return pred;
223-
}
224-
225181
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::LessThanOrEqual(
226182
std::string name, Literal value) {
227183
return LessThanOrEqual<BoundReference>(Ref(std::move(name)), std::move(value));
228184
}
229185

230-
template <typename B>
231-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::LessThanOrEqual(
232-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
233-
ICEBERG_ASSIGN_OR_THROW(
234-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kLtEq,
235-
std::move(expr), std::move(value)));
236-
return pred;
237-
}
238-
239186
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::GreaterThan(
240187
std::string name, Literal value) {
241188
return GreaterThan<BoundReference>(Ref(std::move(name)), std::move(value));
242189
}
243190

244-
template <typename B>
245-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::GreaterThan(
246-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
247-
ICEBERG_ASSIGN_OR_THROW(
248-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kGt,
249-
std::move(expr), std::move(value)));
250-
return pred;
251-
}
252-
253191
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::GreaterThanOrEqual(
254192
std::string name, Literal value) {
255193
return GreaterThanOrEqual<BoundReference>(Ref(std::move(name)), std::move(value));
256194
}
257195

258-
template <typename B>
259-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::GreaterThanOrEqual(
260-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
261-
ICEBERG_ASSIGN_OR_THROW(
262-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kGtEq,
263-
std::move(expr), std::move(value)));
264-
return pred;
265-
}
266-
267196
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::Equal(std::string name,
268197
Literal value) {
269198
return Equal<BoundReference>(Ref(std::move(name)), std::move(value));
270199
}
271200

272-
template <typename B>
273-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::Equal(
274-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
275-
ICEBERG_ASSIGN_OR_THROW(
276-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kEq,
277-
std::move(expr), std::move(value)));
278-
return pred;
279-
}
280-
281201
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotEqual(
282202
std::string name, Literal value) {
283203
return NotEqual<BoundReference>(Ref(std::move(name)), std::move(value));
284204
}
285205

286-
template <typename B>
287-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotEqual(
288-
std::shared_ptr<UnboundTerm<B>> expr, Literal value) {
289-
ICEBERG_ASSIGN_OR_THROW(
290-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kNotEq,
291-
std::move(expr), std::move(value)));
292-
return pred;
293-
}
294-
295206
// String predicates
296207

297208
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::StartsWith(
298209
std::string name, std::string value) {
299210
return StartsWith<BoundReference>(Ref(std::move(name)), std::move(value));
300211
}
301212

302-
template <typename B>
303-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::StartsWith(
304-
std::shared_ptr<UnboundTerm<B>> expr, std::string value) {
305-
ICEBERG_ASSIGN_OR_THROW(
306-
auto pred,
307-
UnboundPredicateImpl<B>::Make(Expression::Operation::kStartsWith, std::move(expr),
308-
Literal::String(std::move(value))));
309-
return pred;
310-
}
311-
312213
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotStartsWith(
313214
std::string name, std::string value) {
314215
return NotStartsWith<BoundReference>(Ref(std::move(name)), std::move(value));
315216
}
316217

317-
template <typename B>
318-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotStartsWith(
319-
std::shared_ptr<UnboundTerm<B>> expr, std::string value) {
320-
ICEBERG_ASSIGN_OR_THROW(
321-
auto pred,
322-
UnboundPredicateImpl<B>::Make(Expression::Operation::kNotStartsWith,
323-
std::move(expr), Literal::String(std::move(value))));
324-
return pred;
325-
}
326-
327218
// Template implementations for set predicates
328219

329220
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::In(
330221
std::string name, std::vector<Literal> values) {
331222
return In<BoundReference>(Ref(std::move(name)), std::move(values));
332223
}
333224

334-
template <typename B>
335-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::In(
336-
std::shared_ptr<UnboundTerm<B>> expr, std::vector<Literal> values) {
337-
ICEBERG_ASSIGN_OR_THROW(
338-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kIn,
339-
std::move(expr), std::move(values)));
340-
return pred;
341-
}
342-
343225
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::In(
344226
std::string name, std::initializer_list<Literal> values) {
345227
return In<BoundReference>(Ref(std::move(name)), std::vector<Literal>(values));
346228
}
347229

348-
template <typename B>
349-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::In(
350-
std::shared_ptr<UnboundTerm<B>> expr, std::initializer_list<Literal> values) {
351-
return In<B>(std::move(expr), std::vector<Literal>(values));
352-
}
353-
354230
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotIn(
355231
std::string name, std::vector<Literal> values) {
356232
return NotIn<BoundReference>(Ref(std::move(name)), std::move(values));
357233
}
358234

359-
template <typename B>
360-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotIn(
361-
std::shared_ptr<UnboundTerm<B>> expr, std::vector<Literal> values) {
362-
ICEBERG_ASSIGN_OR_THROW(
363-
auto pred, UnboundPredicateImpl<B>::Make(Expression::Operation::kNotIn,
364-
std::move(expr), std::move(values)));
365-
return pred;
366-
}
367-
368235
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::NotIn(
369236
std::string name, std::initializer_list<Literal> values) {
370237
return NotIn<BoundReference>(Ref(std::move(name)), std::vector<Literal>(values));
371238
}
372239

373-
template <typename B>
374-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::NotIn(
375-
std::shared_ptr<UnboundTerm<B>> expr, std::initializer_list<Literal> values) {
376-
return NotIn<B>(expr, std::vector<Literal>(values));
377-
}
378-
379240
// Template implementations for generic predicate factory
380241

381242
std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::Predicate(
@@ -404,29 +265,6 @@ std::shared_ptr<UnboundPredicateImpl<BoundReference>> Expressions::Predicate(
404265
return pred;
405266
}
406267

407-
template <typename B>
408-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::Predicate(
409-
Expression::Operation op, std::shared_ptr<UnboundTerm<B>> expr,
410-
std::vector<Literal> values) {
411-
ICEBERG_ASSIGN_OR_THROW(
412-
auto pred, UnboundPredicateImpl<B>::Make(op, std::move(expr), std::move(values)));
413-
return pred;
414-
}
415-
416-
template <typename B>
417-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::Predicate(
418-
Expression::Operation op, std::shared_ptr<UnboundTerm<B>> expr,
419-
std::initializer_list<Literal> values) {
420-
return Predicate<B>(op, std::move(expr), std::vector<Literal>(values));
421-
}
422-
423-
template <typename B>
424-
std::shared_ptr<UnboundPredicateImpl<B>> Expressions::Predicate(
425-
Expression::Operation op, std::shared_ptr<UnboundTerm<B>> expr) {
426-
ICEBERG_ASSIGN_OR_THROW(auto pred, UnboundPredicateImpl<B>::Make(op, std::move(expr)));
427-
return pred;
428-
}
429-
430268
// Constants
431269

432270
std::shared_ptr<True> Expressions::AlwaysTrue() { return True::Instance(); }

0 commit comments

Comments
 (0)