Re: [PATCH] Fix ouside scope t_ctid (ItemPointerData)

From: Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com>
To: Ranier Vilela <ranier(dot)vf(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: [PATCH] Fix ouside scope t_ctid (ItemPointerData)
Date: 2020-05-14 22:49:39
Message-ID: 14C3304F-CCC8-4825-9536-A2B47D598C54@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> On May 14, 2020, at 11:34 AM, Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> wrote:
>
> Certainly.
> In the same file you can find the appropriate use of the API.
> ItemPointerSet(&heapTuple->t_self, blkno, offnum);

It took a couple reads through your patch to figure out what you were trying to accomplish, and I think you are uncomfortable with assigning one ItemPointerData variable from another. ItemPointerData is just a struct with three int16 variables. To make a standalone program that has the same structure without depending on any postgres headers, I'm using "short int" instead of "int16" and structs "TwoData" and "ThreeData" that are analogous to BlockIdData and OffsetNumber.

#include <stdio.h>

typedef struct TwoData {
short int a;
short int b;
} TwoData;

typedef struct ThreeData {
TwoData left;
short int right;
} ThreeData;

int main(int argc, char **argv)
{
ThreeData x = { { 5, 10 }, 15 };
ThreeData y = x;
x.left.a = 0;
x.left.b = 1;
x.right = 2;

printf("y = { { %d, %d }, %d }\n",
y.left.a, y.left.b, y.right);

return 0;
}

If you compile and run this, you'll notice it outputs:

y = { { 5, 10 }, 15 }

and not the { { 0, 1}, 2 } that you would expect if y were merely pointing at x.


Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Ranier Vilela 2020-05-14 22:55:17 Re: [PATCH] Fix ouside scope t_ctid (ItemPointerData)
Previous Message Alvaro Herrera 2020-05-14 22:47:29 Re: SEQUENCE values (duplicated) in some corner cases when crash happens