From 6e61853aaf16ab9ec3d53c64ba97460f5bb83630 Mon Sep 17 00:00:00 2001 From: Anshu6250 Date: Mon, 10 Aug 2026 13:19:30 +0530 Subject: [PATCH 1/2] test --- .../bq_driver/internal/odbc_sql_columns.cc | 6 ++--- .../bq_driver/internal/odbc_sql_tables.cc | 25 +++++++++++++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc b/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc index fc445675b5..5deaa6c93c 100644 --- a/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc +++ b/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc @@ -502,10 +502,10 @@ StatusRecordOr> FetchBQTablesData( if (!tables_status) { auto const& status = tables_status.GetStatusRecord(); - if (IsTableNotFound(status)) { + if (IsTableNotFound(status) || status.native_error_code == 403) { LOG(WARNING) - << "FetchBQTablesData:: Skipping dataset not found or with " - << "no tables: '" << dataset_task.dataset + << "FetchBQTablesData:: Skipping inaccessible dataset or one " + << "with no tables: '" << dataset_task.dataset << "': " << status.message; return batch; } diff --git a/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc b/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc index 88e7f6db84..2d444e7bf7 100644 --- a/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc +++ b/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc @@ -116,9 +116,16 @@ StatusRecordOr> GetFilteredDatasetIds( StatusRecordOr> datasets = bq_client.FilterDatasets(project_id, filter, options); if (!datasets) { + auto const& status = datasets.GetStatusRecord(); + if (status.native_error_code == 404 || status.native_error_code == 403) { + LOG(WARNING) + << "GetFilteredDatasetIds:: Skipping project (not found or access " + << "denied): '" << project_id << "': " << status.message; + return std::vector{}; + } LOG(ERROR) << "GetFilteredDatasetIds::FilterDatasets:: " - << datasets.GetStatusRecord().message; - return datasets.GetStatusRecord(); + << status.message; + return status; } for (auto const& dataset : *datasets) { if ((!metadata_id && datasets_filter == "%") || @@ -244,12 +251,14 @@ StatusRecordOr> GetFilteredTables( auto tables_status = bq_client.ListAllTables(project_id, dataset_id, options); if (!tables_status) { auto const& status = tables_status.GetStatusRecord(); - // A dataset may be deleted between listing datasets and reading its tables; - // treat "not found" as an empty dataset rather than failing the whole call. - if (status.native_error_code == 404) { - LOG(WARNING) << "GetFilteredTables:: Skipping dataset not found: '" - << project_id << "." << dataset_id - << "': " << status.message; + // A dataset may be deleted between listing datasets and reading its tables, + // or the user may not have permission to list tables in it. Treat both as + // an empty dataset rather than failing the whole metadata call. + if (status.native_error_code == 404 || status.native_error_code == 403) { + LOG(WARNING) + << "GetFilteredTables:: Skipping dataset (not found or access " + << "denied): '" << project_id << "." << dataset_id + << "': " << status.message; return std::vector{}; } LOG(ERROR) << "GetFilteredTables::ListAllTables:: " << status.message; From ad2496537827d2aa52551c1082b751aa8c9f1bae Mon Sep 17 00:00:00 2001 From: Anshu6250 Date: Wed, 12 Aug 2026 20:23:27 +0530 Subject: [PATCH 2/2] minor: small changes --- .../cloud/odbc/bq_driver/internal/odbc_sql_columns.cc | 10 ++-------- .../cloud/odbc/bq_driver/internal/odbc_sql_tables.cc | 7 +++---- google/cloud/odbc/bq_driver/internal/utils.h | 4 ++++ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc b/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc index 5deaa6c93c..66e7ddd9ef 100644 --- a/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc +++ b/google/cloud/odbc/bq_driver/internal/odbc_sql_columns.cc @@ -32,13 +32,7 @@ using ::google::cloud::odbc_internal::SQLStates; using ::google::cloud::odbc_internal::StatusRecord; using ::google::cloud::odbc_internal::StatusRecordOr; -namespace { - -inline bool IsTableNotFound(StatusRecord const& status) { - return status.native_error_code == 404; -} - -} // namespace +namespace {} // namespace StatusRecord CreateResultSetRowSchema(ResultSet& result_set) { for (auto const& entry : kODBCColumnsMap) { @@ -502,7 +496,7 @@ StatusRecordOr> FetchBQTablesData( if (!tables_status) { auto const& status = tables_status.GetStatusRecord(); - if (IsTableNotFound(status) || status.native_error_code == 403) { + if (IsTableNotFound(status)) { LOG(WARNING) << "FetchBQTablesData:: Skipping inaccessible dataset or one " << "with no tables: '" << dataset_task.dataset diff --git a/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc b/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc index 2d444e7bf7..d4e4dbdeea 100644 --- a/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc +++ b/google/cloud/odbc/bq_driver/internal/odbc_sql_tables.cc @@ -117,14 +117,13 @@ StatusRecordOr> GetFilteredDatasetIds( bq_client.FilterDatasets(project_id, filter, options); if (!datasets) { auto const& status = datasets.GetStatusRecord(); - if (status.native_error_code == 404 || status.native_error_code == 403) { + if (IsTableNotFound(status)) { LOG(WARNING) << "GetFilteredDatasetIds:: Skipping project (not found or access " << "denied): '" << project_id << "': " << status.message; return std::vector{}; } - LOG(ERROR) << "GetFilteredDatasetIds::FilterDatasets:: " - << status.message; + LOG(ERROR) << "GetFilteredDatasetIds::FilterDatasets:: " << status.message; return status; } for (auto const& dataset : *datasets) { @@ -254,7 +253,7 @@ StatusRecordOr> GetFilteredTables( // A dataset may be deleted between listing datasets and reading its tables, // or the user may not have permission to list tables in it. Treat both as // an empty dataset rather than failing the whole metadata call. - if (status.native_error_code == 404 || status.native_error_code == 403) { + if (IsTableNotFound(status)) { LOG(WARNING) << "GetFilteredTables:: Skipping dataset (not found or access " << "denied): '" << project_id << "." << dataset_id diff --git a/google/cloud/odbc/bq_driver/internal/utils.h b/google/cloud/odbc/bq_driver/internal/utils.h index a557ce6725..9e38404e17 100644 --- a/google/cloud/odbc/bq_driver/internal/utils.h +++ b/google/cloud/odbc/bq_driver/internal/utils.h @@ -440,6 +440,10 @@ odbc_internal::StatusRecordOr ParseStringToInteger( std::string const& input); std::string GetLocationfromPSC(std::string const& psc); + +inline bool IsTableNotFound(odbc_internal::StatusRecord const& status) { + return status.native_error_code == 404 || status.native_error_code == 403; +} } // namespace google::cloud::odbc_bq_driver_internal #endif // CPP_BIGQUERY_ODBC_GOOGLE_CLOUD_ODBC_BQ_DRIVER_INTERNAL_UTILS_H