Skip to content

Releases: dogmatiq/persistencekit

Version 0.10.0

24 Sep 00:33
v0.10.0
e1d816f
Compare
Choose a tag to compare
Version 0.10.0 Pre-release
Pre-release

Added

  • Added journal.Interval type, to represent a half-open range of positions.
  • Added journal.RecordNotFoundError, ValueNotFoundError and ConflictError.

Changed

  • [BC] journal.Journal.Bounds() now returns an Interval instead of a two Position values.
  • [BC] journal.Search(), RangeFromSearchResult(), Scan() and ScanFromSearchResult() now accept an Interval parameter instead of two Position values.

Removed

  • [BC] Removed journal.ErrConflict and ErrNotFound. Use IsConflict() and IsNotFound() to test for specific errors instead.

Version 0.9.3

02 Apr 22:07
v0.9.3
771e3e6
Compare
Choose a tag to compare
Version 0.9.3 Pre-release
Pre-release

Added

  • Added journal.AppendWithConflictResolution().
  • Added journal.IgnoreNotFound().

Version 0.9.2

27 Mar 00:22
v0.9.2
08a85a7
Compare
Choose a tag to compare
Version 0.9.2 Pre-release
Pre-release

Added

  • Added journal.RangeFromSearchResult()

Version 0.9.1

19 Mar 06:38
v0.9.1
ef3e52b
Compare
Choose a tag to compare
Version 0.9.1 Pre-release
Pre-release

Added

  • Added property-based tests for journal and key/value store implementations using rapid. These new tests uncovered the bugs described below.

Fixed

  • Fixed issue with memoryjournal Range() implementation that would pass the wrong position to the RangeFunc after the journal was truncated.
  • Fixed issue with dynamojournal Bounds() implementation that could potentially report the wrong lower bound after truncating (as of 0.9.0).

Changed

  • dynamojournal now cleans up (hard-deletes) records that have been marked as truncated when scanning for lower bounds.

Version 0.9.0

18 Mar 00:27
v0.9.0
0154016
Compare
Choose a tag to compare
Version 0.9.0 Pre-release
Pre-release

Added

  • Added dynamojournal.NewBinaryStore() and dynamokv.NewBinaryStore().
  • Added Option type and WithRequestHook() option to dynamojournal and dynamokv. The request hook is a more flexible replacement for the request-type-specific decorator fields that were on the BinaryStore structs, which were removed in this release.

Removed

  • [BC] Removed dynamojournal.BinaryStore and dynamokv.BinaryStore use each package's NewBinaryStore() function instead.
  • [BC] Removed dynamojournal.CreateTable() and dynamokv.CreateTable(). The table creation is now managed at runtime by the journal and keyspace stores.

Fixed

  • The pgjournal and dynamojournal implementations can now correctly truncate all journal records. Previously they would only allow truncation up to but not including the most recent record.

Version 0.8.0

17 Mar 06:09
v0.8.0
49ec7bd
Compare
Choose a tag to compare
Version 0.8.0 Pre-release
Pre-release

This release changes the journal.Store and journal.Journal interfaces to be generic types, parameterized over records of type T, and the kv.Store and kv.Keyspace to be parameterized over types K and V, thereby making the typedjournal and typedkv packages obsolete.

This eliminates the need for duplicating all of the generic algorithms (such as Search(), LastRecord(), etc) for both binary and typed implementations.

Added

  • Added journal.BinaryStore, BinaryJournal and BinaryRangeFunc aliases, equivalent to prior (non-generic) definitions of Store, Journal and RangeFunc, respectively.
  • Added kv.BinaryStore, BinaryKeyspace and BinaryRangeFunc aliases, equivalent to prior (non-generic) definitions of Store, Keyspace and RangeFunc, respectively.
  • Added marshaler.ProtocolBuffers marshaler.
  • Added marshaler.Bool marshaler.
  • Added journal.NewMarshalingStore() and kv.NewMarshalingStore(), which wrap binary implementations with a marshaler.Marshaler, serving as a replacement for the typedjournal and typedkv packages, respectively.
  • Added journal.Scan() and ScanFromSearchResult()

Changed

  • [BC] Changed journal and kv interfaces to be generic.
  • [BC] Moved typedmarshaler package to marshaler at the root of the module.

Removed

  • [BC] Removed typedjournal, typedkv and typedmarshaler packages.

Version 0.7.0

16 Mar 23:39
v0.7.0
0c3f689
Compare
Choose a tag to compare
Version 0.7.0 Pre-release
Pre-release

Changed

  • [BC] The pgjournal implementation now supports the full range of unsigned journal.Position values. The uint64 value-space is "mapped" onto the int64 space such that uint64(0) == math.MinInt64, thereby preserving order. The journal.position column has been renamed to encoded_position to make it clearer that the value can not be used as-is.

Fixed

  • Calling Range() on an empty journal now correctly returns journal.ErrNotFound. This issue affected all journal implementations.

Removed

  • [BC] Removed journal.MaxPosition. All implementations now support the full unsigned 64-bit range of journal.Position values. Technically, the memoryjournal implementation is limited to math.MaxInt non-truncated records at any given time, but this is not practical anyway.

Version 0.6.0

16 Mar 03:00
v0.6.0
802fcf0
Compare
Choose a tag to compare
Version 0.6.0 Pre-release
Pre-release

Added

  • Added journal.RunBenchmarks() and kv.RunBenchmarks() to run generic benchmarks for a journal or key-value store implementation.

Changed

  • [BC] The PostgreSQL drivers pgjournal and pgkv now assign each journal and keyspace a sequential ID to avoid repeating the journal/keyspace name in every row.

Removed

  • [BC] Removed pgjournal.CreateSchema() and pgkv.CreateSchema(). The schema creation is now managed at runtime by the journal and keyspace stores. This change is in preparation for the stores also managing other schema changes, such as table partitioning.

Fixed

  • PostgreSQL schema creation is now performed within a transaction.

Version 0.5.0

11 Mar 22:36
v0.5.0
974cced
Compare
Choose a tag to compare
Version 0.5.0 Pre-release
Pre-release

Added

  • Added typedjournal.IsEmpty(), which returns true if a journal currently has no records.
  • Added typedjournal.IsFresh(), which returns true if a journal has never been written to.
  • Added typedjournal.FirstRecord() and LastRecord().
  • Added typedmarshaler.Zero()

Changed

  • [BC] Changed typedjournal.Journal to use pointer receivers
  • [BC] Changed typedkv.Keyspace to use pointer receivers

Version 0.4.0

11 Mar 00:27
v0.4.0
c7c00a4
Compare
Choose a tag to compare
Version 0.4.0 Pre-release
Pre-release

Changed

  • [BC] Moved typedjournal and typedkv packages into adaptor directory.

Added

  • Added typedmarshaler package.
  • Added journal.IsEmpty(), which returns true if a journal currently has no records.
  • Added journal.IsFresh(), which returns true if a journal has never been written to.
  • Added journal.FirstRecord() and LastRecord().

Removed

  • [BC] Removed typedjournal.Marshaler and typedkv.Marshaler. Use typedmarshaler.Marshaler instead.