@@ -8,18 +8,19 @@ import qualified Data.Text as T
88main :: IO ()
99main = do
1010 tcounts <- runTestTT (TestList [testBasicDBCFunction,
11− testErrorDBCFunction,
11+ testErrorDBCFunction,
12+ testExceptionDBCFunction,
1213 testDBCFunctionWithAtomArguments
1314 ])
1415 if errors tcounts + failures tcounts > 0 then exitFailure else exitSuccess
1516
1617{-
17−adddatabasecontextfunction "addtruerv" DatabaseContext -> DatabaseContext """(\[] ctx -> execState (evalContextExpr (Assign "true2" (ExistingRelation relationTrue))) ctx) :: [Atom] -> DatabaseContext -> DatabaseContext"""
18+adddatabasecontextfunction "addtruerv" DatabaseContext -> DatabaseContext """(\[] ctx -> execState (evalDatabaseContextExpr (Assign "true2" (ExistingRelation relationTrue))) ctx) :: [Atom] -> DatabaseContext -> DatabaseContext"""
1819-}
1920testBasicDBCFunction :: Test
2021testBasicDBCFunction = TestCase $ do
2122 (sess, conn) <- dateExamplesConnection emptyNotificationCallback
22− let addfunc = "adddatabasecontextfunction \"addTrue2\" DatabaseContext -> DatabaseContext \"\"\"(\\[] ctx -> execState (evalContextExpr (Assign \"true2\" (ExistingRelation relationTrue))) ctx) :: [Atom] -> DatabaseContext -> DatabaseContext\"\"\""
23+ let addfunc = "adddatabasecontextfunction \"addTrue2\" DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext \"\"\"(\\[] ctx -> pure $ execState (evalDatabaseContextExpr (Assign \"true2\" (ExistingRelation relationTrue))) ctx) :: [Atom] -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext\"\"\""
2324 executeTutorialD sess conn addfunc
2425 executeTutorialD sess conn "execute addTrue2()"
2526 let true2Expr = RelationVariable "true2" ()
@@ -28,20 +29,28 @@ testBasicDBCFunction = TestCase $ do
2829
2930testErrorDBCFunction :: Test
3031testErrorDBCFunction = TestCase $ do
32+ (sess, conn) <- dateExamplesConnection emptyNotificationCallback
33+ let addfunc = "adddatabasecontextfunction \"retErr\" DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext \"\"\"(\\[] ctx -> Left (DatabaseContextFunctionUserError \"err\")) :: [Atom] -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext\"\"\""
34+ executeTutorialD sess conn addfunc
35+ expectTutorialDErr sess conn (T.isPrefixOf "DatabaseContextFunctionUserError (DatabaseContextFunctionUserError \"err\")") "execute retErr()"
36+
37+testExceptionDBCFunction :: Test
38+testExceptionDBCFunction = TestCase $ do
3139 -- throw an error, make sure it is caught- it might not be caught, for example, if the function is not forced
3240 (sess, conn) <- dateExamplesConnection emptyNotificationCallback
33− let addfunc = "adddatabasecontextfunction \"bomb\" DatabaseContext -> DatabaseContext \"\"\"(\\[] _ -> error \"boom\") :: [Atom] -> DatabaseContext -> DatabaseContext\"\"\""
41+ let addfunc = "adddatabasecontextfunction \"bomb\" DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext \"\"\"(\\[] _ -> error \"boom\") :: [Atom] -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext\"\"\""
3442 executeTutorialD sess conn addfunc
3543 expectTutorialDErr sess conn (\err -> "UnhandledExceptionError" `T.isPrefixOf` err) "execute bomb()"
44+
3645
3746{-
38−adddatabasecontextfunction "multiArgFunc" Int -> Text -> DatabaseContext -> DatabaseContext """(\(age:name:_) ctx -> execState (evalContextExpr (Assign "person" (MakeRelationFromExprs Nothing [TupleExpr (fromList [("name", NakedAtomExpr name), ("age", NakedAtomExpr age)])]))) ctx)"""
47+adddatabasecontextfunction "multiArgFunc" Int -> Text -> DatabaseContext -> DatabaseContext """(\(age:name:_) ctx -> execState (evalDatabaseContextExpr (Assign "person" (MakeRelationFromExprs Nothing [TupleExpr (fromList [("name", NakedAtomExpr name), ("age", NakedAtomExpr age)])]))) ctx)"""
3948-}
4049testDBCFunctionWithAtomArguments :: Test
4150testDBCFunctionWithAtomArguments = TestCase $ do
4251 --test function with creation of a relvar with some arguments
4352 (sess, conn) <- dateExamplesConnection emptyNotificationCallback
44− let addfunc = "adddatabasecontextfunction \"multiArgFunc\" Int -> Text -> DatabaseContext -> DatabaseContext \"\"\"(\\(age:name:_) ctx -> execState (evalContextExpr (Assign \"person\" (MakeRelationFromExprs Nothing [TupleExpr (fromList [(\"name\", NakedAtomExpr name), (\"age\", NakedAtomExpr age)])]))) ctx) :: [Atom] -> DatabaseContext -> DatabaseContext\"\"\""
53+ let addfunc = "adddatabasecontextfunction \"multiArgFunc\" Int -> Text -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext \"\"\"(\\(age:name:_) ctx -> pure $ execState (evalDatabaseContextExpr (Assign \"person\" (MakeRelationFromExprs Nothing [TupleExpr (fromList [(\"name\", NakedAtomExpr name), (\"age\", NakedAtomExpr age)])]))) ctx) :: [Atom] -> DatabaseContext -> Either DatabaseContextFunctionError DatabaseContext\"\"\""
4554 executeTutorialD sess conn addfunc
4655 executeTutorialD sess conn "execute multiArgFunc(30,\"Steve\")"
4756 result <- executeRelationalExpr sess conn (RelationVariable "person" ())