2222#include " iceberg/exception.h"
2323#include " iceberg/transform.h"
2424#include " iceberg/type.h"
25+ #include " iceberg/util/macros.h"
2526
2627namespace iceberg {
2728
@@ -41,41 +42,58 @@ std::shared_ptr<Expression> Expressions::Not(std::shared_ptr<Expression> child)
4142 return not_expr.child ();
4243 }
4344
44- return std::make_shared<::iceberg::Not>(std::move (child));
45+ auto result = ::iceberg::Not::Make (std::move (child));
46+ ICEBERG_ASSIGN_OR_THROW (auto not_expr, std::move (result));
47+ return {std::move (not_expr)};
4548}
4649
4750// Transform functions
4851
4952std::shared_ptr<UnboundTransform> Expressions::Bucket (std::string name,
5053 int32_t num_buckets) {
51- return std::make_shared<UnboundTransform>(Ref (std::move (name)),
52- Transform::Bucket (num_buckets));
54+ ICEBERG_ASSIGN_OR_THROW (
55+ auto transform,
56+ UnboundTransform::Make (Ref (std::move (name)), Transform::Bucket (num_buckets)));
57+ return {std::move (transform)};
5358}
5459
5560std::shared_ptr<UnboundTransform> Expressions::Year (std::string name) {
56- return std::make_shared<UnboundTransform>(Ref (std::move (name)), Transform::Year ());
61+ ICEBERG_ASSIGN_OR_THROW (
62+ auto transform, UnboundTransform::Make (Ref (std::move (name)), Transform::Year ()));
63+ return {std::move (transform)};
5764}
5865
5966std::shared_ptr<UnboundTransform> Expressions::Month (std::string name) {
60- return std::make_shared<UnboundTransform>(Ref (std::move (name)), Transform::Month ());
67+ ICEBERG_ASSIGN_OR_THROW (
68+ auto transform, UnboundTransform::Make (Ref (std::move (name)), Transform::Month ()));
69+ return {std::move (transform)};
6170}
6271
6372std::shared_ptr<UnboundTransform> Expressions::Day (std::string name) {
64- return std::make_shared<UnboundTransform>(Ref (std::move (name)), Transform::Day ());
73+ ICEBERG_ASSIGN_OR_THROW (auto transform,
74+ UnboundTransform::Make (Ref (std::move (name)), Transform::Day ()));
75+ return {std::move (transform)};
6576}
6677
6778std::shared_ptr<UnboundTransform> Expressions::Hour (std::string name) {
68- return std::make_shared<UnboundTransform>(Ref (std::move (name)), Transform::Hour ());
79+ ICEBERG_ASSIGN_OR_THROW (
80+ auto transform, UnboundTransform::Make (Ref (std::move (name)), Transform::Hour ()));
81+ return {std::move (transform)};
6982}
7083
7184std::shared_ptr<UnboundTransform> Expressions::Truncate (std::string name, int32_t width) {
72- return std::make_shared<UnboundTransform>(Ref (std::move (name)),
73- Transform::Truncate (width));
85+ ICEBERG_ASSIGN_OR_THROW (
86+ auto transform,
87+ UnboundTransform::Make (Ref (std::move (name)), Transform::Truncate (width)));
88+ return {std::move (transform)};
7489}
7590
7691std::shared_ptr<UnboundTransform> Expressions::Transform (
7792 std::string name, std::shared_ptr<::iceberg::Transform> transform) {
78- return std::make_shared<UnboundTransform>(Ref (std::move (name)), std::move (transform));
93+ ICEBERG_ASSIGN_OR_THROW (
94+ auto unbound_transform,
95+ UnboundTransform::Make (Ref (std::move (name)), std::move (transform)));
96+ return {std::move (unbound_transform)};
7997}
8098
8199// Template implementations for unary predicates
@@ -327,11 +345,12 @@ std::shared_ptr<False> Expressions::AlwaysFalse() { return False::Instance(); }
327345// Utilities
328346
329347std::shared_ptr<NamedReference> Expressions::Ref (std::string name) {
330- return std::make_shared<NamedReference>(std::move (name));
348+ ICEBERG_ASSIGN_OR_THROW (auto ref, NamedReference::Make (std::move (name)));
349+ return {std::move (ref)};
331350}
332351
333352Literal Expressions::Lit (Literal::Value value, std::shared_ptr<PrimitiveType> type) {
334- throw IcebergError (" Literal creation is not implemented" );
353+ throw ExpressionError (" Literal creation is not implemented" );
335354}
336355
337356} // namespace iceberg
0 commit comments