GitHub Copilot Chat でよい体験ができたので小さく投稿してみる。
要約
DDL を Copilot に参照させて SQL を書くようにお願いすると精度の高いものを書いてくれる。
環境
- vscode
-
copilotChat拡張を準備
※設定方法などはリンク先を参照 - 実験repo
example
DDLファイルを開く
例題レベルだと何も参照しなくても書いてくれますが、精度が上がるのでアクティブにしておくのがベター。
copilot chat で会話を開始する
以下、会話をそのまま貼り付けます。
GitHub Copilot:
こんにちは bushiyama さん。何かお役に立てることはありますか?
bushiyama:
piyo.hoge_idが0の場合、piyo.fuga_idからfugaレコードを特定してfuga.hoge_idをSETするupdate文を書いて。
GitHub Copilot:
UPDATE piyo
JOIN fuga ON piyo.fuga_id = fuga.id
SET piyo.hoge_id = fuga.hoge_id
WHERE piyo.hoge_id = 0;
bushiyama:
これをdry runしてテストしたい。
GitHub Copilot:
SQLのdry runは、実際にはSQL自体に組み込まれた機能ではありません。ただし、テスト環境での実行やトランザクションを使用して実行後にロールバックすることで、実質的なdry runを実現できます。以下は、トランザクションを使用して更新をテストし、その後ロールバックする方法の一例です。
テスト環境の準備: 実際のデータベースに影響を与えずにテストを行うために、テスト用のデータベース環境を準備します。
トランザクションの開始: 更新を行う前にトランザクションを開始します。これにより、後で変更をロールバックできます。
更新クエリの実行: 提案された更新クエリを実行します。
結果の確認: 必要に応じて、更新が期待通りに行われたかどうかを確認します。
ロールバック: 実際には変更を保存せずに、トランザクションをロールバックします。
以下は、このプロセスを実装するためのSQLコマンドの例です。
-- トランザクションの開始
START TRANSACTION;
-- 更新クエリの実行 (例)
UPDATE piyo
JOIN fuga ON piyo.fuga_id = fuga.id
SET piyo.hoge_id = fuga.hoge_id
WHERE piyo.hoge_id = 0;
-- 結果の確認のためのSELECT文 (例)
SELECT * FROM piyo WHERE hoge_id = 0;
-- ロールバック
ROLLBACK;
注意: この方法は、更新がデータベースに永続的な影響を与えないようにするためのものです。実際のデータベースではなく、テスト環境で実行してください。また、実行する前に、テスト環境が最新の状態にあることを確認してください。
まとめ
ふだん、素の SQL で update 文など書かず自信がなかったので、 copilot さんにお願いしたら欲しいものがスッと返ってきて最高だったっていうお話。