22.2 Extended ML Expressions for SQL Queries
As defined in Chapter 19, SML# extends the Standard ML expressions with the following constructs for SQL queries:
exp | ::= | ||
---|---|---|---|
_sqlserver appexp : ty | SQL servers | ||
_sql pat => sqlfn | SQL execution function | ||
_sql sql | SQL query fragments | ||
atexp | ::= | ||
_sql (sql) | SQL query fragments |
sql and sqlfn are given below:
sql | ::= | sqlexp | SQL value expressions |
---|---|---|---|
sqlselect | SELECT queries | ||
sqlclause | SQL query clauses | ||
sqlcommand | SQL commands | ||
sqlfn | ::= | sqlselect | SELECT queries |
sqlclause | SQL query clauses | ||
sqlcommand | SQL commands |
sqlexp is defined in Section 22.4. sqlselect and sqcommand are defined in Section 22.5. sqlcommand is defined in Section 22.6.
In the expressions that begins with _sql, except for the position surrounded by ...(exp) or (...exp) (see Section 22.4, 22.5, and 22.6 for details), the following words are recognized as keywords (this list of keywords is reused from Section 17.2). In the sequel, the following words are refered to as SQL keywords.
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
The above syntax has the following limitations:
-
•
pat following _sql must not begin with a left parenthesize “(.”
-
•
The sql of _sql sql as expressions (top-level) must begin with an SQL keyword.
-
•
Any _sql sql as expressions (top-level) must occur only at the following positions:
-
–
the immediate right side of = in a val and fun declarations,
-
–
the position between in and end in a let expression,
-
–
the inside of a sequential execution expression (;),
-
–
immediately surrounded by parenthesizes that are not a part of any tuple, and
-
–
the immediate right side of => in a fn expression occurring at one of the above four positions.
-
–