private void VisitLabels(long nodeId, System.Action <long> visitor)
        {
            // This transaction state visitor doesn't have access to higher level cursors that combine store- and tx-state,
            // but however has access to the two individually, and so does this combining here directly.
            if (_txState.nodeIsDeletedInThisTx(nodeId))
            {
                return;
            }

            if (_txState.nodeIsAddedInThisTx(nodeId))
            {
                _txState.getNodeState(nodeId).labelDiffSets().Added.forEach(visitor.accept);
            }
            else
            {
                _nodeCursor.single(nodeId);
                if (_nodeCursor.next())
                {
                    long[]       labels    = _nodeCursor.labels();
                    LongDiffSets labelDiff = _txState.getNodeState(nodeId).labelDiffSets();
                    labelDiff.Added.forEach(visitor.accept);
                    foreach (long label in labels)
                    {
                        if (!labelDiff.IsRemoved(label))
                        {
                            visitor(label);
                        }
                    }
                }
            }
        }
        public override void Scan(IndexProgressor progressor, bool providesLabels, int label)
        {
            base.Initialize(progressor);
            if (_read.hasTxStateWithChanges())
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.storageengine.api.txstate.LongDiffSets changes = read.txState().nodesWithLabelChanged(label);
                LongDiffSets changes = _read.txState().nodesWithLabelChanged(label);
                _added   = changes.Augment(ImmutableEmptyLongIterator.INSTANCE);
                _removed = mergeToSet(_read.txState().addedAndRemovedNodes().Removed, changes.Removed);
            }
        }
Beispiel #3
0
        public override bool HasLabel(int label)
        {
            if (HasChanges())
            {
                TransactionState txState  = _read.txState();
                LongDiffSets     diffSets = txState.NodeStateLabelDiffSets(_storeCursor.entityReference());
                if (diffSets.Added.contains(label))
                {
                    return(true);
                }
                if (diffSets.Removed.contains(label))
                {
                    return(false);
                }
            }

            //Get labels from store and put in intSet, unfortunately we get longs back
            return(_storeCursor.hasLabel(label));
        }