summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cjr_print.sml7
-rw-r--r--src/monoize.sml2
-rw-r--r--src/prepare.sml12
-rw-r--r--tests/sql_option.ur16
-rw-r--r--tests/sql_option.urs1
5 files changed, 32 insertions, 6 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index d7e426c3..b6c32e24 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -474,6 +474,13 @@ fun getPargs (e, _) =
| EFfiApp ("Basis", "sqlifyString", [e]) => [(e, String)]
| EFfiApp ("Basis", "sqlifyBool", [e]) => [(e, Bool)]
| EFfiApp ("Basis", "sqlifyTime", [e]) => [(e, Time)]
+
+ | EFfiApp ("Basis", "sqlifyIntN", [e]) => [(e, Nullable Int)]
+ | EFfiApp ("Basis", "sqlifyFloatN", [e]) => [(e, Nullable Float)]
+ | EFfiApp ("Basis", "sqlifyStringN", [e]) => [(e, Nullable String)]
+ | EFfiApp ("Basis", "sqlifyBoolN", [e]) => [(e, Nullable Bool)]
+ | EFfiApp ("Basis", "sqlifyTimeN", [e]) => [(e, Nullable Time)]
+
| ECase (e, _, _) => [(e, Bool)]
| _ => raise Fail "CjrPrint: getPargs"
diff --git a/src/monoize.sml b/src/monoize.sml
index 83da382b..70f15867 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -983,7 +983,7 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
let
val (e, fm) = monoExp (env, st, fm) e
in
- ((L'.EDml (liftExpInExp 0 e), loc),
+ ((L'.EDml e, loc),
fm)
end
diff --git a/src/prepare.sml b/src/prepare.sml
index 6d63ad7d..b20c7fec 100644
--- a/src/prepare.sml
+++ b/src/prepare.sml
@@ -47,6 +47,18 @@ fun prepString (e, ss, n) =
SOME ("$" ^ Int.toString (n + 1) ^ "::bool" :: ss, n + 1)
| EFfiApp ("Basis", "sqlifyTime", [e]) =>
SOME ("$" ^ Int.toString (n + 1) ^ "::timestamp" :: ss, n + 1)
+
+ | EFfiApp ("Basis", "sqlifyIntN", [e]) =>
+ SOME ("$" ^ Int.toString (n + 1) ^ "::int8" :: ss, n + 1)
+ | EFfiApp ("Basis", "sqlifyFloatN", [e]) =>
+ SOME ("$" ^ Int.toString (n + 1) ^ "::float8" :: ss, n + 1)
+ | EFfiApp ("Basis", "sqlifyStringN", [e]) =>
+ SOME ("$" ^ Int.toString (n + 1) ^ "::text" :: ss, n + 1)
+ | EFfiApp ("Basis", "sqlifyBoolN", [e]) =>
+ SOME ("$" ^ Int.toString (n + 1) ^ "::bool" :: ss, n + 1)
+ | EFfiApp ("Basis", "sqlifyTimeN", [e]) =>
+ SOME ("$" ^ Int.toString (n + 1) ^ "::timestamp" :: ss, n + 1)
+
| ECase (e,
[((PCon (_, PConFfi {mod = "Basis", con = "True", ...}, _), _),
(EPrim (Prim.String "TRUE"), _)),
diff --git a/tests/sql_option.ur b/tests/sql_option.ur
index 257f8c55..0676c907 100644
--- a/tests/sql_option.ur
+++ b/tests/sql_option.ur
@@ -4,9 +4,13 @@ fun addNull () =
dml (INSERT INTO t (O) VALUES (NULL));
return <xml>Done</xml>
-(*fun add42 () =
- dml (INSERT INTO t (O) VALUES (42));
- return <xml>Done</xml>*)
+fun add3 () =
+ dml (INSERT INTO t (O) VALUES ({Some 3}));
+ return <xml>Done</xml>
+
+fun addN r =
+ dml (INSERT INTO t (O) VALUES ({Some (readError r.N)}));
+ return <xml>Done</xml>
fun main () : transaction page =
xml <- queryX (SELECT * FROM t)
@@ -17,6 +21,8 @@ fun main () : transaction page =
{xml}
<a link={addNull ()}>Add a null</a><br/>
+ <a link={add3 ()}>Add a 3</a><br/>
+ <form>
+ Add <textbox{#N}/> <submit action={addN}/>
+ </form>
</body></xml>
-
-(* <a link={add42 ()}>Add a 42</a><br/>*)
diff --git a/tests/sql_option.urs b/tests/sql_option.urs
new file mode 100644
index 00000000..6ac44e0b
--- /dev/null
+++ b/tests/sql_option.urs
@@ -0,0 +1 @@
+val main : unit -> transaction page