HDBC и несколько наборов результатов в одном выражении: возвращается только первый набор результатов
Я ищу способ HDBC для поддержки нескольких наборов результатов в одном утверждении
testMultipleResultsetSingleStatement = do
let sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
c <- connectODBC connectionString
rs <- quickQuery c sql []
return rs
это только вернется [[SqlInt32 1,SqlInt32 2,SqlInt32 3],[SqlInt32 2,SqlInt32 3,SqlInt32 4]]
Здесь мы видим, что результаты второго набора результатов отбрасываются
Мне интересно, есть ли другая функция, чем quickQuery, которая бы поддерживала это?
В идеале тип возвращаемого значения будет [[[SqlValue]]]
вместо [[SqlValue]]
поэтому первый внешний список будет соответствовать каждому набору результатов, возвращаемому запросом.
Если HDBC не предоставляет пути для этого, какой другой пакет будет обрабатывать операторы, которые возвращают несколько результирующих наборов?
edit: На самом деле, решение без изменения API было бы сделать так:
testMultipleResultsetSingleStatement = do
let
sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
c <- connectODBC connectionString
statement <- prepare c sql
_ <- execute statement []
rows1 <- fetchAllRows statement
rows2 <- fetchAllRows statement
return (rows1, rows2)
Я проверил, и в случае sqlserver он вернул пустой список для row2
1 ответ
Нет, в настоящее время он не поддерживается в hdbc.
Хотя я не вижу цели для такого рода функций.
Как бы это было лучше, чем
let sql1 = "select 1,2,3 union all select 2,3,4"
sql2 = " select 'a', 'b'"
c <- connectODBC connectionString
rs1 <- quickQuery c sql1 []
rs2 <- quickQuery c sql2 []
return (rs1,rs2)
или если вы действительно настаиваете на наличии разных записей с различным количеством полей и типов полей в одном списке (хм, странно, но хорошо), вы можете сделать это:
return $ rs1 ++ rs2