
I had thought that char2-16 add _no_ functionality over the char() and
varchar() types; Tatsuo points out at least one capability which they
have. Are there any others?

They give and take a char * pointer to a C function like
create function upper(char16)
returning char16 as '/u/my/upper.so' language 'sql';
whereas char() gives a varlena pointer.

Andreas





Thu, 19 Mar 1998 17:55:32 +-100
Zeugswetter Andreas <andreas.zeugswetter@telecom.at>
AW: [HACKERS] varchar() vs char16 performance
> I had thought that char2-16 add _no_ functionality over the char() and
> varchar() types; Tatsuo points out at least one capability which they
> have. Are there any others?
> 
> They give and take a char * pointer to a C function like
> create function upper(char16)
> returning char16 as '/u/my/upper.so' language 'sql';
> whereas char() gives a varlena pointer.

I don't really see this as a big deal since, for example, only 16 bytes
are allocated for a char16, so it is not guaranteed to be zero delimited
and you have to make a working copy to use libc functions anyway. Also,
that is really an implementation detail or annoyance rather than a
user-visible feature.

With the macros that are provided for the varlena structure
manipulations, things are pretty convenient. Are there more macros which
could be helpful here??

                       - Tom

Thu, 19 Mar 1998 17:27:38 +0000
"Thomas G. Lockhart" <lockhart@alumni.caltech.edu>
Re: AW: [HACKERS] varchar() vs char16 performance
> I don't really see this as a big deal since, for example, only 16 bytes
> are allocated for a char16, so it is not guaranteed to be zero delimited
> and you have to make a working copy to use libc functions anyway. Also,
> that is really an implementation detail or annoyance rather than a
> user-visible feature.

Agreed.

> With the macros that are provided for the varlena structure
> manipulations, things are pretty convenient. Are there more macros which
> could be helpful here??

>From postgres.h:
	
	#define VARSIZE(PTR)    (((struct varlena *)(PTR))->vl_len)
	#define VARDATA(PTR)    (((struct varlena *)(PTR))->vl_dat)
	#define VARHDRSZ        sizeof(int32)

I have gone throught the code before 6.3, and changed many hard-coded
4's to use these macros.
-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Thu, 19 Mar 1998 14:50:11 -0500 (EST)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: AW: [HACKERS] varchar() vs char16 performance