buf.append( "Property[" ).append( getId() ).append( ",used=" ).append( inUse() ).append( ",prev=" ).append( prevProp ).append( ",next=" ).append( nextProp );
@Override public Object apply( long nodeId ) { propertyStore.getRecord( nodeId, propertyRecord, CHECK ); if ( !propertyRecord.inUse() ) { return null; } return propertyRecord.iterator().next().newPropertyValue( propertyStore ).asObject(); } }
@Override public void check( PropertyRecord record, CheckerEngine<PropertyRecord, ConsistencyReport.PropertyConsistencyReport> engine, RecordAccess records ) { if ( !record.inUse() ) { return; } for ( PropertyField field : PropertyField.values() ) { field.checkConsistency( record, engine, records ); } for ( PropertyBlock block : record ) { checkDataBlock( block, engine, records ); } }
assert propRecord.inUse() : primitive + "->" + Arrays.toString( toCheck.toArray() ); assert propRecord.size() <= PropertyType.getPayloadSize() : propRecord + " size " + propRecord.size();
@Override public PropertyRecord clone() { PropertyRecord result = (PropertyRecord) new PropertyRecord( getId() ).initialize( inUse() ); result.nextProp = nextProp; result.prevProp = prevProp; result.entityId = entityId; result.entityType = entityType; System.arraycopy( blocks, 0, result.blocks, 0, blocks.length ); result.blocksCursor = blocksCursor; for ( int i = 0; i < blockRecordsCursor; i++ ) { result.blockRecords[i] = blockRecords[i].clone(); } result.blockRecordsCursor = blockRecordsCursor; result.blocksLoaded = blocksLoaded; if ( deletedRecords != null ) { for ( DynamicRecord deletedRecord : deletedRecords ) { result.addDeletedRecord( deletedRecord.clone() ); } } return result; }
private void updatePropertyBlocks( PropertyRecord record ) { if ( record.inUse() ) { // Go through the blocks for ( PropertyBlock block : record ) { /* * For each block we need to update its dynamic record chain if * it is just created. Deleted dynamic records are in the property * record and dynamic records are never modified. Also, they are * assigned as a whole, so just checking the first should be enough. */ if ( !block.isLight() && block.getValueRecords().get( 0 ).isCreated() ) { updateDynamicRecords( block.getValueRecords() ); } } } updateDynamicRecords( record.getDeletedRecords() ); }
@Override public void checkReference( PropertyRecord record, PropertyRecord referred, CheckerEngine<PropertyRecord, ConsistencyReport.PropertyConsistencyReport> engine, RecordAccess records ) { if ( !referred.inUse() ) { notInUse( engine.report(), referred ); } else { if ( otherReference( referred ) != record.getId() ) { noBackReference( engine.report(), referred ); } } }
private void checkChainItem( PropertyRecord property, CheckerEngine<RECORD,REPORT> engine, MutableIntSet keys, MandatoryProperties.Check<RECORD,REPORT> mandatory ) { if ( !property.inUse() ) { engine.report().propertyNotInUse( property ); } else { int[] keysInRecord = ChainCheck.keys( property ); if ( mandatory != null ) { mandatory.receive( keysInRecord ); } for ( int key : keysInRecord ) { if ( !keys.add( key ) ) { engine.report().propertyKeyNotUniqueInChain(); } } } }
@Override public void checkReference( RECORD record, PropertyRecord property, CheckerEngine<RECORD, REPORT> engine, RecordAccess records ) { if ( !property.inUse() ) { engine.report().propertyNotInUse( property ); } else { if ( !Record.NO_PREVIOUS_PROPERTY.is( property.getPrevProp() ) ) { engine.report().propertyNotFirstInChain( property ); } new ChainCheck<RECORD, REPORT>().checkReference( record, property, engine, records ); } } }
for ( PropertyRecord property : props ) if ( !property.inUse() )
if ( record.inUse() )
propertyRecords.getOrLoad( propertyId, primitive ); PropertyRecord propRecord = recordChange.forChangingData(); if ( !propRecord.inUse() )
@Override public void checkReference( PropertyRecord record, PropertyRecord property, CheckerEngine<PropertyRecord, ConsistencyReport.PropertyConsistencyReport> engine, RecordAccess records ) { if ( record.getId() != property.getId() ) { if ( !property.inUse() || Record.NO_NEXT_PROPERTY.is( property.getNextProp() ) ) { wrongOwner( engine.report() ); } else if ( property.getNextProp() != record.getId() ) { engine.comparativeCheck( property( records, property.getNextProp() ), this ); } } }
@Test public void shouldCreateProperBeforeAndAfterPropertyCommandsWhenAddingProperty() throws Exception { // GIVEN NeoStores neoStores = neoStoresRule.builder().build(); TransactionRecordState recordState = newTransactionRecordState( neoStores ); int nodeId = 1; recordState.nodeCreate( nodeId ); // WHEN recordState.nodeAddProperty( nodeId, propertyId1, value1 ); Collection<StorageCommand> commands = new ArrayList<>(); recordState.extractCommands( commands ); PropertyCommand propertyCommand = singlePropertyCommand( commands ); // THEN PropertyRecord before = propertyCommand.getBefore(); assertFalse( before.inUse() ); assertFalse( before.iterator().hasNext() ); PropertyRecord after = propertyCommand.getAfter(); assertTrue( after.inUse() ); assertEquals( 1, count( after ) ); }
assertFalse( recordBeforeWrite.inUse() ); return null; } ).when( stringPropertyStore ).updateRecord( dynamicRecord );
private static long calculateNumberOfProperties( NeoStores stores ) { long count = 0; PropertyRecord record = stores.getPropertyStore().newRecord(); try ( PageCursor cursor = stores.getPropertyStore().openPageCursorForReading( 0 ) ) { long highId = stores.getPropertyStore().getHighId(); for ( long id = 0; id < highId; id++ ) { stores.getPropertyStore().getRecordByCursor( id, record, CHECK, cursor ); if ( record.inUse() ) { count += count( record ); } } } return count; }
@Override public void write( PropertyRecord record, PageCursor cursor, int recordSize ) if ( record.inUse() )
assert propertyRecord.inUse() : propertyRecord + " for " + nodeRecord; propertyStore.ensureHeavy( propertyRecord ); propertiesRemoved += propertyRecord.numberOfProperties();
private void writePropertyRecord( WritableChannel channel, PropertyRecord record ) throws IOException byte flags = bitFlags( bitFlag( record.inUse(), Record.IN_USE.byteValue() ), bitFlag( record.getRelId() != -1, Record.REL_PROPERTY.byteValue() ), bitFlag( record.requiresSecondaryUnit(), Record.REQUIRE_SECONDARY_UNIT ),