diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/nodes/supportnodes.h | 25 | ||||
| -rw-r--r-- | src/include/optimizer/optimizer.h | 3 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/include/nodes/supportnodes.h b/src/include/nodes/supportnodes.h index ea774c7ef6a..5e89605b76e 100644 --- a/src/include/nodes/supportnodes.h +++ b/src/include/nodes/supportnodes.h @@ -72,6 +72,31 @@ typedef struct SupportRequestSimplify } SupportRequestSimplify; /* + * Similar to SupportRequestSimplify but for Aggref node types. + * + * This supports conversions such as swapping COUNT(1) or COUNT(notnullcol) + * for COUNT(*). + * + * Supporting functions can consult 'root' and the input 'aggref'. When the + * implementing support function deems the simplification is possible, it must + * create a new Node (probably another Aggref) and not modify the original. + * The newly created Node should then be returned to indicate that the + * conversion is to take place. When no conversion is possible, a NULL + * pointer should be returned. + * + * It is important to consider that implementing support functions can receive + * Aggrefs with agglevelsup > 0. Careful consideration should be given to + * whether the simplification is still possible at levels above 0. + */ +typedef struct SupportRequestSimplifyAggref +{ + NodeTag type; + + PlannerInfo *root; /* Planner's infrastructure */ + Aggref *aggref; /* Aggref to be simplified */ +} SupportRequestSimplifyAggref; + +/* * The InlineInFrom request allows the support function to perform plan-time * simplification of a call to its target function that appears in FROM. * The rules for this are sufficiently different from ordinary expressions diff --git a/src/include/optimizer/optimizer.h b/src/include/optimizer/optimizer.h index d0aa8ab0c1c..44ec5296a18 100644 --- a/src/include/optimizer/optimizer.h +++ b/src/include/optimizer/optimizer.h @@ -147,6 +147,9 @@ extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, extern bool var_is_nonnullable(PlannerInfo *root, Var *var, bool use_rel_info); +extern bool expr_is_nonnullable(PlannerInfo *root, Expr *expr, + bool use_rel_info); + extern List *expand_function_arguments(List *args, bool include_out_arguments, Oid result_type, HeapTuple func_tuple); |
