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 -- | -- Find an error in the SQL string. -- -- The string is allowed to contain placeholders. 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))