summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2010-01-12 09:42:13 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2010-01-12 09:42:13 -0500
commit33116639b54ce9d71cb6ca85c185ed56908da505 (patch)
tree9ec138d2a11880253a186e45c59404015b886d31
parent73b3f4158297d0161e1d18c24ff9a4604f07c32c (diff)
New release
-rw-r--r--CHANGELOG9
-rw-r--r--doc/manual.tex15
2 files changed, 23 insertions, 1 deletions
diff --git a/CHANGELOG b/CHANGELOG
index a893024c..ac96d69a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,13 @@
========
+20100112
+========
+
+- Basis.serialized type family, for storing more types in the database
+- Basis.textBlob, for building blobs from strings
+- Basis.debug function, for server-side debug printing
+- Bug fixes & optimization improvements
+
+========
20091230
========
diff --git a/doc/manual.tex b/doc/manual.tex
index 1f7a774b..5849f744 100644
--- a/doc/manual.tex
+++ b/doc/manual.tex
@@ -1249,7 +1249,7 @@ $$\begin{array}{l}
\mt{datatype} \; \mt{list} \; \mt{t} = \mt{Nil} \mid \mt{Cons} \; \mt{of} \; \mt{t} \times \mt{list} \; \mt{t}
\end{array}$$
-The only unusual element of this list is the $\mt{blob}$ type, which stands for binary sequences.
+The only unusual element of this list is the $\mt{blob}$ type, which stands for binary sequences. Simple blobs can be created from strings via $\mt{Basis.textBlob}$. Blobs will also be generated from HTTP file uploads.
Another important generic Ur element comes at the beginning of \texttt{top.urs}.
@@ -1293,6 +1293,11 @@ $$\begin{array}{l}
\mt{val} \; \mt{transaction\_monad} : \mt{monad} \; \mt{transaction}
\end{array}$$
+For debugging purposes, a transactional function is provided for outputting a string on the server process' \texttt{stderr}.
+$$\begin{array}{l}
+ \mt{val} \; \mt{debug} : \mt{string} \to \mt{transaction} \; \mt{unit}
+\end{array}$$
+
\subsection{HTTP}
There are transactions for reading an HTTP header by name and for getting and setting strongly-typed cookies. Cookies may only be created by the $\mt{cookie}$ declaration form, ensuring that they be named consistently based on module structure.
@@ -1556,6 +1561,14 @@ $$\begin{array}{l}
\hspace{.1in} \to \mt{t} \to \mt{sql\_exp} \; \mt{tables} \; \mt{agg} \; \mt{exps} \; \mt{t}
\end{array}$$
+Additionally, most function-free types may be injected safely, via the $\mt{serialized}$ type family.
+$$\begin{array}{l}
+ \mt{con} \; \mt{serialized} :: \mt{Type} \to \mt{Type} \\
+ \mt{val} \; \mt{serialize} : \mt{t} ::: \mt{Type} \to \mt{t} \to \mt{serialized} \; \mt{t} \\
+ \mt{val} \; \mt{deserialize} : \mt{t} ::: \mt{Type} \to \mt{serialized} \; \mt{t} \to \mt{t} \\
+ \mt{val} \; \mt{sql\_serialized} : \mt{t} ::: \mt{Type} \to \mt{sql\_injectable\_prim} \; (\mt{serialized} \; \mt{t})
+\end{array}$$
+
We have the SQL nullness test, which is necessary because of the strange SQL semantics of equality in the presence of null values.
$$\begin{array}{l}
\mt{val} \; \mt{sql\_is\_null} : \mt{tables} ::: \{\{\mt{Type}\}\} \to \mt{agg} ::: \{\{\mt{Type}\}\} \to \mt{exps} ::: \{\mt{Type}\} \to \mt{t} ::: \mt{Type} \\