@@ -2981,3 +2981,60 @@ TEST(QueryPlanner, Exists) {
2981
2981
" GRAPH ?g { ?u ?v ?c}}}" ,
2982
2982
filter);
2983
2983
}
2984
+
2985
+ // _____________________________________________________________________________
2986
+ TEST (QueryPlanner, ContainsWordInGraphClause) {
2987
+ {
2988
+ auto qp = makeQueryPlanner ();
2989
+ auto query = SparqlParser::parseQuery (
2990
+ " SELECT * { GRAPH ?g { ?s "
2991
+ " <http://qlever.cs.uni-freiburg.de/builtin-functions/contains-word> "
2992
+ " \" Test\" } }" );
2993
+ AD_EXPECT_THROW_WITH_MESSAGE_AND_TYPE (
2994
+ qp.createExecutionTree (query),
2995
+ ::testing::HasSubstr (
2996
+ " contains-word is not allowed inside GRAPH clauses "
2997
+ " or in queries with FROM/FROM NAMED clauses." ),
2998
+ ad_utility::Exception);
2999
+ }
3000
+ {
3001
+ auto qp = makeQueryPlanner ();
3002
+ auto query = SparqlParser::parseQuery (
3003
+ " SELECT * { GRAPH <my-iri> { ?s "
3004
+ " <http://qlever.cs.uni-freiburg.de/builtin-functions/contains-word> "
3005
+ " \" Test\" } }" );
3006
+ AD_EXPECT_THROW_WITH_MESSAGE_AND_TYPE (
3007
+ qp.createExecutionTree (query),
3008
+ ::testing::HasSubstr (
3009
+ " contains-word is not allowed inside GRAPH clauses "
3010
+ " or in queries with FROM/FROM NAMED clauses." ),
3011
+ ad_utility::Exception);
3012
+ }
3013
+ {
3014
+ auto qp = makeQueryPlanner ();
3015
+ auto query = SparqlParser::parseQuery (
3016
+ " SELECT * FROM <my-iri> WHERE { ?s "
3017
+ " <http://qlever.cs.uni-freiburg.de/builtin-functions/contains-word> "
3018
+ " \" Test\" }" );
3019
+ AD_EXPECT_THROW_WITH_MESSAGE_AND_TYPE (
3020
+ qp.createExecutionTree (query),
3021
+ ::testing::HasSubstr (
3022
+ " contains-word is not allowed inside GRAPH clauses "
3023
+ " or in queries with FROM/FROM NAMED clauses." ),
3024
+ ad_utility::Exception);
3025
+ }
3026
+ }
3027
+
3028
+ // _____________________________________________________________________________
3029
+ TEST (QueryPlanner, UnconnectedComponentsInGraphClause) {
3030
+ h::expect (" SELECT * WHERE { GRAPH ?g { ?s1 ?p1 ?o1 . ?s2 ?p2 ?o2 } }" ,
3031
+ h::Join (h::Sort (h::IndexScanFromStrings (" ?s1" , " ?p1" , " ?o1" , {}, {},
3032
+ {Variable{" ?g" }}, {3 })),
3033
+ h::Sort (h::IndexScanFromStrings (" ?s2" , " ?p2" , " ?o2" , {}, {},
3034
+ {Variable{" ?g" }}, {3 }))));
3035
+ // Sanity check case without a GRAPH clause
3036
+ h::expect (
3037
+ " SELECT * WHERE { ?s1 ?p1 ?o1 . ?s2 ?p2 ?o2 }" ,
3038
+ h::CartesianProductJoin (h::IndexScanFromStrings (" ?s1" , " ?p1" , " ?o1" ),
3039
+ h::IndexScanFromStrings (" ?s2" , " ?p2" , " ?o2" )));
3040
+ }
0 commit comments