on fc8cc5e help sign in
project-m36/examples/SimpleClient.hs
42 lines 1.9 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2import ProjectM36.Client
3import ProjectM36.TupleSet
4import ProjectM36.Atom
5import ProjectM36.DataTypes.Primitive
6import ProjectM36.Base
7import ProjectM36.Relation.Show.Term
9main :: IO ()
10main = do
11 -- 1. create a ConnectionInfo
12 let connInfo = RemoteProcessConnectionInfo "mytestdb" (createNodeId "127.0.0.1" defaultServerPort) emptyNotificationCallback
13 -- 2. conncted to the remote database
14 eConn <- connectProjectM36 connInfo
15 case eConn of
16 Left err -> putStrLn (show err)
17 Right conn -> do
18 --3. create a session on the "master" branch
19 eSessionId <- createSessionAtHead "master" conn
20 case eSessionId of
21 Left err -> putStrLn (show err)
22 Right sessionId -> do
23 --4. define a new relation variable with a DatabaseContext expression
24 let attrList = [Attribute "name" textAtomType,
25 Attribute "age" intAtomType]
26 attrs = attributesFromList attrList
27 mErr1 <- executeDatabaseContextExpr sessionId conn (Define "person" (map NakedAttributeExpr attrList))
28 putStrLn (show mErr1)
29 --5. add a tuple to the relation referenced by the relation variable
30 let (Right tupSet) = mkTupleSetFromList attrs [[textAtom "Bob", intAtom 45]]
31 mErr2 <- executeDatabaseContextExpr sessionId conn (Insert "person" (MakeStaticRelation attrs tupSet))
32 putStrLn (show mErr2)
34 --6. execute a relational algebra query
35 let restrictionPredicate = AttributeEqualityPredicate "name" (NakedAtomExpr (textAtom "Steve"))
36 eRel <- executeRelationalExpr sessionId conn (Restrict restrictionPredicate (RelationVariable "person"))
37 case eRel of
38 Left err -> putStrLn (show err)
39 Right rel -> putStrLn (show $ showRelation rel)
41 --7. close the connection
42 close conn