std.db.mysql

Vollständige MySQL-Clientimplementierung auf Basis des MySQL-Binärprotokolls (Protocol 41) direkt über TCP – ohne externe Clientbibliothek. Unterstützt Verbindungsaufbau mit Authentifizierung, SQL-Abfragen, strukturierte Ergebnisverarbeitung, Transaktionen (BEGIN/COMMIT/ROLLBACK) und typsichere Prepared Statements mit Parameterbindung.

Einsatzbereiche sind alle Anwendungen, die Daten persistent in MySQL- oder MariaDB-Datenbanken speichern – von einfachen CRUD-Operationen bis hin zu komplexen transaktionalen Workflows.

import std.db.mysql;

var conn: MySQLConn := MySQLConnect("127.0.0.1", 3306, "user", "pass", "mydb");
var res: MySQLResult := MySQLQuery(conn, "SELECT id, name FROM users WHERE active = 1");

while (MySQLFetchRow(res) != 0) {
    PrintStr(MySQLGetRowStr(res, 0, 1));  // Spalte "name"
}

MySQLFreeResult(res);
MySQLClose(conn);


Imports

  • std.net.types
  • std.net.syscalls
  • std.string
  • std.crypto.sha1

Konstanten

Name Typ Wert Sichtbarkeit
CLIENT_LONG_PASSWORD int64 1 pub
CLIENT_FOUND_ROWS int64 2 pub
CLIENT_LONG_FLAG int64 4 pub
CLIENT_CONNECT_WITH_DB int64 8 pub
CLIENT_PROTOCOL_41 int64 512 pub
CLIENT_TRANSACTIONS int64 8192 pub
CLIENT_SECURE_CONNECTION int64 32768 pub
CLIENT_MULTI_STATEMENTS int64 65536 pub
CLIENT_MULTI_RESULTS int64 131072 pub
CLIENT_PLUGIN_AUTH int64 524288 pub
DEFAULT_CAP_FLAGS int64 762383 pub
SERVER_STATUS_IN_TRANSACTION int64 1 pub
SERVER_STATUS_AUTOCOMMIT int64 2 pub
MYSQL_TYPE_DECIMAL int64 0 pub
MYSQL_TYPE_TINY int64 1 pub
MYSQL_TYPE_SHORT int64 2 pub
MYSQL_TYPE_LONG int64 3 pub
MYSQL_TYPE_FLOAT int64 4 pub
MYSQL_TYPE_DOUBLE int64 5 pub
MYSQL_TYPE_NULL int64 6 pub
MYSQL_TYPE_TIMESTAMP int64 7 pub
MYSQL_TYPE_LONGLONG int64 8 pub
MYSQL_TYPE_INT24 int64 9 pub
MYSQL_TYPE_DATE int64 10 pub
MYSQL_TYPE_TIME int64 11 pub
MYSQL_TYPE_DATETIME int64 12 pub
MYSQL_TYPE_YEAR int64 13 pub
MYSQL_TYPE_VARCHAR int64 15 pub
MYSQL_TYPE_BIT int64 16 pub
MYSQL_TYPE_NEWDECIMAL int64 246 pub
MYSQL_TYPE_BLOB int64 252 pub
MYSQL_TYPE_VARSTRING int64 253 pub
MYSQL_TYPE_STRING int64 254 pub
MYSQL_TYPE_GEOMETRY int64 255 pub
COM_QUIT int64 1 pub
COM_INIT_DB int64 2 pub
COM_QUERY int64 3 pub
COM_PING int64 14 pub
COM_STMT_PREPARE int64 22 pub
COM_STMT_EXECUTE int64 23 pub
COM_STMT_CLOSE int64 25 pub
MAX_PACKET_SIZE int64 16777215 pub
MYSQL_ERRMSG_SIZE int64 256 pub
MYSQL_NAME_SIZE int64 64 pub
SCRAMBLE_LENGTH int64 20 pub
MYSQL_STATUS_NOT_CONNECTED int64 0 pub
MYSQL_STATUS_CONNECTED int64 1 pub

