0 | module Oracle.Internal.QueryInfo
2 | import Control.Monad.Elin
3 | import Control.Monad.MCancel
4 | import Data.Linear.Ref1
6 | import Oracle.FFI.QueryInfo
7 | import Oracle.Types.ColumnInfo
8 | import Oracle.Types.Error
9 | import Oracle.Types.OracleType
14 | withQueryInfo : AnyPtr -> Int32 -> (AnyPtr -> IO a) -> IO (Either OracleError a)
15 | withQueryInfo stmt column action = do
16 | result <- runElinIO (withQueryInfo' stmt column)
25 | assert_total $
idris_crash "Data.Oracle.Internal.withQueryInfo: \{show err}"
27 | acquire : AnyPtr -> Int32 -> F1 World AnyPtr
28 | acquire stmt column =
29 | ioToF1 (primIO (prim__queryInfo stmt column))
30 | use : AnyPtr -> F1 World (Either OracleError a)
32 | ioToF1 ( do case prim__nullAnyPtr ptr == 1 of
34 | lasterr <- getLastError
40 | release : AnyPtr -> F1' World
42 | ioToF1 (primIO (prim__queryInfoFree ptr))
43 | withQueryInfo' : AnyPtr -> Int32 -> Elin World [] (Either OracleError a)
44 | withQueryInfo' stmt column =
45 | bracket (runIO (acquire stmt column))
46 | (\ptr => runIO (use ptr))
47 | (\ptr => runIO (release ptr))