diff src/lacweb.grm @ 227:524e10c91478

GROUP BY and HAVING
author Adam Chlipala <adamc@hcoop.net>
date Thu, 21 Aug 2008 14:09:08 -0400
parents b0041cc7e5f7
children 016d71e878c1
line wrap: on
line diff
--- a/src/lacweb.grm	Thu Aug 21 13:59:49 2008 -0400
+++ b/src/lacweb.grm	Thu Aug 21 14:09:08 2008 -0400
@@ -152,7 +152,7 @@
  | NOTAGS of string 
  | BEGIN_TAG of string | END_TAG of string
 
- | SELECT | FROM | AS | CWHERE | GROUP | BY
+ | SELECT | FROM | AS | CWHERE | GROUP | BY | HAVING
  | TRUE | FALSE | CAND | OR | NOT
  | NE | LT | LE | GT | GE
 
@@ -231,6 +231,7 @@
  | groupi of group_item
  | groupis of group_item list
  | gopt of group_item list option
+ | hopt of exp
 
 
 %verbose                                (* print summary of errors *)
@@ -645,7 +646,7 @@
 
 query  : query1                         (query1)
                 
-query1 : SELECT select FROM tables wopt gopt
+query1 : SELECT select FROM tables wopt gopt hopt
                                         (let
                                              val loc = s (SELECTleft, tablesright)
 
@@ -690,10 +691,6 @@
                                                                        (CRecord tabs, loc)), loc)
                                                            end
 
-                                             val hopt = (sql_inject (EVar (["Basis"], "True"),
-                                                                     EVar (["Basis"], "sql_bool"),
-                                                                     loc))
-
                                              val e = (EVar (["Basis"], "sql_query"), loc)
                                              val re = (ERecord [((CName "From", loc),
                                                                  (ERecord tables, loc)),
@@ -788,3 +785,8 @@
 
 gopt   :                                (NONE)
        | GROUP BY groupis               (SOME groupis)
+
+hopt   :                                (sql_inject (EVar (["Basis"], "True"),
+                                                     EVar (["Basis"], "sql_bool"),
+                                                     ErrorMsg.dummySpan))
+       | HAVING sqlexp                  (sqlexp)