@@ -46,94 +46,104 @@ public class SparqlUoOptimizerVisualizationTest {
4646 private static final Dataset DATASET = new SimpleDataset ();
4747 private static final BindingSet BINDINGS = EmptyBindingSet .getInstance ();
4848
49+ private static final List <Example > COUNTER_EXAMPLES = List .of (
50+ new Example ("counter_union_no_shared_subject_or_object" ,
51+ PREFIXES + "SELECT * WHERE {\n " +
52+ " ?s ex:p1 ?o .\n " +
53+ " { ?x ex:p2 ?y } UNION { ?a ex:p3 ?b }\n " +
54+ "}\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+ " }" ),
61+ new Example ("counter_union_only_predicate_shared" ,
62+ PREFIXES + "SELECT * WHERE {\n " +
63+ " ?s ?p ?o .\n " +
64+ " { ?x ?p ?y } UNION { ?x ?p ?z }\n " +
65+ "}\n " ,
66+ PREFIXES + "" ),
67+ new Example ("counter_optional_no_shared_subject_or_object" ,
68+ PREFIXES + "SELECT * WHERE {\n " +
69+ " ?s ex:p1 ?o\n " +
70+ " OPTIONAL { ?x ex:p2 ?y }\n " +
71+ "}\n " ,
72+ PREFIXES + "SELECT ?s ?o ?x ?y WHERE {\n " +
73+ " ?s ex:p1 ?o .\n " +
74+ " OPTIONAL {\n " +
75+ " ?x ex:p2 ?y .\n " +
76+ " }\n " +
77+ "}" ),
78+ new Example ("counter_optional_with_filter_barrier" ,
79+ PREFIXES + "SELECT * WHERE {\n " +
80+ " ?s ex:p1 ?o\n " +
81+ " OPTIONAL { FILTER(?o > 5) ?s ex:p2 ?o2 }\n " +
82+ "}\n " ,
83+ PREFIXES + "" ),
84+ new Example ("counter_union_with_filter_barrier" ,
85+ PREFIXES + "SELECT * WHERE {\n " +
86+ " ?s ex:p1 ?o .\n " +
87+ " { FILTER(?o > 5) ?s ex:p2 ?o2 } UNION { FILTER(?o > 5) ?s ex:p3 ?o3 }\n " +
88+ "}\n " ,
89+ PREFIXES + "" ),
90+ new Example ("counter_service_barrier" ,
91+ PREFIXES + "SELECT * WHERE {\n " +
92+ " ?s ex:p1 ?o\n " +
93+ " SERVICE <http://example.org/svc> { ?s ex:p2 ?o2 }\n " +
94+ "}\n " ,
95+ "" )
96+ );
97+
4998 private static final List <Example > EXAMPLES = List .of (
5099 new Example ("merge_simple_union" ,
51100 PREFIXES + "SELECT * WHERE {\n " +
52101 " ?s ex:p1 ?o .\n " +
53102 " { ?s ex:p2 ?o2 } UNION { ?s ex:p3 ?o3 }\n " +
54103 "}\n " ,
55- true ),
104+ PREFIXES + "" ),
56105 new Example ("merge_union_with_longer_branch" ,
57106 PREFIXES + "SELECT * WHERE {\n " +
58107 " ?s ex:p1 ?o .\n " +
59108 " { ?s ex:p2 ?o2 . ?o2 ex:p4 ?x } UNION { ?s ex:p3 ?o3 }\n " +
60109 "}\n " ,
61- true ),
110+ PREFIXES + "" ),
62111 new Example ("merge_union_shared_object" ,
63112 PREFIXES + "SELECT * WHERE {\n " +
64113 " ?s ex:p1 ?o .\n " +
65114 " { ?x ex:p2 ?o } UNION { ?y ex:p3 ?o }\n " +
66115 "}\n " ,
67- true ),
116+ PREFIXES + "" ),
68117 new Example ("merge_three_union_branches" ,
69118 PREFIXES + "SELECT * WHERE {\n " +
70119 " ?s ex:p1 ?o .\n " +
71120 " { ?s ex:p2 ?o2 } UNION { ?s ex:p3 ?o3 } UNION { ?s ex:p4 ?o4 }\n " +
72121 "}\n " ,
73- true ),
122+ PREFIXES + "" ),
74123 new Example ("inject_simple_optional" ,
75124 PREFIXES + "SELECT * WHERE {\n " +
76125 " ?s ex:p1 ?o\n " +
77126 " OPTIONAL { ?s ex:p2 ?o2 }\n " +
78127 "}\n " ,
79- true ),
128+ PREFIXES + "" ),
80129 new Example ("inject_optional_multi_bgp" ,
81130 PREFIXES + "SELECT * WHERE {\n " +
82131 " ?s ex:p1 ?o\n " +
83132 " OPTIONAL { ?s ex:p2 ?o2 . ?o2 ex:p3 ?x }\n " +
84133 "}\n " ,
85- true ),
134+ PREFIXES + "" ),
86135 new Example ("inject_optional_with_union_and_bgp" ,
87136 PREFIXES + "SELECT * WHERE {\n " +
88137 " ?s ex:p1 ?o\n " +
89138 " OPTIONAL { ?s ex:p2 ?o2 . { ?s ex:p3 ?o3 } UNION { ?s ex:p4 ?o4 } }\n " +
90139 "}\n " ,
91- true ),
140+ PREFIXES + "" ),
92141 new Example ("inject_nested_optional" ,
93142 PREFIXES + "SELECT * WHERE {\n " +
94143 " ?s ex:p1 ?o\n " +
95144 " OPTIONAL { ?s ex:p2 ?o2 OPTIONAL { ?s ex:p3 ?o3 } }\n " +
96145 "}\n " ,
97- true )
98- );
99-
100- private static final List <Example > COUNTER_EXAMPLES = List .of (
101- new Example ("counter_union_no_shared_subject_or_object" ,
102- PREFIXES + "SELECT * WHERE {\n " +
103- " ?s ex:p1 ?o .\n " +
104- " { ?x ex:p2 ?y } UNION { ?a ex:p3 ?b }\n " +
105- "}\n " ,
106- false ),
107- new Example ("counter_union_only_predicate_shared" ,
108- PREFIXES + "SELECT * WHERE {\n " +
109- " ?s ?p ?o .\n " +
110- " { ?x ?p ?y } UNION { ?x ?p ?z }\n " +
111- "}\n " ,
112- false ),
113- new Example ("counter_optional_no_shared_subject_or_object" ,
114- PREFIXES + "SELECT * WHERE {\n " +
115- " ?s ex:p1 ?o\n " +
116- " OPTIONAL { ?x ex:p2 ?y }\n " +
117- "}\n " ,
118- false ),
119- new Example ("counter_optional_with_filter_barrier" ,
120- PREFIXES + "SELECT * WHERE {\n " +
121- " ?s ex:p1 ?o\n " +
122- " OPTIONAL { FILTER(?o > 5) ?s ex:p2 ?o2 }\n " +
123- "}\n " ,
124- false ),
125- new Example ("counter_union_with_filter_barrier" ,
126- PREFIXES + "SELECT * WHERE {\n " +
127- " ?s ex:p1 ?o .\n " +
128- " { FILTER(?o > 5) ?s ex:p2 ?o2 } UNION { FILTER(?o > 5) ?s ex:p3 ?o3 }\n " +
129- "}\n " ,
130- false ),
131- new Example ("counter_service_barrier" ,
132- PREFIXES + "SELECT * WHERE {\n " +
133- " ?s ex:p1 ?o\n " +
134- " SERVICE <http://example.org/svc> { ?s ex:p2 ?o2 }\n " +
135- "}\n " ,
136- false )
146+ "" )
137147 );
138148
139149 @ TestFactory
@@ -153,7 +163,7 @@ private static void runExample(Example example, TupleExprIRRenderer.Config style
153163
154164 writeArtifacts (example .name , example .sparql , before , after , original , optimized );
155165
156- assertThat (after ).isEqualTo (example .expected );
166+ assertThat (after ).isEqualTo (example .expectedSparqlAfterOptimization );
157167
158168 }
159169
@@ -204,13 +214,12 @@ private static void writeFile(Path path, String content) throws IOException {
204214 private static final class Example {
205215 private final String name ;
206216 private final String sparql ;
207- private final boolean expectChange ;
208- public String expected ;
217+ public final String expectedSparqlAfterOptimization ;
209218
210- private Example (String name , String sparql , boolean expectChange ) {
219+ private Example (String name , String sparql , String expectedSparqlAfterOptimization ) {
211220 this .name = name ;
212221 this .sparql = sparql ;
213- this .expectChange = expectChange ;
222+ this .expectedSparqlAfterOptimization = expectedSparqlAfterOptimization ;
214223 }
215224 }
216225
0 commit comments