diff --git a/haskell-experiments/src/Datalog/InMemoryDB.hs b/haskell-experiments/src/Datalog/InMemoryDB.hs index e90ef8c..4be8c30 100644 --- a/haskell-experiments/src/Datalog/InMemoryDB.hs +++ b/haskell-experiments/src/Datalog/InMemoryDB.hs @@ -65,9 +65,9 @@ withFacts = withFactsAndRules :: [Text] -> [Text] -> InMemoryDB withFactsAndRules facts = foldr (addRule . extractRule) (withFacts facts) -query :: forall db . (DatalogDB db) => db -> Text -> Text -query db qText = - case parseDatalog qText of - Right (Query texts literals) -> "#NYI" - Right otherStatement -> throw $ NonQueryException qText otherStatement - Left ex -> throw $ CannotParseStatementException qText ex +-- query :: forall db . (DatalogDB db) => db -> Text -> Text +-- query db qText = +-- case parseDatalog qText of +-- Right (Query texts literals) -> "#NYI" +-- Right otherStatement -> throw $ NonQueryException qText otherStatement +-- Left ex -> throw $ CannotParseStatementException qText ex diff --git a/haskell-experiments/test/Test/Datalog/InMemoryDBSpec.hs b/haskell-experiments/test/Test/Datalog/InMemoryDBSpec.hs index b4b4286..88981ef 100644 --- a/haskell-experiments/test/Test/Datalog/InMemoryDBSpec.hs +++ b/haskell-experiments/test/Test/Datalog/InMemoryDBSpec.hs @@ -178,14 +178,6 @@ spec = do `shouldBe` Set.empty Set.fromList (relationNames db) `shouldBe` Set.fromList [ "equivalent" ] - it "can do basic queries" do - let db :: InMemoryDB = - InMemoryDB.withFacts - [ "parent(\"alice\", \"bob\")." - , "parent(\"bob\", \"carol\")." - ] - query db "?- parent(alice,X)." `shouldBe` "#NYI" -- ideally, 'bob' - (<<$>>) :: (Functor f1, Functor f2) => (a -> b) -> f1 (f2 a) -> f1 (f2 b) (<<$>>) = fmap fmap fmap diff --git a/haskell-experiments/test/Test/Datalog/NaiveQESpec.hs b/haskell-experiments/test/Test/Datalog/NaiveQESpec.hs index 0d9067b..3384085 100644 --- a/haskell-experiments/test/Test/Datalog/NaiveQESpec.hs +++ b/haskell-experiments/test/Test/Datalog/NaiveQESpec.hs @@ -14,9 +14,25 @@ module Test.Datalog.NaiveQESpec where import Test.Hspec +import Datalog.InMemoryDB (InMemoryDB) +import qualified Datalog.InMemoryDB as InMemoryDB +import Datalog.QueryEngine (QueryEngine(query)) +import qualified Datalog.QueryEngine as QueryEngine +import qualified Datalog.NaiveQE as NaiveQE +import Datalog.QueryEngine (queryEngine) +import Datalog.NaiveQE spec :: Spec spec = do describe "NaiveQESpec" do it "..." $ do - 1 `shouldBe` 1 \ No newline at end of file + 1 `shouldBe` 1 + + it "can do basic queries" do + let db :: InMemoryDB = + InMemoryDB.withFacts + [ "parent(\"alice\", \"bob\")." + , "parent(\"bob\", \"carol\")." + ] + qe :: NaiveQE InMemoryDB = queryEngine db + query qe "?- parent(alice,X)." `shouldBe` "#NYI" -- ideally, 'bob'