module TerraHS.TerraLib.TeDatabase
(
TeDatabase(..),
TeDatabasePtr,
--teimportraster,
)
where
import Foreign.C.String
import qualified Foreign.Ptr (Ptr)
import TerraHS.Algebras.Base.Object
import TerraHS.Misc.GenericFunctions
import TerraHS.Algebras.DB.Databases
data TeDatabase = TeMySQL String String String String | TePostgreSQL
type TeDatabasePtr = Foreign.Ptr.Ptr TeDatabase
instance Connection TeDatabase where
open (TeMySQL host user pass dbname) = do
h <- newCString host
u <- newCString user
p <- newCString pass
n <- newCString dbname
ptr <- new (TeMySQL host user pass dbname)
st <- h_tedatabase_connect ptr h u p n
if st == False then (errorMessage ptr) >>= error else do return ptr
close db = (tedatabase_close db)
instance Pointer TeDatabase where
new (TeMySQL _ _ _ _) = (temysql_new)
new TePostgreSQL = error ("nao implementado")
delete db = (tedatabase_destroy db)
errorMessage :: TeDatabasePtr -> Prelude.IO String
errorMessage db = h_tedatabase_errorMessage db >>= peekCString >>= return
foreign import stdcall unsafe "c_temysql_new" temysql_new :: Prelude.IO TeDatabasePtr
foreign import stdcall unsafe "c_tedatabase_destroy" tedatabase_destroy :: TeDatabasePtr -> Prelude.IO ()
foreign import stdcall unsafe "c_tedatabase_connect" h_tedatabase_connect :: TeDatabasePtr -> CString -> CString -> CString -> CString -> Prelude.IO Bool
foreign import stdcall unsafe "c_tedatabase_close" tedatabase_close :: TeDatabasePtr -> Prelude.IO ()
foreign import stdcall unsafe "c_tedatabase_errorMessage" h_tedatabase_errorMessage :: TeDatabasePtr -> Prelude.IO CString