Typen

MySQLConn (struct)

Feld Typ
fd int64
host pchar
port int64
user pchar
password pchar
database pchar
packet_num int64
last_payload_len int64
server_ver int64
cap_flags int64
charset int64
status int64
server_scramble int64
last_error int64
errmsg pchar
error_num int64
affected_rows int64
insert_id int64
field_count int64

MySQLResult (struct)

Feld Typ
field_count int64
affected_rows int64
insert_id int64
server_status int64
warning_count int64
message pchar
fields int64
field_alloc int64
current_field int64
row_count int64
rows int64
row_alloc int64
current_row int64
row_lengths int64
field_buf int64

MySQLField (struct)

Feld Typ
catalog pchar
db pchar
table pchar
org_table pchar
name pchar
org_name pchar
charset int64
length int64
ft int64
flags int64
decimals int64
def pchar

MySQLRow (struct)

Feld Typ
values int64
lengths int64
count int64

MySQLStmt (struct)

Feld Typ
param_count int64
column_count int64
params_alloc int64
result MySQLResult

StmtParam (struct)

Feld Typ
is_null bool
error int64

Funktionen

Signatur Sichtbarkeit Beschreibung
newMySQLConn(): MySQLConn priv Erstellt leere MySQLConn-Struktur
freeMySQLConn(conn: MySQLConn): void priv Gibt Speicher der MySQLConn-Struktur frei
newMySQLResult(): MySQLResult priv Erstellt leere MySQLResult-Struktur
freeMySQLResult(res: MySQLResult): void priv Gibt Speicher der MySQLResult-Struktur frei
writeInt3(buf: int64, val: int64): void priv Schreibt 3-Byte-Integer in Puffer
readInt3(buf: int64): int64 priv Liest 3-Byte-Integer aus Puffer
MySQLSendPacket(conn: MySQLConn, data: int64, len: int64): bool pub Sendet Paket über MySQL-Verbindung
MySQLReadPacket(conn: MySQLConn): int64 pub Empfängt Paket von MySQL-Server
buildHandshakeResp41(conn: MySQLConn, buf: int64, authHash: int64): int64 priv Erstellt Protocol-41-Handshake-Antwort
parseIPv4Byte(host: pchar, offset: int64): int64 priv Parst einzelnen IPv4-Adressteil
skipIPv4Part(host: pchar, offset: int64): int64 priv Überspringt IPv4-Teil im String
MySQLConnect(host: pchar, port: int64, user: pchar, pass: pchar, db: pchar): MySQLConn pub Stellt MySQL-Verbindung her
MySQLClose(conn: MySQLConn): void pub Schließt MySQL-Verbindung
mysqlSendCommand(conn: MySQLConn, cmd: int64, data: int64, len: int64): bool priv Sendet MySQL-Kommando an Server
parseOKPacket(conn: MySQLConn, payload: int64, payloadLen: int64): bool priv Verarbeitet MySQL-OK-Paket
parseErrorPacket(conn: MySQLConn, payload: int64, payloadLen: int64): bool priv Verarbeitet MySQL-Fehlerpaket
MySQLQuery(conn: MySQLConn, sql: pchar): MySQLResult pub Führt SQL-Abfrage aus
MySQLError(conn: MySQLConn): pchar pub Gibt letzte Fehlermeldung zurück
MySQLErrno(conn: MySQLConn): int64 pub Gibt letzten MySQL-Fehlercode zurück
MySQLAffectedRows(conn: MySQLConn): int64 pub Gibt Anzahl betroffener Zeilen zurück
MySQLInsertId(conn: MySQLConn): int64 pub Gibt Auto-Increment-ID des letzten Inserts zurück
MySQLNumFields(res: MySQLResult): int64 pub Gibt Spaltenanzahl des Ergebnisses zurück
MySQLNumRows(res: MySQLResult): int64 pub Gibt Zeilenanzahl des Ergebnisses zurück
MySQLFreeResult(res: MySQLResult): void pub Gibt Ergebnis-Speicher frei
MySQLFetchRow(res: MySQLResult): int64 pub Liest nächste Ergebniszeile
MySQLDataSeek(res: MySQLResult, rowNum: int64): void pub Setzt Cursor auf bestimmte Zeile
MySQLGetFieldName(res: MySQLResult, idx: int64): pchar pub Gibt Spaltenname nach Index zurück
MySQLGetFieldType(res: MySQLResult, idx: int64): int64 pub Gibt Datentyp einer Spalte zurück
MySQLGetFieldLength(res: MySQLResult, idx: int64): int64 pub Gibt maximale Feldlänge zurück
skipLenEncStr(row: int64, pos: int64): int64 priv Überspringt length-encoded String im Paket
MySQLGetRowStr(res: MySQLResult, row: int64, idx: int64): pchar pub Liest Zellwert als String
MySQLGetRowInt(res: MySQLResult, row: int64, idx: int64): int64 pub Liest Zellwert als Integer
MySQLIsNull(res: MySQLResult, row: int64, idx: int64): bool pub Prüft ob Zellwert NULL ist
MySQLBegin(conn: MySQLConn): bool pub Startet Datenbanktransaktion
MySQLCommit(conn: MySQLConn): bool pub Bestätigt offene Transaktion
MySQLRollback(conn: MySQLConn): bool pub Bricht offene Transaktion zurück
MySQLSetAutoCommit(conn: MySQLConn, enable: bool): bool pub Setzt Auto-Commit-Modus
MySQLInTransaction(conn: MySQLConn): bool pub Prüft ob Transaktion aktiv ist
newMySQLStmt(): MySQLStmt priv Erstellt leere MySQLStmt-Struktur
freeMySQLStmt(stmt: MySQLStmt): void priv Gibt Speicher des Prepared Statement frei
MySQLStmtPrepare(conn: MySQLConn, sql: pchar): MySQLStmt pub Bereitet Prepared Statement vor
ensureStmtExecBuf(minSize: int64): int64 priv Stellt ausreichenden Exec-Puffer sicher
encodeStmtParamBinary(paramIdx: int64, stmt: MySQLStmt, outBuf: int64): int64 priv Kodiert Parameter binär für Execution
MySQLStmtExecute(conn: MySQLConn, stmt: MySQLStmt): MySQLResult pub Führt Prepared Statement aus
MySQLStmtBindParam(stmt: MySQLStmt, paramIdx: int64, typeCode: int64, buffer: int64, bufferLen: int64): bool pub Bindet Puffer an Statement-Parameter
MySQLStmtBindNull(stmt: MySQLStmt, paramIdx: int64, isNull: bool): bool pub Setzt Parameter auf NULL
MySQLStmtBindInt(stmt: MySQLStmt, paramIdx: int64, value: int64): bool pub Bindet Integer an Statement-Parameter
MySQLStmtBindStr(stmt: MySQLStmt, paramIdx: int64, str: pchar): bool pub Bindet String an Statement-Parameter
MySQLStmtBindResult(stmt: MySQLStmt, idx: int64, typeCode: int64, buffer: int64, bufferLen: int64): bool pub Bindet Ergebnispuffer an Statement
MySQLStmtFetch(stmt: MySQLStmt): int64 pub Liest nächste Zeile des Statement-Ergebnisses
MySQLStmtClose(stmt: MySQLStmt): void pub Schließt Prepared Statement
MySQLStmtReset(stmt: MySQLStmt): void pub Setzt Prepared Statement zurück
MySQLPoolCreate(maxConnections: int64): int64 pub Erstellt Connection-Pool
MySQLPoolDestroy(poolHandle: int64): void pub Zerstört Connection-Pool