? src/interfaces/libpq/exports.list ? src/interfaces/libpq/libpq.so.5.2 Index: doc/src/sgml/lobj.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v retrieving revision 1.46 diff -c -r1.46 lobj.sgml *** doc/src/sgml/lobj.sgml 14 Mar 2007 00:15:26 -0000 1.46 --- doc/src/sgml/lobj.sgml 18 Mar 2008 01:02:10 -0000 *************** *** 161,166 **** --- 161,188 ---- the server; so it must exist in the client file system and be readable by the client application. + + + The function + + Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId); + + lo_import_with_oid + also imports a new large object. The OID to be assigned can be + specified by lobjId; + if so, failure occurs if that OID is already in use for some large + object. If lobjId + is InvalidOid (zero) then lo_import_with_oid assigns an unused + OID (this is the same behavior as lo_import). + The return value is the OID that was assigned to the new large object, + or InvalidOid (zero) on failure. + + + + lo_import_with_oid is new as of PostgreSQL + 8.4 and uses lo_create internally which is new in 8.1; if this function is run against 8.0 or before, it will + fail and return InvalidOid. + Index: src/interfaces/libpq/exports.txt =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/libpq/exports.txt,v retrieving revision 1.18 diff -c -r1.18 exports.txt *** src/interfaces/libpq/exports.txt 9 Dec 2007 19:01:40 -0000 1.18 --- src/interfaces/libpq/exports.txt 18 Mar 2008 01:02:10 -0000 *************** *** 140,142 **** --- 140,143 ---- PQconnectionUsedPassword 138 pg_valid_server_encoding_id 139 PQconnectionNeedsPassword 140 + lo_import_with_oid 141 Index: src/interfaces/libpq/fe-lobj.c =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/libpq/fe-lobj.c,v retrieving revision 1.64 diff -c -r1.64 fe-lobj.c *** src/interfaces/libpq/fe-lobj.c 1 Jan 2008 19:46:00 -0000 1.64 --- src/interfaces/libpq/fe-lobj.c 18 Mar 2008 01:02:11 -0000 *************** *** 41,46 **** --- 41,48 ---- static int lo_initialize(PGconn *conn); + static Oid + lo_import_internal(PGconn *conn, const char *filename, const Oid oid); /* * lo_open *************** *** 484,489 **** --- 486,512 ---- Oid lo_import(PGconn *conn, const char *filename) { + return lo_import_internal(conn, filename, InvalidOid); + } + + /* + * lo_import_with_oid - + * imports a file as an (inversion) large object. + * large object id can be specified. + * + * returns the oid of that object upon success, + * returns InvalidOid upon failure + */ + + Oid + lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId) + { + return lo_import_internal(conn, filename, lobjId); + } + + static Oid + lo_import_internal(PGconn *conn, const char *filename, Oid oid) + { int fd; int nbytes, tmp; *************** *** 507,516 **** /* * create an inversion object */ ! lobjOid = lo_creat(conn, INV_READ | INV_WRITE); if (lobjOid == InvalidOid) { ! /* we assume lo_creat() already set a suitable error message */ (void) close(fd); return InvalidOid; } --- 530,543 ---- /* * create an inversion object */ ! if (oid == InvalidOid) ! lobjOid = lo_creat(conn, INV_READ | INV_WRITE); ! else ! lobjOid = lo_create(conn, oid); ! if (lobjOid == InvalidOid) { ! /* we assume lo_create() already set a suitable error message */ (void) close(fd); return InvalidOid; } Index: src/interfaces/libpq/libpq-fe.h =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/libpq/libpq-fe.h,v retrieving revision 1.141 diff -c -r1.141 libpq-fe.h *** src/interfaces/libpq/libpq-fe.h 1 Jan 2008 19:46:00 -0000 1.141 --- src/interfaces/libpq/libpq-fe.h 18 Mar 2008 01:02:12 -0000 *************** *** 495,500 **** --- 495,501 ---- extern int lo_truncate(PGconn *conn, int fd, size_t len); extern int lo_unlink(PGconn *conn, Oid lobjId); extern Oid lo_import(PGconn *conn, const char *filename); + extern Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId); extern int lo_export(PGconn *conn, Oid lobjId, const char *filename); /* === in fe-misc.c === */