|
16 | 16 | import java.io.ByteArrayOutputStream;
|
17 | 17 | import java.io.IOException;
|
18 | 18 | import java.io.InputStream;
|
| 19 | +import java.io.StringReader; |
19 | 20 | import java.lang.ref.Reference;
|
20 | 21 | import java.lang.ref.WeakReference;
|
21 | 22 | import java.util.ArrayList;
|
@@ -324,4 +325,73 @@ public void testNotClosingResultThrowsException() {
|
324 | 325 | });
|
325 | 326 |
|
326 | 327 | }
|
| 328 | + |
| 329 | + @Test |
| 330 | + public void testLeftJoinWithJoinCondition() throws IOException { |
| 331 | + |
| 332 | + String data = "@prefix wdt: <http://www.wikidata.org/prop/direct/> .\n" + |
| 333 | + "@prefix wd: <http://www.wikidata.org/entity/> .\n" + |
| 334 | + "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n" + |
| 335 | + "@prefix wikibase: <http://wikiba.se/ontology#> .\n" + |
| 336 | + |
| 337 | + "\n" + |
| 338 | + "wd:other1 wdt:P106 wd:Q27532438 .\n" + |
| 339 | + "wd:other2 wdt:P106 wd:Q27532438 .\n" + |
| 340 | + "wd:other3 wdt:P106 wd:Q27532438 .\n" + |
| 341 | + |
| 342 | + "wd:Q27532438 a wikibase:Item;\n" + |
| 343 | + " rdfs:label \"suffragist\"@en, \"sufrageto\"@eo, \"суфражистка\"@ru, \"suffragetti\"@fi, \"szüfrazsett\"@lv.\n" |
| 344 | + + |
| 345 | + |
| 346 | + "wd:Q38203 wdt:P106 wd:Q27532437 .\n" + |
| 347 | + "\n" + |
| 348 | + "wd:Q27532437 a wikibase:Item;\n" + |
| 349 | + " rdfs:label \"suffragist\"@en, \"sufrageto\"@eo, \"суфражистка\"@ru, \"suffragetti\"@fi, \"szüfrazsett\"@hu.\n" |
| 350 | + + |
| 351 | + "\n" + |
| 352 | + |
| 353 | + "wd:other9 wdt:P106 wd:Q27532439 .\n" + |
| 354 | + |
| 355 | + "wd:Q27532438 a wikibase:Item;\n" + |
| 356 | + " rdfs:label \"suffragist\"@en, \"sufrageto\"@eo, \"суфражистка\"@ru, \"suffragetti\"@fi, \"szüfrazsett\"@no-nb.\n" |
| 357 | + + |
| 358 | + |
| 359 | + "wd:Q89166696 wdt:P106 wd:Q27532437 .\n"; |
| 360 | + |
| 361 | + con.add(new StringReader(data), "", RDFFormat.TURTLE); |
| 362 | + |
| 363 | + TupleQuery tupleQuery = con.prepareTupleQuery("PREFIX wdt: <http://www.wikidata.org/prop/direct/>\n" + |
| 364 | + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" + |
| 365 | + "SELECT ?occup ?occupLabel ?count\n" + |
| 366 | + "WHERE\n" + |
| 367 | + "{\n" + |
| 368 | + " {\n" + |
| 369 | + " SELECT ?occup (COUNT(?person) as ?count)\n" + |
| 370 | + " WHERE\n" + |
| 371 | + " {\n" + |
| 372 | + " ?person wdt:P106 ?occup\n" + |
| 373 | + " }\n" + |
| 374 | + " GROUP BY ?occup\n" + |
| 375 | + " ORDER BY DESC(?count)\n" + |
| 376 | + " LIMIT 1000\n" + |
| 377 | + " }\n" + |
| 378 | + "BIND(\"lv\" AS ?lang)\n" + |
| 379 | + " OPTIONAL {" + |
| 380 | + " ?occup rdfs:label ?label1. \n" + |
| 381 | + " filter(lang(?label1) = ?lang)\n" + |
| 382 | + "}\n" + |
| 383 | + " FILTER(!BOUND(?label1))\n" + |
| 384 | + "?occup rdfs:label ?occupLabel FILTER (LANG(?occupLabel)=\"en\") .\n" + |
| 385 | + "\n" + |
| 386 | + "}\n" + |
| 387 | + "ORDER BY DESC(?count)\n" + |
| 388 | + "LIMIT 50"); |
| 389 | + con.begin(); |
| 390 | + try (TupleQueryResult evaluate = tupleQuery.evaluate()) { |
| 391 | + assertTrue(evaluate.hasNext()); |
| 392 | + } |
| 393 | + con.commit(); |
| 394 | + |
| 395 | + } |
| 396 | + |
327 | 397 | }
|
0 commit comments