SQLを貼り付けると、ここに解析結果が表示されます。
これは何?
本番データベースに手作業でUPDATE/DELETEを実行する前に、SQLを貼り付けるだけで 「このSQLが何をするか」を日本語で読み返せるツールです。 操作対象・WHERE条件・JOINで残る行と落ちる行を日本語で書き下し、あわせて 「WHERE句の抜け」「常に真になる条件」「外部結合がWHEREで打ち消されている」などの 定番の事故パターンを検出します。組織への導入やアカウント登録は不要で、 このページを開くだけで使えます。
MySQL / PostgreSQL / SQL Server を選んだ場合は、ページに同梱したSQLパーサで 構文解析(AST)を行い、日本語要約とAST基盤の検出を表示します。 Oracle・汎用を選んだ場合、および構文解析に失敗した場合は、 従来の正規表現ベースの簡易チェックに切り替わります(画面上に明示されます)。
PL/SQL(CREATE OR REPLACE PACKAGE / PROCEDURE / FUNCTION / TRIGGER、
DECLARE・BEGIN 〜 END; /)を貼り付けた場合は、ブロックの構造を読み取って
中に埋め込まれたDML(INSERT / UPDATE / DELETE / MERGE / SELECT INTO・カーソル定義)を1本ずつ取り出し、
通常の文と同じチェックをかけます。ただし
制御フロー(ループ・分岐・例外処理)は解析していません。
どのDMLが実際に何回実行されるか、例外時に何がロールバックされるかは判断していないため、
抽出したDML単位の簡易チェックとして読んでください。
これは需要検証のための試作品(プロトタイプ)です。 構文解析に成功した場合でも、意味論のすべてを検査できるわけではありません。 「危険が検出されない = 安全」ではありません。 最終判断は必ず人間が行い、可能な限り検算SELECTやステージング環境での確認を併用してください。
チーム版に興味はありますか?
CI/CD連携によるプルリクエスト時の自動チェック、ルールのカスタマイズ、 レビュー履歴の保存・共有など、チーム運用向けの機能を検討中です。 興味がある方・ご意見のある方は、GitHubのDiscussionsで教えてください。 現在のSQLMeganeについての質問・要望も歓迎します。 「使ってみたけど合わなかった」「既存の方法で足りている」という声も、同じくらい参考になります。
誤検知・検出漏れの報告はIssueで歓迎します。特に誤検知の報告はお待ちしています (検出漏れより誤検知のほうが、ツールへの信頼を早く壊すため)。
質問・要望はこちら 使わない・合わない理由を教える 誤検知・検出漏れを報告(Issue)