Re: [HACKERS] rollback varchar change - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] rollback varchar change
Date
Msg-id 199801080507.AAA07928@candle.pha.pa.us
Whole thread Raw
In response to Re: [HACKERS] rollback varchar change  ("Vadim B. Mikheev" <vadim@sable.krasnoyarsk.su>)
List pgsql-hackers
>
> Bruce Momjian wrote:
> >
> > I have found that the varchar() change I made requires a new
> > pg_attribute field, so I am rolling back the change until I get a fully
>   ^^^^^^^^^^^^^^^^^^
>
> Please try some other way. As I remember, you said about breaking
> vl_len into 2 parts - very nice for me, but I'd recommend to leave
> varlena as is and add new structure - for compatibility and to allow
> text (etc) be longer 2^16 someday (multi-representation feature).
> Just like attlen -1 is used in many parts of code to flag varlena,
> you could use -2 to flag new structure.

OK, I have now figured out that my original idea was sound.  The only
problem is that I started using VARSIZE in varchar.c instead of the old
vcTruelen() function.  It turns out that constants have the full length
of the type with trailing nulls, and the disk data doesn't.  I put the
old comparison function back, and it seems to be working just fine now.

I will look through the code some more to make sure we are safe.  The
regression tests pass, so it must be working pefectly :-)  The attlen
field must contain -1 so it knows it is a varlena, and just references
the real attribute length when it needs to do some creation things.

That works fine for my purposes.

--
Bruce Momjian
maillist@candle.pha.pa.us

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: varchar() change
Next
From: "Vadim B. Mikheev"
Date:
Subject: Re: [HACKERS] varchar() change