diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-11-26 22:14:57 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-11-26 22:14:57 +0000 |
commit | da27c0a1ef9c35afef18f7ae3542498cb3a943a9 (patch) | |
tree | b97eff1d7aed83a69499436fe4bc08eb37a3c1a8 /src/backend/optimizer/plan/setrefs.c | |
parent | a66e2c88855a8c290149d03cfcd6c6a2a5dc53fe (diff) | |
download | postgresql-da27c0a1ef9c35afef18f7ae3542498cb3a943a9.tar.gz |
Teach tid-scan code to make use of "ctid = ANY (array)" clauses, so that
"ctid IN (list)" will still work after we convert IN to ScalarArrayOpExpr.
Make some minor efficiency improvements while at it, such as ensuring that
multiple TIDs are fetched in physical heap order. And fix EXPLAIN so that
it shows what's really going on for a TID scan.
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 9a8d83e8a7..5a716ead47 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.118 2005/11/22 18:17:13 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.119 2005/11/26 22:14:57 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -170,8 +170,7 @@ set_plan_references(Plan *plan, List *rtable) case T_TidScan: fix_expr_references(plan, (Node *) plan->targetlist); fix_expr_references(plan, (Node *) plan->qual); - fix_expr_references(plan, - (Node *) ((TidScan *) plan)->tideval); + fix_expr_references(plan, (Node *) ((TidScan *) plan)->tidquals); break; case T_SubqueryScan: /* Needs special treatment, see comments below */ @@ -509,7 +508,7 @@ adjust_plan_varnos(Plan *plan, int rtoffset) ((TidScan *) plan)->scan.scanrelid += rtoffset; adjust_expr_varnos((Node *) plan->targetlist, rtoffset); adjust_expr_varnos((Node *) plan->qual, rtoffset); - adjust_expr_varnos((Node *) ((TidScan *) plan)->tideval, + adjust_expr_varnos((Node *) ((TidScan *) plan)->tidquals, rtoffset); break; case T_SubqueryScan: @@ -916,11 +915,11 @@ set_inner_join_references(Plan *inner_plan, TidScan *innerscan = (TidScan *) inner_plan; Index innerrel = innerscan->scan.scanrelid; - innerscan->tideval = join_references(innerscan->tideval, - rtable, - outer_itlist, - NULL, - innerrel); + innerscan->tidquals = join_references(innerscan->tidquals, + rtable, + outer_itlist, + NULL, + innerrel); } } |