@Override long compareNode( RelationshipRecord rel ) { return rel.getFirstNode(); }
@Override public long valueFrom( RelationshipRecord relationship ) { return relationship.getFirstNode(); }
@Override long compareNode( RelationshipRecord rel ) { return rel.getFirstNode(); }
@Override public long get( RelationshipRecord rel ) { return rel.getFirstNode(); } },
public RelationshipChainField fieldFor( long nodeId, RelationshipRecord rel ) { if ( rel.getFirstNode() == nodeId ) { return first; } else if ( rel.getSecondNode() == nodeId ) { return second; } throw new IllegalArgumentException( format( "%s does not reference node %d", rel, nodeId ) ); } }
private static RelationshipConnection relChain( RelationshipRecord rel, long nodeId ) { if ( rel.getFirstNode() == nodeId ) { return RelationshipConnection.START_NEXT; } if ( rel.getSecondNode() == nodeId ) { return RelationshipConnection.END_NEXT; } throw new RuntimeException( nodeId + " neither start not end node in " + rel ); } }
public static NodeField select( RelationshipRecord relationship, long nodeId ) { if ( relationship.getFirstNode() == nodeId ) { return SOURCE; } else if ( relationship.getSecondNode() == nodeId ) { return TARGET; } else { return null; } }
private RecordSet<RelationshipRecord> expandChains( RecordSet<RelationshipRecord> records, long otherNodeId ) { RecordSet<RelationshipRecord> chains = new RecordSet<>(); for ( RelationshipRecord record : records ) { chains.addAll( expandChainInBothDirections( record, record.getFirstNode() == otherNodeId ? record.getSecondNode() : record.getFirstNode() ) ); } return chains; }
static int relCount( long nodeId, RelationshipRecord rel ) { return (int) (nodeId == rel.getFirstNode() ? rel.getFirstPrevRel() : rel.getSecondPrevRel()); }
private boolean relIsFirstInChain( long nodeId, RelationshipRecord rel ) { return (nodeId == rel.getFirstNode() && rel.isFirstInFirstChain()) || (nodeId == rel.getSecondNode() && rel.isFirstInSecondChain()); } }
public static DirectionWrapper wrapDirection( RelationshipRecord rel, NodeRecord startNode ) { boolean isOut = rel.getFirstNode() == startNode.getId(); boolean isIn = rel.getSecondNode() == startNode.getId(); assert isOut | isIn; if ( isOut & isIn ) { return DirectionWrapper.BOTH; } return isOut ? DirectionWrapper.OUTGOING : DirectionWrapper.INCOMING; } }
@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 linkStart( RelationshipRecord record ) { long firstNextRel = cache.getAndPutRelationship( record.getFirstNode(), record.getType(), Direction.OUTGOING, record.getId(), true ); record.setFirstNextRel( firstNextRel ); }
@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 linkLoop( RelationshipRecord record ) { long firstNextRel = cache.getAndPutRelationship( record.getFirstNode(), record.getType(), BOTH, record.getId(), true ); record.setFirstNextRel( firstNextRel ); record.setSecondNextRel( firstNextRel ); } }
@Override public BatchRelationship getRelationshipById( long relId ) { RelationshipRecord record = getRelationshipRecord( relId ).forReadingData(); return batchRelationshipOf( relId, record.getType(), record.getFirstNode(), record.getSecondNode() ); }
private void setCorrectNextRel( NodeRecord node, RelationshipRecord rel, long nextRel ) { if ( node.getId() == rel.getFirstNode() ) { rel.setFirstNextRel( nextRel ); } if ( node.getId() == rel.getSecondNode() ) { rel.setSecondNextRel( nextRel ); } }
@Override public <EXCEPTION extends Exception> void relationshipVisit( long relationshipId, RelationshipVisitor<EXCEPTION> relationshipVisitor ) throws EntityNotFoundException, EXCEPTION { // TODO Please don't create a record for this, it's ridiculous RelationshipRecord record = relationshipStore.getRecord( relationshipId, relationshipStore.newRecord(), CHECK ); if ( !record.inUse() ) { throw new EntityNotFoundException( EntityType.RELATIONSHIP, relationshipId ); } relationshipVisitor.visit( relationshipId, record.getType(), record.getFirstNode(), record.getSecondNode() ); }
private static int manuallyCountRelationships( RecordChangeSet recordChangeSet, long nodeId, long firstRelId ) { int count = 0; long relId = firstRelId; while ( relId != Record.NO_NEXT_RELATIONSHIP.intValue() ) { count++; RelationshipRecord record = recordChangeSet.getRelRecords().getOrLoad( relId, null ).forReadingData(); relId = record.getFirstNode() == nodeId ? record.getFirstNextRel() : record.getSecondNextRel(); } return count; }
private static void breakTheChain( RecordStore<RelationshipRecord> relationshipStore ) { RelationshipRecord record = relationshipStore.getRecord( 10, relationshipStore.newRecord(), NORMAL ); long relationshipTowardsEndOfChain = record.getFirstNode(); while ( record.inUse() && !record.isFirstInFirstChain() ) { record = relationshipStore.getRecord( relationshipTowardsEndOfChain, relationshipStore.newRecord(), FORCE ); relationshipTowardsEndOfChain = record.getFirstPrevRel(); } relationshipStore.updateRecord( new RelationshipRecord( relationshipTowardsEndOfChain, 0, 0, 0 ) ); }