Utf16Utf8Dictionary
for fast searching by string in UTF-16 and UTF-8. DerivedUtf16Utf8Dictionary
for fast searching by string in UTF-16 and UTF-8 from parent dictionary with attached another values.
Compactor was rewritten to be async. Also it gives more time to writing transactions to run during its running. Frequency of big compactions is reduced because condition now takes in account also maximum waste per file and the condition for total waste was 4 times increased.
Upsert with changing secondary key during enumeration by same secondary key. Correctly continue enumeration after such change.
Enumerator MoveNext return always false after end of iteration.
RemoveById with relations with secondary indexes didn't work correctly.
Disposing DB when there are still some transactions now throws BTDBException.
- Position setter in IOrderedDictionaryEnumerator was returned to behaviour before 33.0.0.
Constraint Enumerator could be not correctly iterated multiple times. Now really fixed.
Constraint Enumerator could be not correctly iterated multiple times.
Cursor leak. And another bug in BTree Cursor.
Long time bug in FindLastWithPrefix in InMemoryKeyValueDB.
Workaround crash in ExtractPropertyFromGetter in source generator.
Support of nameof expression in name of SecondaryKey in Relation.
Regression in Source Generator for Relations.
.Net 9.0 support. Cursors in KeyValueDB. Parallel enumeration and modification of DB in ObjectDB. Optimizations in ScanBy and GatherBy.
Major version bump, read README.md for more info.
Add support for skipping unknown types and logging when it happens in ObjectDB transactions. See test CanRemoveClassWhenPropertyExistsWithAutoSkipUnknownTypes
for example.
Serialization of boxed enums in Layer1 and Layer2. It stay unsupported for ObjectDB.
Logging of reason why kvi is unusable.
Constraint find could use exception flow making it slower than necessary.
Corruption of DB in rare cases with compaction and lazy flushing data.
Allowed to serialize to EventLayer relations with computed fields.
SeqLock is even faster.
Make SourceGenerator code valid :D
Support for PersistedName in Metadata generated by SourceGenerator.
Iterating over Relation with computed fields.
BonSerializer knows how to serialize Type
. Only simple types and registered types are supported.
record
support in ObjectDB. Also added validations for missing getters and setters in ObjectDB.
New KeyValueDBOptions.AutoAdjustFileSize which allows to automatically adjust split size for DB to be in range of 16MB up to 1GB. FileSplitSize does not need to be set as it is ignored when AutoAdjustFileSize is true.
Dictionary should support ReadOnlyMemory<byte>
as value.
New option in EventLayer and EventLayer2 to forbid serialization of lazy DB objects like IDictionary<,>
Excluded
in start of range in ListBy
when it is not last property of key now works correctly.
Compaction does not need so much free space anymore.
RemoveById rare random crash in tables with multiple secondary indexes, and value which fits to 7 bytes.
Relations support for computed fields.
Default Conversion Generator was not thread safe.
for .Net SDK 8.0.300
RelationInfo.Prefix is now public.
Constraint String ExactCaseInsensitive.
Restore some IOC behavior from 31.x: ResolveOptionalKeyedIEnumerableShouldReturnNullForNothingRegistered
Check type validity for serialization also in release build.
Better exceptions in some cases.
Better exceptions in some cases.
Critical bug in Brotli decompression MemReader.
Fixed false positive report in ReportTypeIncompatibility.
IOC Transient in Singleton verification works correctly for Func dependencies.
IOC skipping copy constructor. SourceGenerator: support for [Generate] on records.
IOC ResolveOptionalKeyed should not fallback to keyless registration.
Allow to use [GenerateFor(...)]
on interfaces.
IOC: Obsolete is ignored. Required fields not make it not compilable. Protected classes are skipped in generation.
IOC and Singletons are now much faster and correct in complex cases.
IOC: Func and delegates didn't worked in some cases.
IOC: Lazy has now correct type (not just always Lazy)
Multiple partial classes in IOC. Generated one class from BTDB, so it could be used in IOC.
SourceGenerator: one more place where global:: is needed. And it must ignore static fields and properties.
New ContainerBuilder method RegisterTypeWithFallback
which allows to register type with fallback to invokers if type is not generated (useful for generic types for now).
IOC Default parameters for constructors are now correctly generated. Skip generic classes in generation.
IOC RegisterTypeWithConstructorParameters which uses reflection to use different constructor than with most parameters. IOC Also by default does not fallback to Reflection. Bon has Span based api and is faster.
Source Generator nuget package is now correctly published.
Constraint.Exact<T>(T value)
for bool, string, DateTime, (un)signed, Enum, Guid including nullable form.
Constraint<T>.Any
for bool, string, DateTime, (un)signed, Enum, Guid including nullable form.
Constraint.DateTime.Range
faster than Predicate.
Random rare corruption of DB when using InKeyValue.
Contraint.Exact for Guids.
Exception message for impossible state.
Detection of NeedFreeContent was too pessimistic for some cases making some methods slower.
IOC does not use Runtime IL code generation, but SourceGenerator. Some features were lost, some features could be sill added back if there will be demand. Assembly scanning was changed most. And all resolvable classes had to be marked by [Generate]
attribute on itself or any parent classes or interfaces.
It does allow to use IOC in AOT builds. More features will follow.
Fixed StackOverflowException in NeedFreeContent detection.
Last 2 versions reverted and NeedFreeContent detection is now using different approach.
"I" prefixes are now removed only on first level of generic types.
Prefixed RemoveById now correctly works with OnBeforeRemove.
Fix crash in ReadStringInUtf8
Automatic conversion from Nullable to its underlying value.
Upgrading to nullable property in secondary key.
Now "ById" methods should really work.
InKeyValues should not be required in most "ById" methods.
Validation that InKeyValues must be after all PrimaryKeys.
Regression ShallowUpdate when value is complex.
New more succinct way to declare InKeyValue.
Bug in ReadOnlySequenceSpanReader.ReadBlock.
Huge feature in relations InKeyValue allowing optimize modification and search of small number of fields into Primary Key. Documentation will come in future commit.
OnBeforeRemove
attribute to help to implement foreign keys prevent removal or cascading delete.
Now DB trl files are never resized, so method SetSize
is never used now and its implementation does not matter.
Speed of Compactor scanning all used files.
Async versions of DB Import and Export.
XXHash64 implementation, very fast noncryptographic hash. Fletcher checksum slightly optimized.
Change type of db field from enum to nullable enum does not report upgrade incompatibility.
ReadString and SkipString could rarely randomly crash. (had pointer instead of managed reference without pinning buffer)
BonBuilder.builder.EstimateLowerBoundSize()
method.
IOC: Lazy Singletons were not threadsafe
BonBuilder.builder.EstimateLowerBoundSize()
method.
e7279773... BonBuilder.builder.EstimateLowerBoundSize()
ReadOnlySequenceSpanReader
ReadOnlySequenceSpanReader
ODbDump leakscode
has more memory optimal variant db on disk to reduce memory usage on big db's
ODbDump trldump
command outputs statistic about used space
In EventLayers Nested ValueTuples containing objects generated invalid IL code.
SpanReader.ReadByteArrayAsMemory()
didn't worked correctly with SpanReader.Controller!=null
.
Diagnosing EventLayer serialization exceptions also for another another case.
Constraint<Guid>.Any
is supported.
ReadOnlyMemory was not working in EventLayers.
Diagnosing EventLayer serialization exceptions also for another case.
SpanReader.ReadStringOrdered is now up 15 times for long ascii only strings.
Diagnosing EventLayer serialization exceptions.
CustomConverter now could be defined for EventLayer and it works for class types in both EventLayer and EventLayer2.
Decreased Compaction memory usage.
SpanReader.SkipStringOrdered is now 80+ times faster for long ascii only strings.
CustomConverter for Relations could be set even after opening DB.
Exposed CompactorReadBytesPerSecondLimit
and CompactorWriteBytesPerSecondLimit
properties so they could be modified on the fly.
Regression in WriteString allocating too much memory if called multiple times.
Regression from 30.2.0 in SkipString.
SpanWriter.WriteStringOrdered is now faster especially for ascii only strings.
SpanWriter.WriteString is now 12+ times faster for long (100+) ascii only strings. SpanReader.ReadString is now up to 14+ times faster for long ascii only strings. SpanReader.SkipString is now 100+ times faster for long ascii only strings.
Support for ReadOnlyMemory<byte>
type and end to end sample to stream Key,Bon relation enumerable though Stream.
New Bon constructor.
Very complex case of calling Remove before any deserialization on object with IDictionary changed to Dictionary.
ReadOnlyDatabase = wait for final version.
Requires C#11 and .Net 7.0
Allow to register interfaces not just classes.
New OnSerializeAttribute to mark method on relation item to be run before Insert
, Upsert
, Update
and all their variants.
DB now throws exception when scalar value is tried to be stored as inline object (it didn't worked anyway).
DB Iterator notify and skips about missing values in Relations. ODbDump dumpnull
prints number of such missing values.
New function CalcBTreeStats
to calc count of node sizes.
ODbDump has new command leakscodeapply
which enable apply output file from leakscode
command on db (then can be compared dump before and after clean - must be the same)
ODbDump check
command was improved to not stop on first error, but to count all corrupted pairs.
ODbDump has new fix
command to erase all corrupted pairs and also clear all secondary indexes so they could be rebuild on next app start.
Exposed property IObjectDB.AutoRegisterTypes
.
New method (ulong AllocSize, ulong AllocCount, ulong DeallocSize, ulong DeallocCount) IKeyValueDB.GetNativeMemoryStats();
.
FirstBySecondaryKey throwed when secondary key was modified new version.
New relation method void RemoveAll()
, you should guess what it does.
New relation method UpsertRange
and As<T>
.
OnCreate
callback for relations which helps to write upgrade methods.
VUInt pack unpack calculations.
Bug in ScanBy with Constraint.First (didn't properly skipped nonfirst) when used on last property of key.
Relations new FirstByIndex(OrDefault) methods. It is similar to GatherBy just sorting is much faster because it does not need to be sorted.
Orderer
.GenericAscending
and Orderer
.GenericDescending
methods which just don't check property owner type equality with relation item type.
Bon
Binary object notation is allows creating and reading JavaScript/C# values with extensions like Dictionary/Map into binary notation. It is much faster to parse, write, skip, search by keys than JSON, size will be also smaller in most cases, in some cases much more smaller.
Non-generic RegisterFactory
for your low level needs.
EventSerializer layer2 has new option to ignore known descriptors on input instances.
Generic Constraint.First(ofConstraint)
- takes only first row from every group.
New IKeyValueDBLogger
callback ReportCompactorException
. Needs override with better logging of exception in production applications.
Locale/Culture based orderer (Orderer.AscendingStringByLocale
).
Also added Orderer.Backwards(orderer)
order modifier.
Force ReferenceEquality when comparing objects serialized in DB.
Skipper from previous version generated invalid IL code which make violent crash, not in tests though :-(
Unregistered object inside another object is skipped without throwing exception.
Improved ODbDump diskdump and trldump commands.
New RequireContentFree attribute to mark class to always use detection of IDictionaries on it to prevent Data Leaks.
Allow to use Brotli compression for Kvi. For now disabled by default. Added new parameter to logger so it is breaking change, but easily fixable.
Previous fix was incomplete.
Kvi in Native Heap KVDB must be created in Exclusive mode.
Upgrade from IDictionary<K1,T1> to Dictionary<K2,T2> is possible and tested in Relations.
Enum Constraints.
Generic Constraint<T>.Any
(not really generic just supporting all currently available constraints (bool, string, DateTime, (un)signed, Enum))
ScanBy and GatherBy secondary index when DB is upgraded with secondary index removed.
Enums with multiple synonym labels for the same value (for example HttpStatusCode 300) can be stored
Loose Constraint on first position didn't found all matched records.
Relations UpdateById
method for faster updates.
UpTo Constraints, which quickly skip rest of values.
ScanBy of empty relation does not throw Exception anymore.
Hopefully last bug in native heap fixed.
Added support for .Net 6.0. Removed support for .Net 5.0.
Constraints and ScanById relation method.
Enum compatibility is now always like it was with BinaryCompatibilityOnlyAttribute. Please remove all usages of this attribute from client code as it does not have any meaning.
DefaultTypeConvertorGenerator now supports T
to T?
conversion. Also U
to T?
if U
is convertible to T
.
Fixed native heap implementation.
A lot of important stuff in ObjectDB are public now. Expanded interactive mode in ODbDump.
Relations now supports Items without default constructor.
Iterate only strictly abstract methods in Relation interfaces.
Name in DBOptions and show it in interesting exceptions. Same Name is also used for Key in deduplication of Relations.
Protection against using singletons for database objects or relation items.
ObjectDB+Relations+EventLayers support for Tuple and ValueTuple.
During enumeration of relation range is prevented also modification of secondary keys (until now was possible)
IOC can enforce uniqueness of registrations.
EventStore2Layer now correctly serializes generic classes.
dynamic
deserialization of object now implements IEnumerable<KeyValuePair<string, object>>
for easy iteration of over all values and fields. ITypeDescriptor
has new property IEnumerable<KeyValuePair<string, ITypeDescriptor>> Fields { get; }
which returns list of all fields on Object descriptor, for all other descriptors it returns empty list.
Optimization to skip reading value in relations when partial view is subset of primary key.
Tried to workaround rare problem with compactor corrupting DB.
Support for .NetCore 3.1. Only .Net 5.0 is supported now.
ODbDump has new command fulldiskdump
containing also content of secondary keys
ODbDump has new command trldump
listing operations in .trl files
New interface IFieldHandlerLogger
for logging type incompatibilities. Sample usage new DBOptions().WithFieldHandlerLogger(new DefaultFieldHandlerLogger(s => Console.WriteLine(s)))
.
Possibility to iterate all transactions. Each transaction also has new getter CreatedTime
and IsDisposed()
.
Relations GetEnumerator didn't reset enumerator correctly in all cases.
Random crash in IsFreeContentNeeded due to multiple threads could run this in parallel.
In debug mode throws when using in listing by partial key excluded start proposition. In release mode kept current behavior.
IOC Nullable values as instance dependencies.
Deleting indirect will not throw when value is null.
ODbDump has new command findsplitbrain
which can find first commit when content of relation in two instances of DB diverted - DBs needs to contain enough preserved history
IRelation
has new SerializeInsert
method which allows speed up DB insert by preparing simple CreateKeyValue commands ahead of writing transaction.
Compactor sometimes removed unused files too late.
ReadOnlyListArrayWrapper
not used internally anymore and it is too confusing.
New methodsTransactionLogCreated
and FileMarkedForDelete
in IKeyValueDBLogger
for logging file collection operations
PositionLessStreamProxy supports also stream which does not read all bytes, but are not at the end.
Default conversion from T
to IList<T>
.
Regression with Kvi file contain garbage at end. Enable LenientOpen
to allow open DB with this corruption.
netcoreapp3.1 framework could be targeted again.
LenientOpen
to KeyValueDBOptions
(default false), in strict mode it does not try to recover as much as possible data, but starts with empty DB. When such problem is detected it will call new method LogWarning
from IKeyValueDBLogger
.
Also you can newly pass implementation of IKeyValueDBLogger
into Logger
field in KeyValueDBOptions
.
Regression in SpanReader.CheckMagic which caused incomplete DB open in some cases.
Detect transaction leaks for writing transactions as well.
Whole code was spanificated and cleaned from old unused in production parts.
IOC Container Build can verify that Singletons does not depend on transient objects.
Some missing IL Helpers.
Dependency
attribute inheriting from NotStored
attribute.
Support for serialization of type StringValues
from Microsoft.Extensions.Primitives.
Support for serialization of properties with private setter in base class.
EventLayer Dictionary, List deserialization didn't reset variable, so instead of null there could be previous reference when nested in another List or Dictionary.
Support for DateTimeOffset
type in serialization.
IL: Allow to define parameter names on constructor so it is usable in IOC.
IOC: Do not crash on constructors without defined parameter names.
Relations: Skip already implemented methods in Relation interface.
ObjectDB: Generic classes supported as DB objects.
ObjectDB: Classic DB objects and Singletons could be created by IOC.
ObjectDB: Iterator decrypting encrypted strings.
IOC: ResolveOptional
new method works like in Autofac.
Relations: ObjectDB in DB options allow to specify IOC Container which is then used for creating items in relation with fallback to simple new if not registered.
Ignore static properties on DB Objects.
KeyValueDB: Value of length exactly 7 bytes are in memory again.
Relation self healing when primary key is changed works in more cases.
Made public Owner getters in Transactions. Allowed to change Max Transaction Log size using public property. Some performance optimizations.
Relations throws informative exception when trying to use unsupported RemoveBySecondaryKey.
Performance regression in RemoveById when type didn't contain any IDictionaries. Failure to cast in FreeContent in ODBDictionary.
- Visitor StartRelation gets whole info instead of just name of relation.
- Public fields on Relation Rows and Database objects are forbidden unless they have
[NotStored]
. In next version they could became supported.
- Final fix for IDictionaries
- IDictionaries has uniqueness fix also for keys.
- RelationInfo.GetProperties skips "NextInChain" IRelation property.
Important note: Don't forget to commit Transactions which calls GetRelation first time (auto registering them).
ICovariantRelation<out T>
cannot have upsert, but it will implementIRelation<T>
anyway.- removed class constraint because it created strange problems. It is now enforced in runtime.
- IDictionaries now supports types with same name but different namespaces again.
IsReadOnly()
onIKeyValueDBTransaction
and used internally in auto registering Relations directly not just in writing transactions, but also in all non read only.
- GetRelation(Type type) now returns IRelation type
- RelationInfo public getters changed many types to ReadOnlyMemory.
- Removed useless UniqueIndexAttribute
- big chunk of IL generated code for Relations and ODBDictionary/Set is now cached forever, making it faster to instantiate Relations repeatedly. It adds new limitation that instances of
ITypeConvertorGenerator
andIFieldHandlerFactory
needs to be same over process runtime.
- Relations interfaces needs to be inherited from
IRelation<T>
IRelation<T>
andIRelation
interfaces. You will getUpsert
method for free.
public interface IRelation<T> : IReadOnlyCollection<T>, IRelation where T : class
{
bool Upsert(T item);
}
public interface IRelation
{
Type BtdbInternalGetRelationInterfaceType();
IRelation? BtdbInternalNextInChain { get; set; }
}
IObjectDbTransaction
has new methods
object GetRelation(Type type);
T GetRelation<T>() where T : class, IRelation
{
return (T)GetRelation(typeof(T));
}
These lazily creates instance of relation for current transaction. If it is for first time it will also create it (in current transaction if it is writable, or in new writable transaction). It automatically names relation by T.ToSimpleName()
or uses PersistentName
attribute on T
.
You can register your own custom relation factory by using void IObjectDB.RegisterCustomRelation(Type type, Func<IObjectDBTransaction, object> factory);
.
You can forbid automatic registration of relations by IObjectDB.AllowAutoRegistrationOfRelations = false
. Good in production code to allow auto registration only during initial transaction.
- regression in 20.x in compatibility of Enums in relations with
BinaryCompatibilityOnly
attribute.
- ReadOnly option to opening DB. ODbDump using it and allows to pass ulongcommit as third parameter to open DB in historical moment.
- Mixing Lists, Sets and Arrays in EventLayers
- IOC now support
Dependency
attribute for properties injection. Also it could be used for renaming dependency resolved name. Nullable reference types are optional dependencies.
- IOC now supports public properties injection. Registration needs to be done with
PropertiesAutowired()
. Setters does not need to be public. Nullable reference types are optional dependencies, all other properties are required.
- Added support for
IOrderedSet<T>
lazily stored set. - EventLayers deserialization can now unwrap
IIndirect<T>
, making it compatible change (IIndirect<T>
=>T
, orIDictionary<TKey, IIndirect<T>>
=>IDictionary<TKey, T>
). - New documentation for supported types
- Added support for
ISet<T>
,HashSet<T>
with identical serialization asIList<T>
. - Removed some allocations from
IOrderedDictionary
- Regression with DB loading
IDictionary<Key,IIndirect<SomeAbstractClass>>
- Regression from 19.8.0 with NullReferenceException in some special cases.
- Suffixes for partial deserializations in methods (FindBy,ListBy) does not need to be separated by underscore anymore.
- Relations now support returning only partial classes. For example it allows to speed up table scanning because you can deserialize only fields you need when enumerating relation.
- Made AesGcmSymmetricCipher thread safe.
- Support
EncryptedString
in DB indexes (orderable).
- New
EncryptedString
type to be able to store string in its encrypted form. You need to passISymmetricCipher
implementation toDBOptions
,TypeSerializersOptions
,EventSerializer
andEventDeserializer
. There is classAesGcmSymmetricCipher
implementingISymmetricCipher
, which provides perfect security by just passing 32 bytes key to its constructor.
- Added possibility to deserialize event with Nullable to dynamic (usable for dumping EventStore)
- All serializations DB, Event now supports
System.Version
type. Default conversion allows to upgrade fromstring
toVersion
. WhenVersion
is used in ordering, keys it behaves as expected.
Removed control flow by exceptions from EnumerateSingletonTypes
. Fixes #85.
Relations new methods AnyById
and AnyBy{SecKeyName}
supported.
- New methods
CountById
andCountBy{SecKeyName}
supported. IEnumerator
andIEnumerable
could be freely exchanged as result types.ListById
andListBy{SecKeyName}
does not requireAdvancedEnumeratorParam
.
Range defined by EndKey s KeyProposition.Included now contains all keys with passed prefix, used in methods: RemoveById
ListById
ListBy{SecKeyName}
Needs to be compiled with in csproj:
<LangVersion>8</LangVersion>
<Nullable>annotations</Nullable>
StructList.Add()
renamed to AddRef()
.
IOC: IAsyncDisposable is not registered by AsImplementedInterfaces (same behavior as IDisposable).
Another bug in FindLast made me to delete it and rewrite again from managed heap implementation.
Bug in FindLast in native heap KVDB.
EventLayers Deserialization now supports classes without parameter-less constructor.
Find with prefix sometimes found records not matching prefix.
Improved CalcStats information. Some small speed optimizations.
Supports only .Net Core 3.0 or better.
New BTreeKeyValueDB implementation which uses native heap.
New method in relations: ShallowRemoveById StartWritingTransaction returns ValueTask and optimized allocations.
ODBIterator extended to be able to seek and display only what is needed.
New method IPlatformMethods.RealPath
for platform independent expanding of symlinks.
New method ByteBuffer ByteBuffer.NewAsync(ReadOnlyMemory<byte> buffer)
.
FullNameTypeMapper improved support for generics. Types can migrate assemblies even for generic arguments. (by https://github.com/JanVargovsky)
Supports only .Net Core 2.2 or better.
- When preserving history KVDB did not advising compaction without restarting application.
- Default CompactorScheduler wait time to 30-45 minutes.
- Compactor does not ends in endless cycle when DB is opened with more than 4 times smaller split size than it was created.
ODbDump has new commands
leaks
which prints out unreachable objects in DB.frequency
which prints number of items in relations and top level dictionaries in singletons
ODBLayer correctly supports interfaces in properties.
Additional nonderministic info removed from compare mode of ODbDump.
ODbDump is now published in way it works not just on my machine.
ODbDump is now part of release. ODbDump has new dump mode useful for comparing DBs.
RemoveById supports advanced enumeration param in relations
Extend TypeSerializers with optional configuration options.
Options consist of one option for IIndirect<T>
, whether it is serialized or ignored.
Way to limit Compactor Write and Read Speed by setting KeyValueDBOptions
. Default is unlimited.
Added new method into IFileCollectionFile.AdvisePrefetch. It is called during DB open on files which are expected to be read by RandomRead.
IFileCollection modified to allow faster implementations possible.
PRead behavior on Windows file end. Fixed Nested Dictionaries type gathering exception.
Failure to open DB in special case after erasing and compaction. Type check when generating apart fields in relations.
Reintroduced PossitionLessStream and rename FileStream one to PossitionLessFileStream
Much faster compaction when a lot of changes were done. New IKeyValueDB.CompactorRamLimitInMb does limit RAM usage for longer time. Speed of OnDiskFileCollection improved by using new PRead and PWrite methods implemented for Windows and Posix. Better exception in WriteInlineObject when object type could not be stored.
Modified IKeyValueDBLogger and IKeyValueDB so implementation needs to be modified.
Skipping Events in EventStoreLayer Deserialization
Added way to skip Events in EventStoreLayer Deserialization.
Deletion of dictionaries during update/delete in relation in subclasses when not defined in declaration by interface.
ShallowUpsert and ShallowUpdate relation methods which does not try to prevent leaks, but are much faster.
IIndirect objects are not automatically deleted during removal from relations.
Calling ListBy{SecondaryKey}OrDefault for not existing item during enumerating relations cooperates well.
Exception in EventStore2Layer serialization does not corrupt next serializations anymore. Serialization of non Dictionary in EventStore does not fail.
Skipping removed field (inline object) when deserializing older version in relations
EventLayer serializers support IOrderedDictionary<K,V> type
ArtInMemoryKeyValueDB - less memory hungry KVDB - use it only in .NetCore 2.1 target Generics classes now supported in EventLayer serializers DBOptions.WithSelfHealing switches db to try self heal rather then fail fast mode IObjectDBLogger for ObjectDB, actually for reporting deletion of incompatible data in self heal mode.
Rare exception during checking possibility of usage of optimized version of prefix based remove when so far unseen objects was used as key in IDictionary
Dumping JsonLike output from TypeDescriptor is now more JSON compliant.
Delegate constrains are now supported in C# 7.3, so it now makes compile time errors instead of runtime where possible.
Rare failure in IOC when running in parallel. Better exception message when types of fields in Deserialization are different.
Relations could be now iterated.
Event Deserialization does not eagerly require Types exists in List and Dictionary. Iterator fix for back reference in inlined lists and dictionaries. Now really works ;-)
Shut up Coverity. DiskChunkCache findings are false positives. Iterator fix for back reference in inlined lists and dictionaries. EventStore2Layer Deserializer bug in specific case.
Allow to use DateTime.MinValue and DateTime.MaxValue in ordered context - they will be automatically converted to UTC.
ListBy... methods in relations now correct type of AdvancedEnumeratorParam
Made order of properties in EventSerializers stable by sorting them by name.
EventLayer2 serialization of Dictionary<int, Dictionary<int, ComplexObject>>
property.
IOC RegisterInstance(object value) now must be explicitly used so new RegisterInstance(object value) could be used.
IOC RegisterInstance(object value) overload.
RollbackAdvised property on KV and Object transactions interfaces to simplify notification of some infrastructure code to rollback transaction instead of committing it.
Relations support inheriting of methods from other interfaces.
IOC RegisterInstance(T value) now allows also value types as T, and value is not registered as value.GetType() but as typeof(T), which is same behavior as AutoFac.
Possibility to limit number of removed items at once in prefix based remove in relations.
Ported to .NetCore 2.0.
Simplified Nuget. Now it embed pdb and with SourceLink. GitHub releases contains zipped BTDB sources.
New releaser project to automate releasing.
Compactor Inducing Latency for writting transaction is now capped.
Fixed Nullable support in EventStore2Layer.
Uninterupted influx of data after db opening can prevent compactor from running.
IPAddress can now serialize and deserialize null value.
- Synchronization lock in EventLayer2 Deserialization to be on safe side.
- PersistedNameAttribute is supported on Apart Fields in relation interfaces
- IOC now resolves optional parameters that are not registered with its provided value
- Fixed problem with calculating index from older version value in specific case
- new method DeleteAllData() on ObjectDBTransaction
- PersistedNameAttribute is additionally allowed on interfaces - useful for Relations
- Event deserialization now automatically converts Enums to integer types.
- Changelog
- Nullable support in both ODb and EventStore