WillAyd commented on code in PR #967:
URL: https://github.com/apache/arrow-adbc/pull/967#discussion_r1286869599
##########
c/validation/adbc_validation.cc:
##########
@@ -1100,7 +1101,88 @@ void StatementTest::TestSqlIngestBinary() {
}
void StatementTest::TestSqlIngestDate32() {
-
ASSERT_NO_FATAL_FAILURE(TestSqlIngestNumericType<int32_t>(NANOARROW_TYPE_DATE32));
+ if (!quirks()->supports_bulk_ingest()) {
+ GTEST_SKIP();
+ }
+
+ if (quirks()->test_data_path() == "") {
+ GTEST_SKIP();
+ }
+
+ ASSERT_THAT(quirks()->DropTable(&connection, "bulk_ingest", &error),
+ IsOkStatus(&error));
+
+ Handle<struct ArrowSchema> schema;
+ Handle<struct ArrowArray> array;
+ struct ArrowError na_error;
+ ArrowType type = NANOARROW_TYPE_DATE32;
+ std::vector<std::optional<int32_t>> values = {std::nullopt, 20000, -20000};
+
+ ASSERT_THAT(MakeSchema(&schema.value, {{"col", type}}), IsOkErrno());
+ ASSERT_THAT(MakeBatch<int32_t>(&schema.value, &array.value, &na_error,
values),
+ IsOkErrno());
+
+ ASSERT_THAT(AdbcStatementNew(&connection, &statement, &error),
IsOkStatus(&error));
+ ASSERT_THAT(AdbcStatementSetOption(&statement,
ADBC_INGEST_OPTION_TARGET_TABLE,
+ "bulk_ingest", &error),
+ IsOkStatus(&error));
+ ASSERT_THAT(AdbcStatementBind(&statement, &array.value, &schema.value,
&error),
+ IsOkStatus(&error));
+
+ int64_t rows_affected = 0;
+ ASSERT_THAT(AdbcStatementExecuteQuery(&statement, nullptr, &rows_affected,
&error),
+ IsOkStatus(&error));
+ ASSERT_THAT(rows_affected,
+ ::testing::AnyOf(::testing::Eq(values.size()),
::testing::Eq(-1)));
+
+ ASSERT_THAT(AdbcStatementSetSqlQuery(
+ &statement,
+ "SELECT * FROM bulk_ingest ORDER BY \"col\" ASC NULLS
FIRST", &error),
+ IsOkStatus(&error));
+ {
+ StreamReader reader;
+ ASSERT_THAT(AdbcStatementExecuteQuery(&statement, &reader.stream.value,
+ &reader.rows_affected, &error),
+ IsOkStatus(&error));
+ ASSERT_THAT(reader.rows_affected,
+ ::testing::AnyOf(::testing::Eq(values.size()),
::testing::Eq(-1)));
+
+ ASSERT_NO_FATAL_FAILURE(reader.GetSchema());
+
+ FILE* fd = fopen(
+ (quirks()->test_data_path() +
"/statementtest-testsqlingestdate32.arrow").c_str(),
+ "rb");
+
+ EXPECT_NE(nullptr, fd);
+
+ struct ArrowIpcInputStream input;
+ EXPECT_EQ(ArrowIpcInputStreamInitFile(&input, fd, 1), NANOARROW_OK);
+
+ struct ArrowArrayStream stream;
+ EXPECT_EQ(ArrowIpcArrayStreamReaderInit(&stream, &input, nullptr),
NANOARROW_OK);
+ struct ArrowSchema ipc_schema;
+
+ EXPECT_EQ(stream.get_schema(&stream, &ipc_schema), NANOARROW_OK);
+ // TODO: for now this assumes we only have one field, but we should make
this generic
+ // when we fully replace CompareSchema with this approach
+ EXPECT_STREQ(reader.schema.value.children[0]->format,
ipc_schema.children[0]->format);
+ ipc_schema.release(&ipc_schema);
+
+ EXPECT_NO_FATAL_FAILURE(reader.Next());
+ EXPECT_NE(nullptr, reader.array->release);
+ EXPECT_EQ(values.size(), reader.array->length);
+ EXPECT_EQ(1, reader.array->n_children);
+
+ struct ArrowArray ipc_array;
+ EXPECT_EQ(stream.get_next(&stream, &ipc_array), NANOARROW_OK);
+ // TODO: we need to compare array values - maybe from <arrow/compare.h>?
Review Comment:
I think this is another outstanding question - do we want to require Arrow
for the test suite? nanoarrow does this already
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]