Hi!
It seems that postgres allows writing to a read-only blob opened like:
fd = lo_open (cnc, oid, INV_READ);
I've attached a simple test case and the Makefile to build it.
I'm using postgresql 7.3.3 (7.3.3-1 is the debian package version).
Is that the intended behaviour or is it a bug?
-Gonzalo
P.S.: please, CC me as I'm not suscribed to this list. Thanks.
--
Gonzalo Paniagua Javier <[EMAIL PROTECTED]>
http://www.gnome-db.org/~gonzalo/
#include <string.h>
#include <libpq-fe.h>
#include <libpq/libpq-fs.h>
static char *conn_string =
"dbname=test user=gonzalo password=password hostaddr=127.0.0.1";
int
main ()
{
PGconn *cnc;
PGresult *res;
int oid, fd;
char *the_string = "The String";
char *other_str = " ";
int written;
int result = 0;
cnc = PQconnectdb (conn_string);
if (PQstatus (cnc) != CONNECTION_OK) {
printf ("Error connecting: %s\n", PQerrorMessage (cnc));
return -1;
}
res = PQexec (cnc, "begin");
PQclear(res);
oid = lo_creat (cnc, INV_READ | INV_WRITE); /* Don't care if only one is set */
fd = lo_open (cnc, oid, INV_READ);
if (fd < 0) {
printf ("Error opening BLOB: %s\n", PQerrorMessage (cnc));
return -1;
}
written = lo_write (cnc, fd, the_string, strlen (the_string));
if (written >= 0) {
printf ("ERROR: I was able to write %d bytes.\n", written);
result = 1;
} else {
printf ("It worked! %s\n", PQerrorMessage (cnc));
}
lo_close (cnc, fd);
lo_unlink (cnc, oid);
res = PQexec (cnc, "end");
PQclear (res);
PQfinish (cnc);
return result;
}
CC=gcc
CFLAGS = -g -I/usr/include/postgresql
LDFLAGS = -lpq
inversion-bug: inversion-bug.o
inversion-bug.o: inversion-bug.c
clean:;
rm -f *.o inversion-bug *~
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html