Diese Seite wurde mit KI-Unterstützung aus dem Englischen übersetzt. Bei Abweichungen ist die englische Version maßgeblich.
SET
Weist eine Sitzungsvariable zu oder konfiguriert Laufzeiteinstellungen für die aktuelle Sitzung. Verfügbar in StackQL v1.0 und höher.
Siehe auch:
[UNSET] [ Sitzungsvariablen ] [ Provider-Sitzungen ] [IDENTIFIER]
Syntax
setStatement::=
setExpression::=
SET [ SESSION ] <target> = { <literal> | DEFAULT | <reference> } [, <target> = { <literal> | DEFAULT | <reference> } ...];
target
Ein einfacher Bezeichner (region), ein Name in doppelten Anführungszeichen ("providers.saved") oder ein Konfigurationspfad mit Dollar-Präfix in doppelten Anführungszeichen ("$.auth.aws.password").
literal
Eine Zeichenkette, eine Zahl, ein boolescher Wert oder null. Zeichenketten stehen in einfachen Anführungszeichen. Arrays und Objekte sind keine skalaren Werte; halten Sie ein JSON-Dokument als Zeichenkette.
DEFAULT
Setzt das Ziel zurück, gleichbedeutend mit UNSET. Ein explizites null ist ein gespeicherter Wert, kein Zurücksetzen.
reference
Eine Referenz "$name" in doppelten Anführungszeichen auf eine vorhandene Variable, zum Beispiel SET "$.providers.production" = "$providers.saved";.
SESSION
Optional und der einzige Gültigkeitsbereich, den StackQL hat. SET SESSION name = ... und SET name = ... sind dieselbe Anweisung: Jede Zuweisung gehört zur aktuellen Sitzung und zu nichts anderem. Das Schlüsselwort existiert, damit Skripte genauso lesbar sind wie auf Datenbanken, bei denen sich SET SESSION und SET GLOBAL unterscheiden. SET GLOBAL wird geparst, aber mit configuration scope "global" is not supported; use SESSION abgewiesen, weil es keinen sitzungsübergreifenden Zustand gibt.
Zuweisungen in einer SET-Liste werden der Reihe nach angewendet und sind keine Transaktion: Schlägt die zweite Zuweisung einer Liste fehl, bleibt die erste in Kraft.
Ziele
| Ziel | Wirkung |
|---|---|
name oder "name" | Speichert eine skalare Sitzungsvariable, die in späteren Anweisungen als $name dereferenziert wird. Punkte allein wählen keine Konfiguration aus: "providers.saved" ist eine Variable namens providers.saved. Die ältere Schreibweise "variables.name" ist ein Alias für name. |
"$.auth.<provider>.<field>" | Setzt ein Feld des Authentifizierungskontexts des Providers für diese Sitzung. Die Felder sind die Schlüssel des --auth-Objekts für diesen Provider, zum Beispiel credentialsenvvar, password oder token_url. |
"$.providers.<alias>" | Bindet einen Provider-Alias mit eigenen Anmeldedaten, Mandantenbezeichnung, Parameterstandardwerten und Tuning. Der Wert ist ein JSON-Dokument in einer Zeichenkette, siehe Provider-Sitzungen. |
"$.secrets.<name>" | Speichert ein Secret im Secret-Store der Sitzung. Der Wert ist eine literale Zeichenkette, typischerweise ein JSON-auth-Dokument, auf das aus einem Provider-Alias als auth_secret verwiesen wird. |
"$.secret_store" | Wählt einen persistenten Secret-Store des Betriebssystems aus, {"backend":"os","namespace":"..."}. Erfordert das Operator-Flag --allow-persistent-secrets. |
Jede Form wirkt sich nur auf die aktuelle Sitzung aus. Unabhängige Verbindungen zu einem srv-Server sehen die Zuweisungen der jeweils anderen nicht, und jede MCP-Anfrage ist eine eigene Sitzung; führen Sie Konfiguration und Abfrage bei Verwendung des MCP-Servers daher in einem Anweisungs-Batch aus.
Beispiele
Sitzungsvariablen setzen
Jede Anweisung speichert einen Skalar unter dem angegebenen Namen, und der Wert behält seinen Typ: region ist eine Zeichenkette, minimum_count eine Ganzzahl und enabled ein boolescher Wert. null wird als Wert gespeichert, sodass $optional_value später zu SQL-NULL aufgelöst wird, statt als undefiniert fehlzuschlagen. Die letzte Anweisung weist zwei Variablen in einer Liste zu.
SET region = 'ap-southeast-2';
SET minimum_count = 3;
SET enabled = true;
SET optional_value = null;
SET suffix = 'East', some_id = 42;
Den Sitzungsbereich explizit angeben
Die ersten beiden Anweisungen sind identisch: SESSION benennt den einzigen Gültigkeitsbereich, den es gibt, und beide Zuweisungen gelten, bis die Variable entfernt wird oder die Sitzung endet. Verwenden Sie das Schlüsselwort, wenn ein Skript genauso lesbar sein soll wie auf einer Datenbank, die zwischen Sitzungs- und globalen Einstellungen unterscheidet. Die auskommentierte Anweisung dient dem Vergleich: Sie weist nichts zu und schlägt mit configuration scope "global" is not supported; use SESSION fehl, weil zwischen Sitzungen kein Zustand geteilt wird.
SET region = 'ap-southeast-2';
SET SESSION region = 'ap-southeast-2';
/*
SET GLOBAL region = 'ap-southeast-2';
-- FAILS with configuration scope "global" is not supported; use SESSION
*/
Eine Variable in einer Abfrage verwenden
Dereferenzieren Sie eine Variable mit $name, ohne Anführungszeichen, an jeder Ausdrucksposition. Werte behalten ihren Typ: Zeichenketten werden als SQL-Literale escaped, Zahlen, boolesche Werte und null werden durchgereicht. Variablen in einer WHERE-Klausel werden aufgelöst, bevor die Anfrage geplant wird, und daher wie Literale an den Provider übergeben.
SET project = 'stackql-demo';
SET zone = 'australia-southeast1-a';
SELECT name, status FROM google.compute.instances
WHERE project = $project AND zone = $zone;
Eine Variable zurücksetzen
DEFAULT entfernt die Variable, genau wie UNSET, sodass ein späteres $region mit variable "$region" is not defined fehlschlägt, bis sie erneut gesetzt wird; die auskommentierte Abfrage zeigt diesen Fehler. Das unterscheidet sich von der Zuweisung von null, die die Variable mit dem Wert NULL bestehen lässt.
SET region = 'ap-southeast-2';
SET region = DEFAULT;
/*
SELECT name FROM aws.s3.buckets WHERE region = $region;
-- FAILS with variable "$region" is not defined
*/
Einen Wert aus einer anderen Variable kopieren
Die rechte Seite kann eine Referenz in doppelten Anführungszeichen auf eine vorhandene Variable sein; das kopiert den Wert, den sie zu diesem Zeitpunkt enthält. Hier wird eine Provider-Bindung zunächst als gewöhnliche Variable namens providers.saved gespeichert (die Punkte machen sie nicht zur Konfiguration) und dann durch Kopieren auf den Pfad $.providers.production aktiviert. Das anschließende Entfernen der gespeicherten Kopie wirkt sich nicht auf die aktive Bindung aus.
SET "providers.saved" = '{"provider":"aws","tenancy":"production-account","auth":{"type":"aws_signing_v4","access_key_id_env_var":"PRODUCTION_AWS_ACCESS_KEY_ID","secret_access_key_env_var":"PRODUCTION_AWS_SECRET_ACCESS_KEY"}}';
SET "$.providers.production" = "$providers.saved";
UNSET "providers.saved";
Ein Anmeldedatenfeld für diese Sitzung überschreiben
Der Authentifizierungskontext eines Providers ist das Objekt, das beim Start über --auth für ihn angegeben wurde. Ein Pfad unter $.auth ersetzt ein Feld dieses Objekts für den Rest der Sitzung und lässt die anderen Felder unverändert. Hier wird der GitHub-Provider auf eine andere Umgebungsvariable verwiesen, die ein schreibgeschütztes Token enthält; die Variable wird aus der Prozessumgebung von StackQL gelesen, und spätere Abfragen gegen github.* verwenden sie, bis das Feld entfernt wird oder die Sitzung endet.
SET "$.auth.github.credentialsenvvar" = 'GITHUB_TOKEN_READONLY';
Einen Provider-Alias binden
Ein Provider-Alias ist eine zweite, unabhängig konfigurierte Instanz eines Providers, die in Abfragen anstelle des Provider-Namens verwendet wird. Der Wert ist ein JSON-Dokument in einer Zeichenkette: provider benennt den zugrunde liegenden Provider, tenancy bezeichnet das Konto, auth ist ein Anmeldedatenblock in derselben Form wie --auth, und params liefert Standardwerte für Anfrageparameter wie region. Abfragen gegen production.s3.buckets laufen dann mit diesen Anmeldedaten, während aws.s3.buckets die Startkonfiguration behält. Die vollständige Liste der Schlüssel finden Sie unter Provider-Sitzungen.
SET "$.providers.production" = '{
"provider": "aws",
"tenancy": "production-account",
"auth": {
"type": "aws_signing_v4",
"access_key_id_env_var": "PRODUCTION_AWS_ACCESS_KEY_ID",
"secret_access_key_env_var": "PRODUCTION_AWS_SECRET_ACCESS_KEY"
},
"params": {"region": "ap-southeast-2"}
}';
SELECT name FROM production.s3.buckets;