Hallo allerseits,
wahrscheinlich bin ich nur zu dumm, die Dokumentation
zu verstehen; ich gehe gerade die allerersten Schritte
mit sqlite.
Sachlage:
In einem Tcl-Script verwende ich eine in-Memory-sqlite-
Datenbank. Dort gibt es z.B. eine Tabelle "segments",
die die Spalten "symname", "pid1" und "pid2" enthält.
Diese Tabelle enthält zu jedem Liniensegment den Namen
das Symbols, zu dem dieses Liniensegment gehört (symname)
sowie den Index (die Nummer) des Anfangspunktes (pid1)
und des Endpunktes (pid2). Das klappt soweit.
Jetzt kann ich mittels
1 |
|
2 | symdb eval { SELECT pid1, pid2 FROM segment WHERE symname ="resistor" }
|
alle Anfangs- und Endpunkte aller Segmente abfragen, die
zum Symbol "resistor" gehören. Auch das funktioniert; die
zurückgelieferten Nummern sind vollständig und korrekt.
Die Sache hat nur den Schönheitsfehler, dass die Ergebnismenge
einfach als langer, unstrukturierter Bandwurm geliefert wird:
"0 2 1 3 3 7 7 5 5 1 6 8"
Ich hätte aber gern: "{{0 2} {1 3} {3 7} {7 5} {5 1} {6 8}}",
denn die Datenbanktabelle weiss ja, dass zu jedem Segment
(=jeder Zeile in der Tabelle) ZWEI Punkte gehören, ein
Anfangs- und ein Endpunkt, und dass insgesamt sechs Segmente
zur Ergebnismenge gehören.
Kann man diese Struktur irgendwie direkt aus dem "eval"-
Kommando von sqlite herausholen?
Ich habe bereits herausgefunden, dass man der Abfrage
ein assoziatives Array und ein Script mitgeben kann,
das bei jeder Ergebniszeile einmal ausgeführt wird, aber
ich sehe nicht, wie mir das helfen soll. Ich will die
Ergebnismenge ja nicht in einem Array haben -- das ist
ja noch umständlicher als ein langer Bandwurm!
Nachträglich mit Tcl-Mitteln umformatieren geht natürlich,
aber das finde ich nicht schön. Mich stört, dass ich die
Struktur der Daten dann praktisch zweimal hinschreiben
muss -- einmal im SELECT und einmal in der nachfolgenden
Umformatierung. Das führt zu Irrtümern.
Wahrscheinlich habe ich da nur einen Verständnisfehler.
Ich hoffe, meine Frage ist verständlich beschrieben. Ich
danke im Voraus für jeden ernsthaften Versuch der Hilfe.