project-m36-0.2: examples/SimpleClient.hs
import ProjectM36.Client
import ProjectM36.TupleSet
import ProjectM36.Relation.Show.Term
main :: IO ()
main = do
-- 1. create a ConnectionInfo
let connInfo = RemoteProcessConnectionInfo "mytestdb" (createNodeId "127.0.0.1" defaultServerPort) emptyNotificationCallback
-- 2. conncted to the remote database
eConn <- connectProjectM36 connInfo
case eConn of
Left err -> print err
Right conn -> do
--3. create a session on the "master" branch
eSessionId <- createSessionAtHead conn "master"
case eSessionId of
Left err -> print err
Right sessionId -> do
--4. define a new relation variable with a DatabaseContext expression
let attrList = [Attribute "name" TextAtomType,
Attribute "age" IntAtomType]
attrs = attributesFromList attrList
mErr1 <- executeDatabaseContextExpr sessionId conn (Define "person" (map NakedAttributeExpr attrList))
print mErr1
--5. add a tuple to the relation referenced by the relation variable
let (Right tupSet) = mkTupleSetFromList attrs [[TextAtom "Bob", IntAtom 45]]
mErr2 <- executeDatabaseContextExpr sessionId conn (Insert "person" (MakeStaticRelation attrs tupSet))
print mErr2
--6. execute a relational algebra query
let restrictionPredicate = AttributeEqualityPredicate "name" (NakedAtomExpr (TextAtom "Steve"))
eRel <- executeRelationalExpr sessionId conn (Restrict restrictionPredicate (RelationVariable "person" ()))
case eRel of
Left err -> print err
Right rel -> print (showRelation rel)
--7. close the connection
close conn