Skip to content

Commit 6e6ec7f

Browse files
authored
[BABEL] Added BBF hook to simplify const expressions during planning (babelfish-for-postgresql#701)
This commit adds eval_const_expressions_in_preprocess_hook to evaluate expressions that can be substituted by a Const node during planning. Task: BABEL-3756 Extension PR: babelfish-for-postgresql/babelfish_extensions#4425 Authored by: Saurav Samantaray <sauravay@amazon.com>
1 parent 4c767f6 commit 6e6ec7f

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/backend/optimizer/plan/planner.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ planner_hook_type planner_hook = NULL;
7575
planner_node_transformer_hook_type planner_node_transformer_hook = NULL;
7676
/* Hook for plugins to get control when grouping_planner() plans upper rels */
7777
create_upper_paths_hook_type create_upper_paths_hook = NULL;
78+
/* Hook for plugins to flag whether parameters are dynamic */
79+
eval_const_expressions_in_preprocess_hook_type eval_const_expressions_in_preprocess_hook = NULL;
7880

7981

8082
/* Expression kind codes for preprocess_expression */
@@ -1213,11 +1215,12 @@ preprocess_expression(PlannerInfo *root, Node *expr, int kind)
12131215
* with AND directly under AND, nor OR directly under OR.
12141216
*/
12151217
if (kind != EXPRKIND_RTFUNC)
1216-
expr = eval_const_expressions(root, expr);
1217-
1218-
/* Reset context of expression */
1219-
if(EXPRKIND_TARGET == kind && planner_node_transformer_hook)
1220-
(void) planner_node_transformer_hook(root, NULL, -1);
1218+
{
1219+
if (eval_const_expressions_in_preprocess_hook)
1220+
expr = eval_const_expressions_in_preprocess_hook(root, expr, kind);
1221+
else
1222+
expr = eval_const_expressions(root, expr);
1223+
}
12211224

12221225
/*
12231226
* If it's a qual or havingQual, canonicalize it.

src/include/optimizer/planner.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,16 @@ extern PGDLLEXPORT planner_hook_type planner_hook;
3131

3232
/* Hook for plugins to transform qual nodes in planner */
3333
typedef Node* (*planner_node_transformer_hook_type) (PlannerInfo *root,
34-
Node *expr,
35-
int kind);
34+
Node *expr,
35+
int kind);
3636
extern PGDLLEXPORT planner_node_transformer_hook_type planner_node_transformer_hook;
3737

38+
/* Hook for plugins to simplify constant expressions in planner */
39+
typedef Node* (*eval_const_expressions_in_preprocess_hook_type) (PlannerInfo *root,
40+
Node *expr,
41+
int kind);
42+
extern PGDLLEXPORT eval_const_expressions_in_preprocess_hook_type eval_const_expressions_in_preprocess_hook;
43+
3844
/* Hook for plugins to get control when grouping_planner() plans upper rels */
3945
typedef void (*create_upper_paths_hook_type) (PlannerInfo *root,
4046
UpperRelationKind stage,

0 commit comments

Comments
 (0)