Re: lo_creat SQL command - Mailing list pgsql-novice
From | Michael Fuhr |
---|---|
Subject | Re: lo_creat SQL command |
Date | |
Msg-id | 20050422001753.GA44039@winnie.fuhr.org Whole thread Raw |
In response to | lo_creat SQL command (Volkan YAZICI <volkan.yazici@gmail.com>) |
List | pgsql-novice |
On Thu, Apr 21, 2005 at 11:18:57PM +0300, Volkan YAZICI wrote: > > I'd be so apprecited if somebody could help me to figure out the > meaning of required parameter for lo_creat() function. In libpq, you > just pass connection and mode params to lo_creat() function. But when > we look at the server-side lo_create() function: > > Schema: pg_catalog > Name: lo_creat > Result data type: oid > Argument data types: integer > > documentation/lo-funcs.html just uses -1 to create a new empty lo. I'm > cosidering parameter as the database connection to create the large > object. So -1 indicates the current connection. If this is right, how > can I pass another connection to lo_creat() SQL function? The source code for the backend lo_creat() calls the argument "mode", which would correspond to the second argument of the client-side (libpq) lo_creat(). The server-side lo_creat() passes "mode" to inv_create(), which calls the argument "flags". That function contains the following code: if (flags & INV_WRITE) retval->flags = IFS_WRLOCK | IFS_RDLOCK; else if (flags & INV_READ) retval->flags = IFS_RDLOCK; else elog(ERROR, "invalid flags: %d", flags); > Also it'd perfect if somebody can also point me the file in postgresql > source code which defines these lo functions. Various source code tools make it easy to browse code and find functions, but even without such tools you can use find and grep: % find src -name '*.c' | xargs grep '^lo_creat' src/backend/libpq/be-fsstubs.c:lo_creat(PG_FUNCTION_ARGS) src/interfaces/libpq/fe-lobj.c:lo_creat(PGconn *conn, int mode) or % grep '^lo_creat' `find src -name '*.c'` src/backend/libpq/be-fsstubs.c:lo_creat(PG_FUNCTION_ARGS) src/interfaces/libpq/fe-lobj.c:lo_creat(PGconn *conn, int mode) (Be careful to distinguish between single quotes and backticks in the above commands.) Functions in the source code don't always have the same name as in SQL, so before doing a search like the above you might need to query the system catalogs. For example, if you wanted to find the source code for the abs() function, you could execute this query: SELECT p.proname, oidvectortypes(p.proargtypes) AS argtypes, g.lanname, p.prosrc FROM pg_proc AS p JOIN pg_language AS g ON g.oid = p.prolang WHERE proname = 'abs'; proname | argtypes | lanname | prosrc ---------+------------------+----------+------------- abs | numeric | internal | numeric_abs abs | double precision | internal | float8abs abs | real | internal | float4abs abs | integer | internal | int4abs abs | smallint | internal | int2abs abs | bigint | internal | int8abs (6 rows) You'd then search the source code for numeric_abs, float8abs, etc. Note that the meaning of prosrc varies depending on the language -- in this case the language is "internal", so prosrc refers to a function in the PostgreSQL source code. -- Michael Fuhr http://www.fuhr.org/~mfuhr/
pgsql-novice by date: