Files
email-tracker/external/duckdb/tools/juliapkg/test/test_config.jl
2025-10-24 19:21:19 -05:00

97 lines
3.5 KiB
Julia

# test_config.jl
@testset "Test configuration parameters" begin
# by default NULLs come first
con = DBInterface.connect(DuckDB.DB, ":memory:")
results = DBInterface.execute(con, "SELECT 42 a UNION ALL SELECT NULL ORDER BY a")
tbl = rowtable(results)
@test isequal(tbl, [(a = 42,), (a = missing,)])
DBInterface.close!(con)
# if we add this configuration flag, nulls should come last
config = DuckDB.Config()
DuckDB.set_config(config, "default_null_order", "nulls_first")
con = DBInterface.connect(DuckDB.DB, ":memory:", config)
# NULL should come last now
results = DBInterface.execute(con, "SELECT 42 a UNION ALL SELECT NULL ORDER BY a")
df = DataFrame(results)
@test names(df) == ["a"]
@test size(df, 1) == 2
@test isequal(df.a, [missing, 42])
DBInterface.close!(con)
DuckDB.set_config(config, "unrecognized option", "aaa")
@test_throws DuckDB.ConnectionException con = DBInterface.connect(DuckDB.DB, ":memory:", config)
DBInterface.close!(config)
DBInterface.close!(config)
# test different ways to create a config object, all should be equivalent
conf1 = DuckDB.Config()
DuckDB.set_config(conf1, "default_null_order", "nulls_first")
conf2 = DuckDB.Config()
conf2["default_null_order"] = "nulls_first"
conf3 = DuckDB.Config(default_null_order = "nulls_first")
conf4 = DuckDB.Config(["default_null_order" => "nulls_first"])
@testset for config in [conf1, conf2, conf3, conf4]
con = DBInterface.connect(DuckDB.DB, ":memory:", config)
# NULL should come last now
results = DBInterface.execute(con, "SELECT 42 a UNION ALL SELECT NULL ORDER BY a")
tbl = rowtable(results)
@test isequal(tbl, [(a = missing,), (a = 42,)])
DBInterface.close!(con)
DuckDB.set_config(config, "unrecognized option", "aaa")
@test_throws DuckDB.ConnectionException con = DBInterface.connect(DuckDB.DB, ":memory:", config)
DBInterface.close!(config)
DBInterface.close!(config)
end
# config options can be specified directly in the call
con = DBInterface.connect(DuckDB.DB, ":memory:"; config = ["default_null_order" => "nulls_first"])
tbl = DBInterface.execute(con, "SELECT 42 a UNION ALL SELECT NULL ORDER BY a") |> rowtable
@test isequal(tbl, [(a = missing,), (a = 42,)])
close(con)
con = DBInterface.connect(DuckDB.DB, ":memory:"; config = (; default_null_order = "nulls_first"))
tbl = DBInterface.execute(con, "SELECT 42 a UNION ALL SELECT NULL ORDER BY a") |> rowtable
@test isequal(tbl, [(a = missing,), (a = 42,)])
close(con)
# special handling of the readonly option
file = tempname()
con = DBInterface.connect(DuckDB.DB, file)
DBInterface.execute(con, "CREATE TABLE t1(a INTEGER)")
close(con)
con = DBInterface.connect(DuckDB.DB, file; readonly = true)
@test_throws DuckDB.QueryException DBInterface.execute(con, "CREATE TABLE t2(a INTEGER)")
close(con)
end
@testset "Test Set TimeZone" begin
con = DBInterface.connect(DuckDB.DB, ":memory:")
DBInterface.execute(con, "SET TimeZone='UTC'")
results = DBInterface.execute(con, "SELECT CURRENT_SETTING('TimeZone') AS tz")
df = DataFrame(results)
@test isequal(df[1, "tz"], "UTC")
DBInterface.execute(con, "SET TimeZone='America/Los_Angeles'")
results = DBInterface.execute(con, "SELECT CURRENT_SETTING('TimeZone') AS tz")
df = DataFrame(results)
@test isequal(df[1, "tz"], "America/Los_Angeles")
DBInterface.close!(con)
end