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

Reply via email to