]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Some stylistic improvements in toast_save_datum()
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 15 Sep 2025 05:27:31 +0000 (07:27 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 15 Sep 2025 05:43:23 +0000 (07:43 +0200)
Move some variables to a smaller scope.  Initialize chunk_data before
storing a pointer to it; this avoids compiler warnings on clang-21, or
respectively us having to work around it by initializing it to zero
before the variable is used (as was done in commit e92677e8633).

Discussion: https://www.postgresql.org/message-id/flat/6604ad6e-5934-43ac-8590-15113d6ae4b1%40eisentraut.org

src/backend/access/common/toast_internals.c

index 75e908c2e80a76313b91807777c8970cd2537a38..81dbd67c72587c6ee2210f0c423fbf7dbcf28b67 100644 (file)
@@ -121,22 +121,10 @@ toast_save_datum(Relation rel, Datum value,
 {
        Relation        toastrel;
        Relation   *toastidxs;
-       HeapTuple       toasttup;
        TupleDesc       toasttupDesc;
-       Datum           t_values[3];
-       bool            t_isnull[3];
        CommandId       mycid = GetCurrentCommandId(true);
        struct varlena *result;
        struct varatt_external toast_pointer;
-       union
-       {
-               struct varlena hdr;
-               /* this is to make the union big enough for a chunk: */
-               char            data[TOAST_MAX_CHUNK_SIZE + VARHDRSZ];
-               /* ensure union is aligned well enough: */
-               int32           align_it;
-       }                       chunk_data = {0};       /* silence compiler warning */
-       int32           chunk_size;
        int32           chunk_seq = 0;
        char       *data_p;
        int32           data_todo;
@@ -289,21 +277,23 @@ toast_save_datum(Relation rel, Datum value,
                }
        }
 
-       /*
-        * Initialize constant parts of the tuple data
-        */
-       t_values[0] = ObjectIdGetDatum(toast_pointer.va_valueid);
-       t_values[2] = PointerGetDatum(&chunk_data);
-       t_isnull[0] = false;
-       t_isnull[1] = false;
-       t_isnull[2] = false;
-
        /*
         * Split up the item into chunks
         */
        while (data_todo > 0)
        {
-               int                     i;
+               HeapTuple       toasttup;
+               Datum           t_values[3];
+               bool            t_isnull[3] = {0};
+               union
+               {
+                       struct varlena hdr;
+                       /* this is to make the union big enough for a chunk: */
+                       char            data[TOAST_MAX_CHUNK_SIZE + VARHDRSZ];
+                       /* ensure union is aligned well enough: */
+                       int32           align_it;
+               }                       chunk_data;
+               int32           chunk_size;
 
                CHECK_FOR_INTERRUPTS();
 
@@ -315,9 +305,12 @@ toast_save_datum(Relation rel, Datum value,
                /*
                 * Build a tuple and store it
                 */
+               t_values[0] = ObjectIdGetDatum(toast_pointer.va_valueid);
                t_values[1] = Int32GetDatum(chunk_seq++);
                SET_VARSIZE(&chunk_data, chunk_size + VARHDRSZ);
                memcpy(VARDATA(&chunk_data), data_p, chunk_size);
+               t_values[2] = PointerGetDatum(&chunk_data);
+
                toasttup = heap_form_tuple(toasttupDesc, t_values, t_isnull);
 
                heap_insert(toastrel, toasttup, mycid, options, NULL);
@@ -333,7 +326,7 @@ toast_save_datum(Relation rel, Datum value,
                 * Note also that there had better not be any user-created index on
                 * the TOAST table, since we don't bother to update anything else.
                 */
-               for (i = 0; i < num_indexes; i++)
+               for (int i = 0; i < num_indexes; i++)
                {
                        /* Only index relations marked as ready can be updated */
                        if (toastidxs[i]->rd_index->indisready)