I am curious how to deal with generators when called expecting just one
result. Take this for example:
procedure genme(n)
local a
write("genme")
every a := 1 to n do
suspend a
write("/genme")
end
procedure main()
local a
a := genme(5)
write(a)
every a := genme(3) do
write(a)
end
That prints:
genme
1
genme
1
2
3
/genme
Notice on the first, /genme was not called. In this example, no big
deal, but what about:
procedure dbi_conn_find(dbi_conn, sql)
local res, row
res := dbi_conn_query(dbi_conn, sql)
every row := dbi_result_fetch_next_table(res) do {
suspend row
}
dbi_result_free(res)
end
The result *must* be freed. So, with the above procedure, the following
works just fine:
every row := dbi_conn_find(conn, "SELECT * FROM people WHERE name =
'JOHN'") do
write_person(row)
However:
first := dbi_conn_find(conn, "SELECT * FROM people WHERE name =
'JOHN'")
will fail to call "dbi_result_free".
Any thoughts on how to handle this?
Thanks,
Jeremy


|