Ch.11 SML#の拡張機能:SQLのシームレスな統合

§ 11.3. 問い合わせの実行

_sql x => exp式で定義された問い合わせ関数にデータベー ス接続を適用すれば,データベースをアクセスできます. そのために,以下の構文が用意されています.

  • データベースサーバー式.

    _sqlserver serverLocation : τ

    この式は,データベースサーバーを指定します. serverLocationはデータベースサーバーの場所と名前です. その具体的な内容は,使用するデータベースシステムのデータベース指 定構文に従います. τはデータベースの構造です. テーブルの名前とその構造をレコード型の文法で指定します. この式を評価すると,τ SQL.server型をもつデータベースサー バー定義が得られます.

  • データベースへの接続プリミティブ関数.

    SQL.connect : ['a. 'a SQL.server -> 'a SQL.conn]

    SML#コンパイラは,τ SQL.server型のデータベース定義 を受け取り,その中に指定されたデータベースに接続しその構造をチェックし τと一致していることを確認した後,τ SQL.connの型をもつτ 型のデータベースへの接続を返します.

  • 問い合わせ実行のための構文.

    _sqleval query connection

    データベース問い合わせ関数queryをデータベース接続connection に対して評価し,τ SQL.rel型をもつ結果を返します.

  • 問い合わせ結果のリストへの変換.

    SQL.fetchAll : ['a. 'a SQL.rel -> 'a list]
    SQL.fetch : ['a. 'a SQL.rel -> ('a * 'a SQL.rel) option]

    SQL.fetchAllは問い合わせによって得られた関係をリストに変換 します. SQL.fetchは問い合わせによって得られた関係から先頭のレコー ドとそれ以外の関係を返します.

  • 問い合わせの後処理.

    SQL.closeRel : ['a. 'a SQL.rel -> unit]
    SQL.closeCon : ['a. 'a SQL.conn -> unit]

    SQL.closeRelは問い合わせ処理の終了を,SQL.closeConn はデータベース接続の終了をそれぞれ データベースサーバに通知します.