aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-08-17 20:34:31 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-08-17 20:34:31 +0000
commit67a5f8ff9e168bf2ec3540b8a389efb5f46b76fc (patch)
treeca0fcc3fd29f6c0814ae35b4fc63a5ca5badfa7f /src
parent26a90c654f19263449a70e24a3a7bc3df1908121 (diff)
downloadpostgresql-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.c44
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