comparison src/urweb.grm @ 993:10114d7b7477

SELECT DISTINCT; eta expansion during Cjrization
author Adam Chlipala <adamc@hcoop.net>
date Tue, 06 Oct 2009 15:39:27 -0400
parents fbc3a0eef45a
children 1d456a06ea4e
comparison
equal deleted inserted replaced
992:b825d843b22d 993:10114d7b7477
206 206
207 | XML_BEGIN of string | XML_END | XML_BEGIN_END of string 207 | XML_BEGIN of string | XML_END | XML_BEGIN_END of string
208 | NOTAGS of string 208 | NOTAGS of string
209 | BEGIN_TAG of string | END_TAG of string 209 | BEGIN_TAG of string | END_TAG of string
210 210
211 | SELECT | FROM | AS | CWHERE | GROUP | ORDER | BY | HAVING 211 | SELECT | DISTINCT | FROM | AS | CWHERE | GROUP | ORDER | BY | HAVING
212 | UNION | INTERSECT | EXCEPT 212 | UNION | INTERSECT | EXCEPT
213 | LIMIT | OFFSET | ALL 213 | LIMIT | OFFSET | ALL
214 | TRUE | FALSE | CAND | OR | NOT 214 | TRUE | FALSE | CAND | OR | NOT
215 | COUNT | AVG | SUM | MIN | MAX 215 | COUNT | AVG | SUM | MIN | MAX
216 | ASC | DESC 216 | ASC | DESC
312 | attr of attr 312 | attr of attr
313 | attrv of exp 313 | attrv of exp
314 314
315 | query of exp 315 | query of exp
316 | query1 of exp 316 | query1 of exp
317 | dopt of exp
317 | tables of con list * exp 318 | tables of con list * exp
318 | fitem of con list * exp 319 | fitem of con list * exp
319 | tname of con 320 | tname of con
320 | tnameW of con * con 321 | tnameW of con * con
321 | tnames of (con * con) * (con * con) list 322 | tnames of (con * con) * (con * con) list
623 | pmode pmodes (pmode :: pmodes) 624 | pmode pmodes (pmode :: pmodes)
624 625
625 commaOpt: () 626 commaOpt: ()
626 | COMMA () 627 | COMMA ()
627 628
628 pkopt : (EVar (["Basis"], "no_primary_key", Infer), ErrorMsg.dummySpan) 629 pkopt : (EVar (["Basis"], "no_primary_key", Infer), dummy)
629 | PRIMARY KEY tnames (let 630 | PRIMARY KEY tnames (let
630 val loc = s (PRIMARYleft, tnamesright) 631 val loc = s (PRIMARYleft, tnamesright)
631 632
632 val e = (EVar (["Basis"], "primary_key", Infer), loc) 633 val e = (EVar (["Basis"], "primary_key", Infer), loc)
633 val e = (ECApp (e, #1 (#1 tnames)), loc) 634 val e = (ECApp (e, #1 (#1 tnames)), loc)
1408 ((CName "Offset", loc), 1409 ((CName "Offset", loc),
1409 ofopt)], loc) 1410 ofopt)], loc)
1410 in 1411 in
1411 (EApp ((EVar (["Basis"], "sql_query", Infer), loc), re), loc) 1412 (EApp ((EVar (["Basis"], "sql_query", Infer), loc), re), loc)
1412 end) 1413 end)
1413 1414
1414 query1 : SELECT select FROM tables wopt gopt hopt 1415 dopt : (EVar (["Basis"], "False", Infer), dummy)
1416 | DISTINCT (EVar (["Basis"], "True", Infer),
1417 s (DISTINCTleft, DISTINCTright))
1418
1419 query1 : SELECT dopt select FROM tables wopt gopt hopt
1415 (let 1420 (let
1416 val loc = s (SELECTleft, tablesright) 1421 val loc = s (SELECTleft, tablesright)
1417 1422
1418 val (sel, exps) = 1423 val (sel, exps) =
1419 case select of 1424 case select of
1458 (ECApp ((EVar (["Basis"], "sql_subset", Infer), loc), 1463 (ECApp ((EVar (["Basis"], "sql_subset", Infer), loc),
1459 (CRecord tabs, loc)), loc) 1464 (CRecord tabs, loc)), loc)
1460 end 1465 end
1461 1466
1462 val e = (EVar (["Basis"], "sql_query1", Infer), loc) 1467 val e = (EVar (["Basis"], "sql_query1", Infer), loc)
1463 val re = (ERecord [((CName "From", loc), 1468 val re = (ERecord [((CName "Distinct", loc),
1469 dopt),
1470 ((CName "From", loc),
1464 #2 tables), 1471 #2 tables),
1465 ((CName "Where", loc), 1472 ((CName "Where", loc),
1466 wopt), 1473 wopt),
1467 ((CName "GroupBy", loc), 1474 ((CName "GroupBy", loc),
1468 grp), 1475 grp),