From: | David Helgason <david(at)uti(dot)is> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: SPI question (or not): trying to read from Large Objects from within a function |
Date: | 2004-01-07 06:06:46 |
Message-ID: | ACCFC56C-40D7-11D8-9789-000A9566DA8A@uti.is |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Sorry for spamming.... I'm getting the hang of this, and figured this
one out myself :)
These internal functions (loread/lowrite) have quite different
signatures from their C equivalents (as opposed to lo_lseek). Found out
from the sources that I was using it very incorrectly. But discovered
lo_read with a signature different from that documented as the Large
Object client interface: ones which don't take a connection parameter
at all. This really simplifies my code, which can now be:
> size_t inBufSize = 8192;
> char* inBuffer = (char*)palloc(inBufSize);
> int bytes_read = DatumGetInt32(DirectFunctionCall3(loread,
> Int32GetDatum(fd), CStringGetDatum(inBuffer),
> UInt32GetDatum(inBufSize)));
int bytes_read = lo_read(fd, inBuffer, inBufSize);
and all is well... just too bad there aren't similarly simple versions
of the other lo_{lseek,open,...}.
Thanks for the audience, and keep up the good work!
d.
On 7. jan 2004, at 06:22, David Helgason wrote:
> Thank you very much,
>
> I figured I needed to open my own using SPI_connect(). I had assumed
> that there was sth like a
> the-connection-this-functions-is-begin-run-through.
>
> Now I'm having problems with
>
>
> which returns an extremely large number in bytes_read (consistently
> 46235672), regardless of the contents of inBufSize.
>
> I tried using lo_lseek(fd, 0, SEEK_END) on this fd already, which
> correctly returned the size of the Large Object, so it's not a
> question of an invalid descriptor. Also that seek didn't effect the
> result at all. I guess it's wrong usage of the DatumGet*() /
> *GetDatum() functions, but I can't see where.
>
> Any suggestions?
>
> d.
>
> On 7. jan 2004, at 05:40, Tom Lane wrote:
>
>> David Helgason <david(at)uti(dot)is> writes:
>>> I'm having trouble finding out how to find the current PGconn
>>> connection inside a C function.
>>
>> What makes you think that "*the* current PGconn" is a valid concept?
>> libpq has always supported multiple active connections.
>>
>> regards, tom lane
>>
>> ---------------------------(end of
>> broadcast)---------------------------
>> TIP 9: the planner will ignore your desire to choose an index scan if
>> your
>> joining column's datatypes do not match
>>
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to
> majordomo(at)postgresql(dot)org
>
From | Date | Subject | |
---|---|---|---|
Next Message | Chris Travers | 2004-01-07 06:10:23 | OT: Copyright, was Re: Paypal WAS: PostgreSQL speakers needed for OSCON |
Previous Message | Murali Mohan Kasetty | 2004-01-07 06:00:31 | unsubscribe |