Beispiel #1
0
        private void RemoveDocumentReference(global::Voron.Trees.IIterator iterator, Action afterDocumentReferenceRemove = null)
        {
            var documentReferencesByKey        = tableStorage.DocumentReferences.GetIndex(Tables.DocumentReferences.Indices.ByKey);
            var documentReferencesByRef        = tableStorage.DocumentReferences.GetIndex(Tables.DocumentReferences.Indices.ByRef);
            var documentReferencesByView       = tableStorage.DocumentReferences.GetIndex(Tables.DocumentReferences.Indices.ByView);
            var documentReferencesByViewAndKey = tableStorage.DocumentReferences.GetIndex(Tables.DocumentReferences.Indices.ByViewAndKey);

            do
            {
                // TODO: Check if we can avoid the clone.
                var id = iterator.CurrentKey.Clone();

                ushort version;
                var    value     = LoadStruct(tableStorage.DocumentReferences, id, writeBatch.Value, out version);
                var    reference = value.ReadString(DocumentReferencesFields.Reference);
                var    view      = value.ReadInt(DocumentReferencesFields.IndexId).ToString(CultureInfo.InvariantCulture);
                var    key       = value.ReadString(DocumentReferencesFields.Key);

                var viewKey = CreateKey(view);

                tableStorage.DocumentReferences.Delete(writeBatch.Value, id);
                documentReferencesByKey.MultiDelete(writeBatch.Value, (Slice)CreateKey(key), id);
                documentReferencesByRef.MultiDelete(writeBatch.Value, (Slice)CreateKey(reference), id);
                documentReferencesByView.MultiDelete(writeBatch.Value, (Slice)viewKey, id);
                documentReferencesByViewAndKey.MultiDelete(writeBatch.Value, (Slice)AppendToKey(viewKey, key), id);

                if (afterDocumentReferenceRemove != null)
                {
                    afterDocumentReferenceRemove();
                }
            }while (iterator.MoveNext());
        }
Beispiel #2
0
        private static string GetKeyFromCurrent(global::Voron.Trees.IIterator iterator)
        {
            string key;

            using (var currentDataStream = iterator.CreateReaderForCurrent().AsStream())
            {
                var keyBytes = currentDataStream.ReadData();
                key = Encoding.UTF8.GetString(keyBytes);
            }
            return(key);
        }