@Override public long valueFrom( NodeRecord record ) { return record.getLabelField(); }
@Override public long[] getIfLoaded() { return parseInlined( node.getLabelField() ); }
@Override public String toString() { return format( "Inline(0x%x:%s)", node.getLabelField(), Arrays.toString( getIfLoaded(/*it is*/ ) ) ); } }
public static long[] get( NodeRecord node ) { return parseInlined( node.getLabelField() ); }
@Override public void ensureHeavy( NodeRecord node ) { if ( NodeLabelsField.fieldPointsToDynamicRecordOfLabels( node.getLabelField() ) ) { ensureHeavy( node, NodeLabelsField.firstDynamicLabelRecordId( node.getLabelField() ) ); } }
@Override public String toString() { if ( node.isLight() ) { return format( "Dynamic(id:%d)", firstDynamicLabelRecordId( node.getLabelField() ) ); } return format( "Dynamic(id:%d,[%s])", firstDynamicLabelRecordId( node.getLabelField() ), Arrays.toString( getDynamicLabelsArrayFromHeavyRecords( node.getUsedDynamicLabelRecords() ) ) ); }
private static boolean mayResultInIndexUpdates( NodeCommand command ) { long before = command.getBefore().getLabelField(); long after = command.getAfter().getLabelField(); return before != after || // Because we don't know here, there may have been changes to a dynamic label record // even though it still points to the same one fieldPointsToDynamicRecordOfLabels( before ) || fieldPointsToDynamicRecordOfLabels( after ); }
@Override public Collection<DynamicRecord> add( long labelId, NodeStore nodeStore, DynamicRecordAllocator allocator ) { long[] augmentedLabelIds = labelCount( node.getLabelField() ) == 0 ? new long[]{labelId} : concatAndSort( parseInlined( node.getLabelField() ), labelId ); return putSorted( node, augmentedLabelIds, nodeStore, allocator ); }
public static long[] get( NodeRecord node, NodeStore nodeStore ) { return fieldPointsToDynamicRecordOfLabels( node.getLabelField() ) ? DynamicNodeLabels.get( node, nodeStore ) : InlineNodeLabels.get( node ); }
public void ensureHeavy( NodeRecord node, long firstDynamicLabelRecord ) { if ( !node.isLight() ) { return; } // Load any dynamic labels and populate the node record node.setLabelField( node.getLabelField(), dynamicLabelStore.getRecords( firstDynamicLabelRecord, RecordLoad.NORMAL ) ); }
public static NodeLabels parseLabelsField( NodeRecord node ) { long labelField = node.getLabelField(); return fieldPointsToDynamicRecordOfLabels( labelField ) ? new DynamicNodeLabels( node ) : new InlineNodeLabels( node ); }
@Override public Collection<DynamicRecord> remove( long labelId, NodeStore nodeStore ) { long[] newLabelIds = filter( parseInlined( node.getLabelField() ), labelId ); boolean inlined = tryInlineInNodeRecord( node, newLabelIds, node.getDynamicLabelRecords() ); assert inlined; return Collections.emptyList(); }
public static long[] get( NodeRecord node, NodeStore nodeStore ) { if ( node.isLight() ) { nodeStore.ensureHeavy( node, firstDynamicLabelRecordId( node.getLabelField() ) ); } return getDynamicLabelsArray( node.getUsedDynamicLabelRecords(), nodeStore.getDynamicLabelStore() ); }
@Test public void shouldReadNullDynamicRecordFromInlineLabelsField() { // GIVEN NodeRecord node = nodeRecordWithInlinedLabels( 23L ); // WHEN boolean isDynamicReference = NodeLabelsField.fieldPointsToDynamicRecordOfLabels( node.getLabelField() ); // THEN assertFalse( isDynamicReference ); }
@Test public void shouldReadIdOfDynamicRecordFromDynamicLabelsField() { // GIVEN NodeRecord node = nodeRecordWithDynamicLabels( nodeStore, oneByteLongs( 5 ) ); DynamicRecord dynamicRecord = node.getDynamicLabelRecords().iterator().next(); // WHEN long dynRecordId = NodeLabelsField.firstDynamicLabelRecordId( node.getLabelField() ); // THEN assertEquals( dynamicRecord.getId(), dynRecordId ); }
@Override public RecordKey<NodeRecord> node() { return ( written, read ) -> { assertEquals( written.getNextProp(), read.getNextProp() ); assertEquals( written.getNextRel(), read.getNextRel() ); assertEquals( written.getLabelField(), read.getLabelField() ); assertEquals( written.isDense(), read.isDense() ); }; }
@Test public void shouldInlineOneLabelWithHighId() { // GIVEN long labelId = 10000; NodeRecord node = nodeRecordWithInlinedLabels(); NodeLabels nodeLabels = NodeLabelsField.parseLabelsField( node ); // WHEN nodeLabels.add( labelId, null, null ); // THEN assertEquals( inlinedLabelsLongRepresentation( labelId ), node.getLabelField() ); }
@Test public void shouldInlineOneLabel() { // GIVEN long labelId = 10; NodeRecord node = nodeRecordWithInlinedLabels(); NodeLabels nodeLabels = NodeLabelsField.parseLabelsField( node ); // WHEN nodeLabels.add( labelId, null, null ); // THEN assertEquals( inlinedLabelsLongRepresentation( labelId ), node.getLabelField() ); }
private String diff( NodeRecord expected, NodeRecord actual ) { if ( actual.getId() == expected.getId() && actual.getNextRel() == expected.getNextRel() && actual.getLabelField() == expected.getLabelField() && actual.getNextProp() == expected.getNextProp() && actual.isDense() == expected.isDense() && actual.isLight() == expected.isLight() ) { return null; } return describeDiff( expected.toString(), actual.toString() ); }
@Test public void maximumOfSevenInlinedLabels() { // GIVEN long[] labels = new long[] {0, 1, 2, 3, 4, 5, 6}; NodeRecord node = nodeRecordWithInlinedLabels( labels ); NodeLabels nodeLabels = NodeLabelsField.parseLabelsField( node ); // WHEN Iterable<DynamicRecord> changedDynamicRecords = nodeLabels.add( 23, nodeStore, nodeStore.getDynamicLabelStore() ); // THEN assertEquals( dynamicLabelsLongRepresentation( changedDynamicRecords ), node.getLabelField() ); assertEquals( 1, Iterables.count( changedDynamicRecords ) ); }