Skip to content

Commit

Permalink
Remove unnecessary set
Browse files Browse the repository at this point in the history
There is no reason to store an extra copy of the removed nodes, instead
delegate to the tx state to do the check.
  • Loading branch information
pontusmelke committed Jan 15, 2018
1 parent 400b344 commit 72b61c0
Showing 1 changed file with 17 additions and 31 deletions.
Expand Up @@ -21,6 +21,7 @@

import java.util.Arrays;

import org.neo4j.collection.primitive.PrimitiveLongCollections;
import org.neo4j.collection.primitive.PrimitiveLongIterator;
import org.neo4j.collection.primitive.PrimitiveLongSet;
import org.neo4j.internal.kernel.api.IndexQuery;
Expand All @@ -30,6 +31,7 @@
import org.neo4j.storageengine.api.schema.IndexProgressor;
import org.neo4j.storageengine.api.schema.IndexProgressor.NodeValueClient;
import org.neo4j.storageengine.api.txstate.PrimitiveLongReadableDiffSets;
import org.neo4j.storageengine.api.txstate.ReadableDiffSets;
import org.neo4j.values.storable.Value;

import static java.util.Arrays.stream;
Expand All @@ -46,7 +48,7 @@ class NodeValueIndexCursor extends IndexCursor
private IndexQuery[] query;
private Value[] values;
private PrimitiveLongIterator added;
private PrimitiveLongSet removed;
private PrimitiveLongReadableDiffSets changes;

NodeValueIndexCursor()
{
Expand Down Expand Up @@ -76,12 +78,12 @@ public void initialize( IndexDescriptor descriptor, IndexProgressor progressor,
case rangeNumeric:
assert query.length == 1;
numericRangeQuery( descriptor, (IndexQuery.NumberRangePredicate) query[0] );
break;
break;

case rangeString:
assert query.length == 1;
stringRangeQuery( descriptor, (IndexQuery.StringRangePredicate) query[0] );
break;
break;

case stringPrefix:
prefixQuery( descriptor, (IndexQuery.StringPrefixPredicate) query[0] );
Expand All @@ -94,7 +96,8 @@ public void initialize( IndexDescriptor descriptor, IndexProgressor progressor,

private boolean isRemoved( long reference )
{
return removed != null && removed.contains( reference );
return (changes != null && changes.isRemoved( reference )) ||
(read.hasTxStateWithChanges() && read.txState().addedAndRemovedNodes().isRemoved( reference ));
}

@Override
Expand Down Expand Up @@ -177,7 +180,7 @@ public void close()
this.values = null;
this.read = null;
this.added = null;
this.removed = null;
this.changes = null;
}

@Override
Expand Down Expand Up @@ -206,48 +209,39 @@ private void prefixQuery( IndexDescriptor descriptor, IndexQuery.StringPrefixPre
{
if ( read.hasTxStateWithChanges() )
{
TransactionState txState = read.txState();
PrimitiveLongReadableDiffSets changes =
txState.indexUpdatesForRangeSeekByPrefix( descriptor, predicate.prefix() );
changes = read.txState().indexUpdatesForRangeSeekByPrefix( descriptor, predicate.prefix() );
added = changes.augment( emptyIterator() );
removed = removed( txState, changes );
}
}

private void stringRangeQuery( IndexDescriptor descriptor, IndexQuery.StringRangePredicate predicate )
{
if ( read.hasTxStateWithChanges() )
{
TransactionState txState = read.txState();
PrimitiveLongReadableDiffSets changes = txState.indexUpdatesForRangeSeekByString(
changes = read.txState().indexUpdatesForRangeSeekByString(
descriptor, predicate.from(), predicate.fromInclusive(), predicate.to(),
predicate.toInclusive() );
added = changes.augment( emptyIterator() );
removed = removed( txState, changes );
}
}

private void numericRangeQuery( IndexDescriptor descriptor, IndexQuery.NumberRangePredicate predicate )
{
if ( read.hasTxStateWithChanges() )
{
TransactionState txState = read.txState();
PrimitiveLongReadableDiffSets changes = txState.indexUpdatesForRangeSeekByNumber(
changes = read.txState().indexUpdatesForRangeSeekByNumber(
descriptor, predicate.from(), predicate.fromInclusive(), predicate.to(),
predicate.toInclusive() );
added = changes.augment( emptyIterator() );
removed = removed( txState, changes );
added = changes.augment( PrimitiveLongCollections.emptyIterator() );
}
}

private void scanQuery( IndexDescriptor descriptor )
{
if ( read.hasTxStateWithChanges() )
{
TransactionState txState = read.txState();
PrimitiveLongReadableDiffSets changes = txState.indexUpdatesForScan( descriptor );
added = changes.augment( emptyIterator() );
removed = removed( txState, changes );
changes = read.txState().indexUpdatesForScan( descriptor );
added = changes.augment( PrimitiveLongCollections.emptyIterator() );
}
}

Expand All @@ -256,18 +250,10 @@ private void seekQuery( IndexDescriptor descriptor, IndexQuery[] query )
IndexQuery.ExactPredicate[] exactPreds = assertOnlyExactPredicates( query );
if ( read.hasTxStateWithChanges() )
{
TransactionState txState = read.txState();
PrimitiveLongReadableDiffSets changes = txState
changes = read.txState()
.indexUpdatesForSeek( descriptor, IndexQuery.asValueTuple( exactPreds ) );
added = changes.augment( emptyIterator() );
removed = removed( txState, changes );
added = changes
.augment( PrimitiveLongCollections.emptyIterator() );
}
}

private PrimitiveLongSet removed( TransactionState txState, PrimitiveLongReadableDiffSets changes )
{
PrimitiveLongSet longSet = asSet( txState.addedAndRemovedNodes().getRemoved() );
longSet.addAll( changes.getRemoved().iterator() );
return longSet;
}
}

0 comments on commit 72b61c0

Please sign in to comment.