[KV] with-transaction-kv macro to expose explicit transactions for KV
database. This allows arbitrary code within a transaction to achieve
atomicity, e.g. to implement compare-and-swap semantics, etc, #110
[Datalog] with-transaction macro, the same as the above for Datalog database
[KV]abort-transact-kv function to rollback writes from within an explicit KV transaction.
[Datalog] abort-transact function, same for Datalog transaction.
[Pod] entity and touch function to babashka pod, these return regular
maps, as the Entity type does not exist in a babashka script. #148 (thx
@ngrunwald)
[Datalog] :timeout option to terminate on deadline for query/pull. #150 (thx
@cgrand).
[Datalog] Additional arity to update-schema to allow renaming attributes. #131
[Search] clear-docs function to wipe out search index, as it might be faster to rebuild search index than updating individual documents sometimes. #132
datalevin.constants/*data-serializable-classes* dynamic var, which can be
used for binding if additional Java classes are to be serialized as part of the default :data data type. #134
:auto-entity-time? Datalog DB creation option, so entities can optionally have
:db/created-at and :db/updated-at values added and maintained
automatically by the system during transaction, #86
[breaking]:instant handles dates before 1970 correctly, #94. The storage
format of :instant type has been changed. For existing Datalog DB containing
:db.type/instant, dumping as a Datalog DB using the old version of dtlv, then
loading the data is required; For existing key-value DB containing :instant
type, specify :instant-pre-06 instead to read the data back in, then write
them out as :instant to upgrade to the current format.
Remove client immediately when disconnect message is received, clean up
resources afterwards, so a logically correct number of clients can be obtained
in the next API call on slow machines.
Release artifact org.clojars.huahaiy/datalevin-native on clojars, for
depending on Datalevin while compiling GraalVM native image. User
no longer needs to manually compile Datalevin C libraries.
Consolidated all user facing functions to datalevin.core, so users don't have to understand and require different namespaces in order to use all features.
[Breaking] Removed AEV index, as it is not used in query. This reduces storage
and improves write speed.
[Breaking] Change VAE index to VEA, in preparation for new query engine. Now
all indices have the same order, just rotated, so merge join is more likely.
[Breaking] Change open-lmdb and close-lmdb to open-kv and close-kv,
lmdb/transact to lmdb/transact-kv, so they are consistent, easier to
remember, and distinct from functions in datalevin.core.
GraalVM native image specific LMDB wrapper. This wrapper allocates buffer
memory in C and uses our own C comparator instead of doing these work in Java,
so it is faster.
Allow Java interop calls in where clauses, e.g. [(.getTime ?date) ?timestamp], [(.after ?date1 ?date2)], where the date variables are :db.type/instance. [#32]
Changed default LMDB write behavior to use writable memory map and
asynchronous msync, significantly improved write speed for small transactions
(240X improvement for writing one datom at a time).
[Breaking] Change argument order of core/create-conn, db/empty-db
etc., and put dir in front, since it is more likely to be specified than
schema in real use, so users don't have to put nil for schema.
use array get wherenever we can in query, saw significant improvement in some queries.
use db/-first instead of (first (db/-datom ..)), db/-populated? instead of (not-empty (db/-datoms ..), as they do not realize the results hence faster.