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
Другие вопросы по тегам