From aa49848506ad84772c2f52539dd1cac6f9a23930 Mon Sep 17 00:00:00 2001 From: KaiGai Kohei Date: Sun, 14 Apr 2024 18:06:24 +0900 Subject: [PATCH] cleanup: remove unused fields from pgstromPlanInfo --- src/executor.c | 26 ++++---- src/gist.c | 4 +- src/gpu_join.c | 172 +++++-------------------------------------------- src/misc.c | 44 ++++--------- src/pg_strom.h | 14 ++-- 5 files changed, 48 insertions(+), 212 deletions(-) diff --git a/src/executor.c b/src/executor.c index dc2896c7e..814f792df 100644 --- a/src/executor.c +++ b/src/executor.c @@ -1545,15 +1545,15 @@ pgstromExecInitTaskState(CustomScanState *node, EState *estate, int eflags) istate->econtext = CreateExprContext(estate); istate->depth = depth_index + 1; istate->join_type = pp_inner->join_type; - istate->join_quals = ExecInitQual(pp_inner->join_quals_original, + istate->join_quals = ExecInitQual(pp_inner->join_quals, &pts->css.ss.ps); - istate->other_quals = ExecInitQual(pp_inner->other_quals_original, + istate->other_quals = ExecInitQual(pp_inner->other_quals, &pts->css.ss.ps); if (pp_inner->join_type == JOIN_FULL || pp_inner->join_type == JOIN_RIGHT) has_right_outer = true; - foreach (cell, pp_inner->hash_outer_keys_original) + foreach (cell, pp_inner->hash_outer_keys) { Node *outer_key = (Node *)lfirst(cell); ExprState *es; @@ -1569,7 +1569,7 @@ pgstromExecInitTaskState(CustomScanState *node, EState *estate, int eflags) dtype->type_hashfunc); } /* inner hash-keys references the result of inner-slot */ - foreach (cell, pp_inner->hash_inner_keys_original) + foreach (cell, pp_inner->hash_inner_keys) { Node *inner_key = (Node *)lfirst(cell); ExprState *es; @@ -2347,13 +2347,13 @@ pgstromExplainTaskState(CustomScanState *node, { pgstromPlanInnerInfo *pp_inner = &pp_info->inners[i]; - if (pp_inner->join_quals_original != NIL || - pp_inner->other_quals_original != NIL) + if (pp_inner->join_quals != NIL || + pp_inner->other_quals != NIL) { const char *join_label; resetStringInfo(&buf); - foreach (lc, pp_inner->join_quals_original) + foreach (lc, pp_inner->join_quals) { Node *expr = lfirst(lc); @@ -2362,9 +2362,9 @@ pgstromExplainTaskState(CustomScanState *node, appendStringInfoString(&buf, ", "); appendStringInfoString(&buf, str); } - if (pp_inner->other_quals_original != NIL) + if (pp_inner->other_quals != NIL) { - foreach (lc, pp_inner->other_quals_original) + foreach (lc, pp_inner->other_quals) { Node *expr = lfirst(lc); @@ -2406,10 +2406,10 @@ pgstromExplainTaskState(CustomScanState *node, } ntuples = pp_inner->join_nrows; - if (pp_inner->hash_outer_keys_original != NIL) + if (pp_inner->hash_outer_keys != NIL) { resetStringInfo(&buf); - foreach (lc, pp_inner->hash_outer_keys_original) + foreach (lc, pp_inner->hash_outer_keys) { Node *expr = lfirst(lc); @@ -2422,10 +2422,10 @@ pgstromExplainTaskState(CustomScanState *node, "%s Outer Hash [%d]", xpu_label, i+1); ExplainPropertyText(label, buf.data, es); } - if (pp_inner->hash_inner_keys_original != NIL) + if (pp_inner->hash_inner_keys != NIL) { resetStringInfo(&buf); - foreach (lc, pp_inner->hash_inner_keys_original) + foreach (lc, pp_inner->hash_inner_keys) { Node *expr = lfirst(lc); diff --git a/src/gist.c b/src/gist.c index 7ba5ded49..01c4ea76e 100644 --- a/src/gist.c +++ b/src/gist.c @@ -531,8 +531,8 @@ pgstromTryFindGistIndex(PlannerInfo *root, * Not only GiST, index should be built on normal relations. * And, IndexOnlyScan may not contain CTID, so not supported. */ - Assert(pp_inner->hash_outer_keys_original == NIL && - pp_inner->hash_inner_keys_original == NIL); + Assert(pp_inner->hash_outer_keys == NIL && + pp_inner->hash_inner_keys == NIL); if (!IS_SIMPLE_REL(inner_rel) || inner_path->pathtype == T_IndexOnlyScan) return NULL; /* see the logic in create_index_paths */ diff --git a/src/gpu_join.c b/src/gpu_join.c index 2ebc4d058..1ace33bf6 100644 --- a/src/gpu_join.c +++ b/src/gpu_join.c @@ -323,10 +323,10 @@ __buildXpuJoinPlanInfo(PlannerInfo *root, pp_inner = &pp_info->inners[pp_info->num_rels++]; pp_inner->join_type = join_type; pp_inner->join_nrows = joinrel->rows; - pp_inner->hash_outer_keys_original = hash_outer_keys; - pp_inner->hash_inner_keys_original = hash_inner_keys; - pp_inner->join_quals_original = join_quals; - pp_inner->other_quals_original = other_quals; + pp_inner->hash_outer_keys = hash_outer_keys; + pp_inner->hash_inner_keys = hash_inner_keys; + pp_inner->join_quals = join_quals; + pp_inner->other_quals = other_quals; /* GiST-Index availability checks */ if (enable_xpugistindex && hash_outer_keys == NIL && @@ -1146,114 +1146,6 @@ XpuJoinAddCustomPath(PlannerInfo *root, } } -/* - * build_fallback_exprs_scan - */ -static Node * -__build_fallback_exprs_scan_walker(Node *node, void *data) -{ - codegen_context *context = (codegen_context *)data; - - if (!node) - return NULL; - if (IsA(node, Var)) - { - Var *var = (Var *)node; - - if (var->varno == context->scan_relid) - { - return (Node *)makeVar(OUTER_VAR, - var->varattno, - var->vartype, - var->vartypmod, - var->varcollid, - var->varlevelsup); - } - elog(ERROR, "Var-node does not reference the base relation (%d): %s", - context->scan_relid, nodeToString(var)); - } - return expression_tree_mutator(node, __build_fallback_exprs_scan_walker, data); -} - -static List * -build_fallback_exprs_scan(codegen_context *context, List *scan_exprs) -{ - return (List *)__build_fallback_exprs_scan_walker((Node *)scan_exprs, context); -} - -/* - * build_fallback_exprs_join - */ -static Node * -__build_fallback_exprs_join_walker(Node *node, void *data) -{ - codegen_context *context = (codegen_context *)data; - ListCell *lc; - - if (!node) - return NULL; - foreach (lc, context->kvars_deflist) - { - codegen_kvar_defitem *kvar = lfirst(lc); - - if (codegen_expression_equals(node, kvar->kv_expr)) - { - return (Node *)makeVar(INDEX_VAR, - kvar->kv_slot_id + 1, - exprType(node), - exprTypmod(node), - exprCollation(node), - 0); - } - } - if (IsA(node, Var)) - elog(ERROR, "Bug? Var-node (%s) is missing at the kvars_exprs list", - nodeToString(node)); - - return expression_tree_mutator(node, __build_fallback_exprs_join_walker, data); -} - -static List * -build_fallback_exprs_join(codegen_context *context, List *join_exprs) -{ - return (List *)__build_fallback_exprs_join_walker((Node *)join_exprs, context); -} - -static Node * -__build_fallback_exprs_inner_walker(Node *node, void *data) -{ - codegen_context *context = (codegen_context *)data; - ListCell *lc; - - if (!node) - return NULL; - foreach (lc, context->kvars_deflist) - { - codegen_kvar_defitem *kvdef = lfirst(lc); - - if (codegen_expression_equals(node, kvdef->kv_expr)) - { - return (Node *)makeVar(INNER_VAR, - kvdef->kv_resno, - exprType(node), - exprTypmod(node), - exprCollation(node), - 0); - } - } - if (IsA(node, Var)) - elog(ERROR, "Bug? Var-node (%s) is missing at the kvars_exprs list", - nodeToString(node)); - - return expression_tree_mutator(node, __build_fallback_exprs_inner_walker, data); -} - -static List * -build_fallback_exprs_inner(codegen_context *context, List *inner_keys) -{ - return (List *)__build_fallback_exprs_inner_walker((Node *)inner_keys, context); -} - /* * pgstrom_build_tlist_dev */ @@ -1552,8 +1444,6 @@ PlanXpuJoinPathCommon(PlannerInfo *root, List *other_quals_stacked = NIL; List *hash_keys_stacked = NIL; List *gist_quals_stacked = NIL; - List *fallback_tlist = NIL; - ListCell *lc; Assert(pp_info->num_rels == list_length(custom_plans)); context = create_codegen_context(root, cpath, pp_info); @@ -1576,31 +1466,31 @@ PlanXpuJoinPathCommon(PlannerInfo *root, pgstromPlanInnerInfo *pp_inner = &pp_info->inners[i]; /* xpu code to generate outer hash-value */ - if (pp_inner->hash_outer_keys_original != NIL && - pp_inner->hash_inner_keys_original != NIL) + if (pp_inner->hash_outer_keys != NIL && + pp_inner->hash_inner_keys != NIL) { hash_keys_stacked = lappend(hash_keys_stacked, - pp_inner->hash_outer_keys_original); - pull_varattnos((Node *)pp_inner->hash_outer_keys_original, + pp_inner->hash_outer_keys); + pull_varattnos((Node *)pp_inner->hash_outer_keys, pp_info->scan_relid, &outer_refs); } else { - Assert(pp_inner->hash_outer_keys_original == NIL && - pp_inner->hash_inner_keys_original == NIL); + Assert(pp_inner->hash_outer_keys == NIL && + pp_inner->hash_inner_keys == NIL); hash_keys_stacked = lappend(hash_keys_stacked, NIL); } /* xpu code to evaluate join qualifiers */ join_quals_stacked = lappend(join_quals_stacked, - pp_inner->join_quals_original); - pull_varattnos((Node *)pp_inner->join_quals_original, + pp_inner->join_quals); + pull_varattnos((Node *)pp_inner->join_quals, pp_info->scan_relid, &outer_refs); other_quals_stacked = lappend(other_quals_stacked, - pp_inner->other_quals_original); - pull_varattnos((Node *)pp_inner->other_quals_original, + pp_inner->other_quals); + pull_varattnos((Node *)pp_inner->other_quals, pp_info->scan_relid, &outer_refs); @@ -1655,41 +1545,9 @@ PlanXpuJoinPathCommon(PlannerInfo *root, pp_info->used_params = context->used_params; pp_info->outer_refs = outer_refs; pp_info->cuda_stack_size = estimate_cuda_stack_size(context); - /* - * fixup fallback expressions + * build CustomScan */ - for (int i=0; i < pp_info->num_rels; i++) - { - pgstromPlanInnerInfo *pp_inner = &pp_info->inners[i]; - - pp_inner->hash_outer_keys_fallback - = build_fallback_exprs_join(context, pp_inner->hash_outer_keys_original); - pp_inner->hash_inner_keys_fallback - = build_fallback_exprs_inner(context, pp_inner->hash_inner_keys_original); - pp_inner->join_quals_fallback - = build_fallback_exprs_join(context, pp_inner->join_quals_original); - pp_inner->other_quals_fallback - = build_fallback_exprs_join(context, pp_inner->other_quals_original); - } - - foreach (lc, context->tlist_dev) - { - TargetEntry *tle = lfirst(lc); - - if (tle->resjunk) - continue; - tle = makeTargetEntry(tle->expr, - list_length(fallback_tlist) + 1, - tle->resname, - false); - fallback_tlist = lappend(fallback_tlist, tle); - } - pp_info->fallback_tlist = - (pp_info->num_rels == 0 - ? build_fallback_exprs_scan(context, fallback_tlist) - : build_fallback_exprs_join(context, fallback_tlist)); - cscan = makeNode(CustomScan); cscan->scan.plan.targetlist = tlist; cscan->scan.scanrelid = pp_info->scan_relid; diff --git a/src/misc.c b/src/misc.c index eb4abe939..1892f6e20 100644 --- a/src/misc.c +++ b/src/misc.c @@ -163,7 +163,6 @@ form_pgstrom_plan_info(CustomScan *cscan, pgstromPlanInfo *pp_info) privs = lappend(privs, makeInteger(pp_info->kvecs_ndims)); privs = lappend(privs, makeInteger(pp_info->extra_bufsz)); privs = lappend(privs, makeInteger(pp_info->cuda_stack_size)); - privs = lappend(privs, pp_info->fallback_tlist); privs = lappend(privs, pp_info->groupby_actions); privs = lappend(privs, makeInteger(pp_info->groupby_prepfn_bufsz)); /* inner relations */ @@ -177,14 +176,10 @@ form_pgstrom_plan_info(CustomScan *cscan, pgstromPlanInfo *pp_info) __privs = lappend(__privs, makeInteger(pp_inner->join_type)); __privs = lappend(__privs, __makeFloat(pp_inner->join_nrows)); - __exprs = lappend(__exprs, pp_inner->hash_outer_keys_original); - __privs = lappend(__privs, pp_inner->hash_outer_keys_fallback); - __exprs = lappend(__exprs, pp_inner->hash_inner_keys_original); - __privs = lappend(__privs, pp_inner->hash_inner_keys_fallback); - __exprs = lappend(__exprs, pp_inner->join_quals_original); - __privs = lappend(__privs, pp_inner->join_quals_fallback); - __exprs = lappend(__exprs, pp_inner->other_quals_original); - __privs = lappend(__privs, pp_inner->other_quals_fallback); + __exprs = lappend(__exprs, pp_inner->hash_outer_keys); + __exprs = lappend(__exprs, pp_inner->hash_inner_keys); + __exprs = lappend(__exprs, pp_inner->join_quals); + __exprs = lappend(__exprs, pp_inner->other_quals); __privs = lappend(__privs, makeInteger(pp_inner->gist_index_oid)); __privs = lappend(__privs, makeInteger(pp_inner->gist_index_col)); __privs = lappend(__privs, makeInteger(pp_inner->gist_ctid_resno)); @@ -273,7 +268,6 @@ deform_pgstrom_plan_info(CustomScan *cscan) pp_data.kvecs_ndims = intVal(list_nth(privs, pindex++)); pp_data.extra_bufsz = intVal(list_nth(privs, pindex++)); pp_data.cuda_stack_size = intVal(list_nth(privs, pindex++)); - pp_data.fallback_tlist = list_nth(privs, pindex++); pp_data.groupby_actions = list_nth(privs, pindex++); pp_data.groupby_prepfn_bufsz = intVal(list_nth(privs, pindex++)); /* inner relations */ @@ -291,14 +285,10 @@ deform_pgstrom_plan_info(CustomScan *cscan) pp_inner->join_type = intVal(list_nth(__privs, __pindex++)); pp_inner->join_nrows = floatVal(list_nth(__privs, __pindex++)); - pp_inner->hash_outer_keys_original = list_nth(__exprs, __eindex++); - pp_inner->hash_outer_keys_fallback = list_nth(__privs, __pindex++); - pp_inner->hash_inner_keys_original = list_nth(__exprs, __eindex++); - pp_inner->hash_inner_keys_fallback = list_nth(__privs, __pindex++); - pp_inner->join_quals_original = list_nth(__exprs, __eindex++); - pp_inner->join_quals_fallback = list_nth(__privs, __pindex++); - pp_inner->other_quals_original = list_nth(__exprs, __eindex++); - pp_inner->other_quals_fallback = list_nth(__privs, __pindex++); + pp_inner->hash_outer_keys = list_nth(__exprs, __eindex++); + pp_inner->hash_inner_keys = list_nth(__exprs, __eindex++); + pp_inner->join_quals = list_nth(__exprs, __eindex++); + pp_inner->other_quals = list_nth(__exprs, __eindex++); pp_inner->gist_index_oid = intVal(list_nth(__privs, __pindex++)); pp_inner->gist_index_col = intVal(list_nth(__privs, __pindex++)); pp_inner->gist_ctid_resno = intVal(list_nth(__privs, __pindex++)); @@ -343,22 +333,16 @@ copy_pgstrom_plan_info(const pgstromPlanInfo *pp_orig) kvars_deflist = lappend(kvars_deflist, kvdef_dest); } pp_dest->kvars_deflist = kvars_deflist; - pp_dest->fallback_tlist = copyObject(pp_dest->fallback_tlist); pp_dest->groupby_actions = list_copy(pp_dest->groupby_actions); for (int j=0; j < pp_orig->num_rels; j++) { pgstromPlanInnerInfo *pp_inner = &pp_dest->inners[j]; -#define __COPY(FIELD) pp_inner->FIELD = copyObject(pp_inner->FIELD) - __COPY(hash_outer_keys_original); - __COPY(hash_outer_keys_fallback); - __COPY(hash_inner_keys_original); - __COPY(hash_inner_keys_fallback); - __COPY(join_quals_original); - __COPY(join_quals_fallback); - __COPY(other_quals_original); - __COPY(other_quals_fallback); - __COPY(gist_clause); -#undef __COPY + + pp_inner->hash_outer_keys = copyObject(pp_inner->hash_outer_keys); + pp_inner->hash_inner_keys = copyObject(pp_inner->hash_inner_keys); + pp_inner->join_quals = copyObject(pp_inner->join_quals); + pp_inner->other_quals = copyObject(pp_inner->other_quals); + pp_inner->gist_clause = copyObject(pp_inner->gist_clause); } return pp_dest; } diff --git a/src/pg_strom.h b/src/pg_strom.h index 8689c79ad..04a8f7bff 100644 --- a/src/pg_strom.h +++ b/src/pg_strom.h @@ -249,14 +249,10 @@ typedef struct { JoinType join_type; /* one of JOIN_* */ double join_nrows; /* estimated nrows in this depth */ - List *hash_outer_keys_original; /* hash-keys for outer-side */ - List *hash_outer_keys_fallback; - List *hash_inner_keys_original; /* hash-keys for inner-side */ - List *hash_inner_keys_fallback; - List *join_quals_original; /* join quals */ - List *join_quals_fallback; - List *other_quals_original; /* other quals */ - List *other_quals_fallback; + List *hash_outer_keys; /* hash-keys for outer-side */ + List *hash_inner_keys; /* hash-keys for inner-side */ + List *join_quals; /* join quals */ + List *other_quals; /* other quals */ /* gist index properties */ Oid gist_index_oid; /* GiST index oid */ int gist_index_col; /* GiST index column number */ @@ -310,8 +306,6 @@ typedef struct uint32_t kvecs_ndims; uint32_t extra_bufsz; uint32_t cuda_stack_size;/* estimated stack consumption */ - /* fallback projection */ - List *fallback_tlist; /* fallback_slot -> custom_scan_tlist if JOIN/PREAGG */ /* group-by parameters */ List *groupby_actions; /* list of KAGG_ACTION__* on the kds_final */ int groupby_prepfn_bufsz; /* buffer-size for GpuPreAgg shared memory */