本文へ移動
hs-sql-agent
2.0.2
ドキュメント 2.0.2
ドキュメント SQL コンパイラ

SQL 実行モデル

hs-sql-agent が信頼できない SQL を検証し、接続先データベース向けの SQL へ変換してから実行する仕組みを説明します。

hs-sql-agent は、AI が生成した SQL をそのまま信頼済みコマンドとして扱いません。実行前に解析、検証、対応能力の確認、アクセスポリシーの適用、接続先データベース向けのコンパイルを行います。

クエリの実行経路

クエリは大きく次の順序で処理されます。

  1. MCP キーを認証し、そのキーに設定されたデータベース、テーブル、ツール、実行上限を適用する。
  2. 対応している SQL を構造化された定義 / AST へ解析する。
  3. 文と入力側 SQL の意味がサポート範囲内にあるか検証する。
  4. 同じ意味を保つために必要な機能を、接続先データベースが安全に表現できるか確認する。
  5. 設定されたデータベース向けに SQL をコンパイルして出力する。
  6. 設定された実行上限の範囲内で SQL を実行する。

SQL コンパイラには、入力側の意味を検証する段階と、出力先の対応能力を確認する段階が明示的に分かれています。対応していない構文や、安全に同じ意味を表現できると確認できない機能は、見た目だけ似た別の構文へ置き換えずに拒否します。

なぜフェイルクローズなのか

複数のデータベースで SQL を扱うと、見た目が似ていても NULL の扱い、型規則、演算子の意味、ページング、識別子、関数、DML の動作が異なる構文が数多くあります。

AI から SQL を受け付ける実行基盤で「可能な範囲で書き換える」方式を採ると、構文としては正しくても意味が変わる危険があります。hs-sql-agent はそのため、暗黙の意味変更よりも明示的な拒否を選びます。

データベースごとの SQL 出力

MCP の公開インターフェースは共通ですが、最終的に生成される SQL はデータベースごとに異なります。現在対応しているデータベースは次のとおりです。

  • PostgreSQL
  • MySQL
  • SQL Server
  • Oracle
  • SQLite
  • Firebird

対応範囲は意図的に限定されています。データベース自体が対応一覧にあるからといって、その製品が提供するすべての SQL 構文を受け付けるわけではありません。個々の機能は、その意味を内部表現として保持し、検証できるようになった段階で追加されます。