In dieser Aufgabe sollen sie aus vereinfachten GraphQL-Abfragen Postgres-SQL-Code erzeugen, der JSON-Strukturen als Antwort zurückliefert.
Grundlage für die Erzeugung sind Tabellen, die durch Fremdschlüssel miteinander verbunden sind, wie im folgenden Beispiel. GraphQL ermöglicht einen einfachen Zugriff auf solche Strukturen und liefert JSON zurück, das dann in Anwendungsprogrammen direkt weiterverwendet werden kann.

Konkret besteht ihre Aufgabe darin, in Python folgende Funktion zu implementieren:
def gql_to_json(gql: AST) -> str
Die Abfragen werden als Abstract Syntax Trees (AST) bereitgestellt:
@dataclass
class Cond():
l: str
r: str
@dataclass
class AST():
name: str
attr: list[str]
cond: Optional[Cond] = None
sub: Optional['AST'] = None
| Abfrage | AST |
|---|---|
|
|
Zum Testen werden folgenden Beispieldaten bereitgestellt.
| t1 | t2 | t3 |
|---|---|---|
![]() |
![]() |
![]() |
Im Folgenden finden sie eine Reihe von Beispielabfragen, die für ihren Code als Test dienen sollen.
| Abfrage | Bedeutung | Erwartetes JSON-Ergebnis |
|---|---|---|
Beispiel 01
|
Alle Objekte aus Tabelle "t1". Es soll nur Spalte "a" ausgegeben werden. | |
Beispiel 02
|
Alle Objekte aus Tabelle "t1", bei denen die Spalte "a" den Wert 'a1' hat. Es sollen die Spalten "a" und "b" ausgegeben werden. | |
Beispiel 03
|
Wie Beispiel 02. Es sollen zusätzlich alle "t2"-Objekte ausgegeben werden, die mit den "t1"-Objekten verbunden sind. | |
Beispiel 04
|
Wie Beispiel 03. Die verbundenen Objekte sollen gefiltert werden, die Spalte "d" soll den Wert 'd12' haben. | |
Beispiel 05
|
Wie Beispiel 04. Es soll eine weitere Ebene mit den verbundenen "t3"-Objekten ausgegeben werden | |
Beispiel 06
|
Wie Beispiel 05. Die verbundenen "t3"-Objekte sollen gefiltert werden, die Spalte "f" soll den Wert 'f103' haben. | |
Gehen sie bei der Implementierung wie folgt vor: