diff options
| author | Bruce Momjian <bruce@momjian.us> | 1998-03-30 16:36:43 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 1998-03-30 16:36:43 +0000 |
| commit | c579ce0fb03aaf92d184adf369cf13be013adf1b (patch) | |
| tree | 679a8e287af5009d916fd4936483322d22375614 /src/backend/parser | |
| parent | 9c93fa2e4af9bb67261ecdedef2b5a97a9283f34 (diff) | |
| download | postgresql-c579ce0fb03aaf92d184adf369cf13be013adf1b.tar.gz | |
I started adding the Having Clause and it works quite fine for
sequential scans! (I think it will also work with hash, index, etc
but I did not check it out! I made some High level changes which
should work for all access methods, but maybe I'm wrong. Please
let me know.)
Now it is possible to make queries like:
select s.sname, max(p.pid), min(p.pid) from part p, supplier s
where s.sid=p.sid group by s.sname having max(pid)=6 and min(pid)=1
or avg(pid)=4;
Having does not work yet for queries that contain a subselect
statement in the Having clause, I'll try to fix this in the next
days.
If there are some bugs, please let me know, I'll start to read the
mailinglists now!
Now here is the patch against the original 6.3 version (no snapshot!!):
Stefan
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/analyze.c | 6 | ||||
| -rw-r--r-- | src/backend/parser/gram.c | 4 | ||||
| -rw-r--r-- | src/backend/parser/gram.y | 4 | ||||
| -rw-r--r-- | src/backend/parser/parse_agg.c | 4 |
4 files changed, 11 insertions, 7 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 64ec5fa37d..6dfdd8c26f 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.71 1998/02/26 04:33:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.72 1998/03/30 16:36:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -781,6 +781,10 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->targetList = transformTargetList(pstate, stmt->targetList); qry->qual = transformWhereClause(pstate, stmt->whereClause); + + /***S*H***/ + qry->havingQual = transformWhereClause(pstate, stmt->havingClause); + qry->hasSubLinks = pstate->p_hasSubLinks; qry->sortClause = transformSortClause(pstate, diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c index 9c4cca1a40..298852387d 100644 --- a/src/backend/parser/gram.c +++ b/src/backend/parser/gram.c @@ -216,7 +216,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.4 1998/03/18 16:50:15 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.5 1998/03/30 16:36:32 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -6700,7 +6700,7 @@ case 463: case 464: #line 2529 "gram.y" { - elog(NOTICE, "HAVING not yet supported; ignore clause"); + /***S*H***/ /* elog(NOTICE, "HAVING not yet supported; ignore clause");*/ yyval.node = yyvsp[0].node; ; break;} diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index e9808c9102..71812de58b 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.7 1998/03/18 16:50:19 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.8 1998/03/30 16:36:35 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -2527,7 +2527,7 @@ groupby: ColId having_clause: HAVING a_expr { - elog(NOTICE, "HAVING not yet supported; ignore clause"); + /***S*H***/ /* elog(NOTICE, "HAVING not yet supported; ignore clause");*/ $$ = $2; } | /*EMPTY*/ { $$ = NULL; } diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index e7a8810196..083d4ee15d 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.9 1998/02/26 04:33:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.10 1998/03/30 16:36:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -331,7 +331,7 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, aggreg->target = lfirst(target); if (usenulls) aggreg->usenulls = true; - + pstate->p_hasAggs = true; return aggreg; |
