Skip to content

Commit

Permalink
Merge pull request #35 from alyst/exec_f_stmt
Browse files Browse the repository at this point in the history
add execute(f, stmt) method
  • Loading branch information
quinnj authored Jan 26, 2021
2 parents 73d62d5 + 8a803db commit 76c5640
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/DBInterface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ const StatementParams = Union{PositionalStatementParams, NamedStatementParams}
DBInterface.execute(conn::DBInterface.Connection, sql::AbstractString, [params]) => DBInterface.Cursor
DBInterface.execute(stmt::DBInterface.Statement, [params]) => DBInterface.Cursor
DBInterface.execute(f::Callable, conn::DBInterface.Connection, sql::AbstractString, [params])
DBInterface.execute(f::Callable, stmt::DBInterface.Statement, [params])
Database packages should overload `DBInterface.execute` for a valid, prepared `DBInterface.Statement` subtype (the first method
signature is defined in DBInterface.jl using `DBInterface.prepare`), which takes an optional `params` argument, which should be
Expand All @@ -120,11 +121,19 @@ function execute end

execute(conn::Connection, sql::AbstractString, params) = execute(prepare(conn, sql), params)

function execute(f::Base.Callable, stmt::Statement, params)
cursor = execute(stmt, params)
try
return f(cursor)
finally
close!(cursor)
end
end

function execute(f::Base.Callable, conn::Connection, sql::AbstractString, params)
stmt = prepare(conn, sql)
try
cursor = execute(stmt, params)
return f(cursor)
return execute(f, stmt, params)
finally
close!(stmt)
end
Expand All @@ -134,6 +143,7 @@ end
execute(stmt::Statement; kwargs...) = execute(stmt, kwargs.data)
execute(conn::Connection, sql::AbstractString; kwargs...) = execute(conn, sql, kwargs.data)
execute(f::Base.Callable, conn::Connection, sql::AbstractString; kwargs...) = execute(f, conn, sql, kwargs.data)
execute(f::Base.Callable, stmt::Statement; kwargs...) = execute(f, stmt, kwargs.data)

struct LazyIndex{T} <: AbstractVector{Any}
x::T
Expand Down

0 comments on commit 76c5640

Please sign in to comment.