Passing enum Parameters to User-defined C-Language Functions

Started by Albrecht Dreßover 2 years ago2 messagesgeneral
Jump to latest
#1Albrecht Dreß
albrecht.dress@posteo.de

Hi,

I have a (I hope not too dumb) question regarding the use of enum parameters in a user-defined function written in C, e.g. for the example given in [1]<https://www.postgresql.org/docs/16/datatype-enum.html&gt;: CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

- How would a “mood” parameter be encoded when it is passed to the function? “Four bytes on disk” might imply that its either an int4 or a float4?
- How is the association between enumlabel (e.g. 'happy') and value? The same as enumsortorder in pg_enum?
- How are NULL values encoded?

Or is it a bad idea to use an enum in this case – actually, an int2 plus a few #define's would do the job, too, but the dedicated type looks cleaner to me.

Thanks in advance,
Albrecht.

[1]: <https://www.postgresql.org/docs/16/datatype-enum.html&gt;

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Albrecht Dreß (#1)
Re: Passing enum Parameters to User-defined C-Language Functions

Albrecht =?iso-8859-1?b?RHJl3w==?= <albrecht.dress@posteo.de> writes:

- How would a “mood” parameter be encoded when it is passed to the function?

It's an OID, which you'd have to look up in the pg_enum catalog if
you want to know the string representation.

regards, tom lane