Mercurial > urweb
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) |