# HG changeset patch # User Adam Chlipala # Date 1219939186 14400 # Node ID 0608a0cfd32a5a840719df18306cbe977ae32525 # Parent 82409ef72019084203065962ab3caa23e727e71d COUNT diff -r 82409ef72019 -r 0608a0cfd32a lib/basis.lig --- a/lib/basis.lig Thu Aug 28 11:49:38 2008 -0400 +++ b/lib/basis.lig Thu Aug 28 11:59:46 2008 -0400 @@ -125,6 +125,10 @@ -> sql_exp tables agg exps t -> sql_exp tables agg exps t -> sql_exp tables agg exps bool +val sql_count : tables ::: {{Type}} -> agg ::: {{Type}} -> exps ::: {Type} + -> unit -> sql_exp tables agg exps int + + (** XML *) con tag :: {Type} -> {Unit} -> {Unit} -> {Type} -> {Type} -> Type diff -r 82409ef72019 -r 0608a0cfd32a src/lacweb.grm --- a/src/lacweb.grm Thu Aug 28 11:49:38 2008 -0400 +++ b/src/lacweb.grm Thu Aug 28 11:59:46 2008 -0400 @@ -169,6 +169,7 @@ | UNION | INTERSECT | EXCEPT | LIMIT | OFFSET | ALL | TRUE | FALSE | CAND | OR | NOT + | COUNT | NE | LT | LE | GT | GE %nonterm @@ -824,6 +825,13 @@ s (LBRACEleft, RBRACEright))) | LPAREN sqlexp RPAREN (sqlexp) + | COUNT LPAREN STAR RPAREN (let + val loc = s (COUNTleft, RPARENright) + in + (EApp ((EVar (["Basis"], "sql_count"), loc), + (ERecord [], loc)), loc) + end) + wopt : (sql_inject (EVar (["Basis"], "True"), EVar (["Basis"], "sql_bool"), dummy)) diff -r 82409ef72019 -r 0608a0cfd32a src/lacweb.lex --- a/src/lacweb.lex Thu Aug 28 11:49:38 2008 -0400 +++ b/src/lacweb.lex Thu Aug 28 11:59:46 2008 -0400 @@ -323,6 +323,8 @@ "OR" => (Tokens.OR (pos yypos, pos yypos + size yytext)); "NOT" => (Tokens.NOT (pos yypos, pos yypos + size yytext)); + "COUNT" => (Tokens.COUNT (pos yypos, pos yypos + size yytext)); + {id} => (Tokens.SYMBOL (yytext, pos yypos, pos yypos + size yytext)); {cid} => (Tokens.CSYMBOL (yytext, pos yypos, pos yypos + size yytext)); diff -r 82409ef72019 -r 0608a0cfd32a tests/agg.lac --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agg.lac Thu Aug 28 11:59:46 2008 -0400 @@ -0,0 +1,4 @@ +table t1 : {A : int, B : string, C : float} +table t2 : {A : float, D : int} + +val q1 = (SELECT COUNT( * ) AS N FROM t1)