@@ -52,18 +52,31 @@ public class SparqlUoOptimizerVisualizationTest {
5252 " ?s ex:p1 ?o .\n " +
5353 " { ?x ex:p2 ?y } UNION { ?a ex:p3 ?b }\n " +
5454 "}\n " ,
55- PREFIXES + "SELECT ?s ?o ?x ?y WHERE {\n " +
56- " ?s ex:p1 ?o .\n " +
57- " OPTIONAL {\n " +
58- " ?x ex:p2 ?y .\n " +
59- " }\n " +
60- " }" ),
55+ PREFIXES + "SELECT ?s ?o ?x ?y ?a ?b WHERE {\n " +
56+ " ?s ex:p1 ?o .\n " +
57+ " {\n " +
58+ " ?x ex:p2 ?y .\n " +
59+ " }\n " +
60+ " UNION\n " +
61+ " {\n " +
62+ " ?a ex:p3 ?b .\n " +
63+ " }\n " +
64+ "}" ),
6165 new Example ("counter_union_only_predicate_shared" ,
6266 PREFIXES + "SELECT * WHERE {\n " +
6367 " ?s ?p ?o .\n " +
6468 " { ?x ?p ?y } UNION { ?x ?p ?z }\n " +
6569 "}\n " ,
66- PREFIXES + "" ),
70+ PREFIXES + "SELECT ?s ?p ?o ?x ?y ?z WHERE {\n " +
71+ " ?s ?p ?o .\n " +
72+ " {\n " +
73+ " ?x ?p ?y .\n " +
74+ " }\n " +
75+ " UNION\n " +
76+ " {\n " +
77+ " ?x ?p ?z .\n " +
78+ " }\n " +
79+ "}" ),
6780 new Example ("counter_optional_no_shared_subject_or_object" ,
6881 PREFIXES + "SELECT * WHERE {\n " +
6982 " ?s ex:p1 ?o\n " +
@@ -80,19 +93,41 @@ public class SparqlUoOptimizerVisualizationTest {
8093 " ?s ex:p1 ?o\n " +
8194 " OPTIONAL { FILTER(?o > 5) ?s ex:p2 ?o2 }\n " +
8295 "}\n " ,
83- PREFIXES + "" ),
96+ PREFIXES + "SELECT ?s ?o ?o2 WHERE {\n " +
97+ " ?s ex:p1 ?o .\n " +
98+ " OPTIONAL {\n " +
99+ " ?s ex:p2 ?o2 .\n " +
100+ " FILTER (?o > 5)\n " +
101+ " }\n " +
102+ "}" ),
84103 new Example ("counter_union_with_filter_barrier" ,
85104 PREFIXES + "SELECT * WHERE {\n " +
86105 " ?s ex:p1 ?o .\n " +
87106 " { FILTER(?o > 5) ?s ex:p2 ?o2 } UNION { FILTER(?o > 5) ?s ex:p3 ?o3 }\n " +
88107 "}\n " ,
89- PREFIXES + "" ),
108+ PREFIXES + "SELECT ?s ?o ?o2 ?o3 WHERE {\n " +
109+ " ?s ex:p1 ?o .\n " +
110+ " {\n " +
111+ " ?s ex:p2 ?o2 .\n " +
112+ " FILTER (?o > 5)\n " +
113+ " }\n " +
114+ " UNION\n " +
115+ " {\n " +
116+ " ?s ex:p3 ?o3 .\n " +
117+ " FILTER (?o > 5)\n " +
118+ " }\n " +
119+ "}" ),
90120 new Example ("counter_service_barrier" ,
91121 PREFIXES + "SELECT * WHERE {\n " +
92122 " ?s ex:p1 ?o\n " +
93123 " SERVICE <http://example.org/svc> { ?s ex:p2 ?o2 }\n " +
94124 "}\n " ,
95- "" )
125+ PREFIXES + "SELECT ?s ?o ?o2 WHERE {\n " +
126+ " ?s ex:p1 ?o .\n " +
127+ " SERVICE ex:svc {\n " +
128+ " ?s ex:p2 ?o2 .\n " +
129+ " }\n " +
130+ "}" )
96131 );
97132
98133 private static final List <Example > EXAMPLES = List .of (
@@ -101,49 +136,154 @@ public class SparqlUoOptimizerVisualizationTest {
101136 " ?s ex:p1 ?o .\n " +
102137 " { ?s ex:p2 ?o2 } UNION { ?s ex:p3 ?o3 }\n " +
103138 "}\n " ,
104- PREFIXES + "" ),
139+ PREFIXES + "SELECT ?s ?o ?o2 ?o3 WHERE {\n " +
140+ " {\n " +
141+ " ?s ex:p1 ?o .\n " +
142+ " {\n " +
143+ " ?s ex:p2 ?o2 .\n " +
144+ " }\n " +
145+ " }\n " +
146+ " UNION\n " +
147+ " {\n " +
148+ " ?s ex:p1 ?o .\n " +
149+ " {\n " +
150+ " ?s ex:p3 ?o3 .\n " +
151+ " }\n " +
152+ " }\n " +
153+ "}" ),
105154 new Example ("merge_union_with_longer_branch" ,
106155 PREFIXES + "SELECT * WHERE {\n " +
107156 " ?s ex:p1 ?o .\n " +
108157 " { ?s ex:p2 ?o2 . ?o2 ex:p4 ?x } UNION { ?s ex:p3 ?o3 }\n " +
109158 "}\n " ,
110- PREFIXES + "" ),
159+ PREFIXES + "SELECT ?s ?o ?o2 ?x ?o3 WHERE {\n " +
160+ " {\n " +
161+ " ?s ex:p1 ?o .\n " +
162+ " ?s ex:p2 ?o2 .\n " +
163+ " ?o2 ex:p4 ?x .\n " +
164+ " }\n " +
165+ " UNION\n " +
166+ " {\n " +
167+ " ?s ex:p1 ?o .\n " +
168+ " {\n " +
169+ " ?s ex:p3 ?o3 .\n " +
170+ " }\n " +
171+ " }\n " +
172+ "}" ),
111173 new Example ("merge_union_shared_object" ,
112174 PREFIXES + "SELECT * WHERE {\n " +
113175 " ?s ex:p1 ?o .\n " +
114176 " { ?x ex:p2 ?o } UNION { ?y ex:p3 ?o }\n " +
115177 "}\n " ,
116- PREFIXES + "" ),
178+ PREFIXES + "SELECT ?s ?o ?x ?y WHERE {\n " +
179+ " {\n " +
180+ " ?s ex:p1 ?o .\n " +
181+ " {\n " +
182+ " ?x ex:p2 ?o .\n " +
183+ " }\n " +
184+ " }\n " +
185+ " UNION\n " +
186+ " {\n " +
187+ " ?s ex:p1 ?o .\n " +
188+ " {\n " +
189+ " ?y ex:p3 ?o .\n " +
190+ " }\n " +
191+ " }\n " +
192+ "}" ),
117193 new Example ("merge_three_union_branches" ,
118194 PREFIXES + "SELECT * WHERE {\n " +
119195 " ?s ex:p1 ?o .\n " +
120196 " { ?s ex:p2 ?o2 } UNION { ?s ex:p3 ?o3 } UNION { ?s ex:p4 ?o4 }\n " +
121197 "}\n " ,
122- PREFIXES + "" ),
198+ PREFIXES + "SELECT ?s ?o ?o2 ?o3 ?o4 WHERE {\n " +
199+ " {\n " +
200+ " {\n " +
201+ " ?s ex:p1 ?o .\n " +
202+ " {\n " +
203+ " ?s ex:p2 ?o2 .\n " +
204+ " }\n " +
205+ " }\n " +
206+ " UNION\n " +
207+ " {\n " +
208+ " ?s ex:p1 ?o .\n " +
209+ " {\n " +
210+ " ?s ex:p3 ?o3 .\n " +
211+ " }\n " +
212+ " }\n " +
213+ " }\n " +
214+ " UNION\n " +
215+ " {\n " +
216+ " ?s ex:p1 ?o .\n " +
217+ " {\n " +
218+ " ?s ex:p4 ?o4 .\n " +
219+ " }\n " +
220+ " }\n " +
221+ "}" ),
123222 new Example ("inject_simple_optional" ,
124223 PREFIXES + "SELECT * WHERE {\n " +
125224 " ?s ex:p1 ?o\n " +
126225 " OPTIONAL { ?s ex:p2 ?o2 }\n " +
127226 "}\n " ,
128- PREFIXES + "" ),
227+ PREFIXES + "SELECT ?s ?o ?o2 WHERE {\n " +
228+ " ?s ex:p1 ?o .\n " +
229+ " OPTIONAL {\n " +
230+ " ?s ex:p1 ?o .\n " +
231+ " ?s ex:p2 ?o2 .\n " +
232+ " }\n " +
233+ "}" ),
129234 new Example ("inject_optional_multi_bgp" ,
130235 PREFIXES + "SELECT * WHERE {\n " +
131236 " ?s ex:p1 ?o\n " +
132237 " OPTIONAL { ?s ex:p2 ?o2 . ?o2 ex:p3 ?x }\n " +
133238 "}\n " ,
134- PREFIXES + "" ),
239+ PREFIXES + "SELECT ?s ?o ?o2 ?x WHERE {\n " +
240+ " ?s ex:p1 ?o .\n " +
241+ " OPTIONAL {\n " +
242+ " ?s ex:p1 ?o .\n " +
243+ " ?s ex:p2 ?o2 .\n " +
244+ " ?o2 ex:p3 ?x .\n " +
245+ " }\n " +
246+ "}" ),
135247 new Example ("inject_optional_with_union_and_bgp" ,
136248 PREFIXES + "SELECT * WHERE {\n " +
137249 " ?s ex:p1 ?o\n " +
138250 " OPTIONAL { ?s ex:p2 ?o2 . { ?s ex:p3 ?o3 } UNION { ?s ex:p4 ?o4 } }\n " +
139251 "}\n " ,
140- PREFIXES + "" ),
252+ PREFIXES + "SELECT ?s ?o ?o2 ?o3 ?o4 WHERE {\n " +
253+ " ?s ex:p1 ?o .\n " +
254+ " OPTIONAL {\n " +
255+ " ?s ex:p1 ?o .\n " +
256+ " {\n " +
257+ " ?s ex:p2 ?o2 .\n " +
258+ " {\n " +
259+ " ?s ex:p3 ?o3 .\n " +
260+ " }\n " +
261+ " }\n " +
262+ " UNION\n " +
263+ " {\n " +
264+ " ?s ex:p2 ?o2 .\n " +
265+ " {\n " +
266+ " ?s ex:p4 ?o4 .\n " +
267+ " }\n " +
268+ " }\n " +
269+ " }\n " +
270+ "}" ),
141271 new Example ("inject_nested_optional" ,
142272 PREFIXES + "SELECT * WHERE {\n " +
143273 " ?s ex:p1 ?o\n " +
144274 " OPTIONAL { ?s ex:p2 ?o2 OPTIONAL { ?s ex:p3 ?o3 } }\n " +
145275 "}\n " ,
146- "" )
276+ PREFIXES + "SELECT ?s ?o ?o2 ?o3 WHERE {\n " +
277+ " ?s ex:p1 ?o .\n " +
278+ " OPTIONAL {\n " +
279+ " ?s ex:p1 ?o .\n " +
280+ " ?s ex:p2 ?o2 .\n " +
281+ " OPTIONAL {\n " +
282+ " ?s ex:p2 ?o2 .\n " +
283+ " ?s ex:p3 ?o3 .\n " +
284+ " }\n " +
285+ " }\n " +
286+ "}" )
147287 );
148288
149289 @ TestFactory
0 commit comments