Fix problems related to RangeTblEntry members enrname and enrtuples.
Commit 18ce3a4ab22d2984f8540ab480979c851dae5338 failed to update the comments in parsenodes.h for the new members, and made only incomplete updates to src/backend/nodes Thomas Munro, per a report from Noah Misch. Discussion: http://postgr.es/m/20170611062525.GA1628882@rfd.leadboat.com
This commit is contained in:
parent
6c2003f8a1
commit
f32d57fd70
@ -2303,10 +2303,11 @@ _copyRangeTblEntry(const RangeTblEntry *from)
|
|||||||
COPY_STRING_FIELD(ctename);
|
COPY_STRING_FIELD(ctename);
|
||||||
COPY_SCALAR_FIELD(ctelevelsup);
|
COPY_SCALAR_FIELD(ctelevelsup);
|
||||||
COPY_SCALAR_FIELD(self_reference);
|
COPY_SCALAR_FIELD(self_reference);
|
||||||
COPY_STRING_FIELD(enrname);
|
|
||||||
COPY_NODE_FIELD(coltypes);
|
COPY_NODE_FIELD(coltypes);
|
||||||
COPY_NODE_FIELD(coltypmods);
|
COPY_NODE_FIELD(coltypmods);
|
||||||
COPY_NODE_FIELD(colcollations);
|
COPY_NODE_FIELD(colcollations);
|
||||||
|
COPY_STRING_FIELD(enrname);
|
||||||
|
COPY_SCALAR_FIELD(enrtuples);
|
||||||
COPY_NODE_FIELD(alias);
|
COPY_NODE_FIELD(alias);
|
||||||
COPY_NODE_FIELD(eref);
|
COPY_NODE_FIELD(eref);
|
||||||
COPY_SCALAR_FIELD(lateral);
|
COPY_SCALAR_FIELD(lateral);
|
||||||
|
@ -2631,6 +2631,8 @@ _equalRangeTblEntry(const RangeTblEntry *a, const RangeTblEntry *b)
|
|||||||
COMPARE_NODE_FIELD(coltypes);
|
COMPARE_NODE_FIELD(coltypes);
|
||||||
COMPARE_NODE_FIELD(coltypmods);
|
COMPARE_NODE_FIELD(coltypmods);
|
||||||
COMPARE_NODE_FIELD(colcollations);
|
COMPARE_NODE_FIELD(colcollations);
|
||||||
|
COMPARE_STRING_FIELD(enrname);
|
||||||
|
COMPARE_SCALAR_FIELD(enrtuples);
|
||||||
COMPARE_NODE_FIELD(alias);
|
COMPARE_NODE_FIELD(alias);
|
||||||
COMPARE_NODE_FIELD(eref);
|
COMPARE_NODE_FIELD(eref);
|
||||||
COMPARE_SCALAR_FIELD(lateral);
|
COMPARE_SCALAR_FIELD(lateral);
|
||||||
|
@ -3047,6 +3047,7 @@ _outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
|
|||||||
break;
|
break;
|
||||||
case RTE_NAMEDTUPLESTORE:
|
case RTE_NAMEDTUPLESTORE:
|
||||||
WRITE_STRING_FIELD(enrname);
|
WRITE_STRING_FIELD(enrname);
|
||||||
|
WRITE_FLOAT_FIELD(enrtuples, "%.0f");
|
||||||
WRITE_OID_FIELD(relid);
|
WRITE_OID_FIELD(relid);
|
||||||
WRITE_NODE_FIELD(coltypes);
|
WRITE_NODE_FIELD(coltypes);
|
||||||
WRITE_NODE_FIELD(coltypmods);
|
WRITE_NODE_FIELD(coltypmods);
|
||||||
|
@ -1358,6 +1358,7 @@ _readRangeTblEntry(void)
|
|||||||
break;
|
break;
|
||||||
case RTE_NAMEDTUPLESTORE:
|
case RTE_NAMEDTUPLESTORE:
|
||||||
READ_STRING_FIELD(enrname);
|
READ_STRING_FIELD(enrname);
|
||||||
|
READ_FLOAT_FIELD(enrtuples);
|
||||||
READ_OID_FIELD(relid);
|
READ_OID_FIELD(relid);
|
||||||
READ_NODE_FIELD(coltypes);
|
READ_NODE_FIELD(coltypes);
|
||||||
READ_NODE_FIELD(coltypmods);
|
READ_NODE_FIELD(coltypmods);
|
||||||
|
@ -944,6 +944,11 @@ typedef struct RangeTblEntry
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Fields valid for a plain relation RTE (else zero):
|
* Fields valid for a plain relation RTE (else zero):
|
||||||
|
*
|
||||||
|
* As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
|
||||||
|
* that the tuple format of the tuplestore is the same as the referenced
|
||||||
|
* relation. This allows plans referencing AFTER trigger transition
|
||||||
|
* tables to be invalidated if the underlying table is altered.
|
||||||
*/
|
*/
|
||||||
Oid relid; /* OID of the relation */
|
Oid relid; /* OID of the relation */
|
||||||
char relkind; /* relation kind (see pg_class.relkind) */
|
char relkind; /* relation kind (see pg_class.relkind) */
|
||||||
@ -1004,16 +1009,23 @@ typedef struct RangeTblEntry
|
|||||||
bool self_reference; /* is this a recursive self-reference? */
|
bool self_reference; /* is this a recursive self-reference? */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fields valid for values and CTE RTEs (else NIL):
|
* Fields valid for table functions, values, CTE and ENR RTEs (else NIL):
|
||||||
*
|
*
|
||||||
* We need these for CTE RTEs so that the types of self-referential
|
* We need these for CTE RTEs so that the types of self-referential
|
||||||
* columns are well-defined. For VALUES RTEs, storing these explicitly
|
* columns are well-defined. For VALUES RTEs, storing these explicitly
|
||||||
* saves having to re-determine the info by scanning the values_lists.
|
* saves having to re-determine the info by scanning the values_lists.
|
||||||
|
* For ENRs, we store the types explicitly here (we could get the
|
||||||
|
* information from the catalogs if 'relid' was supplied, but we'd still
|
||||||
|
* need these for TupleDesc-based ENRs, so we might as well always store
|
||||||
|
* the type info here).
|
||||||
*/
|
*/
|
||||||
List *coltypes; /* OID list of column type OIDs */
|
List *coltypes; /* OID list of column type OIDs */
|
||||||
List *coltypmods; /* integer list of column typmods */
|
List *coltypmods; /* integer list of column typmods */
|
||||||
List *colcollations; /* OID list of column collation OIDs */
|
List *colcollations; /* OID list of column collation OIDs */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fields valid for ENR RTEs (else NULL/zero):
|
||||||
|
*/
|
||||||
char *enrname; /* name of ephemeral named relation */
|
char *enrname; /* name of ephemeral named relation */
|
||||||
double enrtuples; /* estimated or actual from caller */
|
double enrtuples; /* estimated or actual from caller */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user