You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/05/11 12:16:28 UTC

[arrow-adbc] branch main updated: fix(c/driver/snowflake): fix validation test failures (#677)

This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new c3202e6  fix(c/driver/snowflake): fix validation test failures (#677)
c3202e6 is described below

commit c3202e606468e1a01829175483a9041a22964ae3
Author: Matt Topol <zo...@gmail.com>
AuthorDate: Thu May 11 08:16:22 2023 -0400

    fix(c/driver/snowflake): fix validation test failures (#677)
    
    Fixes #667.
---
 c/driver/snowflake/snowflake_test.cc |  1 +
 c/validation/adbc_validation.cc      | 30 ++++++++++++++++++++----------
 c/validation/adbc_validation.h       |  3 +++
 c/validation/adbc_validation_util.cc |  2 +-
 4 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/c/driver/snowflake/snowflake_test.cc b/c/driver/snowflake/snowflake_test.cc
index 021269c..3b2eb65 100644
--- a/c/driver/snowflake/snowflake_test.cc
+++ b/c/driver/snowflake/snowflake_test.cc
@@ -114,6 +114,7 @@ class SnowflakeQuirks : public adbc_validation::DriverQuirks {
   bool supports_partitioned_data() const override { return false; }
   bool supports_dynamic_parameter_binding() const override { return false; }
   bool ddl_implicit_commit_txn() const override { return true; }
+  std::string db_schema() const override { return "ADBC_TESTING"; }
 
   const char* uri_;
   bool skip_{false};
diff --git a/c/validation/adbc_validation.cc b/c/validation/adbc_validation.cc
index 0da8068..5579d15 100644
--- a/c/validation/adbc_validation.cc
+++ b/c/validation/adbc_validation.cc
@@ -511,12 +511,18 @@ void ConnectionTest::TestMetadataGetObjectsDbSchemas() {
         ASSERT_FALSE(ArrowArrayViewIsNull(catalog_db_schemas_list, row))
             << "Row " << row << " should have non-null catalog_db_schemas";
 
+        ArrowStringView catalog_name =
+            ArrowArrayViewGetStringUnsafe(reader.array_view->children[0], row);
+
         const int64_t start_offset =
             ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
         const int64_t end_offset =
             ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
-        ASSERT_GT(end_offset, start_offset)
-            << "Row " << row << " should have nonempty catalog_db_schemas";
+        ASSERT_GE(end_offset, start_offset)
+            << "Row " << row << " (Catalog "
+            << std::string(catalog_name.data, catalog_name.size_bytes)
+            << ") should have nonempty catalog_db_schemas ";
+        ASSERT_FALSE(ArrowArrayViewIsNull(catalog_db_schemas_list, row));
         for (int64_t list_index = start_offset; list_index < end_offset; list_index++) {
           ASSERT_TRUE(ArrowArrayViewIsNull(db_schema_tables_list, row + list_index))
               << "Row " << row << " should have null db_schema_tables";
@@ -681,8 +687,8 @@ void ConnectionTest::TestMetadataGetObjectsTablesTypes() {
           ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
               << "Row " << row << " should have non-null db_schema_tables";
 
-          for (int64_t tables_index = ArrowArrayViewGetOffsetUnsafe(
-                   db_schema_tables_list, row + db_schemas_index);
+          for (int64_t tables_index =
+                   ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index);
                tables_index <
                ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index + 1);
                tables_index++) {
@@ -778,6 +784,9 @@ void ConnectionTest::TestMetadataGetObjectsColumns() {
           ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
               << "Row " << row << " should have non-null db_schema_tables";
 
+          ArrowStringView db_schema_name = ArrowArrayViewGetStringUnsafe(
+              catalog_db_schemas->children[0], db_schemas_index);
+
           for (int64_t tables_index =
                    ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index);
                tables_index <
@@ -792,7 +801,9 @@ void ConnectionTest::TestMetadataGetObjectsColumns() {
                 << "Row " << row << " should have non-null table_constraints";
 
             if (iequals(std::string(table_name.data, table_name.size_bytes),
-                        "bulk_ingest")) {
+                        "bulk_ingest") &&
+                iequals(std::string(db_schema_name.data, db_schema_name.size_bytes),
+                        quirks()->db_schema())) {
               found_expected_table = true;
 
               for (int64_t columns_index =
@@ -1248,11 +1259,10 @@ void StatementTest::TestSqlIngestSample() {
               IsOkStatus(&error));
 
   ASSERT_THAT(AdbcStatementNew(&connection, &statement, &error), IsOkStatus(&error));
-  ASSERT_THAT(
-      AdbcStatementSetSqlQuery(
-          &statement, "SELECT * FROM bulk_ingest ORDER BY \"int64s\" ASC NULLS FIRST",
-          &error),
-      IsOkStatus(&error));
+  ASSERT_THAT(AdbcStatementSetSqlQuery(
+                  &statement, "SELECT * FROM bulk_ingest ORDER BY int64s ASC NULLS FIRST",
+                  &error),
+              IsOkStatus(&error));
   StreamReader reader;
   ASSERT_THAT(AdbcStatementExecuteQuery(&statement, &reader.stream.value,
                                         &reader.rows_affected, &error),
diff --git a/c/validation/adbc_validation.h b/c/validation/adbc_validation.h
index 7f3f175..d3026e0 100644
--- a/c/validation/adbc_validation.h
+++ b/c/validation/adbc_validation.h
@@ -93,6 +93,9 @@ class DriverQuirks {
 
   /// \brief Whether dynamic parameter bindings are supported for prepare
   virtual bool supports_dynamic_parameter_binding() const { return true; }
+
+  /// \brief Default Schema to use for tests
+  virtual std::string db_schema() const { return ""; }
 };
 
 class DatabaseTest {
diff --git a/c/validation/adbc_validation_util.cc b/c/validation/adbc_validation_util.cc
index e67be6d..17cb312 100644
--- a/c/validation/adbc_validation_util.cc
+++ b/c/validation/adbc_validation_util.cc
@@ -251,7 +251,7 @@ void CompareSchema(
               (schema->children[i]->flags & ARROW_FLAG_NULLABLE) != 0)
         << "Nullability mismatch";
     if (std::get<0>(fields[i]).has_value()) {
-      ASSERT_EQ(*std::get<0>(fields[i]), schema->children[i]->name);
+      ASSERT_STRCASEEQ(std::get<0>(fields[i])->c_str(), schema->children[i]->name);
     }
   }
 }