From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | bucoo(at)sohu(dot)com, pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #14984: function "heap_tuple_from_minimal_tuple" lost HeapTupleHeader->t_len value |
Date: | 2017-12-20 15:25:54 |
Message-ID: | 20171220152554.rmfjlhhdhno2drau@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hi,
On 2017-12-20 09:49:58 +0000, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 14984
> Logged by: bucoo hsiao
> Email address: bucoo(at)sohu(dot)com
> PostgreSQL version: 10.1
> Operating system: all
> Description:
This isn't really a complete bug report. How did you arrive at this
being a problem? What triggers it?
> HeapTuple
> heap_tuple_from_minimal_tuple(MinimalTuple mtup)
> {
> HeapTuple result;
> uint32 len = mtup->t_len + MINIMAL_TUPLE_OFFSET;
>
> result = (HeapTuple) palloc(HEAPTUPLESIZE + len);
> result->t_len = len;
> ItemPointerSetInvalid(&(result->t_self));
> result->t_tableOid = InvalidOid;
> result->t_data = (HeapTupleHeader) ((char *) result + HEAPTUPLESIZE);
> memcpy((char *) result->t_data + MINIMAL_TUPLE_OFFSET, mtup,
> mtup->t_len);
> memset(result->t_data, 0, offsetof(HeapTupleHeaderData, t_infomask2));
> /* when memset return, result->t_data->t_len value lost
> should append code:
> HeapTupleHeaderSetDatumLength(result->t_data, len);
> */
There is no result->t_data->t_len. It's result->t_len. And calling
HeapTupleHeaderSetDatumLength() wouldn't be right, because the returned
value is an actual tuple, not a datum. Use heap_copy_tuple_as_datum() if
you want that.
Greetings,
Andres Freund
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2017-12-20 15:33:46 | Re: BUG #14985: ExecCopySlotTuple not set "type id" and "type mod" when from minial tuple" |
Previous Message | Andres Freund | 2017-12-20 14:05:38 | Re: vacuum vs heap_update_tuple() and multixactids |