aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/mono_reduce.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2010-04-08 09:57:37 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2010-04-08 09:57:37 -0400
commited25721e17d6798aad7b7a0cea8e5393bb840a91 (patch)
treee9741860302158a80e4339062e77fd5c7b5cc6cb /src/mono_reduce.sml
parentdb36e74c12b26c94ef387d66dc61858f06daa2d8 (diff)
Change query_policy to sendClient; all arguments passed to SQL predicates are variables
Diffstat (limited to 'src/mono_reduce.sml')
-rw-r--r--src/mono_reduce.sml17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/mono_reduce.sml b/src/mono_reduce.sml
index e5dd3213..bb23a21a 100644
--- a/src/mono_reduce.sml
+++ b/src/mono_reduce.sml
@@ -423,18 +423,21 @@ fun reduce file =
| ERecord xets => List.concat (map (summarize d o #2) xets)
| EField (e, _) => summarize d e
- | ECase (e, pes, _) => summarize d e @ [Unsure]
- (*let
+ | ECase (e, pes, _) =>
+ let
val lss = map (fn (p, e) => summarize (d + patBinds p) e) pes
in
case lss of
[] => raise Fail "Empty pattern match"
| ls :: lss =>
- if List.all (fn ls' => ls' = ls) lss then
- summarize d e @ ls
- else
- [Unsure]
- end*)
+ summarize d e
+ @ (if List.all (fn ls' => ls' = ls) lss then
+ ls
+ else if length (List.filter (not o List.null) (ls :: lss)) <= 1 then
+ valOf (List.find (not o List.null) (ls :: lss))
+ else
+ [Unsure])
+ end
| EStrcat (e1, e2) => summarize d e1 @ summarize d e2
| EError (e, _) => summarize d e @ [Unsure]