SQL names for C constants

Started by Vegard Bønesabout 19 years ago2 messagesgeneral
Jump to latest
#1Vegard Bønes
vegard.bones@met.no

Hi!

I am writing a serverside function in plpgsql, which returns a part of a
large object.

To solve this problem I can do something like this:

fd := lo_open( some_oid, 262144 );
PERFORM lo_lseek( fd, index, 0 );
RETURN loread( fd, read_size );

This works well enough, but I do feel slightly uneasy about using
numbers instead of symbolic names (262144 for INV_READ and 0 for
SEEK_SET). I do especially find SEEK_SET unsettling, since this constant
is defined outside of postgresql, and it may therefore be defined to
other values than 0 on other platforms.

Am I missing something here? Is there a way to specify these names
without writing the actual numbers, or should I just close my eyes and
hope that everything will work?

thanks

VG

#2Merlin Moncure
mmoncure@gmail.com
In reply to: Vegard Bønes (#1)
Re: SQL names for C constants

On 2/27/07, Vegard Bønes <vegard.bones@met.no> wrote:

Hi!

I am writing a serverside function in plpgsql, which returns a part of a
large object.

To solve this problem I can do something like this:

fd := lo_open( some_oid, 262144 );
PERFORM lo_lseek( fd, index, 0 );
RETURN loread( fd, read_size );

This works well enough, but I do feel slightly uneasy about using
numbers instead of symbolic names (262144 for INV_READ and 0 for
SEEK_SET). I do especially find SEEK_SET unsettling, since this constant
is defined outside of postgresql, and it may therefore be defined to
other values than 0 on other platforms.

Am I missing something here? Is there a way to specify these names
without writing the actual numbers, or should I just close my eyes and
hope that everything will work?

You can make a preprocessor file for your sql stuff and pre-process
all your sql using classic C defines for your constants. with little
work you can even share headers with your applications. Major
downside to this approach is you cannot copy/paste your function
bodies (or any sql using macros) into psql/pgadmin, etc.

You can use psql variables for similar things but unfortunately not
inside functions bodies because they are strings :(. Ideally, for
these type of problems I would like to use psql variables because it
gives me more flexibility than the C preprocessor in terms of
development.

merlin