Thread: [PATCH] Use idiomatic style for varlena structs

[PATCH] Use idiomatic style for varlena structs

From
Jay Levitt
Date:
I'm new to the codebase, but I think this patch reflects real-world usage;
the PostgreSQL code itself always calls the length field "vl_len_", and I
believe int32 is preferred over int4 (yes?)

Jay Levitt

Attachment

Re: [PATCH] Use idiomatic style for varlena structs

From
Tom Lane
Date:
Jay Levitt <jay.levitt@gmail.com> writes:
> I'm new to the codebase, but I think this patch reflects real-world usage;
> the PostgreSQL code itself always calls the length field "vl_len_", and I
> believe int32 is preferred over int4 (yes?)

The point of calling it vl_len_ is that it should never be referenced by
that name, so I'm not sure that propagating that name into user
documentation is a good idea.  I do agree with the part of this patch
that recommends use of SET_VARSIZE.

For context, the issues you're concerned about only matter when dealing
with a toastable datatype (not all varlena types are toastable).  The
particular bit of docs here doesn't pretend to be explaining how to
write toast-safe code.  I think it might be better from an expository
standpoint to cover that separately, rather than try to work it into the
very first pass over the concepts.

            regards, tom lane

Re: [PATCH] Use idiomatic style for varlena structs

From
Jay Levitt
Date:
Tom Lane wrote:
> Jay Levitt<jay.levitt@gmail.com>  writes:
>> I'm new to the codebase, but I think this patch reflects real-world usage;
>> the PostgreSQL code itself always calls the length field "vl_len_", and I
>> believe int32 is preferred over int4 (yes?)
>
> The point of calling it vl_len_ is that it should never be referenced by
> that name, so I'm not sure that propagating that name into user
> documentation is a good idea.  I do agree with the part of this patch
> that recommends use of SET_VARSIZE.

Ah, ok.  My confusion came from trying to build a new extension, using cube
as a baseline; cube (and all the other contrib extensions) use vl_len_, so I
saw a disconnect between the "int4 length" in the manual and the
"int32 vl_len_" in all the real-world examples I had.

My thought was that "vl_len_" *feels* more like a "this is mysterious and
I'd better not touch it - I'll use that macro", while "length" feels more
like something I might just set myself if I didn't know better.  But maybe
not.  Either way, the int32/int4 thing should be fixed.

> For context, the issues you're concerned about only matter when dealing
> with a toastable datatype (not all varlena types are toastable).  The
> particular bit of docs here doesn't pretend to be explaining how to
> write toast-safe code.  I think it might be better from an expository
> standpoint to cover that separately, rather than try to work it into the
> very first pass over the concepts.

Definitely; if anything, that's why I was favoring vl_len_. This is a magic
field. Do not touch the magic.

Jay


Re: [PATCH] Use idiomatic style for varlena structs

From
Robert Haas
Date:
On Mon, Feb 13, 2012 at 1:57 PM, Jay Levitt <jay.levitt@gmail.com> wrote:
> Tom Lane wrote:
>>
>> Jay Levitt<jay.levitt@gmail.com>  writes:
>>>
>>> I'm new to the codebase, but I think this patch reflects real-world
>>> usage;
>>> the PostgreSQL code itself always calls the length field "vl_len_", and I
>>> believe int32 is preferred over int4 (yes?)
>>
>>
>> The point of calling it vl_len_ is that it should never be referenced by
>> that name, so I'm not sure that propagating that name into user
>> documentation is a good idea.  I do agree with the part of this patch
>> that recommends use of SET_VARSIZE.
>
>
> Ah, ok.  My confusion came from trying to build a new extension, using cube
> as a baseline; cube (and all the other contrib extensions) use vl_len_, so I
> saw a disconnect between the "int4 length" in the manual and the
> "int32 vl_len_" in all the real-world examples I had.
>
> My thought was that "vl_len_" *feels* more like a "this is mysterious and
> I'd better not touch it - I'll use that macro", while "length" feels more
> like something I might just set myself if I didn't know better.  But maybe
> not.  Either way, the int32/int4 thing should be fixed.
>
>
>> For context, the issues you're concerned about only matter when dealing
>> with a toastable datatype (not all varlena types are toastable).  The
>> particular bit of docs here doesn't pretend to be explaining how to
>> write toast-safe code.  I think it might be better from an expository
>> standpoint to cover that separately, rather than try to work it into the
>> very first pass over the concepts.
>
>
> Definitely; if anything, that's why I was favoring vl_len_. This is a magic
> field. Do not touch the magic.

I've committed the parts of this to which Tom did not object.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company