プログラミング言語SML#解説 4.1.0版
22 SQL式とコマンド

22.3 接続先データベース宣言式:_sqlserver

_sqlserver式は, 接続先データベースサーバーの情報と そのサーバーが管理するデータベースのスキーマを表す. _sqlserver式の評価結果を引数として SQL.connect関数 (22.8.1節参照)を呼び出すと, _sqlserver式が表すサーバーへの接続が試みられ, 接続が確立し,かつ 接続先データベースが _sqlserver式が表すスキーマを包含するデータベースを 管理していることが確認できたならば, そのサーバーへの接続ハンドルが得られる.

_sqlserver式には, 接続先データベースの種類, データベース固有の接続パラメタ,および データベーススキーマを表すレコード型を この順に書く. _sqlserver式の典型的な書き方の例を以下に示す.

_sqlserver SQL.postgresql "host=localhost port=5432"
  : {  
       employee : {id : int, name : string, age : int,
                   deptId : int option, salary : int option} list,
       department : {deptId : int, name : string} list
    }

この例は, localhost:5432で待ち受けているPostgreSQLサーバーが, このレコード型と同型のスキーマを持つデータベースを管理していることを 表している. サポートするデータベースの種類や接続パラメタの詳細については 22.8.1節を参照せよ.

なお,実際には, _sqlserver:の間には 任意の関数適用式appexpを書くことができる. この例においても,SQL.postgresqlは実際は関数であり, "host=localhost port=5432"はその関数の引数である. この位置に任意のSML#の式を書くことで, 同じスキーマを持つ異なる接続先のひとつを実行時に選ぶような プログラムを書くことも可能である. 式appexpの型はSQL.backendでなければならない.

_sqlserver appexp : tyの型は, ty SQL.serverである. tyは, 22.1.3節で示した, データベーススキーマを表すレコード型でなければならない.

過去のバージョンとの互換性のため,以下の書き方が許されている. これらの記法を新規のプログラムで使うことは推奨されない.

  • appexpを省略することができる. 省略した場合は,PostgreSQLサーバーにデフォルトの接続パラメタで 接続することを表す.

  • appexpに文字列リテラルだけを書ける. その文字列はPostgreSQLサーバーへの接続パラメタと解釈される.