56 lines
2.0 KiB
Julia
56 lines
2.0 KiB
Julia
# test_connection.jl
|
|
|
|
@testset "Test opening and closing an in-memory database" begin
|
|
con = DBInterface.connect(DuckDB.DB, ":memory:")
|
|
DBInterface.close!(con)
|
|
# verify that double-closing does not cause any problems
|
|
DBInterface.close!(con)
|
|
DBInterface.close!(con)
|
|
@test 1 == 1
|
|
|
|
con = DBInterface.connect(DuckDB.DB, ":memory:")
|
|
@test isopen(con)
|
|
close(con)
|
|
@test !isopen(con)
|
|
end
|
|
|
|
@testset "Test opening a bogus directory" begin
|
|
@test_throws DuckDB.ConnectionException DBInterface.connect(DuckDB.DB, "/path/to/bogus/directory")
|
|
end
|
|
|
|
|
|
@testset "Test opening and closing an on-disk database" begin
|
|
# This checks for an issue where the DB and the connection are
|
|
# closed but the actual db is not (and subsequently cannot be opened
|
|
# in a different process). To check this, we create a DB, write some
|
|
# data to it, close the connection and check if the WAL file exists.
|
|
#
|
|
# Ideally, the WAL file should not exist, but Garbage Collection of Julia
|
|
# may not have run yet, so open database handles may still exist, preventing
|
|
# the database from being closed properly.
|
|
|
|
db_path = joinpath(mktempdir(), "duckdata.db")
|
|
db_path_wal = db_path * ".wal"
|
|
|
|
function write_data(dbfile::String)
|
|
db = DuckDB.DB(dbfile)
|
|
conn = DBInterface.connect(db)
|
|
DBInterface.execute(conn, "CREATE OR REPLACE TABLE test (a INTEGER, b INTEGER);")
|
|
DBInterface.execute(conn, "INSERT INTO test VALUES (1, 2);")
|
|
DBInterface.close!(conn)
|
|
DuckDB.close_database(db)
|
|
return true
|
|
end
|
|
write_data(db_path) # call the function
|
|
@test isfile(db_path_wal) === false # WAL file should not exist
|
|
|
|
@test isfile(db_path) # check if the database file exists
|
|
|
|
# check if the database can be opened
|
|
if haskey(ENV, "JULIA_DUCKDB_LIBRARY")
|
|
duckdb_binary = joinpath(dirname(ENV["JULIA_DUCKDB_LIBRARY"]), "..", "duckdb")
|
|
result = run(`$duckdb_binary $db_path -c "SELECT * FROM test LIMIT 1"`) # check if the database can be opened
|
|
@test success(result)
|
|
end
|
|
end
|