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

22.2 SQLクエリのためのML式の拡張構文

19章で定義されている通り, SML#ではSQLクエリのために以下の拡張構文を導入している.

exp ::=
 | _sqlserver (appexp)? : ty SQLサーバ
 | _sql pat => sqlfn SQL実行関数
 | _sql sql SQLクエリ断片
atexp ::=
 | _sql (sql) SQLクエリ断片

sqlおよびsqlfnは以下の通りである.

sql ::= sqlexp SQL評価式
 | sqlselect SELECTクエリ
 | sqlclause SQLクエリ句
 | sqlcommand SQLコマンド
sqlfn ::= sqlselect SELECTクエリ
 | sqlclause SQLクエリ句
 | sqlcommand SQLコマンド

sqlexp22.4節で, sqlselectおよびsqlclause22.5節で, sqlcommand22.6節で, それぞれ定義する.

これらの構文のうち_sqlで始まる式に現れる patおよびsqlの中では, ...(exp)または (...exp)という形で囲われるexpの中を除き (22.4節, 22.5節,および 22.6節参照), 以下は予約語として扱われる (この予約語のリストは 第17.2節からの再掲である). これらの予約語をSQL予約語と呼ぶ.

asc all begin by commit cross default delete desc distinct fetch first from group inner insert into is join limit natural next not null offset only on or order rollback row rows select set update values where

また,これらの構文には以下の制限がある.

  • _sqlに続くpatは開き丸括弧“(”から 始まってはならない.

  • 式(トップレベル)の _sql sqlsqlは, SQL予約語で始まらなければならない.

  • 式(トップレベル)の _sql sqlは, 以下の位置以外に現れてはならない.

    • valfun宣言の=の右側

    • let式のinendの間

    • 逐次実行式(;)の中

    • 組ではない式を囲う丸括弧の中

    • 上記4つの位置にあるfn式の=>の右側