OwningRelationship( RelationshipRecord record ) { this.id = record.getId(); }
void incoming( RelationshipRecord edge ) { if ( incoming == null ) { firstIn = edge.getId(); } incoming = new Record( edge, incoming ); incomingCount++; }
void loop( RelationshipRecord edge ) { if ( loops == null ) { firstLoop = edge.getId(); } loops = new Record( edge, loops ); loopsCount++; }
void outgoing( RelationshipRecord edge ) { if ( outgoing == null ) { firstOut = edge.getId(); } outgoing = new Record( edge, outgoing ); outgoingCount++; }
@Override public void setIdTo( PropertyRecord property ) { property.setRelId( getId() ); }
@Override protected void linkStart( RelationshipRecord record ) { long firstNextRel = cache.getAndPutRelationship( record.getFirstNode(), record.getType(), Direction.OUTGOING, record.getId(), true ); record.setFirstNextRel( firstNextRel ); }
@Override public void serialize( WritableChannel channel ) throws IOException { channel.put( NeoCommandType.REL_COMMAND ); channel.putLong( after.getId() ); writeRelationshipRecord( channel, before ); writeRelationshipRecord( channel, after ); }
@Override protected void linkEnd( RelationshipRecord record ) { long secondNextRel = cache.getAndPutRelationship( record.getSecondNode(), record.getType(), Direction.INCOMING, record.getId(), true ); record.setSecondNextRel( secondNextRel ); }
@Override public RelationshipRecord clone() { RelationshipRecord record = new RelationshipRecord( getId() ).initialize( inUse(), nextProp, firstNode, secondNode, type, firstPrevRel, firstNextRel, secondPrevRel, secondNextRel, firstInFirstChain, firstInSecondChain ); record.setSecondaryUnitId( getSecondaryUnitId() ); return record; }
@Override protected void linkLoop( RelationshipRecord record ) { long firstNextRel = cache.getAndPutRelationship( record.getFirstNode(), record.getType(), BOTH, record.getId(), true ); record.setFirstNextRel( firstNextRel ); record.setSecondNextRel( firstNextRel ); } }
public void delete( RelationshipRecord record ) { record.setInUse( false ); add( record, new RelationshipRecord( record.getId() ) ); }
public void create( RelationshipRecord record ) { record.setCreated(); update( new RelationshipRecord( record.getId() ), record ); }
@Override protected void linkStart( RelationshipRecord record ) { int typeId = record.getType(); long firstPrevRel = cache.getAndPutRelationship( record.getFirstNode(), typeId, Direction.OUTGOING, record.getId(), false ); if ( firstPrevRel == ID_NOT_FOUND ) { // First one record.setFirstInFirstChain( true ); firstPrevRel = cache.getCount( record.getFirstNode(), typeId, Direction.OUTGOING ); } record.setFirstPrevRel( firstPrevRel ); }
@Override protected void linkEnd( RelationshipRecord record ) { int typeId = record.getType(); long secondPrevRel = cache.getAndPutRelationship( record.getSecondNode(), typeId, Direction.INCOMING, record.getId(), false ); if ( secondPrevRel == ID_NOT_FOUND ) { // First one record.setFirstInSecondChain( true ); secondPrevRel = cache.getCount( record.getSecondNode(), typeId, Direction.INCOMING ); } record.setSecondPrevRel( secondPrevRel ); }
private void connectRelationshipToDenseNode( NodeRecord node, RelationshipRecord rel, RecordAccess<RelationshipRecord, Void> relRecords, RecordAccess<RelationshipGroupRecord, Integer> relGroupRecords, ResourceLocker locks ) { RelationshipGroupRecord group = relGroupGetter.getOrCreateRelationshipGroup( node, rel.getType(), relGroupRecords ).forChangingData(); DirectionWrapper dir = DirectionIdentifier.wrapDirection( rel, node ); long nextRel = dir.getNextRel( group ); setCorrectNextRel( node, rel, nextRel ); connect( node.getId(), nextRel, rel, relRecords, locks ); dir.setNextRel( group, rel.getId() ); }
@Override protected void linkLoop( RelationshipRecord record ) { int typeId = record.getType(); long prevRel = cache.getAndPutRelationship( record.getFirstNode(), typeId, Direction.BOTH, record.getId(), false ); if ( prevRel == ID_NOT_FOUND ) { // First one record.setFirstInFirstChain( true ); record.setFirstInSecondChain( true ); prevRel = cache.getCount( record.getFirstNode(), typeId, Direction.BOTH ); } record.setFirstPrevRel( prevRel ); record.setSecondPrevRel( prevRel ); } }
@Override protected void checkRelationship( RecordStore<RelationshipRecord> store, RelationshipRecord rel, RecordCheck<RelationshipRecord,ConsistencyReport.RelationshipConsistencyReport> checker ) { if ( stage != null && (stage == CheckStage.Stage6_RS_Forward || stage == CheckStage.Stage7_RS_Backward) ) { long id = rel.getId(); CacheAccess.Client client = cacheAccess.client(); countLinks( id, rel.getFirstNextRel(), client ); countLinks( id, rel.getFirstPrevRel(), client ); countLinks( id, rel.getSecondNextRel(), client ); countLinks( id, rel.getSecondPrevRel(), client ); } report.forRelationship( rel, checker ); }
@Test void shouldReportTargetNextReferencingOtherNodes() { // given RelationshipRecord relationship = inUse( new RelationshipRecord( 42, 1, 2, 4 ) ); add( inUse( new RelationshipTypeTokenRecord( 4 ) ) ); add( inUse( new NodeRecord( 1, false, 42, NONE ) ) ); add( inUse( new NodeRecord( 2, false, 42, NONE ) ) ); RelationshipRecord tNext = add( inUse( new RelationshipRecord( 51, 8, 9, 0 ) ) ); relationship.setSecondNextRel( tNext.getId() ); // when RelationshipConsistencyReport report = check( relationship ); // then verify( report ).targetNextReferencesOtherNodes( tNext ); verifyNoMoreInteractions( report ); }
@Test void shouldReportTargetNextReferencingOtherNodesWhenReferencingSourceNode() { // given RelationshipRecord relationship = inUse( new RelationshipRecord( 42, 1, 2, 4 ) ); add( inUse( new RelationshipTypeTokenRecord( 4 ) ) ); add( inUse( new NodeRecord( 1, false, 42, NONE ) ) ); add( inUse( new NodeRecord( 2, false, 42, NONE ) ) ); RelationshipRecord tNext = add( inUse( new RelationshipRecord( 51, 1, 0, 0 ) ) ); relationship.setSecondNextRel( tNext.getId() ); // when RelationshipConsistencyReport report = check( relationship ); // then verify( report ).targetNextReferencesOtherNodes( tNext ); verifyNoMoreInteractions( report ); }