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

55 lines
2.0 KiB
Julia

# test_tpch_multithread.jl
# DuckDB needs to have been built with TPCH (BUILD_TPCH=1) to run this test!
function test_tpch_multithread()
sf = "0.10"
# load TPC-H into DuckDB
native_con = DBInterface.connect(DuckDB.DB)
try
DBInterface.execute(native_con, "CALL dbgen(sf=$sf)")
catch
@info "TPC-H extension not available; skipping"
return
end
# convert all tables to Julia DataFrames
customer = DataFrame(DBInterface.execute(native_con, "SELECT * FROM customer"))
lineitem = DataFrame(DBInterface.execute(native_con, "SELECT * FROM lineitem"))
nation = DataFrame(DBInterface.execute(native_con, "SELECT * FROM nation"))
orders = DataFrame(DBInterface.execute(native_con, "SELECT * FROM orders"))
part = DataFrame(DBInterface.execute(native_con, "SELECT * FROM part"))
partsupp = DataFrame(DBInterface.execute(native_con, "SELECT * FROM partsupp"))
region = DataFrame(DBInterface.execute(native_con, "SELECT * FROM region"))
supplier = DataFrame(DBInterface.execute(native_con, "SELECT * FROM supplier"))
id = Threads.threadid()
# now open a new in-memory database, and register the dataframes there
df_con = DBInterface.connect(DuckDB.DB)
DuckDB.register_table(df_con, customer, "customer")
DuckDB.register_table(df_con, lineitem, "lineitem")
DuckDB.register_table(df_con, nation, "nation")
DuckDB.register_table(df_con, orders, "orders")
DuckDB.register_table(df_con, part, "part")
DuckDB.register_table(df_con, partsupp, "partsupp")
DuckDB.register_table(df_con, region, "region")
DuckDB.register_table(df_con, supplier, "supplier")
GC.gc()
# Execute all the queries
for _ in 1:10
for i in 1:22
print("T:$id | Q:$i\n")
res = DataFrame(DBInterface.execute(df_con, "PRAGMA tpch($i)"))
end
end
DBInterface.close!(df_con)
return DBInterface.close!(native_con)
end
@testset "Test TPC-H Stresstest" begin
test_tpch_multithread()
end