Skip to content

Commit 2aab3c1

Browse files
authored
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.
1 parent 0439f0a commit 2aab3c1

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

c/driver/sqlite/sqlite.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,8 +621,9 @@ class SqliteConnection : public driver::Connection<SqliteConnection> {
621621

622622
Result<std::vector<driver::InfoValue>> InfoImpl(const std::vector<uint32_t>& codes) {
623623
static std::vector<uint32_t> kDefaultCodes{
624-
ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION, ADBC_INFO_DRIVER_NAME,
625-
ADBC_INFO_DRIVER_VERSION, ADBC_INFO_DRIVER_ARROW_VERSION,
624+
ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION,
625+
ADBC_INFO_DRIVER_NAME, ADBC_INFO_DRIVER_VERSION,
626+
ADBC_INFO_DRIVER_ARROW_VERSION, ADBC_INFO_DRIVER_ADBC_VERSION,
626627
};
627628
std::reference_wrapper<const std::vector<uint32_t>> codes_ref(codes);
628629
if (codes.empty()) {
@@ -648,6 +649,9 @@ class SqliteConnection : public driver::Connection<SqliteConnection> {
648649
case ADBC_INFO_DRIVER_ARROW_VERSION:
649650
result.emplace_back(code, NANOARROW_VERSION);
650651
break;
652+
case ADBC_INFO_DRIVER_ADBC_VERSION:
653+
result.emplace_back(code, static_cast<int64_t>(ADBC_VERSION_1_1_0));
654+
break;
651655
default:
652656
// Ignore
653657
continue;

c/driver/sqlite/sqlite_test.cc

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ class SqliteQuirks : public adbc_validation::DriverQuirks {
158158
return "SQLite";
159159
case ADBC_INFO_VENDOR_VERSION:
160160
return "3.";
161+
case ADBC_INFO_DRIVER_ADBC_VERSION:
162+
return ADBC_VERSION_1_1_0;
161163
default:
162164
return std::nullopt;
163165
}
@@ -264,10 +266,8 @@ TEST_F(SqliteConnectionTest, GetInfoMetadata) {
264266

265267
adbc_validation::StreamReader reader;
266268
std::vector<uint32_t> info = {
267-
ADBC_INFO_DRIVER_NAME,
268-
ADBC_INFO_DRIVER_VERSION,
269-
ADBC_INFO_VENDOR_NAME,
270-
ADBC_INFO_VENDOR_VERSION,
269+
ADBC_INFO_DRIVER_NAME, ADBC_INFO_DRIVER_VERSION, ADBC_INFO_DRIVER_ADBC_VERSION,
270+
ADBC_INFO_VENDOR_NAME, ADBC_INFO_VENDOR_VERSION,
271271
};
272272
ASSERT_THAT(AdbcConnectionGetInfo(&connection, info.data(), info.size(),
273273
&reader.stream.value, &error),
@@ -283,31 +283,37 @@ TEST_F(SqliteConnectionTest, GetInfoMetadata) {
283283
ASSERT_FALSE(ArrowArrayViewIsNull(reader.array_view->children[0], row));
284284
const uint32_t code =
285285
reader.array_view->children[0]->buffer_views[1].data.as_uint32[row];
286+
const uint32_t offset =
287+
reader.array_view->children[1]->buffer_views[1].data.as_int32[row];
286288
seen.push_back(code);
287289

288-
int str_child_index = 0;
289-
struct ArrowArrayView* str_child =
290-
reader.array_view->children[1]->children[str_child_index];
290+
struct ArrowArrayView* str_child = reader.array_view->children[1]->children[0];
291+
struct ArrowArrayView* int_child = reader.array_view->children[1]->children[2];
291292
switch (code) {
292293
case ADBC_INFO_DRIVER_NAME: {
293-
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 0);
294+
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, offset);
294295
EXPECT_EQ("ADBC SQLite Driver", std::string(val.data, val.size_bytes));
295296
break;
296297
}
297298
case ADBC_INFO_DRIVER_VERSION: {
298-
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 1);
299+
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, offset);
299300
EXPECT_EQ("(unknown)", std::string(val.data, val.size_bytes));
300301
break;
301302
}
302303
case ADBC_INFO_VENDOR_NAME: {
303-
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 2);
304+
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, offset);
304305
EXPECT_EQ("SQLite", std::string(val.data, val.size_bytes));
305306
break;
306307
}
307308
case ADBC_INFO_VENDOR_VERSION: {
308-
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, 3);
309+
ArrowStringView val = ArrowArrayViewGetStringUnsafe(str_child, offset);
309310
EXPECT_THAT(std::string(val.data, val.size_bytes),
310311
::testing::MatchesRegex("3\\..*"));
312+
break;
313+
}
314+
case ADBC_INFO_DRIVER_ADBC_VERSION: {
315+
EXPECT_EQ(ADBC_VERSION_1_1_0, ArrowArrayViewGetIntUnsafe(int_child, offset));
316+
break;
311317
}
312318
default:
313319
// Ignored

python/adbc_driver_manager/tests/test_dbapi.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def test_attrs(sqlite):
6262
def test_info(sqlite):
6363
info = sqlite.adbc_get_info()
6464
assert set(info.keys()) == {
65+
"driver_adbc_version",
6566
"driver_arrow_version",
6667
"driver_name",
6768
"driver_version",

python/adbc_driver_manager/tests/test_lowlevel.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,12 @@ def test_database_set_options(sqlite_raw):
118118
def test_connection_get_info(sqlite_raw):
119119
_, conn = sqlite_raw
120120
codes = [
121-
adbc_driver_manager.AdbcInfoCode.VENDOR_NAME,
121+
adbc_driver_manager.AdbcInfoCode.VENDOR_NAME.value,
122122
adbc_driver_manager.AdbcInfoCode.VENDOR_VERSION.value,
123-
adbc_driver_manager.AdbcInfoCode.DRIVER_NAME,
123+
adbc_driver_manager.AdbcInfoCode.DRIVER_NAME.value,
124124
adbc_driver_manager.AdbcInfoCode.DRIVER_VERSION.value,
125125
adbc_driver_manager.AdbcInfoCode.DRIVER_ARROW_VERSION.value,
126+
103, # ADBC_INFO_DRIVER_ADBC_VERSION (not yet in AdbcInfoCode enum)
126127
]
127128
handle = conn.get_info()
128129
table = _import(handle).read_all()

ruby/test/test-connection.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ def test_all
6868
vendor_version: "X.Y.Z",
6969
driver_name: "ADBC SQLite Driver",
7070
driver_version: "(unknown)",
71-
driver_arrow_version: "X.Y.Z"
71+
driver_arrow_version: "X.Y.Z",
72+
driver_adbc_version: ADBC::VERSION_1_1_0,
7273
},
7374
info)
7475
end

rust/driver_manager/tests/driver_manager_sqlite.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ fn test_connection_get_info() {
163163
let mut driver = get_driver();
164164
let database = get_database(&mut driver);
165165
let connection = database.new_connection().unwrap();
166-
common::test_connection_get_info(&connection, 5);
166+
common::test_connection_get_info(&connection, 6);
167167
}
168168

169169
#[test]

0 commit comments

Comments
 (0)