module BaseXClient.Query where
import BaseXClient.Utils hiding (exec)
import qualified BaseXClient.Utils as Utils
import Control.Applicative
import System.IO
data Query = Query {
session :: Handle,
ident :: String
}
deriving Show
bind :: Query -> String -> String -> String -> IO String
bind query name val ty = exec query 3 [name, val, ty]
context :: Query -> String -> String -> IO String
context query val ty = exec query 14 [val, ty]
results :: Query -> IO [String]
results Query{session, ident} = do
writeCode session 4
writeString session ident
result <- untilM (ok session) (readString session)
ok session >>= \b -> if b
then return result
else readString session >>= error
execute, info, options, updating, close :: Query -> IO String
execute = sendCode 5
info = sendCode 6
options = sendCode 7
updating = sendCode 30
close = sendCode 2
sendCode :: Int -> Query -> IO String
sendCode code query = exec query code []
exec :: Query -> Int -> [String] -> IO String
exec Query{session, ident} code strs = Utils.exec session code $ ident : strs