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/commands/explain.c | |
parent | a66e2c88855a8c290149d03cfcd6c6a2a5dc53fe (diff) | |
download | postgresql-da27c0a1ef9c35afef18f7ae3542498cb3a943a9.tar.gz postgresql-da27c0a1ef9c35afef18f7ae3542498cb3a943a9.zip |
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/commands/explain.c')
-rw-r--r-- | src/backend/commands/explain.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index e8cdfbad882..f60fff36c4c 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994-5, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.140 2005/11/22 18:17:09 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.141 2005/11/26 22:14:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -724,7 +724,6 @@ explain_outNode(StringInfo str, str, indent, es); /* FALL THRU */ case T_SeqScan: - case T_TidScan: case T_SubqueryScan: case T_FunctionScan: show_scan_qual(plan->qual, @@ -733,6 +732,28 @@ explain_outNode(StringInfo str, outer_plan, str, indent, es); break; + case T_TidScan: + { + /* + * The tidquals list has OR semantics, so be sure to show it + * as an OR condition. + */ + List *tidquals = ((TidScan *) plan)->tidquals; + + if (list_length(tidquals) > 1) + tidquals = list_make1(make_orclause(tidquals)); + show_scan_qual(tidquals, + "TID Cond", + ((Scan *) plan)->scanrelid, + outer_plan, + str, indent, es); + show_scan_qual(plan->qual, + "Filter", + ((Scan *) plan)->scanrelid, + outer_plan, + str, indent, es); + } + break; case T_NestLoop: show_upper_qual(((NestLoop *) plan)->join.joinqual, "Join Filter", |