mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
Fix missing outfuncs.c support for IncrementalSortPath.
For debugging purposes, Path nodes are supposed to have outfuncs support, but this was overlooked in the original incremental sort patch. While at it, clean up a couple other minor oversights, as well as bizarre choice of return type for create_incremental_sort_path(). (All the existing callers just cast it to "Path *" immediately, so they don't care, but some future caller might care.) outfuncs.c fix by Zhijie Hou, the rest by me Discussion: https://postgr.es/m/324c4d81d8134117972a5b1f6cdf9560@G08CNEXMBPEKD05.g08.fujitsu.local
This commit is contained in:
parent
58ebe967f8
commit
8286223f3d
@ -1954,14 +1954,30 @@ _outProjectSetPath(StringInfo str, const ProjectSetPath *node)
|
||||
WRITE_NODE_FIELD(subpath);
|
||||
}
|
||||
|
||||
static void
|
||||
_outSortPathInfo(StringInfo str, const SortPath *node)
|
||||
{
|
||||
_outPathInfo(str, (const Path *) node);
|
||||
|
||||
WRITE_NODE_FIELD(subpath);
|
||||
}
|
||||
|
||||
static void
|
||||
_outSortPath(StringInfo str, const SortPath *node)
|
||||
{
|
||||
WRITE_NODE_TYPE("SORTPATH");
|
||||
|
||||
_outPathInfo(str, (const Path *) node);
|
||||
_outSortPathInfo(str, node);
|
||||
}
|
||||
|
||||
WRITE_NODE_FIELD(subpath);
|
||||
static void
|
||||
_outIncrementalSortPath(StringInfo str, const IncrementalSortPath *node)
|
||||
{
|
||||
WRITE_NODE_TYPE("INCREMENTALSORTPATH");
|
||||
|
||||
_outSortPathInfo(str, (const SortPath *) node);
|
||||
|
||||
WRITE_INT_FIELD(nPresortedCols);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -4055,6 +4071,9 @@ outNode(StringInfo str, const void *obj)
|
||||
case T_SortPath:
|
||||
_outSortPath(str, obj);
|
||||
break;
|
||||
case T_IncrementalSortPath:
|
||||
_outIncrementalSortPath(str, obj);
|
||||
break;
|
||||
case T_GroupPath:
|
||||
_outGroupPath(str, obj);
|
||||
break;
|
||||
|
@ -387,6 +387,7 @@ RelOptInfo - a relation or joined relations
|
||||
ProjectionPath - a Result plan node with child (used for projection)
|
||||
ProjectSetPath - a ProjectSet plan node applied to some sub-path
|
||||
SortPath - a Sort plan node applied to some sub-path
|
||||
IncrementalSortPath - an IncrementalSort plan node applied to some sub-path
|
||||
GroupPath - a Group plan node applied to some sub-path
|
||||
UpperUniquePath - a Unique plan node applied to some sub-path
|
||||
AggPath - an Agg plan node applied to some sub-path
|
||||
|
@ -2798,7 +2798,7 @@ create_set_projection_path(PlannerInfo *root,
|
||||
* 'limit_tuples' is the estimated bound on the number of output tuples,
|
||||
* or -1 if no LIMIT or couldn't estimate
|
||||
*/
|
||||
SortPath *
|
||||
IncrementalSortPath *
|
||||
create_incremental_sort_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
@ -2834,7 +2834,7 @@ create_incremental_sort_path(PlannerInfo *root,
|
||||
|
||||
sort->nPresortedCols = presorted_keys;
|
||||
|
||||
return pathnode;
|
||||
return sort;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1655,7 +1655,10 @@ typedef struct SortPath
|
||||
} SortPath;
|
||||
|
||||
/*
|
||||
* IncrementalSortPath
|
||||
* IncrementalSortPath represents an incremental sort step
|
||||
*
|
||||
* This is like a regular sort, except some leading key columns are assumed
|
||||
* to be ordered already.
|
||||
*/
|
||||
typedef struct IncrementalSortPath
|
||||
{
|
||||
|
@ -184,17 +184,17 @@ extern ProjectSetPath *create_set_projection_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
PathTarget *target);
|
||||
extern SortPath *create_incremental_sort_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
List *pathkeys,
|
||||
int presorted_keys,
|
||||
double limit_tuples);
|
||||
extern SortPath *create_sort_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
List *pathkeys,
|
||||
double limit_tuples);
|
||||
extern IncrementalSortPath *create_incremental_sort_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
List *pathkeys,
|
||||
int presorted_keys,
|
||||
double limit_tuples);
|
||||
extern GroupPath *create_group_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *subpath,
|
||||
|
Loading…
Reference in New Issue
Block a user