module Database.Relational.Query.Table (
Untyped, name', width', columns', (!),
Table, unType, name, shortName, width, columns, index, table, toMaybe,
TableDerivable (..)
) where
import Data.Array (listArray)
import Database.Record (PersistableWidth)
import qualified Database.Relational.Query.Internal.UntypedTable as Untyped
import Database.Relational.Query.Internal.SQL (ColumnSQL, columnSQL)
type Untyped = Untyped.Untyped
name' :: Untyped -> String
name' = Untyped.name'
width' :: Untyped -> Int
width' = Untyped.width'
columns' :: Untyped -> [ColumnSQL]
columns' = Untyped.columns'
(!) :: Untyped -> Int -> ColumnSQL
(!) = (Untyped.!)
newtype Table r = Table Untyped
unType :: Table t -> Untyped
unType (Table u) = u
name :: Table r -> String
name = name' . unType
shortName :: Table r -> String
shortName = tail . dropWhile (/= '.') . name
width :: Table r -> Int
width = width' . unType
columns :: Table r -> [ColumnSQL]
columns = columns' . unType
index :: Table r
-> Int
-> ColumnSQL
index = (!) . unType
toMaybe :: Table r -> Table (Maybe r)
toMaybe (Table t) = Table t
table :: String -> [String] -> Table r
table n f = Table $ Untyped.Untyped n w fa where
w = length f
fa = listArray (0, w 1) $ map columnSQL f
class PersistableWidth r => TableDerivable r where
derivedTable :: Table r