Mercurial > urweb
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), |