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 c8826f560 build(c): work around clang making `__COUNTER__` a warning
(#4044)
c8826f560 is described below
commit c8826f56030f11489bc1adf5aaaa773f37151654
Author: David Li <[email protected]>
AuthorDate: Mon Mar 9 08:48:38 2026 +0900
build(c): work around clang making `__COUNTER__` a warning (#4044)
Closes #4042.
---
c/driver/framework/base_driver.h | 9 ++-
c/driver/framework/connection.h | 18 +++--
c/driver/framework/objects.cc | 15 ++--
c/driver/framework/statement.h | 18 +++--
c/driver/framework/status.h | 103 ++++++++++++++----------
c/driver/postgresql/connection.cc | 3 +-
c/driver/postgresql/database.cc | 15 ++--
c/driver/sqlite/sqlite.cc | 45 +++++++----
c/vendor/nanoarrow/nanoarrow.h | 24 ++++--
c/vendor/nanoarrow/nanoarrow.hpp | 6 +-
c/vendor/vendor_nanoarrow.sh | 2 +-
docs/source/cpp/recipe_driver/driver_example.cc | 5 +-
12 files changed, 166 insertions(+), 97 deletions(-)
diff --git a/c/driver/framework/base_driver.h b/c/driver/framework/base_driver.h
index f379121b6..bebdffea6 100644
--- a/c/driver/framework/base_driver.h
+++ b/c/driver/framework/base_driver.h
@@ -325,13 +325,15 @@ class ObjectBase {
template <typename T>
AdbcStatusCode CGetOptionStringLike(const char* key, T* value, size_t*
length,
AdbcError* error) {
- RAISE_RESULT(error, auto option, GetOption(key));
+ Option option;
+ RAISE_RESULT(error, option, GetOption(key));
return option.CGet(value, length, error);
}
template <typename T>
AdbcStatusCode CGetOptionNumeric(const char* key, T* value, AdbcError*
error) {
- RAISE_RESULT(error, auto option, GetOption(key));
+ Option option;
+ RAISE_RESULT(error, option, GetOption(key));
return option.CGet(value, error);
}
};
@@ -1057,7 +1059,8 @@ class BaseStatement : public ObjectBase {
AdbcStatusCode ExecuteQuery(ArrowArrayStream* stream, int64_t* rows_affected,
AdbcError* error) {
- RAISE_RESULT(error, int64_t rows_affected_result,
impl().ExecuteQueryImpl(stream));
+ int64_t rows_affected_result;
+ RAISE_RESULT(error, rows_affected_result, impl().ExecuteQueryImpl(stream));
if (rows_affected) {
*rows_affected = rows_affected_result;
}
diff --git a/c/driver/framework/connection.h b/c/driver/framework/connection.h
index da3aae107..783dc8046 100644
--- a/c/driver/framework/connection.h
+++ b/c/driver/framework/connection.h
@@ -85,7 +85,8 @@ class Connection : public ObjectBase {
}
std::vector<uint32_t> codes(info_codes, info_codes + info_codes_length);
- RAISE_RESULT(error, auto infos, impl().InfoImpl(codes));
+ std::vector<InfoValue> infos;
+ RAISE_RESULT(error, infos, impl().InfoImpl(codes));
RAISE_STATUS(error, MakeGetInfoStream(infos, out));
return ADBC_STATUS_OK;
}
@@ -131,7 +132,8 @@ class Connection : public ObjectBase {
.ToAdbc(error);
}
- RAISE_RESULT(error, auto helper, impl().GetObjectsImpl());
+ std::unique_ptr<GetObjectsHelper> helper;
+ RAISE_RESULT(error, helper, impl().GetObjectsImpl());
auto status = BuildGetObjects(helper.get(), depth, catalog_filter,
schema_filter,
table_filter, column_filter,
table_type_filter, out);
RAISE_STATUS(error, helper->Close());
@@ -149,13 +151,15 @@ class Connection : public ObjectBase {
return driver::Option(ADBC_OPTION_VALUE_DISABLED);
}
} else if (key == ADBC_CONNECTION_OPTION_CURRENT_CATALOG) {
- UNWRAP_RESULT(auto catalog, impl().GetCurrentCatalogImpl());
+ std::optional<std::string> catalog;
+ UNWRAP_RESULT(catalog, impl().GetCurrentCatalogImpl());
if (catalog) {
return driver::Option(std::move(*catalog));
}
return driver::Option();
} else if (key == ADBC_CONNECTION_OPTION_CURRENT_DB_SCHEMA) {
- UNWRAP_RESULT(auto schema, impl().GetCurrentSchemaImpl());
+ std::optional<std::string> schema;
+ UNWRAP_RESULT(schema, impl().GetCurrentSchemaImpl());
if (schema) {
return driver::Option(std::move(*schema));
}
@@ -203,7 +207,8 @@ class Connection : public ObjectBase {
RAISE_STATUS(error, status::InvalidArgument("out must be non-null"));
}
- RAISE_RESULT(error, std::vector<std::string> table_types,
impl().GetTableTypesImpl());
+ std::vector<std::string> table_types;
+ RAISE_RESULT(error, table_types, impl().GetTableTypesImpl());
RAISE_STATUS(error, MakeTableTypesStream(table_types, out));
return ADBC_STATUS_OK;
}
@@ -281,7 +286,8 @@ class Connection : public ObjectBase {
Status SetOptionImpl(std::string_view key, Option value) {
if (key == ADBC_CONNECTION_OPTION_AUTOCOMMIT) {
- UNWRAP_RESULT(auto enabled, value.AsBool());
+ bool enabled;
+ UNWRAP_RESULT(enabled, value.AsBool());
switch (autocommit_) {
case AutocommitState::kAutocommit: {
if (!enabled) {
diff --git a/c/driver/framework/objects.cc b/c/driver/framework/objects.cc
index 31197c2d3..e4ad7673b 100644
--- a/c/driver/framework/objects.cc
+++ b/c/driver/framework/objects.cc
@@ -287,7 +287,8 @@ struct GetObjectsBuilder {
Status AppendCatalogs() {
UNWRAP_STATUS(helper->LoadCatalogs(catalog_filter));
while (true) {
- UNWRAP_RESULT(auto maybe_catalog, helper->NextCatalog());
+ std::optional<std::string_view> maybe_catalog;
+ UNWRAP_RESULT(maybe_catalog, helper->NextCatalog());
if (!maybe_catalog.has_value()) break;
UNWRAP_ERRNO(Internal, ArrowArrayAppendString(catalog_name_col,
@@ -305,7 +306,8 @@ struct GetObjectsBuilder {
Status AppendSchemas(std::string_view catalog) {
UNWRAP_STATUS(helper->LoadSchemas(catalog, schema_filter));
while (true) {
- UNWRAP_RESULT(auto maybe_schema, helper->NextSchema());
+ std::optional<std::string_view> maybe_schema;
+ UNWRAP_RESULT(maybe_schema, helper->NextSchema());
if (!maybe_schema.has_value()) break;
UNWRAP_ERRNO(Internal, ArrowArrayAppendString(db_schema_name_col,
@@ -326,7 +328,8 @@ struct GetObjectsBuilder {
Status AppendTables(std::string_view catalog, std::string_view schema) {
UNWRAP_STATUS(helper->LoadTables(catalog, schema, table_filter,
table_types));
while (true) {
- UNWRAP_RESULT(auto maybe_table, helper->NextTable());
+ std::optional<GetObjectsHelper::Table> maybe_table;
+ UNWRAP_RESULT(maybe_table, helper->NextTable());
if (!maybe_table.has_value()) break;
UNWRAP_ERRNO(Internal, ArrowArrayAppendString(table_name_col,
@@ -351,7 +354,8 @@ struct GetObjectsBuilder {
std::string_view table) {
UNWRAP_STATUS(helper->LoadColumns(catalog, schema, table, column_filter));
while (true) {
- UNWRAP_RESULT(auto maybe_column, helper->NextColumn());
+ std::optional<GetObjectsHelper::Column> maybe_column;
+ UNWRAP_RESULT(maybe_column, helper->NextColumn());
if (!maybe_column.has_value()) break;
const auto& column = *maybe_column;
@@ -415,7 +419,8 @@ struct GetObjectsBuilder {
Status AppendConstraints(std::string_view catalog, std::string_view schema,
std::string_view table) {
while (true) {
- UNWRAP_RESULT(auto maybe_constraint, helper->NextConstraint());
+ std::optional<GetObjectsHelper::Constraint> maybe_constraint;
+ UNWRAP_RESULT(maybe_constraint, helper->NextConstraint());
if (!maybe_constraint.has_value()) break;
// XXX: copy to make gcc 12.2's -Wmaybe-uninitialized happy (only
// happens with optimizations enabled)
diff --git a/c/driver/framework/statement.h b/c/driver/framework/statement.h
index c07324849..4a1a2cb21 100644
--- a/c/driver/framework/statement.h
+++ b/c/driver/framework/statement.h
@@ -128,7 +128,8 @@ class Statement : public BaseStatement<Derived> {
" Cannot ingest with result set")
.ToAdbc(error);
}
- RAISE_RESULT(error, int64_t rows, impl().ExecuteIngestImpl(state));
+ int64_t rows;
+ RAISE_RESULT(error, rows, impl().ExecuteIngestImpl(state));
if (rows_affected) {
*rows_affected = rows;
}
@@ -234,7 +235,8 @@ class Statement : public BaseStatement<Derived> {
return std::get<IngestState>(state_);
};
if (key == ADBC_INGEST_OPTION_MODE) {
- RAISE_RESULT(error, auto mode, value.AsString());
+ std::string_view mode;
+ RAISE_RESULT(error, mode, value.AsString());
if (mode == ADBC_INGEST_OPTION_MODE_APPEND) {
auto& state = ensure_ingest();
state.table_does_not_exist_ = TableDoesNotExist::kFail;
@@ -259,7 +261,8 @@ class Statement : public BaseStatement<Derived> {
return ADBC_STATUS_OK;
} else if (key == ADBC_INGEST_OPTION_TARGET_CATALOG) {
if (value.has_value()) {
- RAISE_RESULT(error, auto catalog, value.AsString());
+ std::string_view catalog;
+ RAISE_RESULT(error, catalog, value.AsString());
ensure_ingest().target_catalog = catalog;
} else {
ensure_ingest().target_catalog = std::nullopt;
@@ -267,18 +270,21 @@ class Statement : public BaseStatement<Derived> {
return ADBC_STATUS_OK;
} else if (key == ADBC_INGEST_OPTION_TARGET_DB_SCHEMA) {
if (value.has_value()) {
- RAISE_RESULT(error, auto schema, value.AsString());
+ std::string_view schema;
+ RAISE_RESULT(error, schema, value.AsString());
ensure_ingest().target_schema = schema;
} else {
ensure_ingest().target_schema = std::nullopt;
}
return ADBC_STATUS_OK;
} else if (key == ADBC_INGEST_OPTION_TARGET_TABLE) {
- RAISE_RESULT(error, auto table, value.AsString());
+ std::string_view table;
+ RAISE_RESULT(error, table, value.AsString());
ensure_ingest().target_table = table;
return ADBC_STATUS_OK;
} else if (key == ADBC_INGEST_OPTION_TEMPORARY) {
- RAISE_RESULT(error, auto temporary, value.AsBool());
+ bool temporary;
+ RAISE_RESULT(error, temporary, value.AsBool());
ensure_ingest().temporary = temporary;
return ADBC_STATUS_OK;
}
diff --git a/c/driver/framework/status.h b/c/driver/framework/status.h
index 22e484dd3..69893ae44 100644
--- a/c/driver/framework/status.h
+++ b/c/driver/framework/status.h
@@ -244,47 +244,59 @@ class Result {
std::variant<Status, T> value_;
};
+#define RESULT_NAME_SUFFIX _adbc_framework_result
#define RAISE_RESULT_IMPL(NAME, ERROR, LHS, RHS) \
- auto&& NAME = (RHS); \
- if (!(NAME).has_value()) { \
- return (NAME).status().ToAdbc(ERROR); \
- } \
- LHS = std::move((NAME).value());
+ do { \
+ auto&& NAME = (RHS); \
+ if (!(NAME).has_value()) { \
+ return (NAME).status().ToAdbc(ERROR); \
+ } \
+ LHS = std::move((NAME).value()); \
+ } while (0);
#define RAISE_STATUS_IMPL(NAME, ERROR, RHS) \
- auto&& NAME = (RHS); \
- if (!(NAME).ok()) { \
- return (NAME).ToAdbc(ERROR); \
- }
+ do { \
+ auto&& NAME = (RHS); \
+ if (!(NAME).ok()) { \
+ return (NAME).ToAdbc(ERROR); \
+ } \
+ } while (0);
#define UNWRAP_RESULT_IMPL(name, lhs, rhs) \
- auto&& name = (rhs); \
- if (!(name).has_value()) { \
- return std::move(name).status(); \
- } \
- lhs = std::move((name).value());
+ do { \
+ auto&& name = (rhs); \
+ if (!(name).has_value()) { \
+ return std::move(name).status(); \
+ } \
+ lhs = std::move((name).value()); \
+ } while (0);
#define UNWRAP_STATUS_IMPL(name, rhs) \
- auto&& name = (rhs); \
- if (!(name).ok()) { \
- return std::move(name); \
- }
+ do { \
+ auto&& name = (rhs); \
+ if (!(name).ok()) { \
+ return std::move(name); \
+ } \
+ } while (0);
#define DRIVER_CONCAT(x, y) x##y
#define UNWRAP_RESULT_NAME(x, y) DRIVER_CONCAT(x, y)
/// \brief A helper to unwrap a Result in functions returning AdbcStatusCode.
-#define RAISE_RESULT(ERROR, LHS, RHS) \
- RAISE_RESULT_IMPL(UNWRAP_RESULT_NAME(driver_raise_result, __COUNTER__),
ERROR, LHS, RHS)
+#define RAISE_RESULT(ERROR, LHS, RHS)
\
+ RAISE_RESULT_IMPL(UNWRAP_RESULT_NAME(driver_raise_result,
RESULT_NAME_SUFFIX), ERROR, \
+ LHS, RHS)
/// \brief A helper to unwrap a Status in functions returning AdbcStatusCode.
-#define RAISE_STATUS(ERROR, RHS) \
- RAISE_STATUS_IMPL(UNWRAP_RESULT_NAME(driver_raise_status, __COUNTER__),
ERROR, RHS)
+#define RAISE_STATUS(ERROR, RHS)
\
+ RAISE_STATUS_IMPL(UNWRAP_RESULT_NAME(driver_raise_status,
RESULT_NAME_SUFFIX), ERROR, \
+ RHS)
/// \brief A helper to unwrap a Result in functions returning Result/Status.
-#define UNWRAP_RESULT(lhs, rhs) \
- UNWRAP_RESULT_IMPL(UNWRAP_RESULT_NAME(driver_unwrap_result, __COUNTER__),
lhs, rhs)
+#define UNWRAP_RESULT(lhs, rhs)
\
+ UNWRAP_RESULT_IMPL(UNWRAP_RESULT_NAME(driver_unwrap_result,
RESULT_NAME_SUFFIX), lhs, \
+ rhs)
/// \brief A helper to unwrap a Status in functions returning Result/Status.
#define UNWRAP_STATUS(rhs) \
- UNWRAP_STATUS_IMPL(UNWRAP_RESULT_NAME(driver_unwrap_status, __COUNTER__),
rhs)
+ UNWRAP_STATUS_IMPL(UNWRAP_RESULT_NAME(driver_unwrap_status,
RESULT_NAME_SUFFIX), rhs)
} // namespace adbc::driver
@@ -337,23 +349,28 @@ STATUS_CTOR(Unknown, UNKNOWN)
} // namespace adbc::driver::status::fmt
#endif
-#define UNWRAP_ERRNO_IMPL(NAME, CODE, RHS)
\
- auto&& NAME = (RHS);
\
- if (NAME != 0) {
\
- return adbc::driver::status::CODE("Call failed: ", #RHS, " = (errno ",
NAME, ") ", \
- std::strerror(NAME));
\
- }
+#define UNWRAP_ERRNO_IMPL(NAME, CODE, RHS)
\
+ do {
\
+ auto&& NAME = (RHS);
\
+ if (NAME != 0) {
\
+ return adbc::driver::status::CODE("Call failed: ", #RHS, " = (errno ",
NAME, ") ", \
+ std::strerror(NAME));
\
+ }
\
+ } while (0);
#define UNWRAP_ERRNO(CODE, RHS) \
- UNWRAP_ERRNO_IMPL(UNWRAP_RESULT_NAME(driver_errno, __COUNTER__), CODE, RHS)
-
-#define UNWRAP_NANOARROW_IMPL(NAME, ERROR, CODE, RHS)
\
- auto&& NAME = (RHS);
\
- if (NAME != 0) {
\
- return adbc::driver::status::CODE("nanoarrow call failed: ", #RHS, " = (",
NAME, \
- ") ", std::strerror(NAME), ". ",
(ERROR).message); \
- }
-
-#define UNWRAP_NANOARROW(ERROR, CODE, RHS)
\
- UNWRAP_NANOARROW_IMPL(UNWRAP_RESULT_NAME(driver_errno_na, __COUNTER__),
ERROR, CODE, \
- RHS)
+ UNWRAP_ERRNO_IMPL(UNWRAP_RESULT_NAME(driver_errno, RESULT_NAME_SUFFIX),
CODE, RHS)
+
+#define UNWRAP_NANOARROW_IMPL(NAME, ERROR, CODE, RHS)
\
+ do {
\
+ auto&& NAME = (RHS);
\
+ if (NAME != 0) {
\
+ return adbc::driver::status::CODE("nanoarrow call failed: ", #RHS, " =
(", NAME, \
+ ") ", std::strerror(NAME), ". ",
\
+ (ERROR).message);
\
+ }
\
+ } while (0);
+
+#define UNWRAP_NANOARROW(ERROR, CODE, RHS)
\
+ UNWRAP_NANOARROW_IMPL(UNWRAP_RESULT_NAME(driver_errno_na,
RESULT_NAME_SUFFIX), ERROR, \
+ CODE, RHS)
diff --git a/c/driver/postgresql/connection.cc
b/c/driver/postgresql/connection.cc
index da7fdeac9..1816586cc 100644
--- a/c/driver/postgresql/connection.cc
+++ b/c/driver/postgresql/connection.cc
@@ -311,7 +311,8 @@ class PostgresGetObjectsHelper : public
adbc::driver::GetObjectsHelper {
Column col;
col.column_name = next_column_[0].value();
- UNWRAP_RESULT(int64_t ordinal_position, next_column_[1].ParseInteger());
+ int64_t ordinal_position;
+ UNWRAP_RESULT(ordinal_position, next_column_[1].ParseInteger());
col.ordinal_position = static_cast<int32_t>(ordinal_position);
if (!next_column_[2].is_null) {
col.remarks = next_column_[2].value();
diff --git a/c/driver/postgresql/database.cc b/c/driver/postgresql/database.cc
index bf488067c..d3daa18e8 100644
--- a/c/driver/postgresql/database.cc
+++ b/c/driver/postgresql/database.cc
@@ -297,9 +297,11 @@ static Status InsertPgAttributeResult(
for (int row = 0; row < num_rows; row++) {
PqResultRow item = result.Row(row);
- UNWRAP_RESULT(int64_t type_oid, item[0].ParseInteger());
+ int64_t type_oid;
+ UNWRAP_RESULT(type_oid, item[0].ParseInteger());
std::string_view col_name = item[1].value();
- UNWRAP_RESULT(int64_t col_oid, item[2].ParseInteger());
+ int64_t col_oid;
+ UNWRAP_RESULT(col_oid, item[2].ParseInteger());
if (type_oid != current_type_oid && !columns.empty()) {
resolver->InsertClass(static_cast<uint32_t>(current_type_oid), columns);
@@ -331,11 +333,14 @@ static Status InsertPgTypeResult(const PqResultHelper&
result,
for (int row = 0; row < num_rows; row++) {
PqResultRow item = result.Row(row);
- UNWRAP_RESULT(int64_t oid, item[0].ParseInteger());
+ int64_t oid;
+ UNWRAP_RESULT(oid, item[0].ParseInteger());
const char* typname = item[1].data;
const char* typreceive = item[2].data;
- UNWRAP_RESULT(int64_t typbasetype, item[3].ParseInteger());
- UNWRAP_RESULT(int64_t typrelid, item[4].ParseInteger());
+ int64_t typbasetype;
+ UNWRAP_RESULT(typbasetype, item[3].ParseInteger());
+ int64_t typrelid;
+ UNWRAP_RESULT(typrelid, item[4].ParseInteger());
int64_t typarray;
if (num_cols == 6) {
diff --git a/c/driver/sqlite/sqlite.cc b/c/driver/sqlite/sqlite.cc
index 58f9dd1dc..c2a1ae798 100644
--- a/c/driver/sqlite/sqlite.cc
+++ b/c/driver/sqlite/sqlite.cc
@@ -178,8 +178,9 @@ class SqliteQuery {
static Status Execute(sqlite3* conn, std::string_view query) {
SqliteQuery q(conn, query);
UNWRAP_STATUS(q.Init());
+ bool has_row;
while (true) {
- UNWRAP_RESULT(bool has_row, q.Next());
+ UNWRAP_RESULT(has_row, q.Next());
if (!has_row) break;
}
return q.Close();
@@ -194,8 +195,9 @@ class SqliteQuery {
int rc = std::forward<BindFunc>(bind_func)(q.stmt_);
if (rc != SQLITE_OK) return q.Close();
+ bool has_row;
while (true) {
- UNWRAP_RESULT(bool has_row, q.Next());
+ UNWRAP_RESULT(has_row, q.Next());
if (!has_row) break;
rc = std::forward<RowFunc>(row_func)(q.stmt_);
@@ -290,7 +292,8 @@ struct SqliteGetObjectsHelper : public
driver::GetObjectsHelper {
}
builder.Append(" )");
}
- UNWRAP_RESULT(auto query, builder.GetString());
+ std::string_view query;
+ UNWRAP_RESULT(query, builder.GetString());
return SqliteQuery::Scan(
conn, query,
@@ -320,7 +323,8 @@ struct SqliteGetObjectsHelper : public
driver::GetObjectsHelper {
columns_query.Append(
R"(SELECT cid, name, type, 'notnull', dflt_value FROM
pragma_table_info(%Q, %Q) WHERE NAME LIKE ?)",
table.data(), catalog.data());
- UNWRAP_RESULT(auto query, columns_query.GetString());
+ std::string_view query;
+ UNWRAP_RESULT(query, columns_query.GetString());
assert(!query.empty());
columns.emplace(conn, query);
@@ -351,7 +355,8 @@ struct SqliteGetObjectsHelper : public
driver::GetObjectsHelper {
builder.Append(
R"(SELECT name FROM pragma_table_info(%Q, %Q) WHERE pk > 0 ORDER BY
pk ASC)",
table.data(), catalog.data());
- UNWRAP_RESULT(auto pk_query, builder.GetString());
+ std::string_view pk_query;
+ UNWRAP_RESULT(pk_query, builder.GetString());
std::vector<std::string> pk;
UNWRAP_STATUS(SqliteQuery::Scan(
conn, pk_query, [](sqlite3_stmt*) { return SQLITE_OK; },
@@ -420,7 +425,8 @@ struct SqliteGetObjectsHelper : public
driver::GetObjectsHelper {
Result<std::optional<Column>> NextColumn() override {
if (!columns) return std::nullopt;
- UNWRAP_RESULT(auto has_next, columns->Next());
+ bool has_next;
+ UNWRAP_RESULT(has_next, columns->Next());
if (!has_next) {
auto query = std::move(*columns);
columns.reset();
@@ -546,7 +552,8 @@ class SqliteDatabase : public
driver::Database<SqliteDatabase> {
if (lifecycle_state_ != driver::LifecycleState::kUninitialized) {
return status::InvalidState("cannot set uri after AdbcDatabaseInit");
}
- UNWRAP_RESULT(auto uri, value.AsString());
+ std::string_view uri;
+ UNWRAP_RESULT(uri, value.AsString());
uri_ = std::move(uri);
return status::Ok();
}
@@ -587,7 +594,8 @@ class SqliteConnection : public
driver::Connection<SqliteConnection> {
SqliteStringBuilder builder;
builder.Append(R"(SELECT * FROM "%w" . "%w")",
catalog.value_or("main").data(),
table_name.data());
- UNWRAP_RESULT(std::string_view query, builder.GetString());
+ std::string_view query;
+ UNWRAP_RESULT(query, builder.GetString());
sqlite3_stmt* stmt = nullptr;
int rc =
@@ -691,7 +699,8 @@ class SqliteConnection : public
driver::Connection<SqliteConnection> {
return status::InvalidState(
"cannot enable extension loading before AdbcConnectionInit");
}
- UNWRAP_RESULT(const bool enabled, value.AsBool());
+ bool enabled;
+ UNWRAP_RESULT(enabled, value.AsBool());
int rc = sqlite3_db_config(conn_, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,
enabled ? 1 : 0, nullptr);
if (rc != SQLITE_OK) {
@@ -715,7 +724,8 @@ class SqliteConnection : public
driver::Connection<SqliteConnection> {
}
const char* extension_entrypoint = nullptr;
if (value.has_value()) {
- UNWRAP_RESULT(auto entrypoint, value.AsString());
+ std::string_view entrypoint;
+ UNWRAP_RESULT(entrypoint, value.AsString());
extension_entrypoint = entrypoint.data();
}
@@ -814,7 +824,8 @@ class SqliteStatement : public
driver::Statement<SqliteStatement> {
table_builder.Append(R"(main . "%w")", state.target_table->c_str());
}
- UNWRAP_RESULT(std::string_view table, table_builder.GetString());
+ std::string_view table;
+ UNWRAP_RESULT(table, table_builder.GetString());
switch (state.table_exists_) {
case Base::TableExists::kAppend:
@@ -892,9 +903,12 @@ class SqliteStatement : public
driver::Statement<SqliteStatement> {
}
insert_query.Append(")");
- UNWRAP_RESULT(std::string_view create, create_query.GetString());
- UNWRAP_RESULT(std::string_view drop, drop_query.GetString());
- UNWRAP_RESULT(std::string_view insert, insert_query.GetString());
+ std::string_view create;
+ UNWRAP_RESULT(create, create_query.GetString());
+ std::string_view drop;
+ UNWRAP_RESULT(drop, drop_query.GetString());
+ std::string_view insert;
+ UNWRAP_RESULT(insert, insert_query.GetString());
// Drop/create tables as needed
@@ -1139,7 +1153,8 @@ class SqliteStatement : public
driver::Statement<SqliteStatement> {
Status SetOptionImpl(std::string_view key, driver::Option value) {
if (key == kStatementOptionBatchRows) {
- UNWRAP_RESULT(int64_t batch_size, value.AsInt());
+ int64_t batch_size;
+ UNWRAP_RESULT(batch_size, value.AsInt());
if (batch_size >= std::numeric_limits<int>::max() || batch_size <= 0) {
return status::fmt::InvalidArgument(
"{} Invalid statement option value {}={} (value is non-positive or
out of "
diff --git a/c/vendor/nanoarrow/nanoarrow.h b/c/vendor/nanoarrow/nanoarrow.h
index 539b2ac9f..8a2e78cb7 100644
--- a/c/vendor/nanoarrow/nanoarrow.h
+++ b/c/vendor/nanoarrow/nanoarrow.h
@@ -19,9 +19,9 @@
#define NANOARROW_CONFIG_H_INCLUDED
#define NANOARROW_VERSION_MAJOR 0
-#define NANOARROW_VERSION_MINOR 8
+#define NANOARROW_VERSION_MINOR 9
#define NANOARROW_VERSION_PATCH 0
-#define NANOARROW_VERSION "0.8.0"
+#define NANOARROW_VERSION "0.9.0-SNAPSHOT"
#define NANOARROW_VERSION_INT \
(NANOARROW_VERSION_MAJOR * 10000 + NANOARROW_VERSION_MINOR * 100 + \
@@ -181,6 +181,13 @@ struct ArrowArrayStream {
if (NAME) return NAME; \
} while (0)
+// __COUNTER__ is not guaranteed to be available and some compiler warnings
may occur
+// if we use it (-Wc2y-extensions). We don't strictly need it because of the
+// do { ... } while(0) scoping and because we never need the return value to
live
+// outside the temporary scope. Here we define a suffix that is unlikely to
collide
+// with anything in EXPR.
+#define _NANOARROW_UNIQUE_SUFFIX _nanoarrow_unique_suffix
+
#define _NANOARROW_CHECK_RANGE(x_, min_, max_) \
NANOARROW_RETURN_NOT_OK((x_ >= min_ && x_ <= max_) ? NANOARROW_OK : EINVAL)
@@ -305,7 +312,8 @@ static inline void ArrowErrorSetString(struct ArrowError*
error, const char* src
/// \brief Check the result of an expression and return it if not NANOARROW_OK
/// \ingroup nanoarrow-errors
#define NANOARROW_RETURN_NOT_OK(EXPR) \
- _NANOARROW_RETURN_NOT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_,
__COUNTER__), EXPR)
+ _NANOARROW_RETURN_NOT_OK_IMPL( \
+ _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR)
/// \brief Check the result of an expression and return it if not NANOARROW_OK,
/// adding an auto-generated message to an ArrowError.
@@ -314,9 +322,10 @@ static inline void ArrowErrorSetString(struct ArrowError*
error, const char* src
/// This macro is used to ensure that functions that accept an ArrowError
/// as input always set its message when returning an error code (e.g., when
calling
/// a nanoarrow function that does *not* accept ArrowError).
-#define NANOARROW_RETURN_NOT_OK_WITH_ERROR(EXPR, ERROR_EXPR) \
- _NANOARROW_RETURN_NOT_OK_WITH_ERROR_IMPL( \
- _NANOARROW_MAKE_NAME(errno_status_, __COUNTER__), EXPR, ERROR_EXPR,
#EXPR)
+#define NANOARROW_RETURN_NOT_OK_WITH_ERROR(EXPR, ERROR_EXPR)
\
+ _NANOARROW_RETURN_NOT_OK_WITH_ERROR_IMPL(
\
+ _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR,
ERROR_EXPR, \
+ #EXPR)
#if defined(NANOARROW_DEBUG) && !defined(NANOARROW_PRINT_AND_DIE)
#define NANOARROW_PRINT_AND_DIE(VALUE, EXPR_STR)
\
@@ -343,7 +352,8 @@ static inline void ArrowErrorSetString(struct ArrowError*
error, const char* src
/// be defining the NANOARROW_PRINT_AND_DIE macro before including nanoarrow.h
/// This macro is provided as a convenience for users and is not used
internally.
#define NANOARROW_ASSERT_OK(EXPR) \
- _NANOARROW_ASSERT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_, __COUNTER__),
EXPR, #EXPR)
+ _NANOARROW_ASSERT_OK_IMPL( \
+ _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR,
#EXPR)
#define _NANOARROW_DCHECK_IMPL(EXPR, EXPR_STR) \
do { \
diff --git a/c/vendor/nanoarrow/nanoarrow.hpp b/c/vendor/nanoarrow/nanoarrow.hpp
index 59773b7db..595971b77 100644
--- a/c/vendor/nanoarrow/nanoarrow.hpp
+++ b/c/vendor/nanoarrow/nanoarrow.hpp
@@ -98,9 +98,9 @@ class Exception : public std::exception {
} while (0)
#endif
-#define NANOARROW_THROW_NOT_OK(EXPR)
\
- _NANOARROW_THROW_NOT_OK_IMPL(_NANOARROW_MAKE_NAME(errno_status_,
__COUNTER__), EXPR, \
- #EXPR)
+#define NANOARROW_THROW_NOT_OK(EXPR) \
+ _NANOARROW_THROW_NOT_OK_IMPL( \
+ _NANOARROW_MAKE_NAME(errno_status_, _NANOARROW_UNIQUE_SUFFIX), EXPR,
#EXPR)
/// @}
diff --git a/c/vendor/vendor_nanoarrow.sh b/c/vendor/vendor_nanoarrow.sh
index e2c2b869c..d11899230 100755
--- a/c/vendor/vendor_nanoarrow.sh
+++ b/c/vendor/vendor_nanoarrow.sh
@@ -21,7 +21,7 @@
main() {
local -r repo_url="https://github.com/apache/arrow-nanoarrow"
# Check releases page: https://github.com/apache/arrow-nanoarrow/releases/
- local -r commit_sha=a579fbf5d192e85b6249935e117de7d02a6dc4e9
+ local -r commit_sha=af347fa31d0e2dca6f6b6f818849a437244b6bf5
echo "Fetching $commit_sha from $repo_url"
SCRATCH=$(mktemp -d)
diff --git a/docs/source/cpp/recipe_driver/driver_example.cc
b/docs/source/cpp/recipe_driver/driver_example.cc
index 9c7ae75f8..5b4685ba8 100644
--- a/docs/source/cpp/recipe_driver/driver_example.cc
+++ b/docs/source/cpp/recipe_driver/driver_example.cc
@@ -98,7 +98,7 @@
/// * :cpp:class:`adbc::driver::Result`: The ``Result<T>`` is used as a return
/// value for functions that on success return a value of type ``T`` and on
/// failure communicate their error using a ``Status``. You can use
-/// ``UNWRAP_RESULT(some_type value, some_call())`` as shorthand for
+/// ``UNWRAP_RESULT(value, some_call())`` as shorthand for
///
/// .. code-block:: cpp
///
@@ -138,7 +138,8 @@ class DriverExampleDatabase : public
adbc::driver::Database<DriverExampleDatabas
Status SetOptionImpl(std::string_view key, Option value) override {
// Handle and validate options implemented by this driver
if (key == "uri") {
- UNWRAP_RESULT(std::string_view uri, value.AsString());
+ std::string_view uri;
+ UNWRAP_RESULT(uri, value.AsString());
if (uri.find("file://") != 0) {
return adbc::driver::status::InvalidArgument(