== ORM-DB-rqlite rqlite backend for the [[orm]] abstract database interface. === Description {{orm-db-rqlite}} implements the {{orm-db}} backend protocol against [[https://rqlite.io|rqlite]], a lightweight, distributed relational database built on SQLite that is accessed over HTTP. It provides a single constructor, {{rqlite-backend}}, which returns a backend alist suitable for {{db/backend}}. Because rqlite speaks SQLite SQL, this backend reuses the {{sqlite3}} {{ssql}} dialect. The connection is stateless: each query and statement is sent as an HTTP request to the rqlite cluster, so there is no persistent socket to manage — {{db/close}} is a no-op. === Requirements * CHICKEN Scheme 5.0 or later * Dependencies: orm, ssql, http-client, uri-common, intarweb, medea, logger * A running rqlite server or cluster === Installation chicken-install orm-db-rqlite === Basic Usage (import orm-db orm-db-rqlite orm) ;; Select the backend; db/path is the rqlite HTTP base URL (db/backend (rqlite-backend)) (db/path "http://localhost:4001") (db/connect) (define-model users) (users/all) (db/close) ; no-op for rqlite The {{db/path}} value is the base HTTP URL of the rqlite node, optionally including credentials. Requests are issued against the {{/db/request}} endpoint with the {{timings}} and {{associative}} options. ;; With basic-auth credentials and TLS (db/path "https://user:pass@db.example.com:4001") === API (rqlite-backend) Returns a backend alist implementing the {{orm-db}} protocol — the keys {{connect}}, {{close}}, {{query}}, and {{execute}} — backed by rqlite's HTTP API. Pass the result to {{db/backend}}. (db/backend (rqlite-backend)) The backend procedures are used by {{orm-db}}; you do not normally call them directly: * '''connect''': records the rqlite base URL from {{db/path}} (no socket is opened) * '''close''': no-op * '''query''': POSTs a SELECT to {{/db/request}}, returning a vector of alists (rqlite's {{associative}} mode yields rows keyed by column name) * '''execute''': POSTs a statement and returns the requested output value; rqlite errors are raised as a CHICKEN {{(error 'rqlite ...)}} condition === SQL Dialect The backend includes the {{sqlite3}} {{ssql}} dialect and registers an {{rqlite}} dialect that delegates to it, so {{ssql}} S-expression forms render as SQLite-compatible SQL. Raw SQL strings are passed through unchanged. === Notes on Distributed Use * Every {{db/query}} / {{db/execute}} is an independent HTTP round-trip; there is no client-side transaction state. * Because the connection is just a base URL, the same model code works unchanged against a single rqlite node or a multi-node cluster behind a load balancer. * This backend pairs naturally with the {{orm-migrate}} CLI (see [[orm]]): {{orm-migrate -b rqlite -path "https://user:pass@host:4001" -f migrations.scm}}. === License Copyright © 2026 Rolando Abarca. Released under the BSD-3-Clause license. === Repository Part of the [[https://github.com/schematra/chicken-orm-egg|chicken-orm-egg]] project. See [[orm]] for the ORM itself.