Skip to content

Commit c956e74

Browse files
committed
add matchers
1 parent 9f7f079 commit c956e74

File tree

7 files changed

+250
-100
lines changed

7 files changed

+250
-100
lines changed

src/iceberg/arrow_c_data.h

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -73,45 +73,4 @@ struct ArrowArray {
7373

7474
#endif // ARROW_C_DATA_INTERFACE
7575

76-
#ifndef ARROW_C_STREAM_INTERFACE
77-
# define ARROW_C_STREAM_INTERFACE
78-
79-
struct ArrowArrayStream {
80-
// Callback to get the stream type
81-
// (will be the same for all arrays in the stream).
82-
//
83-
// Return value: 0 if successful, an `errno`-compatible error code otherwise.
84-
//
85-
// If successful, the ArrowSchema must be released independently from the stream.
86-
int (*get_schema)(struct ArrowArrayStream*, struct ArrowSchema* out);
87-
88-
// Callback to get the next array
89-
// (if no error and the array is released, the stream has ended)
90-
//
91-
// Return value: 0 if successful, an `errno`-compatible error code otherwise.
92-
//
93-
// If successful, the ArrowArray must be released independently from the stream.
94-
int (*get_next)(struct ArrowArrayStream*, struct ArrowArray* out);
95-
96-
// Callback to get optional detailed error information.
97-
// This must only be called if the last stream operation failed
98-
// with a non-0 return code.
99-
//
100-
// Return value: pointer to a null-terminated character array describing
101-
// the last error, or NULL if no description is available.
102-
//
103-
// The returned pointer is only valid until the next operation on this stream
104-
// (including release).
105-
const char* (*get_last_error)(struct ArrowArrayStream*);
106-
107-
// Release callback: release the stream's own resources.
108-
// Note that arrays returned by `get_next` must be individually released.
109-
void (*release)(struct ArrowArrayStream*);
110-
111-
// Opaque producer-specific data
112-
void* private_data;
113-
};
114-
115-
#endif // ARROW_C_STREAM_INTERFACE
116-
11776
} // extern "C"

src/iceberg/schema_internal.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@
2020
#include "iceberg/schema_internal.h"
2121

2222
#include <format>
23+
#include <optional>
2324
#include <string>
2425

25-
#include <nanoarrow/nanoarrow.h>
26-
2726
#include "iceberg/expected.h"
2827
#include "iceberg/schema.h"
2928

@@ -36,13 +35,14 @@ constexpr const char* kArrowExtensionMetadata = "ARROW:extension:metadata";
3635

3736
// Convert an Iceberg type to Arrow schema. Return value is Nanoarrow error code.
3837
ArrowErrorCode ConvertToArrowSchema(const Type& type, ArrowSchema* schema, bool optional,
39-
std::string_view name = "", int32_t field_id = -1) {
38+
std::string_view name = "",
39+
std::optional<int32_t> field_id = std::nullopt) {
4040
ArrowBuffer metadata_buffer;
4141
NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderInit(&metadata_buffer, nullptr));
42-
if (field_id > 0) {
42+
if (field_id.has_value()) {
4343
NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderAppend(
4444
&metadata_buffer, ArrowCharView(std::string(kFieldIdKey).c_str()),
45-
ArrowCharView(std::to_string(field_id).c_str())));
45+
ArrowCharView(std::to_string(field_id.value()).c_str())));
4646
}
4747

4848
switch (type.type_id()) {

src/iceberg/schema_internal.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121

2222
#include <memory>
2323

24-
#include "iceberg/arrow_c_data.h"
24+
#include <nanoarrow/nanoarrow.h>
25+
2526
#include "iceberg/error.h"
2627
#include "iceberg/expected.h"
2728
#include "iceberg/type_fwd.h"

test/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
fetchcontent_declare(googletest
1919
GIT_REPOSITORY https://github.com/google/googletest.git
2020
GIT_TAG b514bdc898e2951020cbdca1304b75f5950d1f59 # release-1.15.2
21-
FIND_PACKAGE_ARGS
22-
NAMES
23-
GTest)
21+
FIND_PACKAGE_ARGS NAMES GTest)
2422
fetchcontent_makeavailable(googletest)
2523

