module PostgreSQL.Syntax
where
import PostgreSQL.Syntax.Prelude
import qualified PostgreSQL.Syntax.Foreign as A
import qualified PostgreSQL.Syntax.Pointers as B
import qualified Data.ByteString.Unsafe as C
import qualified Data.ByteString.Internal as D
import qualified Data.Text.Encoding as E
validate :: ByteString -> Maybe Text
validate sql =
unsafeDupablePerformIO $ do
statusRef <- newIORef 1
messageBytes <-
C.unsafeUseAsCString sql $ \sqlPtr -> D.createAndTrim 1000 $ \messagePtr -> do
status <- A.validate sqlPtr (castPtr messagePtr)
writeIORef statusRef status
case status of
0 -> return 0
1 -> fmap fromIntegral (D.c_strlen (castPtr messagePtr))
status <- readIORef statusRef
case status of
0 -> return Nothing
1 -> return (Just (E.decodeUtf8 messageBytes))