@Override public NodeRecord answer( InvocationOnMock invocation ) { if ( ((Number) invocation.getArgument( 0 )).longValue() == 0L && invocation.getArgument( 1 ) == null && invocation.getArgument( 2 ) == null ) { return null; } NodeRecord record = invocation.getArgument( 1 ); record.setId( ((Number) invocation.getArgument( 0 )).longValue() ); record.setInUse( true ); record.setDense( dense ); record.setNextRel( nextRel ); record.setNextProp( nextProp ); return record; } }
@Override public void setNodeProperties( long node, Map<String, Object> properties ) { NodeRecord record = getNodeRecord( node ).forChangingData(); if ( record.getNextProp() != Record.NO_NEXT_PROPERTY.intValue() ) { propertyDeletor.deletePropertyChain( record, recordAccess.getPropertyRecords() ); } record.setNextProp( propertyCreator.createPropertyChain( record, propertiesIterator( properties ), recordAccess.getPropertyRecords() ) ); flushStrategy.flush(); }
private long internalCreateNode( long nodeId, Map<String, Object> properties, Label... labels ) { NodeRecord nodeRecord = recordAccess.getNodeRecords().create( nodeId, null ).forChangingData(); nodeRecord.setInUse( true ); nodeRecord.setCreated(); nodeRecord.setNextProp( propertyCreator.createPropertyChain( nodeRecord, propertiesIterator( properties ), recordAccess.getPropertyRecords() ) ); if ( labels.length > 0 ) { setNodeLabels( nodeRecord, labels ); } flushStrategy.flush(); return nodeId; }
@Override public void endOfEntity() { // Make sure we have an ID if ( nodeRecord.getId() == NULL_REFERENCE.longValue() ) { nodeRecord.setId( nodeIds.next() ); } // Compose the labels if ( !hasLabelField ) { long[] labelIds = labelTokenRepository.getOrCreateIds( labels, labelsCursor ); InlineNodeLabels.putSorted( nodeRecord, labelIds, null, nodeStore.getDynamicLabelStore() ); } labelsCursor = 0; // Write data to stores nodeRecord.setNextProp( createAndWritePropertyChain() ); nodeRecord.setInUse( true ); nodeStore.updateRecord( nodeRecord ); nodeCount++; nodeRecord.clear(); nodeRecord.setId( NULL_REFERENCE.longValue() ); hasLabelField = false; super.endOfEntity(); }
private void existingChain( ExpectedRecord... initialRecords ) { PropertyRecord prev = null; for ( ExpectedRecord initialRecord : initialRecords ) { PropertyRecord record = this.records.create( propertyStore.nextId(), primitive.record ).forChangingData(); record.setInUse( true ); existingRecord( record, initialRecord ); if ( prev == null ) { // This is the first one, update primitive to point to this primitive.record.setNextProp( record.getId() ); } else { // link property records together record.setPrevProp( prev.getId() ); prev.setNextProp( record.getId() ); } prev = record; } }
private Ids createNode( DataImporter.Monitor monitor, NeoStores neoStores, int propertyCount, int labelCount ) { PropertyStore propertyStore = neoStores.getPropertyStore(); RecordAccess<PropertyRecord,PrimitiveRecord> propertyRecordAccess = new DirectRecordAccess<>( propertyStore, new Loaders( neoStores ).propertyLoader() ); NodeStore nodeStore = neoStores.getNodeStore(); NodeRecord nodeRecord = nodeStore.newRecord(); nodeRecord.setId( nodeStore.nextId() ); nodeRecord.setInUse( true ); NodeLabelsField.parseLabelsField( nodeRecord ).put( labelIds( labelCount ), nodeStore, nodeStore.getDynamicLabelStore() ); long nextProp = new PropertyCreator( propertyStore, new PropertyTraverser() ) .createPropertyChain( nodeRecord, properties( propertyStore, propertyCount ), propertyRecordAccess ); nodeRecord.setNextProp( nextProp ); nodeStore.updateRecord( nodeRecord ); PropertyRecord[] propertyRecords = extractPropertyRecords( propertyRecordAccess, nextProp ); propertyRecordAccess.close(); monitor.nodesImported( 1 ); monitor.propertiesImported( propertyCount ); return new Ids( nodeRecord, propertyRecords ); }
record = stores.getNodeStore().getRecord( nodeId, record, RecordLoad.NORMAL ); long propId = record.getNextProp(); record.setNextProp( AbstractBaseRecord.NO_ID ); stores.getNodeStore().updateRecord( record ); PropertyRecord propRecord = stores.getPropertyStore().getRecord( propId, stores.getPropertyStore().newRecord(), RecordLoad.NORMAL );
@Override public void setNodeProperties( long node, Map<String, Object> properties ) { NodeRecord record = getNodeRecord( node ).forChangingData(); if ( record.getNextProp() != Record.NO_NEXT_PROPERTY.intValue() ) { propertyDeletor.deletePropertyChain( record, recordAccess.getPropertyRecords() ); } record.setNextProp( propertyCreator.createPropertyChain( record, propertiesIterator( properties ), recordAccess.getPropertyRecords() ) ); flushStrategy.flush(); }
private long internalCreateNode( long nodeId, Map<String, Object> properties, Label... labels ) { NodeRecord nodeRecord = recordAccess.getNodeRecords().create( nodeId, null ).forChangingData(); nodeRecord.setInUse( true ); nodeRecord.setCreated(); nodeRecord.setNextProp( propertyCreator.createPropertyChain( nodeRecord, propertiesIterator( properties ), recordAccess.getPropertyRecords() ) ); if ( labels.length > 0 ) { setNodeLabels( nodeRecord, labels ); } flushStrategy.flush(); return nodeId; }
@Override public void endOfEntity() { // Make sure we have an ID if ( nodeRecord.getId() == NULL_REFERENCE.longValue() ) { nodeRecord.setId( nodeIds.next() ); } // Compose the labels if ( !hasLabelField ) { long[] labelIds = labelTokenRepository.getOrCreateIds( labels, labelsCursor ); InlineNodeLabels.putSorted( nodeRecord, labelIds, null, nodeStore.getDynamicLabelStore() ); } labelsCursor = 0; // Write data to stores nodeRecord.setNextProp( createAndWritePropertyChain() ); nodeRecord.setInUse( true ); nodeStore.updateRecord( nodeRecord ); nodeCount++; nodeRecord.clear(); nodeRecord.setId( NULL_REFERENCE.longValue() ); hasLabelField = false; super.endOfEntity(); }
@Test public void shouldNotReportMissingPropertyForDeletedNodeWithProperty() { // given PropertyRecord oldProperty = add( inUse( new PropertyRecord( 10 ) ) ); NodeRecord oldNode = add( inUse( new NodeRecord( 20, false, 0, 0 ) ) ); oldProperty.setNodeId( oldNode.getId() ); oldNode.setNextProp( oldProperty.getId() ); PropertyRecord newProperty = add( notInUse( new PropertyRecord( 10 ) ) ); NodeRecord newNode = add( notInUse( new NodeRecord( 20, false, 0, 0 ) ) ); newProperty.setNodeId( newNode.getId() ); newNode.setNextProp( newProperty.getId() ); // when ConsistencyReport.PropertyConsistencyReport report = checkChange( oldProperty, newProperty ); // then verifyNoMoreInteractions( report ); }