void StoreDescriptor(ITypeDescriptor descriptor, AbstractBufferedWriter writer) { if (descriptor is ListTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.List); } else if (descriptor is DictionaryTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Dictionary); } else if (descriptor is ObjectTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Class); } else if (descriptor is EnumTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Enum); } else { throw new ArgumentOutOfRangeException(); } ((IPersistTypeDescriptor)descriptor).Persist(writer, (w, d) => { SerializerTypeInfo result; if (!_typeOrDescriptor2Info.TryGetValue(d, out result)) { if (!_typeOrDescriptor2InfoNew.TryGetValue(d, out result)) { throw new BTDBException("Invalid state unknown descriptor " + d.Name); } } w.WriteVInt32(result.Id); }); }
public void StoreDescriptor(ITypeDescriptor descriptor, AbstractBufferedWriter writer, Func <ITypeDescriptor, uint> descriptor2Id) { if (descriptor is ListTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.List); } else if (descriptor is DictionaryTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Dictionary); } else if (descriptor is ObjectTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Class); } else if (descriptor is EnumTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Enum); } else if (descriptor is NullableTypeDescriptor) { writer.WriteUInt8((byte)TypeCategory.Nullable); } else { throw new ArgumentOutOfRangeException(); } var p = descriptor as IPersistTypeDescriptor; p.Persist(writer, (w, d) => w.WriteVUInt32(descriptor2Id(d))); }
internal void WriteHeader(AbstractBufferedWriter writer) { FileCollectionWithFileInfos.WriteHeader(writer, _guid); writer.WriteUInt8((byte)KVFileType.ModernKeyIndex); writer.WriteVInt64(_generation); writer.WriteVUInt32(_trLogFileId); writer.WriteVUInt32(_trLogOffset); writer.WriteVUInt64((ulong)_keyValueCount); writer.WriteVUInt64(_commitUlong); writer.WriteUInt8((byte)_compressionType); }
public void Dispose() { lock (_log) { _log.WriteUInt8((byte)KVReplayOperation.KeyValueDBDispose); _log.FlushBuffer(); } var disposableLog = _log as IDisposable; if (disposableLog != null) { disposableLog.Dispose(); } _db.Dispose(); }
internal void WriteHeader(AbstractBufferedWriter writer) { FileCollectionWithFileInfos.WriteHeader(writer, _guid); writer.WriteUInt8((byte)KVFileType.TransactionLog); writer.WriteVInt64(_generation); writer.WriteVInt32((int)_previousFileId); }
public void WriteHeader(AbstractBufferedWriter writer) { FileCollectionWithFileInfos.WriteHeader(writer, _guid); writer.WriteUInt8((byte)KVFileType.PureValuesWithId); writer.WriteVInt64(_subId); writer.WriteVInt64(_generation); }
internal void WriteHeader(AbstractBufferedWriter writer) { writer.WriteByteArrayRaw(DiskChunkCache.MagicStartOfFile); writer.WriteUInt8((byte)DiskChunkFileType.HashIndex); writer.WriteVInt64(_generation); writer.WriteVUInt32((uint)KeySize); writer.WriteVUInt64((ulong)KeyValueCount); }
internal void WriteHeader(AbstractBufferedWriter writer) { FileCollectionWithFileInfos.WriteHeader(writer, _guid); writer.WriteUInt8((byte)KVFileType.HashKeyIndex); writer.WriteVInt64(_subId); writer.WriteVInt64(_generation); writer.WriteVUInt32(_keyLen); }
internal void WriteHeader(AbstractBufferedWriter writer) { FileCollectionWithFileInfos.WriteHeader(writer, _guid); writer.WriteUInt8((byte)KVFileType.ModernKeyIndexWithUlongs); writer.WriteVInt64(_generation); writer.WriteVUInt32(_trLogFileId); writer.WriteVUInt32(_trLogOffset); writer.WriteVUInt64((ulong)_keyValueCount); writer.WriteVUInt64(_commitUlong); writer.WriteUInt8((byte)_compressionType); var ulongCount = (uint)(_ulongs?.Length ?? 0); writer.WriteVUInt32(ulongCount); if (ulongCount > 0) { for (var i = 0; i < ulongCount; i++) { writer.WriteVUInt64(_ulongs ![i]);
public void StoreObject(object obj) { if (obj == null) { _writer.WriteUInt8(0); return; } uint backRefId; if (_backrefs.TryGetValue(obj, out backRefId)) { _writer.WriteUInt8(1); _writer.WriteVUInt32(backRefId); return; } _backrefs.Add(obj, (uint)_backrefs.Count); TypeSerializers typeSerializers; var infoForType = _mapping.GetInfoFromObject(obj, out typeSerializers); _writer.WriteVUInt32((uint)infoForType.Id); if (!infoForType.KnownSimpleSaver) { infoForType.SimpleSaver = typeSerializers.GetSimpleSaver(infoForType.Descriptor); infoForType.KnownSimpleSaver = true; } var simpleSaver = infoForType.SimpleSaver; if (simpleSaver != null) { simpleSaver(_writer, obj); return; } if (!infoForType.KnownComplexSaver) { infoForType.ComplexSaver = typeSerializers.GetComplexSaver(infoForType.Descriptor); infoForType.KnownComplexSaver = true; } var complexSaver = infoForType.ComplexSaver; complexSaver(_writer, this, obj); }
public void StoreObject(AbstractBufferedWriter writer, object obj) { if (obj == null) { writer.WriteUInt8(0); return; } TypeSerializers typeSerializers; var infoForType = GetInfoFromObject(obj, out typeSerializers); StoreObjectCore(typeSerializers, writer, obj, infoForType, this); }
public void FinishNewDescriptors(AbstractBufferedWriter writer) { if (SomeTypeStored) { for (int i = _id2InfoMap.Count - 1; i >= 0; i--) { writer.WriteVUInt32((uint)(i + _typeSerializersMapping._id2DescriptorMap.Count)); _typeSerializers.StoreDescriptor(_id2InfoMap[i].Descriptor, writer, Descriptor2Id); } writer.WriteUInt8(0); } }
public void Dispose() { _compactorScheduler?.RemoveCompactAction(_compactFunc); lock (_writeLock) { if (_writingTransaction != null) { throw new BTDBException("Cannot dispose KeyValueDB when writting transaction still running"); } while (_writeWaitingQueue.Count > 0) { _writeWaitingQueue.Dequeue().TrySetCanceled(); } } if (_writerWithTransactionLog != null) { _writerWithTransactionLog.WriteUInt8((byte)KVCommandType.TemporaryEndOfFile); _writerWithTransactionLog.FlushBuffer(); _fileWithTransactionLog.HardFlush(); _fileWithTransactionLog.Truncate(); } }
void LogSimpleOperation(KVReplayOperation operation) { lock (_log) { _log.WriteUInt8((byte)operation); _log.WriteVUInt32(TrIndex); _log.FlushBuffer(); } }
public void WriteHeader(AbstractBufferedWriter writer) { writer.WriteByteArrayRaw(DiskChunkCache.MagicStartOfFile); writer.WriteUInt8((byte)DiskChunkFileType.PureValues); writer.WriteVInt64(_generation); }
public void WriteRelationSKPrefix(AbstractBufferedWriter writer, uint secondaryKeyIndex) { writer.WriteBlock(_relationInfo.PrefixSecondary); writer.WriteUInt8((byte)secondaryKeyIndex); }