# -*- mode: org -*- * 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.