プログラミング言語SML#解説 4.1.0版
12 SML#の拡張機能:SQLの統合

12.3 問い合わせの実行

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

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

    _sqlserver serverLocation : τ

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

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

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

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

  • 問い合わせの実行. _sql式そのものが,データベースで問い合わせを実行する 関数を表します. データベース問い合わせ関数にデータベース接続を 適用すると,その問い合わせがその接続を通じてデータベース上で実行され, その結果にアクセスするためのτ SQL.cursor型のカーソルを 返します.

  • 問い合わせ結果の取得. 以下の2つの手続き的な関数が提供されています.

    SQL.fetchAll : [’a. ’a SQL.cursor -> ’a option]
    SQL.fetch : [’a. ’a SQL.cursor -> ’a list]

    SQL.fetchは先頭のレコードを返し,カーソルを次のレコードに 進めます. SQL.fetchAllは,問い合わせによって得られた関係をすべて 読み込み,リストに変換します.

  • 問い合わせの後処理.

    SQL.closeCursor : [’a. ’a SQL.cursor -> unit]
    SQL.closeConn : [’a. ’a SQL.conn -> unit]

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