]> granicus.if.org Git - postgresql/commitdiff
Use heap_attisnull, rather than heap_getattr, for a small
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 24 Jan 1999 22:50:58 +0000 (22:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 24 Jan 1999 22:50:58 +0000 (22:50 +0000)
but useful speedup.

src/backend/access/common/printtup.c

index d8feb3a812829f219b4ac5b1d2e57edb391ee2a9..fdf4ca8621222ff4216cd34aa3a3d30f1166eff2 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * 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);
 
        /* ----------------
-        *      send a bitmap of which attributes are null
+        *      send a bitmap of which attributes are not null
         * ----------------
         */
        j = 0;
        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
-                                                                * increment */
-               attr = heap_getattr(tuple, i, typeinfo, &isnull);
-               if (!isnull)
-                       j |= k;
+               if (! heap_attisnull(tuple, i + 1))
+                       j |= k;                         /* set bit if not null */
                k >>= 1;
-               if (!(i & 7))
+               if (k == 0)                             /* end of byte? */
                {
                        pq_putint(j, 1);
                        j = 0;
                        k = 1 << 7;
                }
        }
-       if (i & 7)
+       if (k != (1 << 7))                      /* flush last partial byte */
                pq_putint(j, 1);
 
        /* ----------------
@@ -243,27 +240,24 @@ printtup_internal(HeapTuple tuple, TupleDesc typeinfo)
        pq_putnchar("B", 1);
 
        /* ----------------
-        *      send a bitmap of which attributes are null
+        *      send a bitmap of which attributes are not null
         * ----------------
         */
        j = 0;
        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
-                                                                * increment */
-               attr = heap_getattr(tuple, i, typeinfo, &isnull);
-               if (!isnull)
-                       j |= k;
+               if (! heap_attisnull(tuple, i + 1))
+                       j |= k;                         /* set bit if not null */
                k >>= 1;
-               if (!(i & 7))
+               if (k == 0)                             /* end of byte? */
                {
                        pq_putint(j, 1);
                        j = 0;
                        k = 1 << 7;
                }
        }
-       if (i & 7)
+       if (k != (1 << 7))                      /* flush last partial byte */
                pq_putint(j, 1);
 
        /* ----------------