Mercurial > meta
annotate sql.urs @ 13:d05943db55e8
Sql.joiner
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Mon, 21 Mar 2011 10:16:12 -0400 |
parents | 799f43bce62b |
children | 6ebc2ca594b7 |
rev | line source |
---|---|
adam@6 | 1 (** Common metaprogramming patterns for SQL syntax construction *) |
adam@6 | 2 |
adam@6 | 3 val sqexps : env ::: {{Type}} -> fields ::: {Type} -> folder fields -> $(map sql_injectable fields) |
adam@6 | 4 -> $fields -> $(map (sql_exp env [] []) fields) |
adam@6 | 5 (* Convert a record of Ur values into a record of SQL expressions *) |
adam@6 | 6 |
adam@6 | 7 val selector : tn :: Name -> fs ::: {Type} -> ofs ::: {Type} -> [fs ~ ofs] |
adam@6 | 8 => folder fs -> $(map sql_injectable fs) -> $fs |
adam@6 | 9 -> sql_exp [tn = ofs ++ fs] [] [] bool |
adam@6 | 10 (* Build a boolean SQL expression expressing equality of some fields of a table |
adam@6 | 11 * row with a record of Ur values *) |
adam@13 | 12 |
adam@13 | 13 val joiner : tn1 :: Name -> tn2 :: Name -> fs ::: {Type} -> ofs1 ::: {Type} -> ofs2 ::: {Type} |
adam@13 | 14 -> [[tn1] ~ [tn2]] => [fs ~ ofs1] => [fs ~ ofs2] |
adam@13 | 15 => folder fs |
adam@13 | 16 -> sql_exp [tn1 = ofs1 ++ fs, tn2 = ofs2 ++ fs] [] [] bool |
adam@13 | 17 (* Declare equality of same-named columns from two tables. *) |