Em qui., 14 de mai. de 2020 às 19:49, Mark Dilger <
mark.dil...@enterprisedb.com> escreveu:

>
>
> > On May 14, 2020, at 11:34 AM, Ranier Vilela <ranier...@gmail.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.
>
Thanks for the example.
But what I wanted to test was
struct1 = struct2;
Both being of the same type of structure.

What I wrongly deduced was that the address of struct2 was saved and not
its content.

Again, thanks for your time and clarification.

regards,
Ranier Vilela

Reply via email to