- Updated
readme.md
.
- Updated
readme.md
.
- Updated
readme.md
.
- Fix for
MutateGet
implementation.
- Added
MutateGet
method option to mutators.
- Change blob storage integration to use
Azure.Storage.Blobs
12.16.0.
- Update to Halforbit.ObjectTools 1.1.24 to pick up bug fixes for lambda-specified key maps.
- Update to Newtonsoft.Json 13.0.1 and Halforbit.ObjectTools 1.1.22
- Added overloads to
Map
builder methods to allow specifying key maps as a lambda over a string interpolation, in the formk => $"forecasts/{k.PostalCode}/{k.Date:yyyy/MM/dd}"
.
- Make
Observer.AfterPut
andObserver.AfterDelete
virtual
so that they can be overridden.
- Added
AfterPut
andAfterDelete
methods to the observer system.
- Added partial support for enums as partition key types for cosmos data stores. See known issues for more information.
- Known issue: CosmosDb partition keys of type
enum
will not be comprehended properly from theQuery
method predicate, resulting in partition key equalities being ignored in the predicate and possibly extraneous results being returned. A workaround is to move the partition filtering from theQuery
predicate to aWhere
clause in the query, though this will result in a sweep across all partitions instead of the single partition specified.
- Added support for sharded data stores with the
Sharded
builder method andShardedDataStore
implementation.
- Added
Get
method toIDataContext
to handle singleton stores that have no key type.
- Added support for delimited store value types that need only be
IEnumerable<TRecord>
and have a constructor acceptingIEnumerable<TRecord>
.
- Reimplemented delimited serialization to use Newtonsoft JObject as its internal data model. This now allows value types on delimited stores such as
IReadOnlyList<>
of record typeIReadOnlyDictionary<string, string>
,JObject
as well as any plain class.
- Do not throw
ArgumentOutOfRangeException
for singleton data stores with a key type ofobject
.
- We now throw an
ArgumentOutOfRangeException
when the default value of a key type is provided. Default values of key types indicate empty, and so are not allowed to be used as key values.
- Added another Flush to delimited serialization.
- Added a
Flush
to delimited serialization to help ensure output does not get cut off.
- Changed local storage to use forward slashes instead of backslash to work properly under both Linux and Windows.
- Disabled always-on bulk execution for the CosmosDb integration. Bulk execution will be reintroduced later using overloads of relevant
IDataStore<,>
methods to receive collections of values.
- Fixed a bug where delimited serialization might get a stack overflow exception.
- Simplified the namespace of
DelmitedSerializer
andDelimitedBuilderExtensions
.
- Simplified the namespace of
DataSerializer<>
toHalforbit.DataStores
.
- Changed the blob file store integration to use a flat listing when listing keys. This results in a substantial performance increase when listing keys of a large and/or highly hierarchical store.
- Updated to Polly 7.2.1
- Added
Serialization<>()
andCompression<>()
methods to the builder to allow customISerializer
andICompressor
implementations to be provided when describing a data store, such as subclasses ofDataSerializer<>
.
- Renamed
ExecuteAsync<>()
toFetchListAsync<>()
- Added
FetchFirstOrDefaultAsync<>()
- Added an
ExecuteAsync<>()
extension method againstIQueryable<>
in the CosmosDb integration, allowing asynchronous materialization of a query into a list.
- Changed the
IDataStore<,>.Query()
method fromasync
to synchronous, as theIQueryable
pattern is inherently synchronous, no underlying implementation was actually usingasync
, and it complicated the end developer query experience. - Fixed a defect in the cosmos implementation of
IDataStore<,>.BatchQuery()
where the full item collection was being used with each batch step instead of just the batch items.
- Changed the namespace of
YamlOptions
toHalforbit.DataStores
.
- Changed the namespace of most public types to simply
Halforbit.DataStores
. - Moved delimited serialization to a new nuget package,
Halforbit.DataStores.FileStores.Serialization.Delimited
, to better encapsulate the dependency on CsvHelper.
- Added support for delimited data value types like TSV and CSV. Added the
DelimitedSerialization
method to the builder for specifying this. Data stores with delimited value types should have aTValue
ofIReadOnlyList<TRecord>
orIEnumerable<TRecord>
, whereTRecord
is a type that can be successfully processed by the CsvHelper library. The default delimiter (which can be overridden) is tab, and by default a header row is expected/written (which can be overridden). - Added a reference to CsvHelper 15.0.5
- Added
WebStorage
integration methods to the builder.
- Added observers and mutators, which allow observation of data before puts and deletes, and mutation of data before it is put, respectively. Observers can inherit from
Observer
orObserver<TKey, TValue>
, and are specified with a newObserver
method on the builder. Mutators can inherit fromMutator
orMutator<TKey, TValue>
, and are specified with a newMutator
method on the builder. Any number of observers and mutators can be specified in a data store description. - Added a new
Query
method toIDataStore<,>
to perform queries more simply and directly than with the existingusing
/StartQuery
method. The Postgres/Marten integration does not support this new method, as it requires a disposable query session to be used, so the existingStartQuery
method must still be used within ausing
block for that integration only. - Added a new
BatchQuery
method toIDataStore<,>
to perform large queries in several smaller pieces. This is for the use case where e.g. you have a list of thousands of identifiersids
, and you wantqueryable.Where(r => ids.Contains(r.RecordId))
. This is currently only implemented for the CosmosDb integration, to get around its limitations on the maximum size of a single query. - Deleted the DocumentDb integration, as it is obsoleted by the CosmosDb integration, and its API is deprecated.
- Fixed a bug where key list operations on CosmosDb would return null keys when there are records in the container with the correct id format, but no partition key when one is expected.
- Updated to Halforbit.ObjectTools 1.1.10
- Removed return type from all
Upsert
methods ofIDataStore<,>
as they were widely misinterpreted and costly to fulfill within the integrations. - Added the
IDataContext
interface andDataContext
class which can either be inherited from or composed to build lazy-cached data contexts without e.g. dynamic dispatch or use of Moq.
- Made specifying validation in the builder pattern optional, and separated actual construction into a new
.Build()
method - Added
DataContext
andIDataContext
, for use when defining data contexts with the builder pattern. - Updated to
Halforbit.ObjectTools
1.1.8 - Updated to
Halforbit.Facets
1.0.48
- Fixed a bug in the Azure Table Storage integration where List methods, when provided with a complex selector, were not fully filtering results.