====== std.db ====== Datenbank-Units für die direkte Kommunikation mit relationalen Datenbanken und Key-Value-Stores. Lyx implementiert alle Datenbankprotokolle **nativ über TCP** — ohne externe Treiber, Middleware-Schichten oder ORMs. Ausnahme: ''std.db.sqlite'' bindet libsqlite3 per FFI ein. ^ Unit ^ Protokoll / Port ^ Beschreibung ^ | [[lyx_-_programmiersprache:units:db:mysql|std.db.mysql]] | MySQL Prot. 41 / 3306 | MySQL/MariaDB-Client: Verbindung, Abfragen, Prepared Statements, Transaktionen | | [[lyx_-_programmiersprache:units:db:postgres|std.db.postgres]] | Wire Protocol v3 / 5432 | PostgreSQL-Client ohne libpq: vollständige Frontend/Backend-Kommunikation, Binding, Connection Pool | | [[lyx_-_programmiersprache:units:db:sqlite|std.db.sqlite]] | FFI libsqlite3 | SQLite3-Bindings: Verbindung, Prepared Statements, Binding (1-basiert), Column-Accessoren (0-basiert) | | [[lyx_-_programmiersprache:units:db:redis|std.db.redis]] | RESP / 6379 | Redis-Vollclient: Strings, Lists, Hashes, Sets, Sorted Sets, Pub/Sub, Pipelining, TTL | | [[lyx_-_programmiersprache:units:db:redis_simple|std.db.redis_simple]] | RESP / 6379 | Redis-Minimal-Client: nur GET/SET/DEL/EXPIRE — ohne std.string-Abhängigkeit | ---- ===== Designprinzipien ===== * **Kein Treiber-Layer** — Lyx spricht das native Datenbankprotokoll direkt; kein libmysql, kein libpq, kein ODBC, kein Redis-Wrapper * **Keine Abstraktionsschicht** — jede Unit ist auf ihr Protokoll spezialisiert und gibt dessen volle Funktionalität frei * **Explizite Verbindungsverwaltung** — Verbindungen, Abfragen und Ressourcen werden manuell verwaltet * **Fehler per Rückgabewert** — kein throw/catch; Fehler werden als ''int64 < 0'' oder ''0''-Pointer signalisiert ---- ===== Verfügbare Units ===== ==== std.db.mysql ==== MySQL-Client über MySQL-Protokoll 41 (TCP-Port 3306). Unterstützt Verbindungsaufbau mit Authentifizierung, einfache Abfragen, Ergebnis-Sets, Prepared Statements und Transaktionen. import std.db.mysql; var conn := MySQLConnect("127.0.0.1", 3306, "user", "pass", "mydb"); var res := MySQLQuery(conn, "SELECT id, name FROM users WHERE active = 1"); while (MySQLFetchRow(res) != 0) { Print(MySQLGetRowStr(res, 0, 1)); } MySQLFreeResult(res); MySQLClose(conn); → [[lyx_-_programmiersprache:units:db:mysql|Vollständige Dokumentation: std.db.mysql]] ==== std.db.postgres ==== PostgreSQL-Client über das native Frontend/Backend Wire Protocol v3 (TCP-Port 5432) — ohne libpq. Unterstützt SimpleQuery, Prepared Statements, Parameter-Binding (0-basiert), Transaktionen mit Savepoints, Connection Pool, LISTEN/NOTIFY und COPY. MD5-Auth über ''std.crypto.md5''. import std.db.postgres; var conn := PGConnect("127.0.0.1", 5432, "mydb", "user", "pass"); if (PGIsConnected(conn) == 0) { return; } var res := PGQuery(conn, "SELECT id, email FROM users LIMIT 10"); var i: int64 := 0; while (i < PGNumRows(res)) { PGFetchRow(res, i); PrintLn(PGGetStr(res, 1)); // email i := i + 1; } PGFreeResult(res); PGClose(conn); → [[lyx_-_programmiersprache:units:db:postgres|Vollständige Dokumentation: std.db.postgres]] ==== std.db.sqlite ==== SQLite3-Bindings via FFI (''libsqlite3.so.0''). Prepared-Statement-Muster: ''SQLiteStmtPrepare'' → Bind → ''SQLiteStmtStep'' → Column-Accessoren → ''SQLiteStmtFinalize''. Parameter-Binding ist **1-basiert**, Column-Zugriff **0-basiert**. import std.db.sqlite; var db := SQLiteOpen("/data/app.db"); var stmt := SQLiteStmtPrepare(db, "SELECT name FROM users WHERE id = ?"); SQLiteBindInt(stmt, 1, 42); if (SQLiteStmtStep(stmt) == SQLITE_ROW) { Print(SQLiteColumnText(stmt, 0)); } SQLiteStmtFinalize(stmt); SQLiteClose(db); → [[lyx_-_programmiersprache:units:db:sqlite|Vollständige Dokumentation: std.db.sqlite]] ==== std.db.redis ==== Redis-Vollclient über das RESP-Protokoll (TCP-Port 6379). Unterstützt alle Redis-Datenstrukturen: Strings, Lists, Hashes, Sets, Sorted Sets, Streams sowie Pub/Sub, Pipelining und TTL-Verwaltung. import std.db.redis; var conn := RedisConnect("127.0.0.1", 6379); RedisSet(conn, "session:42", "user_data_json"); RedisExpire(conn, "session:42", 3600); var val := RedisGet(conn, "session:42"); Print(val); RedisClose(conn); → [[lyx_-_programmiersprache:units:db:redis|Vollständige Dokumentation: std.db.redis]] ==== std.db.redis_simple ==== Minimaler Redis-Client ohne ''std.string''-Abhängigkeit. Stellt nur die vier grundlegenden Operationen bereit: ''GET'', ''SET'', ''DEL'', ''EXPIRE''. Geeignet für eingeschränkte Umgebungen oder als Laufzeit-Dependency-freie Alternative. → [[lyx_-_programmiersprache:units:db:redis_simple|Vollständige Dokumentation: std.db.redis_simple]] ---- ===== Unit wählen ===== ^ Szenario ^ Empfehlung ^ | Bestehende MySQL/MariaDB-Infrastruktur | ''std.db.mysql'' | | PostgreSQL, Prepared Statements, Connection Pool | ''std.db.postgres'' | | Embedded / Mobile / Single-File | ''std.db.sqlite'' | | Caching, Sessions, Pub/Sub | ''std.db.redis'' | | Minimale Binärgröße, nur GET/SET | ''std.db.redis_simple'' | | Dokumente (JSON), flexible Schemata | ''[[lyx_-_programmiersprache:units:net:mongo|std.net.mongo]]'' | ---- ===== Verwandte Units ===== * ''[[lyx_-_programmiersprache:units:net:mongo|std.net.mongo]]'' — MongoDB Wire Protocol (dokumentenbasiert, im Netzwerk-Namespace) * ''[[lyx_-_programmiersprache:units:crypto:md5|std.crypto.md5]]'' — wird intern von ''std.db.postgres'' für MD5-Authentifizierung genutzt * ''[[lyx_-_programmiersprache:units:hash|std.hash]]'' — Passwort-Hashing für eigene Benutzerverwaltung in Datenbanken * ''[[lyx_-_programmiersprache:units:json|std.json]]'' — JSON-Serialisierung für Redis-Werte oder PostgreSQL-JSONB-Spalten Letzte Aktualisierung: 2026-06-05