WillAyd commented on code in PR #967:
URL: https://github.com/apache/arrow-adbc/pull/967#discussion_r1287120733


##########
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:
   Yea that makes sense. I guess for now could implement directly in the 
validation module to avoid the dependency



-- 
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]

Reply via email to