diff options
| author | Tatsuo Ishii <ishii@postgresql.org> | 2008-03-19 00:39:33 +0000 |
|---|---|---|
| committer | Tatsuo Ishii <ishii@postgresql.org> | 2008-03-19 00:39:33 +0000 |
| commit | 8436f9a0364a6a16dbf7b250597986a97c9e6f09 (patch) | |
| tree | ebc5d537017a71f13bc4c84c58d5d928c6febce5 /src/interfaces/libpq/fe-lobj.c | |
| parent | f755f2fef39504d85b22233988b5ce8216f6edd7 (diff) | |
Add libpq new API lo_import_with_oid() which is similar to lo_import()
except that lob's oid can be specified.
Diffstat (limited to 'src/interfaces/libpq/fe-lobj.c')
| -rw-r--r-- | src/interfaces/libpq/fe-lobj.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/interfaces/libpq/fe-lobj.c b/src/interfaces/libpq/fe-lobj.c index dfe07198711..1cf78d57d64 100644 --- a/src/interfaces/libpq/fe-lobj.c +++ b/src/interfaces/libpq/fe-lobj.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-lobj.c,v 1.64 2008/01/01 19:46:00 momjian Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-lobj.c,v 1.65 2008/03/19 00:39:33 ishii Exp $ * *------------------------------------------------------------------------- */ @@ -41,6 +41,8 @@ static int lo_initialize(PGconn *conn); +static Oid +lo_import_internal(PGconn *conn, const char *filename, const Oid oid); /* * lo_open @@ -484,6 +486,27 @@ lo_unlink(PGconn *conn, Oid lobjId) 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,10 +530,14 @@ lo_import(PGconn *conn, const char *filename) /* * create an inversion object */ - lobjOid = lo_creat(conn, INV_READ | INV_WRITE); + if (oid == InvalidOid) + lobjOid = lo_creat(conn, INV_READ | INV_WRITE); + else + lobjOid = lo_create(conn, oid); + if (lobjOid == InvalidOid) { - /* we assume lo_creat() already set a suitable error message */ + /* we assume lo_create() already set a suitable error message */ (void) close(fd); return InvalidOid; } |
