module Database.RethinkDB.Terms where
import Data.Text (Text)
import qualified Data.HashMap.Strict as HMS
import Database.RethinkDB.Types
db :: Exp Text -> Exp Database
db name = Term DB [SomeExp name] emptyOptions
table :: Exp Text -> Exp Table
table name = Term TABLE [SomeExp name] emptyOptions
getField :: (IsObject o) => Exp o -> Exp Text -> Exp Datum
getField obj k = Term GET_FIELD [SomeExp obj, SomeExp k] emptyOptions
extractField :: (IsSequence s, IsDatum a) => Exp s -> Exp Text -> Exp (Sequence a)
extractField s k = Term GET_FIELD [SomeExp s, SomeExp k] emptyOptions
get :: Exp Table -> Exp Text -> Exp SingleSelection
get tbl key =
Term GET [SomeExp tbl, SomeExp key] emptyOptions
coerceTo :: (Any v) => Exp v -> Exp Text => Exp Text
coerceTo value typeName =
Term COERCE_TO [SomeExp value, SomeExp typeName] emptyOptions
getAll :: (IsDatum a) => Exp Table -> [Exp a] -> Maybe Text -> Exp Array
getAll tbl keys mbIndex =
Term GET_ALL ([SomeExp tbl] ++ map SomeExp keys) options
where
options = case mbIndex of
Nothing -> emptyOptions
Just index -> HMS.singleton "index" (String index)
getAllIndexed :: (IsDatum a) => Exp Table -> [Exp a] -> Text -> Exp (Sequence Datum)
getAllIndexed tbl keys index =
Term GET_ALL ([SomeExp tbl] ++ map SomeExp keys) options
where
options = HMS.singleton "index" (String index)
add :: [Exp Double] -> Exp Double
add xs = Term ADD (map SomeExp xs) emptyOptions
insert :: Exp Table -> Object -> Exp Object
insert tbl obj = Term INSERT [SomeExp tbl, SomeExp (constant obj)] emptyOptions
limit :: (Any a) => Exp a -> Exp Double -> Exp Table
limit s n = Term LIMIT [SomeExp s, SomeExp n] emptyOptions
append :: Exp Array -> Exp Datum -> Exp Array
append a d = Term APPEND [SomeExp a, SomeExp d] emptyOptions