module Database.Beam.Backend.Sqlite3 where
import Database.Beam.Internal
import Database.Beam.Query.Internal
import Database.Beam.Backend
import Database.Beam.SQL.Types
import Control.Monad.Trans
import Database.HDBC.Sqlite3
import Database.HDBC
import Data.Text (Text, unpack)
data Sqlite3Settings = Sqlite3Settings FilePath
deriving Show
instance BeamBackend Sqlite3Settings where
openBeam dbSettings (Sqlite3Settings fp) =
do conn <- liftIO (connectSqlite3 fp)
return Beam { beamDbSettings = dbSettings
, beamDebug = False
, closeBeam = liftIO (disconnect conn)
, compareSchemas = defaultBeamCompareSchemas
, adjustColDescForBackend =
\cs -> cs { csConstraints = filter (/=SQLAutoIncrement) (csConstraints cs) }
, getLastInsertedRow = getLastInsertedRow' conn
, withHDBCConnection = \f -> f conn }
getLastInsertedRow' :: MonadIO m => Connection -> Text -> m [SqlValue]
getLastInsertedRow' conn tblName = do
[res] <- liftIO (quickQuery conn (concat ["SELECT * FROM ", unpack tblName, " WHERE ROWID=(SELECT last_insert_rowid()) limit 1"]) [])
return res
(++.) :: QExpr Text -> QExpr Text -> QExpr Text
QExpr a ++. QExpr b = QExpr (SQLBinOpE "||" a b)