{-------------------------------------------------------------------------------------
-
- No database connectivity
- Programmer: Leonidas Fegaras
- Email: fegaras@cse.uta.edu
- Web: http://lambda.uta.edu/
- Creation: 08/14/08, last update: 01/14/09
- 
- Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
- This material is provided as is, with absolutely no warranty expressed or implied.
- Any use is at your own risk. Permission is hereby granted to use or copy this program
- for any purpose, provided the above notices are retained on all copies.
-
--------------------------------------------------------------------------------------}


module Text.XML.HXQ.OptionalDB where

import Text.XML.HXQ.XTree
import Text.XML.HXQ.Parser
import Language.Haskell.TH


type Statement = String

-- | XPath to reach a table/column
type Path = [String]

-- | A relational schema representation
data Table = Table String Path Bool [Table]  -- ^ table-name relative-path mixed-content? components
           | Column String Path Int          -- ^ column-name relative-path max-byte-size
           deriving (Show,Read)

data Connection = Connection String


noDBerror = error "This version of HXQ does not provide database connectivity"


publishXmlDoc :: FilePath -> String -> Bool -> Ast
publishXmlDoc filepath name _ = noDBerror


executeSQL :: Statement -> XSeq -> IO XSeq
executeSQL stmt args = noDBerror


prepareSQL :: Connection -> String -> IO Statement
prepareSQL db sql = noDBerror


-- | Connect to a relational database
connect :: String   -- ^ database name
           -> IO Connection
connect dbname = noDBerror


-- | Disconnect from the relational database
disconnect :: Connection   -- ^ database connection
              -> IO ()
disconnect db = noDBerror


-- | commit the updates to the database
commit :: Connection   -- ^ database connection
          -> IO ()
commit db = noDBerror


-- | rollback the updates from the database
rollback :: Connection   -- ^ database connection
            -> IO ()
rollback db = noDBerror


-- | True if there is a relational schema stored in the database under the given name
isSchema :: Connection   -- ^ database connection
            -> String    -- ^ schema name
            -> IO Bool
isSchema db name = noDBerror


-- | Print the relational schema stored in the database under the given name
printSchema :: Connection   -- ^ database connection
               -> String    -- ^ schema name
               -> IO ()
printSchema db name = noDBerror


-- | Create a schema for an XML document into the database under the given name.
-- The excluded tags are HTML tags to be ignored
genSchema :: Connection   -- ^ database connection
             -> FilePath  -- ^ XML document pathname
             -> String    -- ^ schema name
             -> [String]  -- ^ excluded tags
             -> IO Table
genSchema db file name tags = noDBerror


-- | Store an XML document into the database under the given name.
shred :: Connection   -- ^ database connection
         -> FilePath  -- ^ XML document pathname
         -> String    -- ^ schema name
         -> IO ()
shred db file name = noDBerror


-- | Store an XML document into the database under the given name. Generates Haskell code. It's 3 times faster than shred.
shredC :: String      -- ^ database name
          -> FilePath -- ^ XML document pathname
          -> String   -- ^ schema name
          -> Q Exp
shredC db file name = noDBerror


-- | Create a secondary index on tagname for the shredded document under the given name..
createIndex :: Connection -- ^ database connection
               -> String  -- ^ schema name
               -> String  -- ^ the tag name of the elements to be indexed
               -> IO ()
createIndex db name tagname = noDBerror


insertDB :: Connection -> XSeq -> XSeq -> IO XSeq
insertDB db from into = noDBerror


deleteDB :: Connection -> XSeq -> IO XSeq
deleteDB db from = noDBerror


replaceDB :: Connection -> XSeq -> XSeq -> IO XSeq
replaceDB db dest with = noDBerror