# -*- mode: org -*-
* v2.2.1    2025-03-01

Thoughts and whitespace.

* v2.2.0    2025-01-26

- ~closql-dset~ can now be told to ignore unknown connections.  ae8e78f

* v2.1.0    2024-12-01

- Adjusted to take advantage of EmacSQL v4.1.0.

* v2.0.0    2024-08-08

- Dropped support for Emacs 25.  22f67f5

- Database classes no longer derive from a connector class.  c3b34a6

- Added two new generic functions ~closql-dref~ and ~closql-dset~, which
  are used by our advices to ~eieio-oref~ and ~eieio-oset~, when they deal
  with slots whose values aren't completely stored in the object's
  primary table.  This makes it possible to implement slot-specific
  behavior.  296a356, 27aa7e5

- Originally the ~:closql-table~ slot property was used for slots that
  involved the use of two tables, but later it was additionally abused
  for slots that involve three tables.  Now such slots use a new slot
  property, ~:closql-tables~.  The values of these slots can now be
  accessed using ~oref,~ and the old hack ~closql--iref~ has been removed.

- The value of ~:closql-tables~ slots now begin with the id.  dae0256

- Accessing the value of indirect slots is much faster now, and the
  value is cached, making repeated slot access even faster.  09ad40f,
  dc8cacb

* v1.2.1    2022-02-16

- Refreshed metadata.

* v1.2.0    2021-09-28

- By default ~closql-get~ no longer proactively resolves all slots,
  which is never actually unnecessary but often extremely expensive.

* v1.1.0    2021-09-27

- Added support for alternative database connectors.
  The ~closql-database~ class is abstract now, making it necessary to
  define a class that derives from that and also from a connector
  class.

* v1.0.6    2021-06-16

- Adjusted to how unbound slots are represented in Emacs 28.

* v1.0.5    2021-05-30

- Cosmetics.

* v1.0.4    2020-07-20

- Added new functions ~closql--db-get~ and ~closql--db-set~.

* v1.0.3    2020-06-13

- When any class is autoloaded, then that could still caused a
  recursive load.

* v1.0.2    2020-05-22

- When any class is autoloaded, then that caused a recursive load.

* v1.0.1    2019-12-05

- Adjusted to incompatibles changes to Eieio internals that broke
  some code that relied on implementation details.

* v1.0.0    2018-10-31

- Added optional ~replace~ argument to ~closql-insert~.  It non-nil,
  then this function uses ~INSERT OR REPLACE INTO~ instead of just
  ~INSERT INTO~, allowing the caller to replace an existing row.

- Added function ~closql-reload~, which, given a potentially outdated
  object, returns an up-to-date object.

- Replaced the slot property ~:closql-columns~ with ~:closql-table~.  The
  value has to be a table instead of a vector of columns and its name
  can be different from that of the slot, which previously was not
  possible.  The slots are now determined by querying the database.

- Added new experimental function ~closql--iref~.

* v0.6.0    2018-07-01

- Added new ~closql-object~ class slot ~closql-order-by~, which allows
  specify how the values of a related ~:closql-class~ slot are ordered.

- An initially unbound slot for which neither ~:closql-class~ nor
  ~:closql-columns~ is set caused an error in ~closql--resolve-slots~.

* v0.5.2    2018-05-21

- Fixed a bug that caused ~closql-insert~ to fail when using Emacs 25
  ever since Emacs 26 is supported too.

- Added new utility function ~closql-format~.

* v0.5.1    2017-12-19

- A recent change on Emacs 27.0.50 causes an EmacSQL bug to surface.
  That was fixed upstream and the dependency was bumped to bring in
  that fix.

* v0.5.0    2017-11-27

- Emacs 26.1 will use a new ~record~ type instead of vectors.
  Closql can now deal with both internal representations.

* v0.4.0    2017-09-19

- The value of a slot can now be a list of objects.  Like for a slot
  whose value is a list of lists, the elements have to be uniform, in
  this case they have to share a base-class, and they are unordered.

  Objects in such secondary tables can be queried directly, using the
  same functions that are used to query objects in the primary table.
  For secondary tables the new optional ~class~ argument of these query
  functions has to be provided.

  Note that ~oset~ currently does not support "list of objects" slots.

- Access information is now stored in slots of the object base class
  instead of in the database class.  This change was necessary to
  allow storing objects of different types in different tables.

  The names of all of these slots are prefixed with ~closql-~.  The
  existing slot ~database~ was renamed to ~closql-database~ and the slot
  property ~:columns~ was renamed to ~:closql-columns~.

- Class tags are now automatically abbreviated when being stored in
  the database because that gives friendlier results when querying it
  direct.

  It was already possible to do that before by implementing the
  generic functions ~closql--class-to-sql~ and ~closql--sql-to-class~.
  These functions were replaced by the functions ~closql--abbrev-class~
  and ~closql--expand-abbrev~, which have different signatures and allow
  subclasses to strip a common prefix and/or suffix by setting the
  object slots ~closql-class-prefix~ and ~closql-class-suffix~ instead of
  having to define methods for these subclasses.

- Added new functions ~closql-query~.  It calls either ~closql-entries~
  or if its ~select~ argument is non-nil ~closql-select~.  If ~select~ is a
  symbol, then return a list of elements, unlike ~closql-select~, which
  would return a list of lists with one element each.

- The function ~closql--where-class-in~ isn't merely intended for
  internal use anymore and was renamed to ~closql-where-in-class~.

- Added new internal function ~closql--list-subbrevs~.

- The internal function ~closql--oref-default~ was removed.

- The function signature of ~closql--remake-instance~ changed.

* v0.3.3    2016-12-31

- Repository moved to https://github.com/emacscollective/closql.

* v0.3.2    2016-11-26

- Update links.

* v0.3.1    2016-11-03

- Fixed updating of rows in secondary tables when the key is ~nil~.

* v0.3.0    2016-10-25

- Setting the value of a slot whose value is stored in a secondary
  table no longer deletes and recreates all rows.

- ~closql--db-init~ no longer sets the primary key of secondary tables.

* v0.2.0    2016-09-02

- Text properties are now being removed when storing string in the
  database.

* v0.1.0    2016-04-15

- Initial public alpha release.
