Skip to content

Commit 76c5640

Browse files
authored
Merge pull request #35 from alyst/exec_f_stmt
add execute(f, stmt) method
2 parents 73d62d5 + 8a803db commit 76c5640

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/DBInterface.jl

+12-2
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ const StatementParams = Union{PositionalStatementParams, NamedStatementParams}
9898
DBInterface.execute(conn::DBInterface.Connection, sql::AbstractString, [params]) => DBInterface.Cursor
9999
DBInterface.execute(stmt::DBInterface.Statement, [params]) => DBInterface.Cursor
100100
DBInterface.execute(f::Callable, conn::DBInterface.Connection, sql::AbstractString, [params])
101+
DBInterface.execute(f::Callable, stmt::DBInterface.Statement, [params])
101102
102103
Database packages should overload `DBInterface.execute` for a valid, prepared `DBInterface.Statement` subtype (the first method
103104
signature is defined in DBInterface.jl using `DBInterface.prepare`), which takes an optional `params` argument, which should be
@@ -120,11 +121,19 @@ function execute end
120121

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

124+
function execute(f::Base.Callable, stmt::Statement, params)
125+
cursor = execute(stmt, params)
126+
try
127+
return f(cursor)
128+
finally
129+
close!(cursor)
130+
end
131+
end
132+
123133
function execute(f::Base.Callable, conn::Connection, sql::AbstractString, params)
124134
stmt = prepare(conn, sql)
125135
try
126-
cursor = execute(stmt, params)
127-
return f(cursor)
136+
return execute(f, stmt, params)
128137
finally
129138
close!(stmt)
130139
end
@@ -134,6 +143,7 @@ end
134143
execute(stmt::Statement; kwargs...) = execute(stmt, kwargs.data)
135144
execute(conn::Connection, sql::AbstractString; kwargs...) = execute(conn, sql, kwargs.data)
136145
execute(f::Base.Callable, conn::Connection, sql::AbstractString; kwargs...) = execute(f, conn, sql, kwargs.data)
146+
execute(f::Base.Callable, stmt::Statement; kwargs...) = execute(f, stmt, kwargs.data)
137147

138148
struct LazyIndex{T} <: AbstractVector{Any}
139149
x::T

0 commit comments

Comments
 (0)