package com.mysema.rdfbean.virtuoso; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import java.util.Map; import org.junit.Test; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.types.Predicate; import com.mysema.rdfbean.TEST; import com.mysema.rdfbean.model.*; public class TupleQueryTest extends AbstractConnectionTest { private static final QNODE<ID> subject = new QNODE<ID>(ID.class, "s"); private static final QNODE<UID> predicate = new QNODE<UID>(UID.class, "p"); private static final QNODE<NODE> object = new QNODE<NODE>(NODE.class, "o"); private RDFQuery query() { return new RDFQueryImpl(connection); } @Test public void Pattern() { query().where(Blocks.pattern(subject, RDF.type, RDFS.Class)).limit(1).select(subject); } @Test public void Pattern_with_Filters() { Block pattern = Blocks.pattern(subject, predicate, object); List<Predicate> filters = Arrays.<Predicate> asList( subject.eq(new UID(TEST.NS)), predicate.eq(RDFS.label), subject.ne(new UID(TEST.NS)), object.isNull(), object.isNotNull(), object.stringValue().startsWith("X"), object.lit().lt("X"), object.lit().gt("X"), object.lit().loe("X"), object.lit().goe("X") ); for (Predicate filter : filters) { query().where(pattern, filter).limit(1).select(subject); } } @Test public void SelectAll() { CloseableIterator<Map<String, NODE>> iterator = query().where(Blocks.SPO).limit(1).selectAll(); assertTrue(iterator.hasNext()); try { while (iterator.hasNext()) { Map<String, NODE> row = iterator.next(); assertNotNull(row.get("s")); assertNotNull(row.get("p")); assertNotNull(row.get("o")); } } finally { iterator.close(); } } @Test public void Pattern_with_Limit_and_Offset() { query().where(Blocks.pattern(subject, RDF.type, RDFS.Class)) .limit(5) .offset(20) .select(subject); } @Test public void Group() { query().where( Blocks.pattern(subject, RDF.type, RDFS.Class), Blocks.pattern(subject, predicate, object)) .limit(1) .select(subject, predicate, object); } @Test public void Union() { query().where( Blocks.union( Blocks.pattern(subject, RDF.type, RDFS.Class), Blocks.pattern(subject, predicate, object) )) .limit(1) .select(subject, predicate, object); } @Test public void Optional() { query().where( Blocks.pattern(subject, RDF.type, RDFS.Class), Blocks.optional(Blocks.pattern(subject, predicate, object))) .limit(1) .select(subject, predicate, object); } @Test public void From() { UID test = new UID(TEST.NS); UID test2 = new UID(TEST.NS, "Res1"); connection.update(null, Arrays.asList(new STMT(new BID(), RDFS.label, new LIT("C"), test))); assertTrue(query().from(test).where(Blocks.pattern(subject, predicate, object)).ask()); assertTrue(query().from(test, test2).where(Blocks.pattern(subject, predicate, object)).ask()); assertFalse(query().from(test2).where(Blocks.pattern(subject, predicate, object)).ask()); } }