On Feb 19, 2009, at 3:41 PM, Don Stewart wrote:
Is the solution written up somewhere so we can point to that next
time?
:)
Well, the applicability to the community at large is probably minimal,
but my misadventure follows...
The MySQL C API has "statements" that are associated with a database
"connection". You connect to the database, and issue statements to
query and manipulate it. The statement encapsulates, basically, the
state of iteration through a result set.
It turns out that a connection allows only one statement to be active
at a time, and that "closing" any statement associated with a
connection appears to close all other statements associated with that
connection, too. I wrap the MySQL "statement" in a ForeignPtr whose
finalizer closes the statement. Which, as it turns out, would close
the *next* statement that I'd created on the connection as a side
effect. I was incorrectly interpreting
I tried to mitigate this surprising effect by 1) making sure that a
statement gets finalized as soon as its result set is exhausted, and
2) adding some warnings to the driver docs about this wonderful feature.
chris
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe