クエリを書き直さずにステージングと本番で SQL の値を使い回すには?

ステージングから本番へタブを移しても、制限、絞り込み、テスト用の値を差し替えられ、クエリは書き直しません。値は変数パネルにあり、タブの環境に従います。

ステージングでは、同じクエリでも小さい LIMIT、テスト用の id、偽のメール、きつめの絞り込みが欲しい。本番では値が違います。

置く場所がなければ、数字は各ステートメントに貼られます。タブがステージングから本番へ移ると、手で直します。SQL 本体のバインド($1、?)は、その実行のパラメーターを埋めます。環境ごとの値は持たず、タブにも付いていきません。

Kerry Studio は SQL の変数でこれを扱います。名前を値、リテラル、$faker. ジェネレーター、または SQL 断片に結びます。値は 変数 パネルにあります。実行時に Kerry がトークンを差し替え、解決済みの SQL をデータベースへ送ります。エディターのクエリはそのままです。

これはエンジン本体のバインドではありません。クライアント側の置換です。データベースが受け取る SQL には、すでに値が入っています。

変数の作り方

開いた workspace と SQL タブが必要です。

エディターから

  1. クエリに :変数 と書きます。例は :上限。
  2. スペースを押します。
  3. 名前の横の + をクリックします。
  4. 変数 パネルがその行で開きます。値と、テキスト以外なら型を入れます。

パネルから

  1. 変数 パネルを開きます。右サイドバーのアイコン、またはパレット(⌘K / CtrlK)→ 変数パネルを開く。
  2. 新しい変数 をクリックします。
  3. 識別子を : なし で入れます。
  4. 型、スコープ(ローカル または グローバル)、編集している環境の値(デフォルト またはプロジェクトの環境)を選びます。
  5. 値を入れます。エディターでは :変数 を使います。

ローカル は 1 つの workspace で効きます。グローバル はすべてで効きます。

環境ごとに 1 つの値

変数の書き方は 2 つあります。

:変数、たとえば :上限 は、タブがいる環境の値を使います。パネルでその環境が空なら デフォルト が入ります。

:変数:環境、たとえば :上限:production は、タブが別の環境にいてもその環境の値を使います。: は名前と環境のあいだだけです。

Postgres ではコロン 2 つ続きはキャストです。:上限::text は「変数 上限 を text に変換」です。環境は選びません。本番なら :上限:production です。

パネルでは、1 行が 1 つの名前です。環境セレクターは別の変数を作りません。その行のどの値を編集しているかだけを切り替えます。

上限 がステージングで 50、本番で 500 なら:

SQL の中タブの環境データベースが受け取るもの
:上限ステージング50
:上限:productionステージング500
sql
SELECT id, total
FROM orders
WHERE total >= :上限
ORDER BY total DESC;

パネルで値を変えても、クエリはそのままです。タブがステージングから本番へ移り、SQL が環境を固定していない :上限 なら、データベースは 50 ではなく 500 を受け取ります。

テキスト、数値、または SQL 断片

型データベースが受け取るもの
テキスト、数値、Boolean、Null対応するリテラル
SQLクエリ内の断片(引用符なし)

型 SQL は WHERE、JOIN、式を保管し、引用符なしでステートメントに入れます。複数のクエリが同じ有効行の条件を共有するなら:

:active_filter(SQL)= status = 'active'

sql
SELECT *
FROM orders
WHERE :active_filter;

$faker. でテストデータを作る

変数の値の $faker. は、実行のたびに新しい値を作ります。テスト用メールなら:

:test_email(テキスト)= $faker.internet.email

sql
INSERT INTO customers (email)
VALUES (:test_email);

$faker. は SQL に直接書いても動きます($faker.person.fullName)。変数に置けば、同じジェネレーターを使い回せます。SQL のコメントと文字列は変数として扱われません。