diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-08-17 20:34:31 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-08-17 20:34:31 +0000 |
commit | 67a5f8ff9e168bf2ec3540b8a389efb5f46b76fc (patch) | |
tree | ca0fcc3fd29f6c0814ae35b4fc63a5ca5badfa7f /src | |
parent | 26a90c654f19263449a70e24a3a7bc3df1908121 (diff) | |
download | postgresql-67a5f8ff9e168bf2ec3540b8a389efb5f46b76fc.tar.gz postgresql-67a5f8ff9e168bf2ec3540b8a389efb5f46b76fc.zip |
Department of marginal improvements: teach tupconvert.c to avoid doing a
physical conversion when there are dropped columns in the same places in
the input and output tupdescs. This avoids possible performance loss from
the recent patch to improve dropped-column handling, in some cases where
the old code would have worked.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/common/tupconvert.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/src/backend/access/common/tupconvert.c b/src/backend/access/common/tupconvert.c index 6f5dda2a13f..174d438d805 100644 --- a/src/backend/access/common/tupconvert.c +++ b/src/backend/access/common/tupconvert.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/common/tupconvert.c,v 1.1 2009/08/06 20:44:31 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/common/tupconvert.c,v 1.2 2009/08/17 20:34:31 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -146,11 +146,22 @@ convert_tuples_by_position(TupleDesc indesc, { for (i = 0; i < n; i++) { - if (attrMap[i] != (i+1)) - { - same = false; - break; - } + if (attrMap[i] == (i+1)) + continue; + + /* + * If it's a dropped column and the corresponding input + * column is also dropped, we needn't convert. However, + * attlen and attalign must agree. + */ + if (attrMap[i] == 0 && + indesc->attrs[i]->attisdropped && + indesc->attrs[i]->attlen == outdesc->attrs[i]->attlen && + indesc->attrs[i]->attalign == outdesc->attrs[i]->attalign) + continue; + + same = false; + break; } } else @@ -255,11 +266,22 @@ convert_tuples_by_name(TupleDesc indesc, same = true; for (i = 0; i < n; i++) { - if (attrMap[i] != (i+1)) - { - same = false; - break; - } + if (attrMap[i] == (i+1)) + continue; + + /* + * If it's a dropped column and the corresponding input + * column is also dropped, we needn't convert. However, + * attlen and attalign must agree. + */ + if (attrMap[i] == 0 && + indesc->attrs[i]->attisdropped && + indesc->attrs[i]->attlen == outdesc->attrs[i]->attlen && + indesc->attrs[i]->attalign == outdesc->attrs[i]->attalign) + continue; + + same = false; + break; } } else |