Skip to content

History / client library

Revisions

  • lmdbnet and mvx-lmdbd are gone; a shared database is postgres The driver pushed nothing down -- no select_where, select_order, count_where, sum_where, join or explain -- so every WITH streamed the whole id list to the verb and filtered it there, over a network. postgres answers those in SQL, holds record locks across sessions, and is not ours to maintain (mvx#327). deployment.md loses the daemon sections and gains the shape that replaced them: a connection profile, so the committed BINDINGS record names only `@salesdb` and carries no address and no password. The namespace section survives in the form that is still true -- namespace is the postgres schema and the mongo database, it still defaults to the account name, and naming someone else's is still the Q-pointer analog. The page is called Deployment now rather than Deployment and the Daemon. containers.md: two images, not three, and the compose demo wires a stock postgres:16-alpine to the two app accounts instead of our daemon. The password reaches it as MVXCONN_SHARED_PASSWORD from the environment rather than being written to disk. A correction while sweeping: files.md said locks are held in the backend for "the mvx-lmdbd daemon, or a Postgres file (via session-level advisory locks)". The postgres half is accurate -- pg_lock/pg_unlock are wired into its vtable (mvx#16) -- so cross-process locking survives the removal. Also getting-started.md (mvx-lmdbd was named in the build output and the installed-binary table), Home.md (the drivers list and the binary table), client-library.md (a bind example), and statements.md (the list of backends with no transaction bracket).

    @gheydon gheydon committed Oct 2, 2026
  • The client library: driving an account from C The surface mv-connect and any language binding is built on, documented as a consumer meets it rather than as the header lists it: the session and what connecting to an account actually does (runs its LOGIN, at @LEVEL 1), values as MV data rather than flattened strings, the read_into loop that is the difference between a malloc per record and none, and mvxc_bind_file handing a decision back because the library does not own the screen. The string-lifetime rule is given its own section near the top. It is the one thing in the API that will bite someone, it has already bitten twice in two different tests, and it is a property of the interface rather than a mistake someone else makes. Ends with what is not there yet -- the remote transport, a C++ wrapper (#304), and bindings -- so nobody has to read the header to find out.

    @gheydon gheydon committed Sep 26, 2026