You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "WillAyd (via GitHub)" <gi...@apache.org> on 2023/08/08 09:38:11 UTC

[GitHub] [arrow-adbc] WillAyd commented on a diff in pull request #967: test: Data driven tests POC

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: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org