83 using FieldLookup = std::function<Result<std::optional<FieldLookupResult>>(int32_t)>;
90 static Result<FieldLookup> MakeFieldLookup(
91 std::shared_ptr<Schema> table_schema,
92 std::span<
const std::shared_ptr<Schema>> schemas = {});
96 static Result<FieldLookup> MakeFieldLookup(
97 std::shared_ptr<TableMetadata> table_metadata);
109 static Result<std::unique_ptr<DeleteFilter>> Make(
110 std::string file_path, std::span<
const std::shared_ptr<DataFile>> delete_files,
111 std::shared_ptr<Schema> table_schema, std::shared_ptr<Schema> requested_schema,
112 std::shared_ptr<FileIO> io,
bool need_row_pos_col =
true,
113 std::shared_ptr<DeleteCounter> counter =
nullptr);
116 static Result<std::unique_ptr<DeleteFilter>> Make(
117 std::string file_path, std::span<
const std::shared_ptr<DataFile>> delete_files,
118 std::shared_ptr<TableMetadata> table_metadata,
119 std::shared_ptr<Schema> requested_schema, std::shared_ptr<FileIO> io,
120 bool need_row_pos_col =
true, std::shared_ptr<DeleteCounter> counter =
nullptr);
123 static Result<std::unique_ptr<DeleteFilter>> Make(
124 std::string file_path, std::span<
const std::shared_ptr<DataFile>> delete_files,
125 std::shared_ptr<Schema> table_schema, std::shared_ptr<Schema> requested_schema,
126 std::shared_ptr<FileIO> io, std::span<
const std::shared_ptr<Schema>> schemas,
127 bool need_row_pos_col =
true, std::shared_ptr<DeleteCounter> counter =
nullptr);
130 static Result<std::unique_ptr<DeleteFilter>> Make(
131 std::string file_path, std::span<
const std::shared_ptr<DataFile>> delete_files,
132 std::shared_ptr<Schema> requested_schema, std::shared_ptr<FileIO> io,
133 FieldLookup field_lookup,
bool need_row_pos_col =
true,
134 std::shared_ptr<DeleteCounter> counter =
nullptr);
139 const std::shared_ptr<Schema>& RequiredSchema()
const;
143 const std::shared_ptr<Schema>& ExpectedSchema()
const;
149 void IncrementDeleteCount(int64_t count = 1);
157 Result<const PositionDeleteIndex*> DeletedRowPositions()
const;
167 Result<std::function<Result<bool>(
const StructLike&)>> EqDeletedRowFilter()
const;
173 Result<std::function<Result<bool>(
const StructLike&)>> FindEqualityDeleteRows()
const;
180 Result<AliveRowSelection> ComputeAliveRows(
const ArrowSchema& batch_schema,
183 bool HasPositionDeletes()
const;
184 bool HasEqualityDeletes()
const;
190 struct EqDeleteGroup;
192 DeleteFilter(std::string file_path, std::shared_ptr<Schema> requested_schema,
193 std::shared_ptr<FileIO> io, FieldLookup field_lookup,
194 bool need_row_pos_col, std::shared_ptr<DeleteCounter> counter);
196 Status Init(std::span<
const std::shared_ptr<DataFile>> delete_files);
197 Result<std::shared_ptr<Schema>> ComputeRequiredSchema()
const;
198 Status EnsurePositionDeletesLoaded()
const;
199 Status EnsureEqualityDeletesLoaded()
const;
201 const std::string file_path_;
202 std::vector<std::shared_ptr<DataFile>> pos_deletes_;
203 std::vector<std::shared_ptr<DataFile>> eq_deletes_;
205 std::shared_ptr<Schema> requested_schema_;
206 std::shared_ptr<Schema> required_schema_;
207 FieldLookup field_lookup_;
209 const bool need_row_pos_col_;
211 std::optional<size_t> pos_field_position_;
212 std::shared_ptr<DeleteCounter> counter_;
219 mutable std::mutex pos_mutex_;
220 mutable bool pos_loaded_ =
false;
223 mutable std::mutex eq_mutex_;
224 mutable bool eq_loaded_ =
false;
225 mutable std::vector<std::unique_ptr<EqDeleteGroup>> eq_groups_;
226 mutable std::function<Result<bool>(
const StructLike&)> eq_deleted_row_filter_cache_;