comparison src/mono_opt.sml @ 253:7f6620853c36

Monoized a WHERE clause with a comparison
author Adam Chlipala <adamc@hcoop.net>
date Sun, 31 Aug 2008 14:27:01 -0400
parents 890a61991263
children d1b679dbbc25
comparison
equal deleted inserted replaced
252:7e9bd70ad3ce 253:7f6620853c36
77 val urlifyString = String.translate (fn #" " => "+" 77 val urlifyString = String.translate (fn #" " => "+"
78 | ch => if Char.isAlphaNum ch then 78 | ch => if Char.isAlphaNum ch then
79 str ch 79 str ch
80 else 80 else
81 "%" ^ hexIt ch) 81 "%" ^ hexIt ch)
82
83
84 val sqlifyInt = attrifyInt
85 val sqlifyFloat = attrifyFloat
86
87 fun sqlifyString s = "E'" ^ String.toString s ^ "'"
82 88
83 fun exp e = 89 fun exp e =
84 case e of 90 case e of
85 EPrim (Prim.String s) => 91 EPrim (Prim.String s) =>
86 let 92 let
201 | EWrite (EFfiApp ("Basis", "urlifyBool", [(ECon (Enum, PConFfi {con = "False", ...}, NONE), _)]), loc) => 207 | EWrite (EFfiApp ("Basis", "urlifyBool", [(ECon (Enum, PConFfi {con = "False", ...}, NONE), _)]), loc) =>
202 EWrite (EPrim (Prim.String "0"), loc) 208 EWrite (EPrim (Prim.String "0"), loc)
203 | EWrite (EFfiApp ("Basis", "urlifyBool", [e]), _) => 209 | EWrite (EFfiApp ("Basis", "urlifyBool", [e]), _) =>
204 EFfiApp ("Basis", "urlifyBool_w", [e]) 210 EFfiApp ("Basis", "urlifyBool_w", [e])
205 211
212 | EFfiApp ("Basis", "sqlifyInt", [(EPrim (Prim.Int n), _)]) =>
213 EPrim (Prim.String (sqlifyInt n))
214 | EFfiApp ("Basis", "sqlifyFloat", [(EPrim (Prim.Float n), _)]) =>
215 EPrim (Prim.String (sqlifyFloat n))
216 | EFfiApp ("Basis", "sqlifyBool", [b as (_, loc)]) =>
217 optExp (ECase (b,
218 [((PCon (Enum, PConFfi {mod = "Basis", datatyp = "bool", con = "True", arg = NONE}, NONE), loc),
219 (EPrim (Prim.String "TRUE"), loc)),
220 ((PCon (Enum, PConFfi {mod = "Basis", datatyp = "bool", con = "False", arg = NONE}, NONE), loc),
221 (EPrim (Prim.String "FALSE"), loc))],
222 {disc = (TFfi ("Basis", "bool"), loc),
223 result = (TFfi ("Basis", "string"), loc)}), loc)
224 | EFfiApp ("Basis", "sqlifyString", [(EPrim (Prim.String n), _)]) =>
225 EPrim (Prim.String (sqlifyString n))
226
206 | EWrite (ECase (discE, pes, {disc, ...}), loc) => 227 | EWrite (ECase (discE, pes, {disc, ...}), loc) =>
207 optExp (ECase (discE, 228 optExp (ECase (discE,
208 map (fn (p, e) => (p, (EWrite e, loc))) pes, 229 map (fn (p, e) => (p, (EWrite e, loc))) pes,
209 {disc = disc, 230 {disc = disc,
210 result = (TRecord [], loc)}), loc) 231 result = (TRecord [], loc)}), loc)