should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
# test_replacement_scan.jl
function RangeReplacementScan(info)
table_name = DuckDB.get_table_name(info)
number = tryparse(Int64, table_name)
if number === nothing
return
end
DuckDB.set_function_name(info, "range")
DuckDB.add_function_parameter(info, DuckDB.create_value(number))
return
end
@testset "Test replacement scans" begin
con = DBInterface.connect(DuckDB.DB)
# add a replacement scan that turns any number provided as a table name into range(X)
DuckDB.add_replacement_scan!(con, RangeReplacementScan, nothing)
df = DataFrame(DBInterface.execute(con, "SELECT * FROM \"2\" tbl(a)"))
@test df.a == [0, 1]
# this still fails
@test_throws DuckDB.QueryException DBInterface.execute(con, "SELECT * FROM nonexistant")
DBInterface.close!(con)
end
function RepeatReplacementScan(info)
table_name = DuckDB.get_table_name(info)
splits = split(table_name, "*")
if size(splits, 1) != 2
return
end
number = tryparse(Int64, splits[2])
if number === nothing
return
end
DuckDB.set_function_name(info, "repeat")
DuckDB.add_function_parameter(info, DuckDB.create_value(splits[1]))
DuckDB.add_function_parameter(info, DuckDB.create_value(number))
return
end
@testset "Test string replacement scans" begin
con = DBInterface.connect(DuckDB.DB)
# add a replacement scan that turns any number provided as a table name into range(X)
DuckDB.add_replacement_scan!(con, RepeatReplacementScan, nothing)
df = DataFrame(DBInterface.execute(con, "SELECT * FROM \"hello*2\" tbl(a)"))
@test df.a == ["hello", "hello"]
# this still fails
@test_throws DuckDB.QueryException DBInterface.execute(con, "SELECT * FROM nonexistant")
DBInterface.close!(con)
end
function ErrorReplacementScan(info)
throw("replacement scan eek")
end
@testset "Test error replacement scans" begin
con = DBInterface.connect(DuckDB.DB)
DuckDB.add_replacement_scan!(con, ErrorReplacementScan, nothing)
@test_throws DuckDB.QueryException DBInterface.execute(con, "SELECT * FROM nonexistant")
DBInterface.close!(con)
end