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 2aab3c154 feat(c/driver/sqlite): support the
`ADBC_INFO_DRIVER_ADBC_VERSION` info key added in ADBC spec 1.1.0 (#3843)
2aab3c154 is described below
commit 2aab3c154c7b9804c2dbf9342b2a932c8da3636c
Author: eitsupi <[email protected]>
AuthorDate: Fri Jan 2 10:12:56 2026 +0900
feat(c/driver/sqlite): support the `ADBC_INFO_DRIVER_ADBC_VERSION` info key
added in ADBC spec 1.1.0 (#3843)
The `ADBC_INFO_DRIVER_ADBC_VERSION` key was added in ADBC 1.1.0, but
it seems that it was not added to the SQLite driver.
---
c/driver/sqlite/sqlite.cc | 8 +++++--
c/driver/sqlite/sqlite_test.cc | 28 +++++++++++++---------
python/adbc_driver_manager/tests/test_dbapi.py | 1 +
python/adbc_driver_manager/tests/test_lowlevel.py | 5 ++--
ruby/test/test-connection.rb | 3 ++-
rust/driver_manager/tests/driver_manager_sqlite.rs | 2 +-
6 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/c/driver/sqlite/sqlite.cc b/c/driver/sqlite/sqlite.cc
index dc3a7de43..58f9dd1dc 100644
--- a/c/driver/sqlite/sqlite.cc
+++ b/c/driver/sqlite/sqlite.cc
@@ -621,8 +621,9 @@ class SqliteConnection : public
driver::Connection<SqliteConnection> {
Result<std::vector<driver::InfoValue>> InfoImpl(const std::vector<uint32_t>&
codes) {
static std::vector<uint32_t> kDefaultCodes{
- ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION,
ADBC_INFO_DRIVER_NAME,
- ADBC_INFO_DRIVER_VERSION, ADBC_INFO_DRIVER_ARROW_VERSION,
+ ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION,
+ ADBC_INFO_DRIVER_NAME, ADBC_INFO_DRIVER_VERSION,
+ ADBC_INFO_DRIVER_ARROW_VERSION, ADBC_INFO_DRIVER_ADBC_VERSION,
};
std::reference_wrapper<const std::vector<uint32_t>> codes_ref(codes);
if (codes.empty()) {
@@ -648,6 +649,9 @@ class SqliteConnection : public
driver::Connection<SqliteConnection> {
case ADBC_INFO_DRIVER_ARROW_VERSION:
result.emplace_back(code, NANOARROW_VERSION);
break;
+ case ADBC_INFO_DRIVER_ADBC_VERSION:
+ result.emplace_back(code, static_cast<int64_t>(ADBC_VERSION_1_1_0));
+ break;
default:
// Ignore
continue;
diff --git a/c/driver/sqlite/sqlite_test.cc b/c/driver/sqlite/sqlite_test.cc
index 81817eb5d..70240a30b 100644
--- a/c/driver/sqlite/sqlite_test.cc
+++ b/c/driver/sqlite/sqlite_test.cc
@@ -158,6 +158,8 @@ class SqliteQuirks : public adbc_validation::DriverQuirks {
return "SQLite";
case ADBC_INFO_VENDOR_VERSION:
return "3.";
+ case ADBC_INFO_DRIVER_ADBC_VERSION:
+ return ADBC_VERSION_1_1_0;
default:
return std::nullopt;
}
@@ -264,10 +266,8 @@ TEST_F(SqliteConnectionTest, GetInfoMetadata) {
adbc_validation::StreamReader reader;
std::vector<uint32_t> info = {
- ADBC_INFO_DRIVER_NAME,
- ADBC_INFO_DRIVER_VERSION,
- ADBC_INFO_VENDOR_NAME,
- ADBC_INFO_VENDOR_VERSION,
+ ADBC_INFO_DRIVER_NAME, ADBC_INFO_DRIVER_VERSION,
ADBC_INFO_DRIVER_ADBC_VERSION,
+ ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION,
};
ASSERT_THAT(AdbcConnectionGetInfo(&connection, info.data(), info.size(),
&reader.stream.value, &error),
@@ -283,31 +283,37 @@ TEST_F(SqliteConnectionTest, GetInfoMetadata) {
ASSERT_FALSE(ArrowArrayViewIsNull(reader.array_view->children[0], row));
const uint32_t code =
reader.array_view->children[0]->buffer_views[1].data.as_uint32[row];
+ const uint32_t offset =
+ reader.array_view->children[1]->buffer_views[1].data.as_int32[row];
seen.push_back(code);
- int str_child_index = 0;
- struct ArrowArrayView* str_child =
- reader.array_view->children[1]->children[str_child_index];
+ struct ArrowArrayView* str_child =
reader.array_view->children[1]->children[0];
+ struct ArrowArrayView* int_child =
reader.array_view->children[1]->children[2];
switch (code) {
case ADBC_INFO_DRIVER_NAME: {
- ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 0);
+ ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child,
offset);
EXPECT_EQ("ADBC SQLite Driver", std::string(val.data,
val.size_bytes));
break;
}
case ADBC_INFO_DRIVER_VERSION: {
- ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 1);
+ ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child,
offset);
EXPECT_EQ("(unknown)", std::string(val.data, val.size_bytes));
break;
}
case ADBC_INFO_VENDOR_NAME: {
- ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 2);
+ ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child,
offset);
EXPECT_EQ("SQLite", std::string(val.data, val.size_bytes));
break;
}
case ADBC_INFO_VENDOR_VERSION: {
- ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 3);
+ ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child,
offset);
EXPECT_THAT(std::string(val.data, val.size_bytes),
::testing::MatchesRegex("3\\..*"));
+ break;
+ }
+ case ADBC_INFO_DRIVER_ADBC_VERSION: {
+ EXPECT_EQ(ADBC_VERSION_1_1_0, ArrowArrayViewGetIntUnsafe(int_child,
offset));
+ break;
}
default:
// Ignored
diff --git a/python/adbc_driver_manager/tests/test_dbapi.py
b/python/adbc_driver_manager/tests/test_dbapi.py
index ed58a2905..056ec4bff 100644
--- a/python/adbc_driver_manager/tests/test_dbapi.py
+++ b/python/adbc_driver_manager/tests/test_dbapi.py
@@ -62,6 +62,7 @@ def test_attrs(sqlite):
def test_info(sqlite):
info = sqlite.adbc_get_info()
assert set(info.keys()) == {
+ "driver_adbc_version",
"driver_arrow_version",
"driver_name",
"driver_version",
diff --git a/python/adbc_driver_manager/tests/test_lowlevel.py
b/python/adbc_driver_manager/tests/test_lowlevel.py
index 74a28bca3..c9c5ca791 100644
--- a/python/adbc_driver_manager/tests/test_lowlevel.py
+++ b/python/adbc_driver_manager/tests/test_lowlevel.py
@@ -118,11 +118,12 @@ def test_database_set_options(sqlite_raw):
def test_connection_get_info(sqlite_raw):
_, conn = sqlite_raw
codes = [
- adbc_driver_manager.AdbcInfoCode.VENDOR_NAME,
+ adbc_driver_manager.AdbcInfoCode.VENDOR_NAME.value,
adbc_driver_manager.AdbcInfoCode.VENDOR_VERSION.value,
- adbc_driver_manager.AdbcInfoCode.DRIVER_NAME,
+ adbc_driver_manager.AdbcInfoCode.DRIVER_NAME.value,
adbc_driver_manager.AdbcInfoCode.DRIVER_VERSION.value,
adbc_driver_manager.AdbcInfoCode.DRIVER_ARROW_VERSION.value,
+ 103, # ADBC_INFO_DRIVER_ADBC_VERSION (not yet in AdbcInfoCode enum)
]
handle = conn.get_info()
table = _import(handle).read_all()
diff --git a/ruby/test/test-connection.rb b/ruby/test/test-connection.rb
index 4d57e48cd..ae052e927 100644
--- a/ruby/test/test-connection.rb
+++ b/ruby/test/test-connection.rb
@@ -68,7 +68,8 @@ class ConnectionTest < Test::Unit::TestCase
vendor_version: "X.Y.Z",
driver_name: "ADBC SQLite Driver",
driver_version: "(unknown)",
- driver_arrow_version: "X.Y.Z"
+ driver_arrow_version: "X.Y.Z",
+ driver_adbc_version: ADBC::VERSION_1_1_0,
},
info)
end
diff --git a/rust/driver_manager/tests/driver_manager_sqlite.rs
b/rust/driver_manager/tests/driver_manager_sqlite.rs
index b00f9a555..ed462d385 100644
--- a/rust/driver_manager/tests/driver_manager_sqlite.rs
+++ b/rust/driver_manager/tests/driver_manager_sqlite.rs
@@ -163,7 +163,7 @@ fn test_connection_get_info() {
let mut driver = get_driver();
let database = get_database(&mut driver);
let connection = database.new_connection().unwrap();
- common::test_connection_get_info(&connection, 5);
+ common::test_connection_get_info(&connection, 6);
}
#[test]