[Pkg-haskell-commits] r795 - in /packages/haskelldb-dynamic: ./ branches/ branches/upstream/ branches/upstream/current/ branches/upstream/current/Database/ branches/upstream/current/Database/HaskellDB/ tags/

arjan at users.alioth.debian.org arjan at users.alioth.debian.org
Sun Nov 11 16:51:45 UTC 2007


Author: arjan
Date: Sun Nov 11 16:51:45 2007
New Revision: 795

URL: http://svn.debian.org/wsvn/pkg-haskell/?sc=1&rev=795
Log:
[svn-inject] Installing original source of haskelldb-dynamic

Added:
    packages/haskelldb-dynamic/
    packages/haskelldb-dynamic/branches/
    packages/haskelldb-dynamic/branches/upstream/
    packages/haskelldb-dynamic/branches/upstream/current/
    packages/haskelldb-dynamic/branches/upstream/current/DBDirect.hs
    packages/haskelldb-dynamic/branches/upstream/current/Database/
    packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/
    packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/DynConnect.hs
    packages/haskelldb-dynamic/branches/upstream/current/Setup.hs
    packages/haskelldb-dynamic/branches/upstream/current/haskelldb-dynamic.cabal
    packages/haskelldb-dynamic/tags/

Added: packages/haskelldb-dynamic/branches/upstream/current/DBDirect.hs
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskelldb-dynamic/branches/upstream/current/DBDirect.hs?rev=795&op=file
==============================================================================
--- packages/haskelldb-dynamic/branches/upstream/current/DBDirect.hs (added)
+++ packages/haskelldb-dynamic/branches/upstream/current/DBDirect.hs Sun Nov 11 16:51:45 2007
@@ -1,0 +1,83 @@
+-----------------------------------------------------------
+-- |
+-- Module      :  Main
+-- Copyright   :  Daan Leijen (c) 1999, daan at cs.uu.nl
+--                HWT Group (c) 2003,
+--                Bjorn Bringert (c) 2005-2006, bjorn at bringert.net
+-- License     :  BSD-style
+-- 
+-- Maintainer  :  haskelldb-users at lists.sourceforge.net
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- DBDirect generates a Haskell module from a database.
+-- It first reads the system catalog of the database into
+-- a 'Catalog' data type. After that it pretty prints that
+-- data structure in an appropiate Haskell module which
+-- can be used to perform queries on the database.
+--
+-----------------------------------------------------------
+
+module Main where
+
+import Data.List
+import System.Environment (getArgs)
+import System.Exit (exitFailure)
+import System.IO
+
+import Database.HaskellDB
+import Database.HaskellDB.DynConnect
+import Database.HaskellDB.DBSpec
+import Database.HaskellDB.DBSpec.PPHelpers
+import Database.HaskellDB.DBSpec.DBSpecToDBDirect
+
+createModules m useBStrT db = 
+    do
+    putStrLn "Getting database info..."
+    spec <- dbToDBSpec useBStrT m db
+    putStrLn "Writing modules..."
+    dbInfoToModuleFiles "." m spec
+
+-- | Command line driver
+main = do
+       putStrLn "DB/Direct: Daan Leijen (c) 1999, HWT (c) 2003-2004,"
+       putStrLn "           Bjorn Bringert (c) 2005-2006"
+       putStrLn ""
+       args <- getArgs
+       let (flags,args') = partition ("-" `isPrefixOf`) args
+           useBStrT = "-b" `elem` flags
+       case args' of
+                  [m,d,o] -> 
+                      do
+                      let opts = splitOptions o
+		      putStrLn "Connecting to database..."
+                      dynConnect_ d opts (createModules m useBStrT)
+		      putStrLn "Done!"
+                  _ -> 
+                      do
+                      showHelp
+                      exitFailure
+
+splitOptions :: String -> [(String,String)]
+splitOptions = map (split2 '=') . split ','
+
+split :: Char -> String -> [String]
+split _ [] = []
+split g xs = y : split g ys
+  where (y,ys) = split2 g xs
+
+split2 :: Char -> String -> (String,String)
+split2 g xs = (ys, drop 1 zs)
+  where (ys,zs) = break (==g) xs
+
+-- | Shows usage information
+showHelp = mapM_ (hPutStrLn stderr) t
+    where
+    t = ["Usage: DBDirect [-b] <module> <driver> <options>",
+         "",
+         "-b         Use bounded string types",
+         "<driver>   One of: WX, HSQL.MySQL, HDBC.PostgreSQL, etc",
+         "<options>  Driver dependent,e.g.",
+         "           WX:              dsn=<dsn>,uid=<uid>,pwd=<pwd>",
+         "           HSQL.MySQL:      server=<server>,db=<db>,uid=<uid>,pwd=<pwd>",
+         "           HDBC.PostgreSQL: host=<server>,dbname=<db>,user=<uid>,password=<pwd>"]

Added: packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/DynConnect.hs
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/DynConnect.hs?rev=795&op=file
==============================================================================
--- packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/DynConnect.hs (added)
+++ packages/haskelldb-dynamic/branches/upstream/current/Database/HaskellDB/DynConnect.hs Sun Nov 11 16:51:45 2007
@@ -1,0 +1,74 @@
+-----------------------------------------------------------
+-- |
+-- Module      :  Database.HaskellDB.DynConnect
+-- Copyright   :  Anders Hockersten 2004, chucky at dtek.chalmers.se
+--                Bjorn Bringert 2005-2006
+-- License     :  BSD-style
+--
+-- Maintainer  :  chucky at dtek.chalmers.se
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- This contains functions for loading drivers dynamically 
+-- and connecting to databases using them.
+-----------------------------------------------------------
+
+module Database.HaskellDB.DynConnect (
+				      dynConnect,
+				      dynConnect_
+                                    ) where
+
+import Database.HaskellDB.Database (Database)
+import Database.HaskellDB.DriverAPI
+import Database.HaskellDB.Version
+
+import System.Plugins (loadPackage,unloadPackage,resolveObjs,loadFunction_)
+import System.Plugins.Utils (encode)
+
+import Control.Monad.Trans (MonadIO, liftIO)
+import Data.Char
+import Data.List (isPrefixOf)
+
+
+-- | Loads a function from a package module, given the package name,
+--   module name and symbol name.
+loadPackageFunction :: MonadIO m => 
+                       String -- ^ Package name, including version number.
+                    -> String -- ^ Module name
+                    -> String -- ^ Symbol to lookup in the module
+                    -> m (Maybe a)
+loadPackageFunction pkgName moduleName functionName =
+    do
+    liftIO $ loadPackage pkgName
+    liftIO $ resolveObjs (unloadPackage pkgName)
+    liftIO $ loadFunction_ (encode moduleName) functionName
+
+-- | Loads a driver by package and module name.
+dynConnect :: MonadIO m => 
+              String -- ^ Driver package
+           -> String -- ^ Driver module
+	   -> [(String,String)] -- ^ Options to the driver
+	   -> (Database -> m a) -- ^ Database action to run
+	   -> m a
+dynConnect p m opts f = 
+    do
+    res <- loadPackageFunction p m "driver"
+    v <- case res of
+		  Nothing -> fail $ "Couldn't load " ++ m ++ ".driver"
+                                    ++ " from package " ++ p
+                  Just v -> return v
+    connect v opts f
+
+-- | Load a driver by a simple driver name corresponding to the
+--   package suffix
+dynConnect_ :: MonadIO m => 
+               String -- ^ Driver package suffix, e.g. "WX", "HSQL.MySQL",
+                      -- "HDBC.PostgreSQL"
+            -> [(String,String)] -- ^ Arguments to the driver 
+            -> (Database -> m a) -- ^ Database action to run
+            -> m a
+dynConnect_ d opts f = 
+    dynConnect p m opts f
+    where p = "haskelldb-" ++ (map c d) ++ "-" ++ version
+          m = "Database.HaskellDB." ++ d
+          c x = if x == '.' then '-' else toLower x

Added: packages/haskelldb-dynamic/branches/upstream/current/Setup.hs
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskelldb-dynamic/branches/upstream/current/Setup.hs?rev=795&op=file
==============================================================================
--- packages/haskelldb-dynamic/branches/upstream/current/Setup.hs (added)
+++ packages/haskelldb-dynamic/branches/upstream/current/Setup.hs Sun Nov 11 16:51:45 2007
@@ -1,0 +1,4 @@
+#!/usr/bin/env runghc
+
+import Distribution.Simple
+main = defaultMain

Added: packages/haskelldb-dynamic/branches/upstream/current/haskelldb-dynamic.cabal
URL: http://svn.debian.org/wsvn/pkg-haskell/packages/haskelldb-dynamic/branches/upstream/current/haskelldb-dynamic.cabal?rev=795&op=file
==============================================================================
--- packages/haskelldb-dynamic/branches/upstream/current/haskelldb-dynamic.cabal (added)
+++ packages/haskelldb-dynamic/branches/upstream/current/haskelldb-dynamic.cabal Sun Nov 11 16:51:45 2007
@@ -1,0 +1,23 @@
+Name: haskelldb-dynamic
+Version: 0.10
+Copyright: The authors
+Maintainer: haskelldb-users at lists.sourceforge.net
+Author: Daan Leijen, Conny Andersson, Martin Andersson, Mary Bergman, Victor Blomqvist, Bjorn Bringert, Anders Hockersten, Torbjorn Martin, Jeremy Shaw
+License: BSD3
+build-depends: haskell98, base, mtl, haskelldb, plugins
+Extensions: ExistentialQuantification,
+            OverlappingInstances,
+            UndecidableInstances,
+            MultiParamTypeClasses
+Synopsis: HaskellDB support for the dynamically loaded drivers.
+Exposed-Modules:
+        Database.HaskellDB.DynConnect
+ghc-options: -O2
+
+executable: DBDirect
+main-is: DBDirect.hs
+Extensions: ExistentialQuantification,
+            OverlappingInstances,
+            UndecidableInstances,
+            MultiParamTypeClasses
+ghc-options: -O2




More information about the Pkg-haskell-commits mailing list