mirror of
https://github.com/postgres/postgres.git
synced 2025-07-23 03:21:12 +03:00
Add libpq new API lo_import_with_oid() which is similar to lo_import()
except that lob's oid can be specified.
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/lobj.sgml,v 1.46 2007/03/14 00:15:26 tgl Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/lobj.sgml,v 1.47 2008/03/19 00:39:33 ishii Exp $ -->
|
||||||
|
|
||||||
<chapter id="largeObjects">
|
<chapter id="largeObjects">
|
||||||
<title id="largeObjects-title">Large Objects</title>
|
<title id="largeObjects-title">Large Objects</title>
|
||||||
@ -161,6 +161,28 @@ Oid lo_import(PGconn *conn, const char *filename);
|
|||||||
the server; so it must exist in the client file system and be readable
|
the server; so it must exist in the client file system and be readable
|
||||||
by the client application.
|
by the client application.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The function
|
||||||
|
<synopsis>
|
||||||
|
Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId);
|
||||||
|
</synopsis>
|
||||||
|
<indexterm><primary>lo_import_with_oid</></>
|
||||||
|
also imports a new large object. The OID to be assigned can be
|
||||||
|
specified by <replaceable class="parameter">lobjId</replaceable>;
|
||||||
|
if so, failure occurs if that OID is already in use for some large
|
||||||
|
object. If <replaceable class="parameter">lobjId</replaceable>
|
||||||
|
is <symbol>InvalidOid</symbol> (zero) then <function>lo_import_with_oid</> assigns an unused
|
||||||
|
OID (this is the same behavior as <function>lo_import</>).
|
||||||
|
The return value is the OID that was assigned to the new large object,
|
||||||
|
or <symbol>InvalidOid</symbol> (zero) on failure.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<function>lo_import_with_oid</> is new as of <productname>PostgreSQL</productname>
|
||||||
|
8.4 and uses <function>lo_create</function> internally which is new in 8.1; if this function is run against 8.0 or before, it will
|
||||||
|
fail and return <symbol>InvalidOid</symbol>.
|
||||||
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.18 2007/12/09 19:01:40 tgl Exp $
|
# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.19 2008/03/19 00:39:33 ishii Exp $
|
||||||
# Functions to be exported by libpq DLLs
|
# Functions to be exported by libpq DLLs
|
||||||
PQconnectdb 1
|
PQconnectdb 1
|
||||||
PQsetdbLogin 2
|
PQsetdbLogin 2
|
||||||
@ -140,3 +140,4 @@ lo_truncate 137
|
|||||||
PQconnectionUsedPassword 138
|
PQconnectionUsedPassword 138
|
||||||
pg_valid_server_encoding_id 139
|
pg_valid_server_encoding_id 139
|
||||||
PQconnectionNeedsPassword 140
|
PQconnectionNeedsPassword 140
|
||||||
|
lo_import_with_oid 141
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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 int lo_initialize(PGconn *conn);
|
||||||
|
|
||||||
|
static Oid
|
||||||
|
lo_import_internal(PGconn *conn, const char *filename, const Oid oid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lo_open
|
* lo_open
|
||||||
@ -483,6 +485,27 @@ lo_unlink(PGconn *conn, Oid lobjId)
|
|||||||
|
|
||||||
Oid
|
Oid
|
||||||
lo_import(PGconn *conn, const char *filename)
|
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 fd;
|
||||||
int nbytes,
|
int nbytes,
|
||||||
@ -507,10 +530,14 @@ lo_import(PGconn *conn, const char *filename)
|
|||||||
/*
|
/*
|
||||||
* create an inversion object
|
* 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)
|
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);
|
(void) close(fd);
|
||||||
return InvalidOid;
|
return InvalidOid;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.141 2008/01/01 19:46:00 momjian Exp $
|
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.142 2008/03/19 00:39:33 ishii Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -495,6 +495,7 @@ extern int lo_tell(PGconn *conn, int fd);
|
|||||||
extern int lo_truncate(PGconn *conn, int fd, size_t len);
|
extern int lo_truncate(PGconn *conn, int fd, size_t len);
|
||||||
extern int lo_unlink(PGconn *conn, Oid lobjId);
|
extern int lo_unlink(PGconn *conn, Oid lobjId);
|
||||||
extern Oid lo_import(PGconn *conn, const char *filename);
|
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);
|
extern int lo_export(PGconn *conn, Oid lobjId, const char *filename);
|
||||||
|
|
||||||
/* === in fe-misc.c === */
|
/* === in fe-misc.c === */
|
||||||
|
Reference in New Issue
Block a user