@@ -56,7 +56,10 @@ main = do
5656 testIntervalAtom,
5757 testListConstructedAtom,
5858 testTypeChecker,
59− testRestrictionPredicateExprs
59+ testRestrictionPredicateExprs,
60+ testRelationalAttributeNames,
61+ testSemijoin,
62+ testAntijoin
6063 ]
6164 simpleRelTests = [("x:=true", Right relationTrue),
6265 ("x:=false", Right relationFalse),
@@ -504,4 +507,33 @@ testRestrictionPredicateExprs = TestCase $ do
504507 executeTutorialD sessionId dbconn "x:=s where status=20 and status=10"
505508 eRvAnd <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
506509 let expectedRelAnd = Right (emptyRelationWithAttrs (attributes suppliersRel))
507− assertEqual "status 20 and 10" expectedRelAnd eRvAnd
510+ assertEqual "status 20 and 10" expectedRelAnd eRvAnd
511+
512+testRelationalAttributeNames :: Test
513+testRelationalAttributeNames = TestCase $ do
514+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
515+ executeTutorialD sessionId dbconn "x:=(s join sp){all from sp}"
516+ eRv <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
517+ case eRv of
518+ Left err -> assertFailure (show err)
519+ Right rel ->
520+ assertEqual "attributes from sp" (attributes supplierProductsRel) (attributes rel)
521+
522+testSemijoin :: Test
523+testSemijoin = TestCase $ do
524+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
525+ executeTutorialD sessionId dbconn "x:=s semijoin sp"
526+ executeTutorialD sessionId dbconn "y:=s where not (sname = \"Adams\")"
527+ eX <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
528+ eY <- executeRelationalExpr sessionId dbconn (RelationVariable "y" ())
529+ assertEqual "semijoin missing Adams" eX eY
530+
531+testAntijoin :: Test
532+testAntijoin = TestCase $ do
533+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
534+ executeTutorialD sessionId dbconn "x:=s antijoin sp"
535+ executeTutorialD sessionId dbconn "y:=s where sname = \"Adams\""
536+ eX <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
537+ eY <- executeRelationalExpr sessionId dbconn (RelationVariable "y" ())
538+ assertEqual "antijoin only Adams" eX eY
539+