2624
add_executable(schema_test)
@@ -30,18 +28,19 @@ add_test(NAME schema_test COMMAND schema_test)
3028

3129
add_executable(expected_test)
3230
target_sources(expected_test PRIVATE expected_test.cc)
33-
target_link_libraries(expected_test PRIVATE iceberg_static GTest::gtest_main)
31+
target_link_libraries(expected_test PRIVATE iceberg_static GTest::gtest_main GTest::gmock)
3432
add_test(NAME expected_test COMMAND expected_test)
3533

3634
if(ICEBERG_BUILD_BUNDLE)
3735
add_executable(avro_test)
3836
target_sources(avro_test PRIVATE avro_test.cc)
39-
target_link_libraries(avro_test PRIVATE iceberg_bundle_static GTest::gtest_main)
37+
target_link_libraries(avro_test PRIVATE iceberg_bundle_static GTest::gtest_main
38+
GTest::gmock)
4039
add_test(NAME avro_test COMMAND avro_test)
4140

4241
add_executable(arrow_test)
4342
target_sources(arrow_test PRIVATE arrow_test.cc)
4443
target_link_libraries(arrow_test PRIVATE iceberg_bundle_static Arrow::arrow_static
45-
GTest::gtest_main)
44+
GTest::gtest_main GTest::gmock)
4645
add_test(NAME arrow_test COMMAND arrow_test)
4746
endif()

test/arrow_test.cc

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "iceberg/arrow_c_data_internal.h"
3131
#include "iceberg/schema.h"
3232
#include "iceberg/schema_internal.h"
33-
#include "test_util.h"
33+
#include "matchers.h"
3434

3535
namespace iceberg {
3636

@@ -86,7 +86,7 @@ TEST_P(ToArrowSchemaTest, PrimitiveType) {
8686
: SchemaField::MakeRequired(kFieldId, std::string(kFieldName),
8787
param.iceberg_type)});
8888
ArrowSchema arrow_schema;
89-
ASSERT_OK(ToArrowSchema(schema, &arrow_schema));
89+
ASSERT_THAT(ToArrowSchema(schema, &arrow_schema), IsOk());
9090

9191
auto imported_schema = ::arrow::ImportSchema(&arrow_schema).ValueOrDie();
9292
ASSERT_EQ(imported_schema->num_fields(), 1);
@@ -170,22 +170,23 @@ TEST(ToArrowSchemaTest, StructType) {
170170
kStructFieldId, std::string(kStructFieldName), struct_type)});
171171

172172
ArrowSchema arrow_schema;
173-
ASSERT_OK(ToArrowSchema(schema, &arrow_schema));
173+
ASSERT_THAT(ToArrowSchema(schema, &arrow_schema), IsOk());
174174

175175
auto imported_schema = ::arrow::ImportSchema(&arrow_schema).ValueOrDie();
176176
ASSERT_EQ(imported_schema->num_fields(), 1);
177177

178178
auto field = imported_schema->field(0);
179-
CheckArrowField(*field, ::arrow::Type::STRUCT, kStructFieldName, /*nullable=*/false,
180-
kStructFieldId);
179+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*field, ::arrow::Type::STRUCT, kStructFieldName,
180+
/*nullable=*/false, kStructFieldId));
181181

182182
auto struct_field = std::static_pointer_cast<::arrow::StructType>(field->type());
183183
ASSERT_EQ(struct_field->num_fields(), 2);
184184

