Use heap_attisnull, rather than heap_getattr, for a small

but useful speedup.
This commit is contained in:
Tom Lane 1999-01-24 22:50:58 +00:00
parent d03e98737c
commit 18577547d4
1 changed files with 13 additions and 19 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.38 1999/01/24 05:40:47 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.39 1999/01/24 22:50:58 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -91,27 +91,24 @@ printtup(HeapTuple tuple, TupleDesc typeinfo)
pq_putnchar("D", 1); pq_putnchar("D", 1);
/* ---------------- /* ----------------
* send a bitmap of which attributes are null * send a bitmap of which attributes are not null
* ---------------- * ----------------
*/ */
j = 0; j = 0;
k = 1 << 7; k = 1 << 7;
for (i = 0; i < tuple->t_data->t_natts;) for (i = 0; i < tuple->t_data->t_natts; ++i)
{ {
i++; /* heap_getattr is a macro, so no if (! heap_attisnull(tuple, i + 1))
* increment */ j |= k; /* set bit if not null */
attr = heap_getattr(tuple, i, typeinfo, &isnull);
if (!isnull)
j |= k;
k >>= 1; k >>= 1;
if (!(i & 7)) if (k == 0) /* end of byte? */
{ {
pq_putint(j, 1); pq_putint(j, 1);
j = 0; j = 0;
k = 1 << 7; k = 1 << 7;
} }
} }
if (i & 7) if (k != (1 << 7)) /* flush last partial byte */
pq_putint(j, 1); pq_putint(j, 1);
/* ---------------- /* ----------------
@ -243,27 +240,24 @@ printtup_internal(HeapTuple tuple, TupleDesc typeinfo)
pq_putnchar("B", 1); pq_putnchar("B", 1);
/* ---------------- /* ----------------
* send a bitmap of which attributes are null * send a bitmap of which attributes are not null
* ---------------- * ----------------
*/ */
j = 0; j = 0;
k = 1 << 7; k = 1 << 7;
for (i = 0; i < tuple->t_data->t_natts;) for (i = 0; i < tuple->t_data->t_natts; ++i)
{ {
i++; /* heap_getattr is a macro, so no if (! heap_attisnull(tuple, i + 1))
* increment */ j |= k; /* set bit if not null */
attr = heap_getattr(tuple, i, typeinfo, &isnull);
if (!isnull)
j |= k;
k >>= 1; k >>= 1;
if (!(i & 7)) if (k == 0) /* end of byte? */
{ {
pq_putint(j, 1); pq_putint(j, 1);
j = 0; j = 0;
k = 1 << 7; k = 1 << 7;
} }
} }
if (i & 7) if (k != (1 << 7)) /* flush last partial byte */
pq_putint(j, 1); pq_putint(j, 1);
/* ---------------- /* ----------------