Thread: newoid in invapi.c

newoid in invapi.c

From
"Maurice Gittens"
Date:
Hi,

In the file large_object/inv_api.c there is a statement in the function
inv_create
which goes:

    file_oid=newoid() + 1;

later on a heap_create_with_catalog call is performed to create a heap
for the large object called xinv<file_oid>.

According to code (and the comments in the code) the assumption is that the
oid
of the heap_relation will be equal to the value of the variable file_oid.

This of course will only be the case if nobody else called newoid()
before the heap relation is created.

This might lead the large object implementation to confuse
large object relations with other relations.

According to me this is a bug. I'm I right?

Thanks,
Maurice



Re: [HACKERS] newoid in invapi.c

From
Peter T Mount
Date:
On Fri, 6 Mar 1998, Maurice Gittens wrote:

> Hi,
>
> In the file large_object/inv_api.c there is a statement in the function
> inv_create
> which goes:
>
>     file_oid=newoid() + 1;
>
> later on a heap_create_with_catalog call is performed to create a heap
> for the large object called xinv<file_oid>.
>
> According to code (and the comments in the code) the assumption is that the
> oid
> of the heap_relation will be equal to the value of the variable file_oid.
>
> This of course will only be the case if nobody else called newoid()
> before the heap relation is created.
>
> This might lead the large object implementation to confuse
> large object relations with other relations.
>
> According to me this is a bug. I'm I right?

Yes, and no. LargeObjects are supposed to run within a transaction (if you
don't then some fun things happen), and (someone correct me if I'm wrong)
if newoid() is called from within the transaction, it is safe?

--
Peter T Mount  petermount@earthling.net or pmount@maidast.demon.co.uk
Main Homepage: http://www.demon.co.uk/finder
Work Homepage: http://www.maidstone.gov.uk Work EMail: peter@maidstone.gov.uk