Skip to content

Commit da12e3a

Browse files
committed
fix(results): restore guarded multi-result advance
1 parent f947bc3 commit da12e3a

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

src/MySQL.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ function clear!(conn, result::API.MYSQL_RES)
5555
if conn.mysql.ptr != C_NULL && result.ptr != C_NULL
5656
while true
5757
if API.fetchrow(conn.mysql, result) == C_NULL
58-
nxt = API.nextresult(conn.mysql)
59-
if nxt === nothing
58+
if API.moreresults(conn.mysql)
59+
finalize(result)
60+
@assert API.nextresult(conn.mysql) !== nothing
61+
result = API.useresult(conn.mysql)
62+
else
6063
break
6164
end
62-
finalize(result)
63-
result = API.useresult(conn.mysql)
6465
end
6566
end
6667
finalize(result)

src/execute.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -204,18 +204,19 @@ function Base.iterate(cursor::TextCursors{buffered}, first=true) where {buffered
204204
cursor.cursor.result.ptr == C_NULL && return nothing
205205
if !first
206206
finalize(cursor.cursor.result)
207-
nxt = API.nextresult(cursor.cursor.conn.mysql)
208-
if nxt === nothing
207+
if API.moreresults(cursor.cursor.conn.mysql)
208+
@assert API.nextresult(cursor.cursor.conn.mysql) !== nothing
209+
cursor.cursor.result = buffered ? API.storeresult(cursor.cursor.conn.mysql) : API.useresult(cursor.cursor.conn.mysql)
210+
if buffered
211+
cursor.cursor.nrows = API.numrows(cursor.cursor.result)
212+
end
213+
cursor.cursor.nfields = API.numfields(cursor.cursor.result)
214+
fields = API.fetchfields(cursor.cursor.result, cursor.cursor.nfields)
215+
cursor.cursor.names = [ccall(:jl_symbol_n, Ref{Symbol}, (Cstring, Csize_t), x.name, x.name_length) for x in fields]
216+
cursor.cursor.types = [juliatype(x.field_type, API.notnullable(x), API.isunsigned(x), API.isbinary(x), cursor.cursor.mysql_date_and_time) for x in fields]
217+
else
209218
return nothing
210219
end
211-
cursor.cursor.result = buffered ? API.storeresult(cursor.cursor.conn.mysql) : API.useresult(cursor.cursor.conn.mysql)
212-
if buffered
213-
cursor.cursor.nrows = API.numrows(cursor.cursor.result)
214-
end
215-
cursor.cursor.nfields = API.numfields(cursor.cursor.result)
216-
fields = API.fetchfields(cursor.cursor.result, cursor.cursor.nfields)
217-
cursor.cursor.names = [ccall(:jl_symbol_n, Ref{Symbol}, (Cstring, Csize_t), x.name, x.name_length) for x in fields]
218-
cursor.cursor.types = [juliatype(x.field_type, API.notnullable(x), API.isunsigned(x), API.isbinary(x), cursor.cursor.mysql_date_and_time) for x in fields]
219220
end
220221
return cursor.cursor, false
221222
end

0 commit comments

Comments
 (0)