module JSDOM.Custom.SQLTransaction ( module Generated , executeSql' , executeSql , executeSql_ ) where import Data.Maybe (fromJust) import Control.Monad (void) import Control.Concurrent.MVar (takeMVar, putMVar, newEmptyMVar) import Control.Monad.IO.Class (MonadIO(..)) import JSDOM.Types (withCallback, Callback(..), SQLResultSet(..), SQLError(..), IsObjectArray, MonadDOM, ToJSString, SQLStatementCallback(..), SQLStatementErrorCallback(..), IsSQLValue) import JSDOM.Custom.SQLError (throwSQLException) import JSDOM.Generated.SQLStatementCallback (newSQLStatementCallback) import JSDOM.Generated.SQLStatementErrorCallback (newSQLStatementErrorCallback) import JSDOM.Generated.SQLTransaction as Generated hiding (executeSql) import qualified JSDOM.Generated.SQLTransaction as Generated (executeSql) executeSql' :: (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> m (Either SQLError SQLResultSet) executeSql' :: SQLTransaction -> sqlStatement -> [arguments] -> m (Either SQLError SQLResultSet) executeSql' SQLTransaction self sqlStatement sqlStatement [arguments] arguments = do MVar (Either SQLError SQLResultSet) result <- IO (MVar (Either SQLError SQLResultSet)) -> m (MVar (Either SQLError SQLResultSet)) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO IO (MVar (Either SQLError SQLResultSet)) forall a. IO (MVar a) newEmptyMVar JSM SQLStatementCallback -> (SQLStatementCallback -> JSM (Either SQLError SQLResultSet)) -> m (Either SQLError SQLResultSet) forall (m :: * -> *) c a. (MonadDOM m, Coercible c Function) => JSM c -> (c -> JSM a) -> m a withCallback ((SQLTransaction -> SQLResultSet -> JSM ()) -> JSM SQLStatementCallback forall (m :: * -> *). MonadDOM m => (SQLTransaction -> SQLResultSet -> JSM ()) -> m SQLStatementCallback newSQLStatementCallback (\SQLTransaction tx SQLResultSet rs -> IO () -> JSM () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> JSM ()) -> (Either SQLError SQLResultSet -> IO ()) -> Either SQLError SQLResultSet -> JSM () forall b c a. (b -> c) -> (a -> b) -> a -> c . MVar (Either SQLError SQLResultSet) -> Either SQLError SQLResultSet -> IO () forall a. MVar a -> a -> IO () putMVar MVar (Either SQLError SQLResultSet) result (Either SQLError SQLResultSet -> JSM ()) -> Either SQLError SQLResultSet -> JSM () forall a b. (a -> b) -> a -> b $ SQLResultSet -> Either SQLError SQLResultSet forall a b. b -> Either a b Right SQLResultSet rs)) ((SQLStatementCallback -> JSM (Either SQLError SQLResultSet)) -> m (Either SQLError SQLResultSet)) -> (SQLStatementCallback -> JSM (Either SQLError SQLResultSet)) -> m (Either SQLError SQLResultSet) forall a b. (a -> b) -> a -> b $ \SQLStatementCallback success -> JSM SQLStatementErrorCallback -> (SQLStatementErrorCallback -> JSM (Either SQLError SQLResultSet)) -> JSM (Either SQLError SQLResultSet) forall (m :: * -> *) c a. (MonadDOM m, Coercible c Function) => JSM c -> (c -> JSM a) -> m a withCallback ((SQLTransaction -> SQLError -> JSM ()) -> JSM SQLStatementErrorCallback forall (m :: * -> *). MonadDOM m => (SQLTransaction -> SQLError -> JSM ()) -> m SQLStatementErrorCallback newSQLStatementErrorCallback (\SQLTransaction tx SQLError e -> IO () -> JSM () forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> JSM ()) -> (Either SQLError SQLResultSet -> IO ()) -> Either SQLError SQLResultSet -> JSM () forall b c a. (b -> c) -> (a -> b) -> a -> c . MVar (Either SQLError SQLResultSet) -> Either SQLError SQLResultSet -> IO () forall a. MVar a -> a -> IO () putMVar MVar (Either SQLError SQLResultSet) result (Either SQLError SQLResultSet -> JSM ()) -> Either SQLError SQLResultSet -> JSM () forall a b. (a -> b) -> a -> b $ SQLError -> Either SQLError SQLResultSet forall a b. a -> Either a b Left SQLError e)) ((SQLStatementErrorCallback -> JSM (Either SQLError SQLResultSet)) -> JSM (Either SQLError SQLResultSet)) -> (SQLStatementErrorCallback -> JSM (Either SQLError SQLResultSet)) -> JSM (Either SQLError SQLResultSet) forall a b. (a -> b) -> a -> b $ \SQLStatementErrorCallback error -> do SQLTransaction -> sqlStatement -> [arguments] -> Maybe SQLStatementCallback -> Maybe SQLStatementErrorCallback -> JSM () forall (m :: * -> *) sqlStatement arguments. (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> Maybe SQLStatementCallback -> Maybe SQLStatementErrorCallback -> m () Generated.executeSql SQLTransaction self sqlStatement sqlStatement [arguments] arguments (SQLStatementCallback -> Maybe SQLStatementCallback forall a. a -> Maybe a Just SQLStatementCallback success) (SQLStatementErrorCallback -> Maybe SQLStatementErrorCallback forall a. a -> Maybe a Just SQLStatementErrorCallback error) IO (Either SQLError SQLResultSet) -> JSM (Either SQLError SQLResultSet) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (Either SQLError SQLResultSet) -> JSM (Either SQLError SQLResultSet)) -> IO (Either SQLError SQLResultSet) -> JSM (Either SQLError SQLResultSet) forall a b. (a -> b) -> a -> b $ MVar (Either SQLError SQLResultSet) -> IO (Either SQLError SQLResultSet) forall a. MVar a -> IO a takeMVar MVar (Either SQLError SQLResultSet) result executeSql :: (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> m SQLResultSet executeSql :: SQLTransaction -> sqlStatement -> [arguments] -> m SQLResultSet executeSql SQLTransaction self sqlStatement sqlStatement [arguments] arguments = SQLTransaction -> sqlStatement -> [arguments] -> m (Either SQLError SQLResultSet) forall (m :: * -> *) sqlStatement arguments. (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> m (Either SQLError SQLResultSet) executeSql' SQLTransaction self sqlStatement sqlStatement [arguments] arguments m (Either SQLError SQLResultSet) -> (Either SQLError SQLResultSet -> m SQLResultSet) -> m SQLResultSet forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (SQLError -> m SQLResultSet) -> (SQLResultSet -> m SQLResultSet) -> Either SQLError SQLResultSet -> m SQLResultSet forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either SQLError -> m SQLResultSet forall (m :: * -> *) a. MonadDOM m => SQLError -> m a throwSQLException SQLResultSet -> m SQLResultSet forall (m :: * -> *) a. Monad m => a -> m a return executeSql_ :: (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> m () executeSql_ :: SQLTransaction -> sqlStatement -> [arguments] -> m () executeSql_ SQLTransaction self sqlStatement sqlStatement [arguments] arguments = m SQLResultSet -> m () forall (f :: * -> *) a. Functor f => f a -> f () void (m SQLResultSet -> m ()) -> m SQLResultSet -> m () forall a b. (a -> b) -> a -> b $ SQLTransaction -> sqlStatement -> [arguments] -> m SQLResultSet forall (m :: * -> *) sqlStatement arguments. (MonadDOM m, ToJSString sqlStatement, IsSQLValue arguments) => SQLTransaction -> sqlStatement -> [arguments] -> m SQLResultSet executeSql SQLTransaction self sqlStatement sqlStatement [arguments] arguments