Mercurial > urweb
diff src/lacweb.grm @ 236:f5732dc1316c
More aggregate functions
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 28 Aug 2008 12:56:08 -0400 |
parents | 0608a0cfd32a |
children | fc6f04889bf2 |
line wrap: on
line diff
--- a/src/lacweb.grm Thu Aug 28 11:59:46 2008 -0400 +++ b/src/lacweb.grm Thu Aug 28 12:56:08 2008 -0400 @@ -110,7 +110,6 @@ let val e = (EVar (["Basis"], "sql_comparison"), loc) val e = (EApp (e, (EVar (["Basis"], "sql_" ^ oper), loc)), loc) - val e = (EApp (e, (EWild, loc)), loc) val e = (EApp (e, sqlexp1), loc) in (EApp (e, sqlexp2), loc) @@ -169,7 +168,7 @@ | UNION | INTERSECT | EXCEPT | LIMIT | OFFSET | ALL | TRUE | FALSE | CAND | OR | NOT - | COUNT + | COUNT | AVG | SUM | MIN | MAX | NE | LT | LE | GT | GE %nonterm @@ -253,6 +252,7 @@ | lopt of exp | ofopt of exp | sqlint of exp + | sqlagg of string %verbose (* print summary of errors *) @@ -831,6 +831,16 @@ (EApp ((EVar (["Basis"], "sql_count"), loc), (ERecord [], loc)), loc) end) + | sqlagg LPAREN sqlexp RPAREN (let + val loc = s (sqlaggleft, RPARENright) + + val e = (EApp ((EVar (["Basis"], "sql_" ^ sqlagg), loc), + (EWild, loc)), loc) + val e = (EApp ((EVar (["Basis"], "sql_aggregate"), loc), + e), loc) + in + (EApp (e, sqlexp), loc) + end) wopt : (sql_inject (EVar (["Basis"], "True"), EVar (["Basis"], "sql_bool"), @@ -892,3 +902,8 @@ sqlint : INT (EPrim (Prim.Int INT), s (INTleft, INTright)) | LBRACE eexp RBRACE (eexp) + +sqlagg : AVG ("avg") + | SUM ("sum") + | MIN ("min") + | MAX ("max")