This document describes the changes made to the Mnemosyne application. The intention of this document is to list all incompatibilities as well as all the enhancements, bugs and adjustments that have been noted for each previous release of Mnemosyne. Each release thus constitutes one section in this document. The title of each section is the Mnemosyne version number.
Mnemosyne have been modified to handle the new exit codes introduced in OTP-R5C.
Some internal things have changed (see below) as well as some new functionality. This means that the queries have to be recompiled.
a
with
record type b
.
X <- table (a,b)The old
table(Name)
still exists and defaults to
table(Name,Name)
argtype
declaration) still work but the new way is
preferred.
(X#a.b)#c.d
. The inner #a
is not needed if the type of X
is known.
Some incorrect queries are detected in Erlang compile time rather then during setup / execution in runtime.
The negation operator, not
, that was present in earlier
versions has been removed. The main reason is
that the semantics is unclear in many cases, and almost all questions
have no need for a negation.
The typical use of negation was something like the following
code fragment:
query [ X || X <- table (employee), not X <- rule (chiefs) ] end
Here, the query variable, X
, is first bound and then
a negation is applied. Usages such as these can often be rewritten by
first evaluating the negation in a separate query and then
the rest of the query. Asuming the query is evaluated using
eval
the above could be written:
NegQ = query [ X || X <- rule (chiefs) ] end, NegAns = mnemosyne:eval (NegQ), Q = query [ X || X <- table(tab), not lists:member (X, NegAns) ], Ans = mnemosyne:eval (Q)
Note that the not used above is Erlangs own not, not the
(old) mnemosyne not
.
Also note that the above code is not less efficient then the previous
versions (that used not
) since the whole negation has
to be evaluated.
No new ones. See earlier release notes.
This release is a minor release and the release notes describes the difference between version 1.0.1 and version 1.0 of Mnemosyne.
No new ones. See earlier release notes.
This is the first release of Mnemosyne as an own application, separate from the Mnesia DBMS Engine. The Mnemosyne application must be used in conjunction with Mnesia 3.0 or later.
Mnemosyne
has been separated from the Mnesia
application and this has some minor implications:
-include_lib("mnesia/include/mnemosyne.hrl").that was mandatory in all Erlang modules containing embedded
Mnemosyne
queries has been replaced with:
-include_lib("mnemosyne/include/mnemosyne.hrl").During the interim period, both compiler directives will be supported. However, in a future release the backward compatibility directive will be removed from Mnesia.
application:start(mnemosyne)
, when
Mnesia is started.embedded_mnemosyne
has been added to Mnesia in
order to make it possible to access the automatic
start of Mnemosyne. By default embedded_mnemosyne
is set to false
, but if it is set to true
Mnesia will start Mnemosyne as a supervised part of the
Mnesia application as it did in previous releases.