From: Frederik E. <fre...@a5...> - 2005-03-20 00:51:34
|
> If you already have an open result and try to run another query, you > will get an expcetion with the MySQL drivers. OK, this was the subject of my other recent message. > >What I'm seeing is that if I run closeStatement before reading all the > >rows from a query, it goes ahead and reads the rest of the rows > >silently, which is bad if there are millions of rows. For instance, if > >there is an error, like if I request a field with the wrong type, then > >since these are caught by a 'finally' clause in getFieldValue and > >trigger a closeStatement, the error message isn't printed (by > >'handleSql print' in main) until the whole table is read in, several > >minutes later. > > That doesn't seem like what you'd expect. Bug in the driver, or HSQL maybe? I don't know, but the HSQL code looks like it's doing the right thing. OTOH, MySQL should do better than that... > >I'm trying to get MyODBC installed - this is necessary using MySQL > >through ODBC, right? - to see if the behavior is any different, since > >you seemed to imply it would be less problematic. > > Well, yes and no. You don't get the exception like with the MySQL > driver, but the reason for that is that the MyODBC driver seems to fetch > the entire result set from the server straight away and keep it locally. > So you can have two open queries, but the only thing you gain from > laziness is that the data you never use will be in C code, not Haskell, > and thus take up less space. But that of course won't help if the > results are larger that you local RAM for example. Ah, that's terrible. So I have no reason to use ODBC. Frederik -- http://ofb.net/~frederik/ |