summaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-lobj.c
diff options
context:
space:
mode:
authorTatsuo Ishii <ishii@postgresql.org>2008-03-19 00:39:33 +0000
committerTatsuo Ishii <ishii@postgresql.org>2008-03-19 00:39:33 +0000
commit8436f9a0364a6a16dbf7b250597986a97c9e6f09 (patch)
treeebc5d537017a71f13bc4c84c58d5d928c6febce5 /src/interfaces/libpq/fe-lobj.c
parentf755f2fef39504d85b22233988b5ce8216f6edd7 (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.c33
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;
}