public TupleIndex buildTupleIndex(String primary, String index, String name) { TupleMap cmap = TupleMap.create(primary, index); RecordFactory rf = new RecordFactory(SystemTDB.SizeOfNodeId * cmap.length(), 0); RangeIndex rIdx = buildRangeIndex(rf, index); TupleIndex tIdx = new TupleIndexRecord(primary.length(), cmap, index, rf, rIdx); return tIdx; }
/** Insert tuples */ @Override public void addAll(Collection<Tuple<NodeId>> tuples) { for ( Tuple<NodeId> t : tuples ) add(t) ; }
/** Find all matching tuples - a slot of NodeId.NodeIdAny (or null) means match any. * Input pattern in natural order, not index order. */ @Override protected Iterator<Tuple<NodeId>> performFind(Tuple<NodeId> pattern) { return findOrScan(pattern) ; }
@Test public void TupleIndexRecordFindScan_2() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; add(index, n1, n2, n4) ; Tuple<NodeId> tuple2 = tuple(null, null, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertNull(iter) ; iter = index.findOrPartialScan(tuple2) ; assertNull(iter) ; iter = index.findOrScan(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordSPO_1() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, n2, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordFindScan_1() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, null, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertNull(iter) ; iter = index.findOrPartialScan(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordFindNot_3() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, null, n6) ; Iterator<Tuple<NodeId>> iter = index.findOrPartialScan(tuple2) ; assertFalse(iter.hasNext()) ; }
final Iterator<Tuple<NodeId>> findOrScan(Tuple<NodeId> pattern) { return findWorker(pattern, true, true) ; }
/** Get the BPlusTree index for a {@Link TupleIndex} */ public static BPlusTree idxBTree(TupleIndex idx) { TupleIndexRecord idxr = (TupleIndexRecord)idx; RangeIndex rIndex = idxr.getRangeIndex(); BPlusTree bpt = (BPlusTree)rIndex; return bpt; }
/** Delete tuples */ @Override public void deleteAll(Collection<Tuple<NodeId>> tuples) { for ( Tuple<NodeId> t : tuples ) delete(t) ; }
@Test public void TupleIndexRecordFindScan_2() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; add(index, n1, n2, n4) ; Tuple<NodeId> tuple2 = tuple(null, null, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertNull(iter) ; iter = index.findOrPartialScan(tuple2) ; assertNull(iter) ; iter = index.findOrScan(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordPOS_1() { TupleIndexRecord index = create("POS") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, n2, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertTrue("Can't find tuple", iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordSPO_3() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, null, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertNull(iter) ; iter = index.findOrPartialScan(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
@Test public void TupleIndexRecordFindNot_3() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, null, n6) ; Iterator<Tuple<NodeId>> iter = index.findOrPartialScan(tuple2) ; assertFalse(iter.hasNext()) ; }
final Iterator<Tuple<NodeId>> findOrPartialScan(Tuple<NodeId> pattern) { return findWorker(pattern, true, false) ; }
@Test public void TupleIndexRecordSPO_2() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, n2, null) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
static TupleIndexRecord create(String description) { IndexParams indexParams = StoreParams.getDftStoreParams() ; RangeIndex rIdx = BuildTestLib.buildRangeIndex(FileSet.mem(), factory, indexParams) ; TupleMap tmap = TupleMap.create("SPO", description) ; TupleIndexRecord index = new TupleIndexRecord(3, tmap, description, factory, rIdx) ; return index ; }
@Test public void TupleIndexRecordFindScan_1() { TupleIndexRecord index = create("SPO") ; add(index, n1, n2, n3) ; Tuple<NodeId> tuple2 = tuple(n1, null, n3) ; Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ; assertNull(iter) ; iter = index.findOrPartialScan(tuple2) ; assertTrue(iter.hasNext()) ; iter.next(); assertFalse(iter.hasNext()) ; }
static void add(TupleIndexRecord index, NodeId x1, NodeId x2, NodeId x3) { Tuple<NodeId> tuple = tuple(x1, x2, x3) ; index.add(tuple) ; }