// calogDb.h -- calog database library. // // Registers a small set of inline natives that a script of any engine can call: // dbOpen(driver, conn) -> handle (driver: "sqlite" / "postgres" / "mysql") // dbExec(handle, sql, ...params) -> rowsAffected // dbQuery(handle, sql, ...params) -> list of {column: value} row maps // dbClose(handle) // Values marshal by CalogValueT: NULL <-> nil, integers/reals as-is, text and BLOBs as // binary-safe strings. Parameters are always BOUND (never string-spliced), so scripts are // injection-safe by construction. The natives are INLINE -- a slow query blocks only the // calling script's context thread, not the host. Backends are compiled in with // CALOG_WITH_SQLITE / _PG / _MYSQL. // // Ownership: a connection handle belongs to the context that opened it. Handles are NOT // reference-counted, so it is undefined behaviour for two contexts to use the same handle // concurrently, or for one context to close a handle while another is mid-operation on it // (a use-after-free, exactly as with a raw file descriptor). Pass work between contexts, // not live handles. // // Connection strings: // sqlite -- a file path, or ":memory:". // postgres -- a libpq conninfo, e.g. "host=/tmp dbname=app user=me". TLS follows libpq // (default sslmode=prefer: use TLS if offered, else plain, no verification). // mysql -- "key=value ..." over host/user/password/dbname/port/socket, plus sslmode // (default "prefer": TLS if offered else plain, no verification; "disable" = // plain; "require" = TLS + server-certificate verification). #ifndef CALOG_DB_H #define CALOG_DB_H #include "calog.h" // Register the DB natives on a runtime. Idempotent across runtimes (they share a // process-wide connection registry). Returns calogOkE or an error. int32_t calogDbRegister(CalogT *calog); // Close any still-open connections and free the process-wide DB registry. Call it AFTER // the runtime is torn down (calogDestroy), since it invalidates the natives' state. void calogDbShutdown(void); #endif