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.
This commit is contained in:
parent
26a90c654f
commit
67a5f8ff9e
@ -14,7 +14,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
if (attrMap[i] != (i+1))
|
if (attrMap[i] == (i+1))
|
||||||
{
|
continue;
|
||||||
same = false;
|
|
||||||
break;
|
/*
|
||||||
}
|
* 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
|
else
|
||||||
@ -255,11 +266,22 @@ convert_tuples_by_name(TupleDesc indesc,
|
|||||||
same = true;
|
same = true;
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
if (attrMap[i] != (i+1))
|
if (attrMap[i] == (i+1))
|
||||||
{
|
continue;
|
||||||
same = false;
|
|
||||||
break;
|
/*
|
||||||
}
|
* 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
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user