mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Remove gen_node_support.pl's special treatment of EquivalenceClasses.
It seems better to deal with this by explicit annotations on the fields in question, instead of magic knowledge embedded in the script. While that creates a risk-of-omission from failing to annotate fields, the preceding commit should catch any such oversights. Discussion: https://postgr.es/m/263413.1669513145@sss.pgh.pa.us
This commit is contained in:
@@ -1279,7 +1279,9 @@ typedef struct StatisticExtInfo
|
||||
*
|
||||
* NB: EquivalenceClasses are never copied after creation. Therefore,
|
||||
* copyObject() copies pointers to them as pointers, and equal() compares
|
||||
* pointers to EquivalenceClasses via pointer equality.
|
||||
* pointers to EquivalenceClasses via pointer equality. This is implemented
|
||||
* by putting copy_as_scalar and equal_as_scalar attributes on fields that
|
||||
* are pointers to EquivalenceClasses. The same goes for EquivalenceMembers.
|
||||
*/
|
||||
typedef struct EquivalenceClass
|
||||
{
|
||||
@@ -1370,7 +1372,8 @@ typedef struct PathKey
|
||||
|
||||
NodeTag type;
|
||||
|
||||
EquivalenceClass *pk_eclass; /* the value that is ordered */
|
||||
/* the value that is ordered */
|
||||
EquivalenceClass *pk_eclass pg_node_attr(copy_as_scalar, equal_as_scalar);
|
||||
Oid pk_opfamily; /* btree opfamily defining the ordering */
|
||||
int pk_strategy; /* sort direction (ASC or DESC) */
|
||||
bool pk_nulls_first; /* do NULLs come before normal values? */
|
||||
@@ -2478,7 +2481,7 @@ typedef struct RestrictInfo
|
||||
* Generating EquivalenceClass. This field is NULL unless clause is
|
||||
* potentially redundant.
|
||||
*/
|
||||
EquivalenceClass *parent_ec pg_node_attr(equal_ignore, read_write_ignore);
|
||||
EquivalenceClass *parent_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore);
|
||||
|
||||
/*
|
||||
* cache space for cost and selectivity
|
||||
@@ -2506,13 +2509,13 @@ typedef struct RestrictInfo
|
||||
*/
|
||||
|
||||
/* EquivalenceClass containing lefthand */
|
||||
EquivalenceClass *left_ec pg_node_attr(equal_ignore, read_write_ignore);
|
||||
EquivalenceClass *left_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore);
|
||||
/* EquivalenceClass containing righthand */
|
||||
EquivalenceClass *right_ec pg_node_attr(equal_ignore, read_write_ignore);
|
||||
EquivalenceClass *right_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore);
|
||||
/* EquivalenceMember for lefthand */
|
||||
EquivalenceMember *left_em pg_node_attr(equal_ignore);
|
||||
EquivalenceMember *left_em pg_node_attr(copy_as_scalar, equal_ignore);
|
||||
/* EquivalenceMember for righthand */
|
||||
EquivalenceMember *right_em pg_node_attr(equal_ignore);
|
||||
EquivalenceMember *right_em pg_node_attr(copy_as_scalar, equal_ignore);
|
||||
|
||||
/*
|
||||
* List of MergeScanSelCache structs. Those aren't Nodes, so hard to
|
||||
|
||||
Reference in New Issue
Block a user