annotate tests/blob.ur @ 1251:70092a661f70
Basic handling of recursive functions in Iflow
author |
Adam Chlipala <adamc@hcoop.net> |
date |
Sat, 01 May 2010 09:51:46 -0400 |
parents |
034eeb099564 |
children |
67ebd30a2283 |
rev |
line source |
adamc@737
|
1 sequence s
|
adamc@740
|
2 table t : { Id : int, Nam : option string, Data : blob, Desc : string, Typ : string }
|
adamc@737
|
3
|
adamc@890
|
4 fun see id =
|
adamc@742
|
5 r <- oneRow (SELECT t.Data, t.Typ FROM t WHERE t.Id = {[id]});
|
adamc@742
|
6 returnBlob r.T.Data (blessMime r.T.Typ)
|
adamc@742
|
7
|
adamc@737
|
8 fun save r =
|
adamc@739
|
9 id <- nextval s;
|
adamc@740
|
10 dml (INSERT INTO t (Id, Nam, Data, Desc, Typ)
|
adamc@740
|
11 VALUES ({[id]}, {[fileName r.Data]}, {[fileData r.Data]}, {[r.Desc]}, {[fileMimeType r.Data]}));
|
adamc@739
|
12 main ()
|
adamc@737
|
13
|
adamc@742
|
14 and main () =
|
adamc@746
|
15 ls <- queryX (SELECT t.Id, t.Desc, octet_length(t.Data) AS Len FROM t ORDER BY t.Desc)
|
adamc@890
|
16 (fn r => <xml><li><a link={see r.T.Id}>{[r.T.Desc]} ({[r.Len]})</a></li></xml>);
|
adamc@742
|
17 return <xml><body>
|
adamc@742
|
18 {ls}
|
adamc@742
|
19
|
adamc@742
|
20 <br/>
|
adamc@742
|
21
|
adamc@742
|
22 <form>
|
adamc@742
|
23 <textbox{#Desc}/>
|
adamc@742
|
24 <upload{#Data}/>
|
adamc@742
|
25 <submit action={save}/>
|
adamc@742
|
26 </form>
|
adamc@742
|
27 </body></xml>
|