Mercurial > urweb
changeset 1421:3dab4696d116
Subqueries may always return NULL
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Thu, 03 Feb 2011 21:04:12 -0500 |
parents | 146b69c53304 |
children | 07ef5771568d |
files | doc/manual.tex lib/ur/basis.urs src/monoize.sml |
diffstat | 3 files changed, 13 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/manual.tex Thu Feb 03 11:12:48 2011 -0500 +++ b/doc/manual.tex Thu Feb 03 21:04:12 2011 -0500 @@ -1726,8 +1726,8 @@ Any SQL query that returns single columns may be turned into a subquery expression. $$\begin{array}{l} -\mt{val} \; \mt{sql\_subquery} : \mt{tables} ::: \{\{\mt{Type}\}\} \to \mt{agg} ::: \{\{\mt{Type}\}\} \to \mt{exps} ::: \{\mt{Type}\} \to \mt{nm} ::: \mt{Name} \to \mt{t} ::: \mt{Type} \\ -\hspace{.1in} \to \mt{sql\_query} \; \mt{tables} \; \mt{agg} \; [\mt{nm} = \mt{t}] \to \mt{sql\_exp} \; \mt{tables} \; \mt{agg} \; \mt{exps} \; \mt{t} +\mt{val} \; \mt{sql\_subquery} : \mt{tables} ::: \{\{\mt{Type}\}\} \to \mt{agg} ::: \{\{\mt{Type}\}\} \to \mt{exps} ::: \{\mt{Type}\} \to \mt{nm} ::: \mt{Name} \to \mt{t} ::: \mt{Type} \to \mt{nt} ::: \mt{Type} \\ +\hspace{.1in} \to \mt{nullify} \; \mt{t} \; \mt{nt} \to \mt{sql\_query} \; \mt{tables} \; \mt{agg} \; [\mt{nm} = \mt{t}] \to \mt{sql\_exp} \; \mt{tables} \; \mt{agg} \; \mt{exps} \; \mt{nt} \end{array}$$ \texttt{FROM} clauses are specified using a type family, whose arguments are the free table variables and the table variables bound by this clause.
--- a/lib/ur/basis.urs Thu Feb 03 11:12:48 2011 -0500 +++ b/lib/ur/basis.urs Thu Feb 03 21:04:12 2011 -0500 @@ -529,9 +529,10 @@ -> sql_exp tables agg exps t -> sql_exp tables agg exps (option t) -val sql_subquery : tables ::: {{Type}} -> agg ::: {{Type}} -> exps ::: {Type} -> nm ::: Name -> t ::: Type +val sql_subquery : tables ::: {{Type}} -> agg ::: {{Type}} -> exps ::: {Type} -> nm ::: Name -> t ::: Type -> nt ::: Type + -> nullify t nt -> sql_query tables agg [] [nm = t] - -> sql_exp tables agg exps t + -> sql_exp tables agg exps nt (*** Executing queries *)
--- a/src/monoize.sml Thu Feb 03 11:12:48 2011 -0500 +++ b/src/monoize.sml Thu Feb 03 21:04:12 2011 -0500 @@ -2796,7 +2796,9 @@ (L.ECApp ( (L.ECApp ( (L.ECApp ( - (L.EFfi ("Basis", "sql_subquery"), _), + (L.ECApp ( + (L.EFfi ("Basis", "sql_subquery"), _), + _), _), _), _), _), _), _), _), @@ -2806,10 +2808,11 @@ val s = (L'.TFfi ("Basis", "string"), loc) fun sc s = (L'.EPrim (Prim.String s), loc) in - ((L'.EAbs ("x", s, s, - strcat [sc "(", - (L'.ERel 0, loc), - sc ")"]), loc), + ((L'.EAbs ("_", (L'.TRecord [], loc), (L'.TFun (s, s), loc), + (L'.EAbs ("x", s, s, + strcat [sc "(", + (L'.ERel 0, loc), + sc ")"]), loc)), loc), fm) end