From 494d7538963f8a55066277fa4561a9512976eff0 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 15 Jun 2026 21:50:09 -0700 Subject: [PATCH 01/14] Set LoadFlags::DEFAULT on Database.open --- ruby/lib/adbc/database.rb | 5 +++-- ruby/test/test-database.rb | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 ruby/test/test-database.rb diff --git a/ruby/lib/adbc/database.rb b/ruby/lib/adbc/database.rb index 15e6abfbc5..b4b561caa6 100644 --- a/ruby/lib/adbc/database.rb +++ b/ruby/lib/adbc/database.rb @@ -18,13 +18,14 @@ module ADBC class Database class << self - def open(**options) + def open(load_flags: LoadFlags::DEFAULT, **options) database = new need_release = true begin options.each do |key, value| - database.set_option(key, value) + database.set_option(key.to_s, value) end + database.set_load_flags(load_flags) database.init if block_given? yield(database) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb new file mode 100644 index 0000000000..34bb97892c --- /dev/null +++ b/ruby/test/test-database.rb @@ -0,0 +1,37 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +class DatabaseTest < Test::Unit::TestCase + sub_test_case(".open") do + test("applies LoadFlags::DEFAULT when load_flags is not passed") do + assert_nothing_raised do + ADBC::Database.open(driver: "adbc_driver_sqlite", uri: ":memory:") do |_database| + end + end + end + + test("load_flags: none disables all search paths") do + error = assert_raise_kind_of(ADBC::Error) do + ADBC::Database.open(driver: "adbc_driver_sqlite", + uri: ":memory:", + load_flags: ADBC::LoadFlags.new(0)) do |_database| + end + end + assert_match(/not enabled at run time/, error.message) + end + end +end From 694adb42784ff1818d151c3fb16db6190b9df914 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 15 Jun 2026 21:59:58 -0700 Subject: [PATCH 02/14] move load_flags to new --- ruby/lib/adbc/database.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ruby/lib/adbc/database.rb b/ruby/lib/adbc/database.rb index b4b561caa6..1b8e3ede89 100644 --- a/ruby/lib/adbc/database.rb +++ b/ruby/lib/adbc/database.rb @@ -18,14 +18,20 @@ module ADBC class Database class << self - def open(load_flags: LoadFlags::DEFAULT, **options) + def new + database = super + database.set_load_flags(LoadFlags::DEFAULT) + database + end + + def open(load_flags: nil, **options) database = new need_release = true begin options.each do |key, value| database.set_option(key.to_s, value) end - database.set_load_flags(load_flags) + database.set_load_flags(load_flags) unless load_flags.nil? database.init if block_given? yield(database) From bfc196b1fa2dbeefd3a3eb5218a2a60d000bc420 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Mon, 15 Jun 2026 22:36:11 -0700 Subject: [PATCH 03/14] rework tests so they pass --- ruby/test/test-database.rb | 48 ++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index 34bb97892c..dcd999e1e6 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -17,21 +17,59 @@ class DatabaseTest < Test::Unit::TestCase sub_test_case(".open") do - test("applies LoadFlags::DEFAULT when load_flags is not passed") do + def test_default_load_flags assert_nothing_raised do ADBC::Database.open(driver: "adbc_driver_sqlite", uri: ":memory:") do |_database| end end end - test("load_flags: none disables all search paths") do - error = assert_raise_kind_of(ADBC::Error) do + def test_load_flags_override + assert_nothing_raised do ADBC::Database.open(driver: "adbc_driver_sqlite", uri: ":memory:", - load_flags: ADBC::LoadFlags.new(0)) do |_database| + load_flags: ADBC::LoadFlags::DEFAULT) do |_database| + end + end + end + + sub_test_case("manifest") do + def setup + @tmpdir = Dir.mktmpdir + File.write(File.join(@tmpdir, "testdriver.toml"), <<~TOML) + name = "test driver" + version = "0.1.0" + + [Driver] + shared = "adbc_driver_sqlite" + TOML + @original_driver_path = ENV["ADBC_DRIVER_PATH"] + ENV["ADBC_DRIVER_PATH"] = @tmpdir + end + + def teardown + ENV["ADBC_DRIVER_PATH"] = @original_driver_path + FileUtils.remove_entry(@tmpdir) + end + + def test_search_env_finds_driver + assert_nothing_raised do + ADBC::Database.open(driver: "testdriver", + uri: ":memory:", + load_flags: ADBC::LoadFlags::SEARCH_ENV) do |_database| + end + end + end + + def test_no_flags_cannot_find_driver + error = assert_raise_kind_of(ADBC::Error) do + ADBC::Database.open(driver: "testdriver", + uri: ":memory:", + load_flags: ADBC::LoadFlags.new(0)) do |_database| + end end + assert_match(/not enabled at run time/, error.message) end - assert_match(/not enabled at run time/, error.message) end end end From 29d1e5b58e86e632d2d938a49e5129290e99f720 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:14:53 -0700 Subject: [PATCH 04/14] Update ruby/test/test-database.rb Co-authored-by: Sutou Kouhei --- ruby/test/test-database.rb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index dcd999e1e6..22d319070c 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -35,21 +35,21 @@ def test_load_flags_override sub_test_case("manifest") do def setup - @tmpdir = Dir.mktmpdir - File.write(File.join(@tmpdir, "testdriver.toml"), <<~TOML) - name = "test driver" - version = "0.1.0" + Dir.mktmpdir do |tmpdir| + File.write(File.join(tmpdir, "testdriver.toml"), <<~TOML) + name = "test driver" + version = "0.1.0" - [Driver] - shared = "adbc_driver_sqlite" - TOML - @original_driver_path = ENV["ADBC_DRIVER_PATH"] - ENV["ADBC_DRIVER_PATH"] = @tmpdir - end - - def teardown - ENV["ADBC_DRIVER_PATH"] = @original_driver_path - FileUtils.remove_entry(@tmpdir) + [Driver] + shared = "adbc_driver_sqlite" + TOML + driver_path, ENV["ADBC_DRIVER_PATH"] = ENV["ADBC_DRIVER_PATH"], tmpdir + begin + yield + ensure + ENV["ADBC_DRIVER_PATH"] = driver_path + end + end end def test_search_env_finds_driver From 472211b990bfeb578d5a18e71c76419ab71096b5 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:16:32 -0700 Subject: [PATCH 05/14] Update ruby/test/test-database.rb Co-authored-by: Sutou Kouhei --- ruby/test/test-database.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index 22d319070c..6c332b418d 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -53,10 +53,15 @@ def setup end def test_search_env_finds_driver - assert_nothing_raised do - ADBC::Database.open(driver: "testdriver", - uri: ":memory:", - load_flags: ADBC::LoadFlags::SEARCH_ENV) do |_database| + ADBC::Database.open(driver: "testdriver", + uri: ":memory:", + load_flags: ADBC::LoadFlags::SEARCH_ENV) do |database| + database.connect do |connection| + assert_equal([ + Arrow::Table.new("1" => Arrow::Int64Array.new([1])), + -1, + ], + connection.query("SELECT 1")) end end end From 3c0eb3adba24bc3496b3dab497459321eb8007c3 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 08:42:05 -0700 Subject: [PATCH 06/14] init load flags in glib binding --- glib/adbc-glib/database.c | 6 ++++++ ruby/lib/adbc/database.rb | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/glib/adbc-glib/database.c b/glib/adbc-glib/database.c index 886b3474bb..0c86443d07 100644 --- a/glib/adbc-glib/database.c +++ b/glib/adbc-glib/database.c @@ -75,6 +75,12 @@ GADBCDatabase* gadbc_database_new(GError** error) { AdbcStatusCode status_code = AdbcDatabaseNew(&(priv->adbc_database), &adbc_error); priv->initialized = gadbc_error_check(error, status_code, &adbc_error, "[adbc][database][new]"); + if (priv->initialized) { + status_code = AdbcDriverManagerDatabaseSetLoadFlags( + &(priv->adbc_database), GADBC_LOAD_FLAGS_DEFAULT, &adbc_error); + priv->initialized = gadbc_error_check(error, status_code, &adbc_error, + "[adbc][database][set-load-flags]"); + } if (!priv->initialized) { g_object_unref(database); return NULL; diff --git a/ruby/lib/adbc/database.rb b/ruby/lib/adbc/database.rb index 1b8e3ede89..a0807066ba 100644 --- a/ruby/lib/adbc/database.rb +++ b/ruby/lib/adbc/database.rb @@ -18,12 +18,6 @@ module ADBC class Database class << self - def new - database = super - database.set_load_flags(LoadFlags::DEFAULT) - database - end - def open(load_flags: nil, **options) database = new need_release = true From b5ae2acd8fcfc037bb4e6967cc7293463a3fa3a1 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 08:42:11 -0700 Subject: [PATCH 07/14] fix typo in comment --- glib/adbc-glib/database.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glib/adbc-glib/database.h b/glib/adbc-glib/database.h index 5f510b3463..1c04649874 100644 --- a/glib/adbc-glib/database.h +++ b/glib/adbc-glib/database.h @@ -48,7 +48,7 @@ typedef enum { } GADBCLoadFlags; /** - * GADBC_LOAD_FLAGAS_DEFAULT: + * GADBC_LOAD_FLAGS_DEFAULT: * * The default GADBCLoadFlags. * From 9b2085a3cba6a8f25546677ebe4bddb092f6ba37 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:26:48 -0700 Subject: [PATCH 08/14] remove useless tests --- ruby/test/test-database.rb | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index 6c332b418d..de928d91dc 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -17,22 +17,6 @@ class DatabaseTest < Test::Unit::TestCase sub_test_case(".open") do - def test_default_load_flags - assert_nothing_raised do - ADBC::Database.open(driver: "adbc_driver_sqlite", uri: ":memory:") do |_database| - end - end - end - - def test_load_flags_override - assert_nothing_raised do - ADBC::Database.open(driver: "adbc_driver_sqlite", - uri: ":memory:", - load_flags: ADBC::LoadFlags::DEFAULT) do |_database| - end - end - end - sub_test_case("manifest") do def setup Dir.mktmpdir do |tmpdir| From 46f199e603b0c2a42fe49268d5b8d0484da92105 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:31:46 -0700 Subject: [PATCH 09/14] remove to_s we don't need this because gobject handles coercion --- ruby/lib/adbc/database.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/lib/adbc/database.rb b/ruby/lib/adbc/database.rb index a0807066ba..60e715d550 100644 --- a/ruby/lib/adbc/database.rb +++ b/ruby/lib/adbc/database.rb @@ -23,7 +23,7 @@ def open(load_flags: nil, **options) need_release = true begin options.each do |key, value| - database.set_option(key.to_s, value) + database.set_option(key, value) end database.set_load_flags(load_flags) unless load_flags.nil? database.init From 44c6e489e13dfdc0067d19312b05612b6f4a20cb Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:33:26 -0700 Subject: [PATCH 10/14] Update ruby/test/test-database.rb Co-authored-by: Sutou Kouhei --- ruby/test/test-database.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index de928d91dc..85c5327008 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -51,13 +51,12 @@ def test_search_env_finds_driver end def test_no_flags_cannot_find_driver - error = assert_raise_kind_of(ADBC::Error) do + assert_raise(ADBC::Error::NotFound) do ADBC::Database.open(driver: "testdriver", uri: ":memory:", load_flags: ADBC::LoadFlags.new(0)) do |_database| end end - assert_match(/not enabled at run time/, error.message) end end end From 7bf9cbd47c27946090eb3b2c8a96cb4689923ef3 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:34:04 -0700 Subject: [PATCH 11/14] Update ruby/test/test-database.rb Co-authored-by: Sutou Kouhei --- ruby/test/test-database.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index 85c5327008..c2f432e4de 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -54,7 +54,7 @@ def test_no_flags_cannot_find_driver assert_raise(ADBC::Error::NotFound) do ADBC::Database.open(driver: "testdriver", uri: ":memory:", - load_flags: ADBC::LoadFlags.new(0)) do |_database| + load_flags: 0) do |_database| end end end From 8e8de301e28655ca547b320e9a466f06fa9fad34 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Tue, 16 Jun 2026 09:39:23 -0700 Subject: [PATCH 12/14] fix whitespace --- ruby/test/test-database.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index c2f432e4de..dc4ed20df7 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -40,12 +40,12 @@ def test_search_env_finds_driver ADBC::Database.open(driver: "testdriver", uri: ":memory:", load_flags: ADBC::LoadFlags::SEARCH_ENV) do |database| - database.connect do |connection| + database.connect do |connection| assert_equal([ Arrow::Table.new("1" => Arrow::Int64Array.new([1])), -1, ], - connection.query("SELECT 1")) + connection.query("SELECT 1")) end end end From 5773b2c7f524504f67de3adb000e7bc702515928 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Wed, 17 Jun 2026 06:48:10 +0900 Subject: [PATCH 13/14] Improve Co-authored-by: Sutou Kouhei --- ruby/test/test-database.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index dc4ed20df7..2fe2f2f2a4 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -39,13 +39,13 @@ def setup def test_search_env_finds_driver ADBC::Database.open(driver: "testdriver", uri: ":memory:", - load_flags: ADBC::LoadFlags::SEARCH_ENV) do |database| + load_flags: :search_env) do |database| database.connect do |connection| assert_equal([ - Arrow::Table.new("1" => Arrow::Int64Array.new([1])), - -1, - ], - connection.query("SELECT 1")) + Arrow::Table.new("1" => Arrow::Int64Array.new([1])), + -1, + ], + connection.query("SELECT 1")) end end end From f83f347e63d032d626c1e5d8a43d13def9065e1d Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Wed, 17 Jun 2026 06:49:26 +0900 Subject: [PATCH 14/14] Fix indent --- ruby/test/test-database.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/test/test-database.rb b/ruby/test/test-database.rb index 2fe2f2f2a4..19d9ad009f 100644 --- a/ruby/test/test-database.rb +++ b/ruby/test/test-database.rb @@ -44,8 +44,8 @@ def test_search_env_finds_driver assert_equal([ Arrow::Table.new("1" => Arrow::Int64Array.new([1])), -1, - ], - connection.query("SELECT 1")) + ], + connection.query("SELECT 1")) end end end