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 ihr Aufgabe darin, in Python folgende Funktion zu implementieren:
def gql_to_jon(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 |
---|---|
|
|
Im Folgenden finden sie eine Reihe von Beispielabfragen, die für ihren Code als Test dienen sollen.
Abfrage | Bedeutung |
---|---|
Beispiel 01
|
Alle Objekte aus Tabelle "t1". Es soll nur Spalte "a" ausgegeben werden. |
Beispiel 02
|
Wie Beispiel 01. Es sollen aber nur Objekte ausgegeben werden, bei denen die Spalte "a" den Wert 'a1' hat. |
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. |
Zum Testen werde folgenden Beispieldaten bereitgestellt.
t1 | t2 | t3 |
---|---|---|
![]() |
![]() |
![]() |
Hier werden die Ergebnisse angegeben, die ihr Code bei der jeweiligen Abfrage liefern soll.
Abfrage | Erwartetes JSON-Ergebnis |
---|---|
Beispiel 01
|
|
Beispiel 02
|
|
Beispiel 03
|
|
Beispiel 04
|
|
Beispiel 05
|
|
Beispiel 06
|
|
Gehen sie bei der Implementierung wie folgt vor: