public void load(Tuple<NodeId> tuple) { for ( TupleIndex idx : indexes ) idx.add(tuple); } }
@Override public Iterator<Tuple<NodeId>> find(Tuple<NodeId> pattern) { return index.find(pattern) ; }
/** Insert tuples */ public void addAll(List<Tuple<NodeId>> t) { // Parallel. for ( int i = 0 ; i < indexes.length ; i++ ) { if ( indexes[i] == null ) continue ; indexes[i].addAll(t) ; syncNeeded = true ; } }
/** Set index - for code that manipulates internal structures directly - use with care */ public void setTupleIndex(int i, TupleIndex index) { if ( index != null && index.getTupleLength() != tupleLen ) throw new TDBException("Incompatible index: " + index.getMappingStr()) ; indexes[i] = index ; }
public static void createSecondaryIndexes(MonitorOutput output, TupleIndex primaryIndex, TupleIndex[] secondaryIndexes) { boolean printTiming = true; for ( TupleIndex index : secondaryIndexes ) { String msg = primaryIndex.getName()+"->"+index.getName(); if ( index != null ) { ProgressMonitor monitor = ProgressMonitorOutput.create(output, msg, LoaderSequential.IndexTickPoint, LoaderSequential.IndexSuperTick); monitor.startMessage(msg); monitor.start(); LoaderOps.copyIndex(primaryIndex.all(), new TupleIndex[]{index}, monitor) ; monitor.finish(); monitor.finishMessage(index.getName()+" indexing: "); } } } }
int len = srcIdx.getTupleLength(); Iterator<Tuple<NodeId>> iter = srcIdx.all(); while (iter.hasNext()) { if ( block == null )
/** Delete tuples */ public void deleteAll(List<Tuple<NodeId>> t) { // Parallel. for ( int i = 0 ; i < indexes.length ; i++ ) { if ( indexes[i] == null ) continue ; indexes[i].deleteAll(t) ; syncNeeded = true ; } }
@Override public String getMappingStr() { return index.getMappingStr() ; }
@Override public void delete(Tuple<NodeId> tuple) { index.delete(tuple) ; }
public void clear() { for ( TupleIndex idx : indexes ) { if ( idx != null ) idx.clear() ; } syncNeeded = true ; }
@Override public void close() { index.close() ; } }
@Override public Iterator<Tuple<NodeId>> all() { return index.all() ; }
@Override public TupleMap getMapping() { return index.getMapping() ; }
public NodeTupleTableConcrete(int N, TupleIndex[] indexes, NodeTable nodeTable) { if (indexes.length == 0 || indexes[0] == null) throw new TDBException("A primary index is required") ; for (TupleIndex index : indexes) { if (N != index.getTupleLength()) throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d", N, index.getMappingStr(), index.getTupleLength())) ; } this.tupleTable = new TupleTable(N, indexes) ; this.nodeTable = nodeTable ; }
@Override public void deleteAll(Collection<Tuple<NodeId>> tuples) { index.deleteAll(tuples); }
/** Indexes to a list of mappings suitable as a label */ /*package*/ static String indexMappings(TupleIndex[] indexes) { StringJoiner sj = new StringJoiner(", "); Arrays.stream(indexes).map(x->x.getMappingStr()).forEach(str->sj.add(str)); return sj.toString(); }
/** Delete a tuple */ public void delete( Tuple<NodeId> t ) { if ( tupleLen != t.len() ) throw new TDBException(format("Mismatch: deleting tuple of length %d from a table of tuples of length %d", t.len(), tupleLen)) ; for ( TupleIndex index : indexes ) { if ( index == null ) continue; index.delete( t ); } }
@Override public void clear() { index.clear() ; }
@Override final public void close() { for ( TupleIndex idx : indexes ) { if ( idx != null ) idx.close(); } }