C#-Referenz: Exporte und Builder#
Diese Referenz verwendet die tatsächlichen Klassen- und Methodennamen. Den leichter lesbaren Einstieg mit Aliasen findest du unter Nutzung, ein vollständiges Programm unter Praxisbeispiel.
Exporte#
| Export | Eingabe | Ergebnis |
|---|---|---|
Call |
DbCall(string Operation, string Json) |
DbTicket(string Id, bool Accepted, string Error) |
TakeResult |
DbResultQuery(string Id) |
DbResult(string Id, string State, int Status, string Code, string Json) |
Die MessagePack-Typen liegen in sh/Contracts.cs. Die Exporte laufen synchron; die eigentliche Anfrage läuft im Hintergrund. Der Helper LtDatabaseClient.Db erledigt Ticket und Ergebnisabholung. Accepted == false lehnt die Anfrage sofort ab. TakeResult liefert pending, bis das Ergebnis verfügbar ist, und gibt es nur einmal aus. Unbekannte oder bereits abgeholte Tickets liefern missing. Nicht abgeholte Ergebnisse werden nach ungefähr zwei Minuten plus viermal Timeout verworfen.
Helper Db#
import/LtDatabase.Server.cs in das Server-Projekt einbinden. Methoden liefern ein DbTicket und rufen done einmal auf; eine unmittelbare Ablehnung kann den Callback sofort ausführen.
| Methode | Aufgabe |
|---|---|
Call(operation, json, done) |
Beliebige unterstützte Operation mit rohem JSON |
Sync(ns, schemaJson, done, dryRun = false) |
Schema deklarieren; optional nur planen |
Describe(ns, done) |
Gespeichertes Schema lesen |
Insert(ns, table, rowJson, done, immediate = false) |
Zeile anlegen; alternativ rowsJson[] |
Find(ns, table, done, filterJson, fields, sortJson, limit, offset) |
Zeilen suchen und seitenweise lesen |
Count(ns, table, done, filterJson) |
Treffer zählen |
Update(ns, table, filterJson, done, setJson, incJson, immediate = false) |
Gefilterte Zeilen ändern |
Upsert(ns, table, rowJson, keys, done, immediate = false) |
Über eindeutigen Schlüssel anlegen oder ändern |
Delete(ns, table, filterJson, done, immediate = false) |
Gefilterte Zeilen löschen |
Flush(ns, done) |
Wartende Änderungen jetzt anwenden |
Health(done) |
Signierte Dienst- und Datenbankprüfung |
Rows(result) |
Zeilen eines erfolgreichen Find-Ergebnisses |
HasMore(result) |
Weitere Seiten vorhanden? |
Number(result) |
Anzahl Treffer beziehungsweise betroffener Zeilen |
InsertedIds(result) |
Generierte Insert-Schlüssel |
IsQueued(result) |
Änderung bisher nur in die Warteschlange aufgenommen? |
ErrorMessage(result) |
Lesbare Fehlermeldung |
Bundle |
Connector-Ordnername; Standard lt_database |
Fehlt das laufende Connector-Bundle, liefert der Helper bundle_unavailable. Vor Rows oder Number immer den Status prüfen; leere Ergebniswerte können sonst Fehler verbergen.
Builder#
Alle Builder erzeugen JSON-Text und maskieren Werte.
| Klasse | Methoden und Bedeutung |
|---|---|
F |
Filter: Eq Ne Gt Gte Lt Lte In NotIn IsNull StartsWith Contains And Or Not |
Q |
Row(("column", value), ...) für Zeilen, set und inc; Sort(("column", descending), ...); Immediate(payloadJson) |
S |
Schema(tables...), Table(name, primaryKey[], columns[], indexes[]?, renamedFrom?), Index(name, unique, columns...) |
Spaltentypen in S |
Int32 Int64 Text LongText Bool Decimal Double Json DateTime Date Uuid Bytes |
S.Column |
Alle Optionen: name, type, length, precision, scale, nullable, unique, autoIncrement, @default, renamedFrom |
JsonText |
JSON schreiben: Quote Value Object Array Raw |
MiniJson |
JSON lesen: Parse TryParse AsObject GetString GetLong GetBool |
Sha256, Wire, Ids.Next() |
Hash/HMAC, Signaturumschläge, neue Kennungen |
MiniJson verwendet Dictionaries, Listen, long oder double, Boolesche Werte und null. Eq bedeutet gleich; Gte größer oder gleich; weitere Kurzformen erklärt das Verzeichnis.
Operationen und Wiederholung#
health, schema.sync, schema.describe, find, count, delete, flush, insert, upsert, update. Außer Health benötigt jede Nutzlast einen erlaubten namespace.
Der Connector wiederholt Transportfehler und unsignierte 502/503/504-Antworten maximal dreimal mit 300 und 600 ms Abstand. Bei 401 erfolgt einmal Zeitsynchronisierung und ein weiterer Versuch. Authentische signierte API-Fehler werden nicht automatisch wiederholt. Insert, Upsert und Update benötigen für Transportwiederholungen einen idempotencyKey; der Helper ergänzt ihn bei Insert und Upsert.
Grenzen: Nutzlast maximal 1.000.000 Zeichen, bis zu 512 wartende Aufträge, Parallelität gemäß maxConcurrent. Fünf Transportfehler hintereinander öffnen den Schutzschalter für 15 Sekunden.
Zustände und Diagnose#
ok bedeutet erfolgreich, bei Write-behind möglicherweise nur angenommen. error ist ein Fehler, pending noch nicht fertig, missing unbekannt oder schon abgeholt. Fehlercode, HTTP-Status und Nachricht zusammen auswerten.
Connector-Fehler: not_configured, unknown_operation, invalid_request, invalid_identifier, namespace_not_allowed, payload_too_large, busy, unavailable, network, unauthorized, rate_limited, bad_signature, bad_response, internal, bundle_unavailable. Die Betriebsanleitung nennt Maßnahmen. Datenbank- und Schemafehler kommen signiert aus der HTTP-API.
| Befehl | Aufgabe |
|---|---|
lt-db-status |
URL, Key-ID, Namespaces, Warteschlange, aktive Anfragen und Zeitversatz; nie das Secret |
lt-db-health |
Signierter Verbindungstest bis zur Datenbank |
lt-db-reload |
Private Dateien neu laden, Schutzschalter zurücksetzen und Zeit abgleichen |
Der Connector nutzt signierte HTTP-Umschläge mit HMAC-SHA256 und prüft jede Antwort. Das exakte Protokoll und Testvektoren stehen unter Signaturen.