@@ -56,7 +56,10 @@ main = do
56 testIntervalAtom,
56 testIntervalAtom,
57 testListConstructedAtom,
57 testListConstructedAtom,
58 testTypeChecker,
58 testTypeChecker,
59− testRestrictionPredicateExprs
59+ testRestrictionPredicateExprs,
60+ testRelationalAttributeNames,
61 simpleRelTests = [("x:=true", Right relationTrue),
64 simpleRelTests = [("x:=true", Right relationTrue),
62 ("x:=false", Right relationFalse),
65 ("x:=false", Right relationFalse),
@@ -504,4 +507,33 @@ testRestrictionPredicateExprs = TestCase $ do
504 executeTutorialD sessionId dbconn "x:=s where status=20 and status=10"
507 executeTutorialD sessionId dbconn "x:=s where status=20 and status=10"
505 eRvAnd <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
508 eRvAnd <- executeRelationalExpr sessionId dbconn (RelationVariable "x" ())
506 let expectedRelAnd = Right (emptyRelationWithAttrs (attributes suppliersRel))
509 let expectedRelAnd = Right (emptyRelationWithAttrs (attributes suppliersRel))
507− assertEqual "status 20 and 10" expectedRelAnd eRvAnd
510+ assertEqual "status 20 and 10" expectedRelAnd eRvAnd
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" ())
518+ Left err -> assertFailure (show err)
520+ assertEqual "attributes from sp" (attributes supplierProductsRel) (attributes rel)
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
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