should be it
This commit is contained in:
72
external/duckdb/tools/juliapkg/test/test_replacement_scan.jl
vendored
Normal file
72
external/duckdb/tools/juliapkg/test/test_replacement_scan.jl
vendored
Normal 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
|
||||
Reference in New Issue
Block a user