185-
CheckArrowField(*struct_field->field(0), ::arrow::Type::INT32, kIntFieldName,
186-
/*nullable=*/false, kIntFieldId);
187-
CheckArrowField(*struct_field->field(1), ::arrow::Type::STRING, kStrFieldName,
188-
/*nullable=*/true, kStrFieldId);
185+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*struct_field->field(0), ::arrow::Type::INT32,
186+
kIntFieldName, /*nullable=*/false,
187+
kIntFieldId));
188+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*struct_field->field(1), ::arrow::Type::STRING,
189+
kStrFieldName, /*nullable=*/true, kStrFieldId));
189190
}
190191

191192
TEST(ToArrowSchemaTest, ListType) {
@@ -201,18 +202,19 @@ TEST(ToArrowSchemaTest, ListType) {
201202
{SchemaField::MakeRequired(kListFieldId, std::string(kListFieldName), list_type)});
202203

203204
ArrowSchema arrow_schema;
204-
ASSERT_OK(ToArrowSchema(schema, &arrow_schema));
205+
ASSERT_THAT(ToArrowSchema(schema, &arrow_schema), IsOk());
205206

206207
auto imported_schema = ::arrow::ImportSchema(&arrow_schema).ValueOrDie();
207208
ASSERT_EQ(imported_schema->num_fields(), 1);
208209

209210
auto field = imported_schema->field(0);
210-
CheckArrowField(*field, ::arrow::Type::LIST, kListFieldName, /*nullable=*/false,
211-
kListFieldId);
211+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*field, ::arrow::Type::LIST, kListFieldName,
212+
/*nullable=*/false, kListFieldId));
212213

213214
auto list_field = std::static_pointer_cast<::arrow::ListType>(field->type());
214-
CheckArrowField(*list_field->value_field(), ::arrow::Type::INT64, kElemFieldName,
215-
/*nullable=*/true, kElemFieldId);
215+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*list_field->value_field(),
216+
::arrow::Type::INT64, kElemFieldName,
217+
/*nullable=*/true, kElemFieldId));
216218
}
217219

218220
TEST(ToArrowSchemaTest, MapType) {
@@ -235,24 +237,26 @@ TEST(ToArrowSchemaTest, MapType) {
235237
{SchemaField::MakeRequired(kFieldId, std::string(kMapFieldName), map_type)});
236238

237239
ArrowSchema arrow_schema;
238-
ASSERT_OK(ToArrowSchema(schema, &arrow_schema));
240+
ASSERT_THAT(ToArrowSchema(schema, &arrow_schema), IsOk());
239241

240242
auto imported_schema = ::arrow::ImportSchema(&arrow_schema).ValueOrDie();
241243
ASSERT_EQ(imported_schema->num_fields(), 1);
242244

243245
auto field = imported_schema->field(0);
244-
CheckArrowField(*field, ::arrow::Type::MAP, kMapFieldName, /*nullable=*/false,
245-
kFieldId);
246+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*field, ::arrow::Type::MAP, kMapFieldName,
247+
/*nullable=*/false, kFieldId));
246248

247249
auto map_field = std::static_pointer_cast<::arrow::MapType>(field->type());
248250

249251
auto key_field = map_field->key_field();
250-
CheckArrowField(*key_field, ::arrow::Type::STRING, kKeyFieldName, /*nullable=*/false,
251-
kKeyFieldId);
252+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*key_field, ::arrow::Type::STRING,
253+
kKeyFieldName,
254+
/*nullable=*/false, kKeyFieldId));
252255

253256
auto value_field = map_field->item_field();
254-
CheckArrowField(*value_field, ::arrow::Type::INT32, kValueFieldName, /*nullable=*/true,
255-
kValueFieldId);
257+
ASSERT_NO_FATAL_FAILURE(CheckArrowField(*value_field, ::arrow::Type::INT32,
258+
kValueFieldName,
259+
/*nullable=*/true, kValueFieldId));
256260
}
257261

258262
} // namespace iceberg

0 commit comments

Comments
 (0)