mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Improve planner's estimation of the space needed for HashAgg plans:
look at the actual aggregate transition datatypes and the actual overhead needed by nodeAgg.c, instead of using pessimistic round numbers. Per a discussion with Michael Tiemann.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/clauses.h,v 1.77 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/clauses.h,v 1.78 2005/01/28 19:34:28 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -17,11 +17,17 @@
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
|
||||
#define is_opclause(clause) ((clause) != NULL && IsA(clause, OpExpr))
|
||||
#define is_funcclause(clause) ((clause) != NULL && IsA(clause, FuncExpr))
|
||||
#define is_subplan(clause) ((clause) != NULL && IsA(clause, SubPlan))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numAggs; /* total number of aggregate calls */
|
||||
int numDistinctAggs; /* number that use DISTINCT */
|
||||
Size transitionSpace; /* for pass-by-ref transition data */
|
||||
} AggClauseCounts;
|
||||
|
||||
|
||||
extern Expr *make_opclause(Oid opno, Oid opresulttype, bool opretset,
|
||||
Expr *leftop, Expr *rightop);
|
||||
@@ -42,8 +48,7 @@ extern Expr *make_ands_explicit(List *andclauses);
|
||||
extern List *make_ands_implicit(Expr *clause);
|
||||
|
||||
extern bool contain_agg_clause(Node *clause);
|
||||
extern bool contain_distinct_agg_clause(Node *clause);
|
||||
extern int count_agg_clause(Node *clause);
|
||||
extern void count_agg_clauses(Node *clause, AggClauseCounts *counts);
|
||||
|
||||
extern bool expression_returns_set(Node *clause);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user