adam@6: fun sqexps [env] [fields] (fl : folder fields) (inj : $(map sql_injectable fields)) (r : $fields) = adam@6: @map2 [sql_injectable] [id] [sql_exp env [] []] adam@6: (fn [t] => @sql_inject) adam@6: fl inj r adam@6: adam@6: fun selector [tn :: Name] [fs] [ofs] [fs ~ ofs] (fl : folder fs) (m : $(map sql_injectable fs)) (r : $fs) = adam@6: @foldR2 [sql_injectable] [id] adam@6: [fn key => rest :: {Type} -> [rest ~ key] => sql_exp [tn = key ++ rest] [] [] bool] adam@6: (fn [nm :: Name] [t :: Type] [key :: {Type}] [[nm] ~ key] adam@6: (inj : sql_injectable t) (v : t) adam@6: (exp : rest :: {Type} -> [rest ~ key] => sql_exp [tn = key ++ rest] [] [] bool) adam@6: [rest :: {Type}] [rest ~ [nm = t] ++ key] => adam@6: (WHERE {{tn}}.{nm} = {@sql_inject inj v} AND {exp [[nm = t] ++ rest] !})) adam@6: (fn [rest :: {Type}] [rest ~ []] => (WHERE TRUE)) adam@6: fl m r [_] !