in c/validation/adbc_validation.cc [564:641]
void ConnectionTest::TestMetadataGetObjectsTables() {
ASSERT_THAT(AdbcConnectionNew(&connection, &error), IsOkStatus(&error));
ASSERT_THAT(AdbcConnectionInit(&connection, &database, &error), IsOkStatus(&error));
if (!quirks()->supports_get_objects()) {
GTEST_SKIP();
}
ASSERT_THAT(quirks()->EnsureSampleTable(&connection, "bulk_ingest", &error),
IsOkStatus(&error));
std::vector<std::pair<const char*, bool>> test_cases = {
{nullptr, true}, {"bulk_%", true}, {"asdf%", false}};
for (const auto& expected : test_cases) {
std::string scope = "Filter: ";
scope += expected.first ? expected.first : "(no filter)";
scope += "; table should exist? ";
scope += expected.second ? "true" : "false";
SCOPED_TRACE(scope);
StreamReader reader;
ASSERT_THAT(AdbcConnectionGetObjects(&connection, ADBC_OBJECT_DEPTH_TABLES, nullptr,
nullptr, expected.first, nullptr, nullptr,
&reader.stream.value, &error),
IsOkStatus(&error));
ASSERT_NO_FATAL_FAILURE(reader.GetSchema());
ASSERT_NO_FATAL_FAILURE(CheckGetObjectsSchema(&reader.schema.value));
ASSERT_NO_FATAL_FAILURE(reader.Next());
ASSERT_NE(nullptr, reader.array->release);
ASSERT_GT(reader.array->length, 0);
bool found_expected_table = false;
do {
for (int64_t row = 0; row < reader.array->length; row++) {
// type: list<db_schema_schema>
struct ArrowArrayView* catalog_db_schemas_list = reader.array_view->children[1];
// type: db_schema_schema (struct)
struct ArrowArrayView* catalog_db_schemas = catalog_db_schemas_list->children[0];
// type: list<table_schema>
struct ArrowArrayView* db_schema_tables_list = catalog_db_schemas->children[1];
// type: table_schema (struct)
struct ArrowArrayView* db_schema_tables = db_schema_tables_list->children[0];
ASSERT_FALSE(ArrowArrayViewIsNull(catalog_db_schemas_list, row))
<< "Row " << row << " should have non-null catalog_db_schemas";
for (int64_t db_schemas_index =
ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
db_schemas_index <
ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
db_schemas_index++) {
ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
<< "Row " << row << " should have non-null db_schema_tables";
for (int64_t tables_index =
ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index);
tables_index <
ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index + 1);
tables_index++) {
ArrowStringView table_name = ArrowArrayViewGetStringUnsafe(
db_schema_tables->children[0], tables_index);
if (iequals(std::string(table_name.data, table_name.size_bytes),
"bulk_ingest")) {
found_expected_table = true;
}
ASSERT_TRUE(ArrowArrayViewIsNull(db_schema_tables->children[2], tables_index))
<< "Row " << row << " should have null table_columns";
ASSERT_TRUE(ArrowArrayViewIsNull(db_schema_tables->children[3], tables_index))
<< "Row " << row << " should have null table_constraints";
}
}
}
ASSERT_NO_FATAL_FAILURE(reader.Next());
} while (reader.array->release);
ASSERT_EQ(expected.second, found_expected_table)
<< "Did (not) find table in metadata";
}
}