diff options
| author | Tom Lane | 1999-10-07 04:23:24 +0000 |
|---|---|---|
| committer | Tom Lane | 1999-10-07 04:23:24 +0000 |
| commit | 3eb1c8227751aecede58e742a13b07127a7e2652 (patch) | |
| tree | c2f606088b1536e385811667c7f032552b89afa6 /src/backend/nodes | |
| parent | 4040fcfa78065882aa16895906ff8398aaaf1c23 (diff) | |
Fix planner and rewriter to follow SQL semantics for tables that are
mentioned in FROM but not elsewhere in the query: such tables should be
joined over anyway. Aside from being more standards-compliant, this allows
removal of some very ugly hacks for COUNT(*) processing. Also, allow
HAVING clause without aggregate functions, since SQL does. Clean up
CREATE RULE statement-list syntax the same way Bruce just fixed the
main stmtmulti production.
CAUTION: addition of a field to RangeTblEntry nodes breaks stored rules;
you will have to initdb if you have any rules.
Diffstat (limited to 'src/backend/nodes')
| -rw-r--r-- | src/backend/nodes/copyfuncs.c | 4 | ||||
| -rw-r--r-- | src/backend/nodes/equalfuncs.c | 4 | ||||
| -rw-r--r-- | src/backend/nodes/outfuncs.c | 5 | ||||
| -rw-r--r-- | src/backend/nodes/readfuncs.c | 6 |
4 files changed, 13 insertions, 6 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 4895be72379..07e75c0f838 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.92 1999/08/21 03:48:57 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.93 1999/10/07 04:23:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1316,9 +1316,9 @@ _copyRangeTblEntry(RangeTblEntry *from) newnode->relid = from->relid; newnode->inh = from->inh; newnode->inFromCl = from->inFromCl; + newnode->inJoinSet = from->inJoinSet; newnode->skipAcl = from->skipAcl; - return newnode; } diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index d948fb1e44e..2e3d67da608 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.49 1999/09/26 02:28:21 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.50 1999/10/07 04:23:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -597,6 +597,8 @@ _equalRangeTblEntry(RangeTblEntry *a, RangeTblEntry *b) return false; if (a->inFromCl != b->inFromCl) return false; + if (a->inJoinSet != b->inJoinSet) + return false; if (a->skipAcl != b->skipAcl) return false; diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 6b1e560014f..06c2520d271 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: outfuncs.c,v 1.96 1999/10/03 23:55:29 tgl Exp $ + * $Id: outfuncs.c,v 1.97 1999/10/07 04:23:04 tgl Exp $ * * NOTES * Every (plan) node in POSTGRES has an associated "out" routine which @@ -864,12 +864,13 @@ static void _outRangeTblEntry(StringInfo str, RangeTblEntry *node) { appendStringInfo(str, - " RTE :relname %s :refname %s :relid %u :inh %s :inFromCl %s :skipAcl %s", + " RTE :relname %s :refname %s :relid %u :inh %s :inFromCl %s :inJoinSet %s :skipAcl %s", stringStringInfo(node->relname), stringStringInfo(node->refname), node->relid, node->inh ? "true" : "false", node->inFromCl ? "true" : "false", + node->inJoinSet ? "true" : "false", node->skipAcl ? "true" : "false"); } diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 588528daa1d..ef62e5a285f 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.73 1999/08/21 03:48:58 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.74 1999/10/07 04:23:04 tgl Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -1380,6 +1380,10 @@ _readRangeTblEntry() token = lsptok(NULL, &length); /* get :inFromCl */ local_node->inFromCl = (token[0] == 't') ? true : false; + token = lsptok(NULL, &length); /* eat :inJoinSet */ + token = lsptok(NULL, &length); /* get :inJoinSet */ + local_node->inJoinSet = (token[0] == 't') ? true : false; + token = lsptok(NULL, &length); /* eat :skipAcl */ token = lsptok(NULL, &length); /* get :skipAcl */ local_node->skipAcl = (token[0] == 't') ? true : false; |
