Skip to content

Commit bdde368

Browse files
committed
feat: replace sort order and refactor transaction / pending update
1 parent 9c00bfa commit bdde368

25 files changed

+559
-103
lines changed

src/iceberg/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ set(ICEBERG_SOURCES
7777
transform_function.cc
7878
type.cc
7979
update/pending_update.cc
80+
update/replace-sort-order.cc
8081
update/update_properties.cc
8182
util/bucket_util.cc
8283
util/conversions.cc

src/iceberg/expression/term.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ class ICEBERG_EXPORT BoundReference
151151

152152
std::shared_ptr<Type> type() const override { return field_.type(); }
153153

154+
int32_t field_id() const { return field_.field_id(); }
155+
154156
bool MayProduceNull() const override { return field_.optional(); }
155157

156158
bool Equals(const BoundTerm& other) const override;

src/iceberg/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ iceberg_sources = files(
9999
'transform_function.cc',
100100
'type.cc',
101101
'update/pending_update.cc',
102+
'update/replace_sort_order.cc',
102103
'update/update_properties.cc',
103104
'util/bucket_util.cc',
104105
'util/conversions.cc',

src/iceberg/sort_order.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ Result<std::unique_ptr<SortOrder>> SortOrder::Make(const Schema& schema, int32_t
111111
}
112112

113113
if (fields.empty() && sort_id != kUnsortedOrderId) [[unlikely]] {
114-
return InvalidArgument("Sort order must have at least one sort field");
114+
return InvalidArgument(
115+
"Sorted order must have at least one sort field. Use SortOrder::Unsorted() to "
116+
"create an unsorted order");
115117
}
116118

117119
auto sort_order = std::unique_ptr<SortOrder>(new SortOrder(sort_id, std::move(fields)));

src/iceberg/table.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,13 @@ Result<std::shared_ptr<UpdateProperties>> Table::NewUpdateProperties() {
154154
return transaction->NewUpdateProperties();
155155
}
156156

157+
Result<std::shared_ptr<ReplaceSortOrder>> Table::NewReplaceSortOrder() {
158+
ICEBERG_ASSIGN_OR_RAISE(
159+
auto transaction, Transaction::Make(shared_from_this(), Transaction::Kind::kUpdate,
160+
/*auto_commit=*/true));
161+
return transaction->NewReplaceSortOrder();
162+
}
163+
157164
Result<std::shared_ptr<StagedTable>> StagedTable::Make(
158165
TableIdentifier identifier, std::shared_ptr<TableMetadata> metadata,
159166
std::string metadata_location, std::shared_ptr<FileIO> io,

src/iceberg/table.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ class ICEBERG_EXPORT Table : public std::enable_shared_from_this<Table> {
132132
/// changes.
133133
virtual Result<std::shared_ptr<UpdateProperties>> NewUpdateProperties();
134134

135+
/// \brief Create a new ReplaceSortOrder to replace the table sort order and commit the
136+
/// changes.
137+
virtual Result<std::shared_ptr<ReplaceSortOrder>> NewReplaceSortOrder();
138+
135139
protected:
136140
Table(TableIdentifier identifier, std::shared_ptr<TableMetadata> metadata,
137141
std::string metadata_location, std::shared_ptr<FileIO> io,

src/iceberg/table_metadata.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ TableMetadataBuilder& TableMetadataBuilder::SetProperties(
721721
}
722722

723723
TableMetadataBuilder& TableMetadataBuilder::RemoveProperties(
724-
const std::vector<std::string>& removed) {
724+
const std::unordered_set<std::string>& removed) {
725725
// If removed is empty, return early (no-op)
726726
if (removed.empty()) {
727727
return *this;

src/iceberg/table_metadata.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ class ICEBERG_EXPORT TableMetadataBuilder : public ErrorCollector {
394394
///
395395
/// \param removed Set of property keys to remove
396396
/// \return Reference to this builder for method chaining
397-
TableMetadataBuilder& RemoveProperties(const std::vector<std::string>& removed);
397+
TableMetadataBuilder& RemoveProperties(const std::unordered_set<std::string>& removed);
398398

399399
/// \brief Set the table location
400400
///

src/iceberg/table_update.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <optional>
2727
#include <string>
2828
#include <unordered_map>
29+
#include <unordered_set>
2930
#include <vector>
3031

3132
#include "iceberg/iceberg_export.h"
@@ -379,10 +380,10 @@ class ICEBERG_EXPORT SetProperties : public TableUpdate {
379380
/// \brief Represents removing table properties
380381
class ICEBERG_EXPORT RemoveProperties : public TableUpdate {
381382
public:
382-
explicit RemoveProperties(std::vector<std::string> removed)
383+
explicit RemoveProperties(std::unordered_set<std::string> removed)
383384
: removed_(std::move(removed)) {}
384385

385-
const std::vector<std::string>& removed() const { return removed_; }
386+
const std::unordered_set<std::string>& removed() const { return removed_; }
386387

387388
void ApplyTo(TableMetadataBuilder& builder) const override;
388389

@@ -391,7 +392,7 @@ class ICEBERG_EXPORT RemoveProperties : public TableUpdate {
391392
Kind kind() const override { return Kind::kRemoveProperties; }
392393

393394
private:
394-
std::vector<std::string> removed_;
395+
std::unordered_set<std::string> removed_;
395396
};
396397

397398
/// \brief Represents setting the table location

src/iceberg/test/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ if(ICEBERG_BUILD_BUNDLE)
153153
USE_BUNDLE
154154
SOURCES
155155
transaction_test.cc
156-
update_properties_test.cc)
156+
update_properties_test.cc
157+
replace_sort_order_test.cc)
157158

158159
endif()
159160

0 commit comments

Comments
 (0)