Skip to content

Commit 43d1917

Browse files
committed
fix wrong api
1 parent 085a081 commit 43d1917

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

src/iceberg/expression/aggregate.cc

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <algorithm>
2323
#include <format>
2424
#include <map>
25+
#include <memory>
2526
#include <optional>
2627
#include <string_view>
2728
#include <vector>
@@ -389,8 +390,15 @@ bool CountStarAggregate::HasValue(const DataFile& file) const {
389390
MaxAggregate::MaxAggregate(std::shared_ptr<BoundTerm> term)
390391
: BoundAggregate(Expression::Operation::kMax, std::move(term)) {}
391392

392-
std::shared_ptr<MaxAggregate> MaxAggregate::Make(std::shared_ptr<BoundTerm> term) {
393-
return std::shared_ptr<MaxAggregate>(new MaxAggregate(std::move(term)));
393+
Result<std::unique_ptr<MaxAggregate>> MaxAggregate::Make(
394+
std::shared_ptr<BoundTerm> term) {
395+
if (!term) {
396+
return InvalidExpression("Bound max aggregate requires non-null term");
397+
}
398+
if (!term->type()->is_primitive()) {
399+
return InvalidExpression("Max aggregate term should be primitive");
400+
}
401+
return std::unique_ptr<MaxAggregate>(new MaxAggregate(std::move(term)));
394402
}
395403

396404
Result<Literal> MaxAggregate::Evaluate(const StructLike& data) const {
@@ -420,8 +428,15 @@ bool MaxAggregate::HasValue(const DataFile& file) const {
420428
MinAggregate::MinAggregate(std::shared_ptr<BoundTerm> term)
421429
: BoundAggregate(Expression::Operation::kMin, std::move(term)) {}
422430

423-
std::shared_ptr<MinAggregate> MinAggregate::Make(std::shared_ptr<BoundTerm> term) {
424-
return std::shared_ptr<MinAggregate>(new MinAggregate(std::move(term)));
431+
Result<std::unique_ptr<MinAggregate>> MinAggregate::Make(
432+
std::shared_ptr<BoundTerm> term) {
433+
if (!term) {
434+
return InvalidExpression("Bound min aggregate requires non-null term");
435+
}
436+
if (!term->type()->is_primitive()) {
437+
return InvalidExpression("Max aggregate term should be primitive");
438+
}
439+
return std::unique_ptr<MinAggregate>(new MinAggregate(std::move(term)));
425440
}
426441

427442
Result<Literal> MinAggregate::Evaluate(const StructLike& data) const {

src/iceberg/expression/aggregate.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class ICEBERG_EXPORT CountStarAggregate : public CountAggregate {
207207
/// \brief Bound MAX aggregate.
208208
class ICEBERG_EXPORT MaxAggregate : public BoundAggregate {
209209
public:
210-
static std::shared_ptr<MaxAggregate> Make(std::shared_ptr<BoundTerm> term);
210+
static Result<std::unique_ptr<MaxAggregate>> Make(std::shared_ptr<BoundTerm> term);
211211

212212
Result<Literal> Evaluate(const StructLike& data) const override;
213213
Result<Literal> Evaluate(const DataFile& file) const override;
@@ -222,7 +222,7 @@ class ICEBERG_EXPORT MaxAggregate : public BoundAggregate {
222222
/// \brief Bound MIN aggregate.
223223
class ICEBERG_EXPORT MinAggregate : public BoundAggregate {
224224
public:
225-
static std::shared_ptr<MinAggregate> Make(std::shared_ptr<BoundTerm> term);
225+
static Result<std::unique_ptr<MinAggregate>> Make(std::shared_ptr<BoundTerm> term);
226226

227227
Result<Literal> Evaluate(const StructLike& data) const override;
228228
Result<Literal> Evaluate(const DataFile& file) const override;

0 commit comments

Comments
 (0)