Zum Inhalt

Referenz: Ausdruckssprache

Expectos Ausdruckssprache ist, wie Sie Validierungsregeln an einer Entity und — in DuckDB-Form — Mappings an einem Transformer schreiben. Ausdrücke werden in einen typisierten AST geparst (über SQLGlot), gegen eine Funktions-Allowlist geprüft und zu DuckDB-SQL kompiliert — niemals als String interpoliert. Alles außerhalb der Allowlist wird beim Speichern abgelehnt, nicht zur Laufzeit.

Feldreferenzen

Referenz Bedeutung
d.field_name Ein Feld der geprüften Datenzeile.
c.context_field Ein Wert aus dem Session-Kontext (je Lieferung injiziert).

In Transformer-Mappings werden Quellspalten als gequotete Identifier geschrieben, die exakt der Überschrift des Lieferanten entsprechen, z. B. "Konto", "Betrag".

Operatoren

Gruppe Operatoren
Vergleich ==, !=, >, <, >=, <=
Logisch and, or, not

Funktionen

Die Allowlist gruppiert nach Zweck. Dateisystem- und Umgebungsfunktionen sind per Design blockiert.

Gruppe Funktionen (repräsentativ)
String TRIM, LPAD, RPAD, REPLACE, len()
Matching matches() (Regex), in()
Null-Handling is_empty(), nz(), COALESCE, NULLIF
Mathe abs(), round()
Typ CAST, TRY_CAST
Datum STRFTIME, STRPTIME

Regel-Beispiele

Eine Regel besteht, wenn ihr Ausdruck für eine Zeile wahr ist. Der Compiler macht daraus eine Verletzungsabfrage der Form SELECT ... WHERE NOT (expression).

# Konto muss exakt 6 Ziffern haben
len(d.konto) == 6 and matches(d.konto, '^[0-9]+$')

# Betrag darf nicht null sein
abs(d.amount) > 0

# Kostenstelle ist erforderlich
not is_empty(d.cost_center)

Jede Regel trägt außerdem einen Schweregrad (ERROR, WARNING, INFO), optionale Vorbedingungen und lokalisierte Meldungen. Siehe Geschäftsregeln dazu, wie der Schweregrad das Blockieren steuert und wann eine Regel zu not_applicable auflöst.

Mapping-Beispiele (DuckDB-Form)

Transformer-Mappings sind DuckDB-Ausdrücke über die Quellspalten:

LPAD(TRIM("Konto"), 6, '0')                         -- Kontonummer normalisieren
CAST(REPLACE("Betrag", ',', '.') AS DECIMAL(18,4))  -- dt. Dezimal → DECIMAL
STRPTIME("Belegdatum", '%d.%m.%Y')                  -- Datum parsen
(SELECT "name" FROM dict_kontenplan WHERE "code" = "Konto")  -- Katalog-Lookup

Sicherheitsmodell

  • In einen typisierten AST geparst; kein Benutzereingabe-String wird in SQL konkateniert.
  • Gegen die Funktions-Allowlist geprüft; DDL/DML wird beim Parsen abgelehnt.
  • Gequotete Identifier werden vor der Verwendung als DuckDB-Identifier escaped.

Verwandt