j***@uwaterloo.ca
2011-02-27 23:31:07 UTC
In continuing to attempt to use ExecProcNode to retrieve a tuple, I have
indeed tried to "use ExecProcNode on the child nodes (which is the inner
or outer relation in this case) and not on the Hash Join Node."
However when attempting to call ExecProcNode on a child node such as a
PlanState outerNode = outerPlanState(node); etc. I still find that
ExecProcNode uses the switch-case loop to call ExecHash (which is still
not what we want it to do). So even though I am calling ExecProcNode on a
non-HashJoin node it still seems to give me the same result.
I did notice that this changed if I were to change the optimizer so that
both inputs for each hash join operator will NOT be hash nodes. However,
that is exactly what we were told not to do, we were told to make sure
that they were both hashnodes in createplan.c, which I did in a few short
lines with the following:
Hash *outer_hash_plan;
.
.
.
hash_plan = make_hash(inner_plan);
outer_hash_plan = make_hash(outer_plan);
join_plan = make_hashjoin(tlist, joinclauses, otherclauses, hashclauses,
(Plan *) outer_hash_plan, (Plan *) hash_plan, best_path->jpath.jointype);
Am I incorrect in doing so? I believe I was simply following the
instructions given to us... but it has simply led me to unexpected
results?
indeed tried to "use ExecProcNode on the child nodes (which is the inner
or outer relation in this case) and not on the Hash Join Node."
However when attempting to call ExecProcNode on a child node such as a
PlanState outerNode = outerPlanState(node); etc. I still find that
ExecProcNode uses the switch-case loop to call ExecHash (which is still
not what we want it to do). So even though I am calling ExecProcNode on a
non-HashJoin node it still seems to give me the same result.
I did notice that this changed if I were to change the optimizer so that
both inputs for each hash join operator will NOT be hash nodes. However,
that is exactly what we were told not to do, we were told to make sure
that they were both hashnodes in createplan.c, which I did in a few short
lines with the following:
Hash *outer_hash_plan;
.
.
.
hash_plan = make_hash(inner_plan);
outer_hash_plan = make_hash(outer_plan);
join_plan = make_hashjoin(tlist, joinclauses, otherclauses, hashclauses,
(Plan *) outer_hash_plan, (Plan *) hash_plan, best_path->jpath.jointype);
Am I incorrect in doing so? I believe I was simply following the
instructions given to us... but it has simply led me to unexpected
results?