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.typesstd.net.syscallsstd.stringstd.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 |
