I understand why do you point on this feature. I see that Oracle supports such feature natively, stored procedures can return multiple results and native API support working with result sets. This specific feature can be added exclusively for Oracle driver. While the `Connection` is just a typeclass you can define any functions you need in the driver. For example hdbi-postgresql driver exports function `pgAffectedRows` which return the count of rows affected by executed statement. SQLite have no such function, thats why this is not in `Connection` typeclass. The same is posible for i.e. `OracleStatement` type: you can just implement additional functions in the driver and export them. Note, this is not true for HDBC because the `Statement` is data in HDBC but not typeclass. 2013/10/16 Gauthier Segay <gauthier.segay@gmail.com>
I got it Alexey, thanks.
I wasn't aware that this feature is not widespread in RDBMS, indeed postgresql and sqlite are not exposing it; so this would require some added complexity in those drivers without added benefits since it would be equivalent to sending separate statements.
On Wed, Oct 16, 2013 at 5:50 PM, Alexey Uimanov <s9gf4ult@gmail.com> wrote:
Now I understand what you want, but it looks like something strange. Why dont just execute many statements and accumulate them in some container and after that fetch results of this statements ? For me It looks like something foreign in HDBI especially because I did not see any support of such things in native database interfaces not in Postgresql nor in SQlite.
2013/10/16 Gauthier Segay <gauthier.segay@gmail.com>
no the use case is to issue a bunch of disparate select statements, i.e. retrieving data from several tables in a single roundtrip.
select 1,2,3
select 'a', 'b'
In this case, I'd like to call the API in this manner (or something better):
-- statement is prepared rows1 <- fetchAllRows statement _ <- nextResults statement rows2 <- fetchAllRows statement -- continue
right now, with hdbc-odbc (nextResults doesn't exist though so I don't call it) rows2 will be an empty list, I'd expect it to be[(SqlText "a"), (SqlText "b")]
I assume in the case of odbc, the related C function is SQLMoreResults
http://msdn.microsoft.com/en-us/library/ms714673%28v=vs.85%29.aspx
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe