From 6c08f29c6f22baf090875148145507a2fc088267 Mon Sep 17 00:00:00 2001 From: "Tri H. Nguyen" Date: Fri, 9 Jun 2017 10:34:42 -0400 Subject: [PATCH] RYA-284: updated to support the use of bloom filter --- .../query/AccumuloRyaQueryEngine.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/dao/accumulo.rya/src/main/java/org/apache/rya/accumulo/query/AccumuloRyaQueryEngine.java b/dao/accumulo.rya/src/main/java/org/apache/rya/accumulo/query/AccumuloRyaQueryEngine.java index 888d89681..050b5ea5c 100644 --- a/dao/accumulo.rya/src/main/java/org/apache/rya/accumulo/query/AccumuloRyaQueryEngine.java +++ b/dao/accumulo.rya/src/main/java/org/apache/rya/accumulo/query/AccumuloRyaQueryEngine.java @@ -23,6 +23,7 @@ import info.aduna.iteration.CloseableIteration; import java.io.IOException; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -47,6 +48,7 @@ import org.apache.rya.api.query.strategy.TriplePatternStrategy; import org.apache.rya.api.resolver.RyaContext; import org.apache.rya.api.resolver.RyaTripleContext; +import org.apache.rya.api.resolver.RyaTypeResolverException; import org.apache.rya.api.resolver.triple.TripleRowRegex; import org.apache.rya.api.utils.CloseableIterableIteration; @@ -72,6 +74,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterators; +import com.google.common.primitives.Bytes; /** * Date: 7/17/12 Time: 9:28 AM @@ -162,6 +165,9 @@ public CloseableIteration, RyaDAOE layout = entry.getKey(); ByteRange byteRange = entry.getValue(); Range range = new Range(new Text(byteRange.getStart()), new Text(byteRange.getEnd())); + if ((stmt.getSubject() != null) && (stmt.getPredicate() != null) && (stmt.getObject() != null)) { + range = Range.exact(appendType(byteRange.getStart(), stmt.getObject())); + } Range rangeMapRange = range; // if context != null, bind context info to Range so that // ColumnFamily Keys returned by Scanner @@ -283,7 +289,9 @@ public CloseableIterable query(RyaQuery ryaQuery) throws RyaDAOExc layout = entry.getKey(); ByteRange byteRange = entry.getValue(); range = new Range(new Text(byteRange.getStart()), new Text(byteRange.getEnd())); - + if ((stmt.getSubject() != null) && (stmt.getPredicate() != null) && (stmt.getObject() != null)) { + range = Range.exact(appendType(byteRange.getStart(), stmt.getObject())); + } } else { range = new Range(); layout = TABLE_LAYOUT.SPO; @@ -365,6 +373,9 @@ public CloseableIterable query(BatchRyaQuery ryaQuery) throws RyaD layout = entry.getKey(); ByteRange byteRange = entry.getValue(); Range range = new Range(new Text(byteRange.getStart()), new Text(byteRange.getEnd())); + if ((stmt.getSubject() != null) && (stmt.getPredicate() != null) && (stmt.getObject() != null)) { + range = Range.exact(appendType(byteRange.getStart(), stmt.getObject())); + } ranges.add(range); } // no ranges @@ -459,4 +470,20 @@ public AccumuloRdfConfiguration getConf() { @Override public void close() throws IOException { } -} + + /** + * Append a type extracted from {@link RyaType} to the end of the data + * + * @param data The data where a type is appended to + * @param ryaType The {@link RyaType} where a byte type is retrieved so the value can be appended to the data + * @return the appended data as a {@link Text} type + * @throws RyaTypeResolverException when there is an error occurred in getting the type + */ + private static Text appendType(final byte[] data, final RyaType ryaType) throws RyaTypeResolverException { + final RyaContext realRyaContext = RyaContext.getInstance(); + + byte[] type = realRyaContext.serializeType(ryaType)[1]; + type = Arrays.copyOfRange(type, 1, type.length); + + return new Text(Bytes.concat(data, type)); + }}