[ Charset KOI8-R unsupported, converting... ]
> On Saturday 20 January 2001 10:05, you wrote:
> > I just wanted to confirm that this patch was applied.
> 
> Yes, it is. But the following patch is not applied. But I sure that it is 
> neccessary, otherwise we will get really strange errors (see discussion in 
> the thread).
> 
> http://www.postgresql.org/mhonarc/pgsql-patches/2000-11/msg00013.html

Can people comment on the following patch that Dennis says is needed?
It prevents BLOB operations outside transactions.  Dennis, can you
explain why BLOB operations have to be done inside transactions?

---------------------------------------------------------------------------
Hello,

here is the patch attached which do check in each BLOB operation, if we are 
in transaction, and raise an error otherwise. This will prevent such
mistakes.

-- 
Sincerely Yours,
Denis Perchine

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
<!-- MHonArc v2.4.7 -->
<!--X-Subject: Patch to check whether we are in TX when to lo_* -->
<!--X-From-R13: Rravf Brepuvar <qlcNcrepuvar.pbz> -->
<!--X-Date: Fri, 3 Nov 2000 11:59:39 &#45;0500 (EST)(envelope&#45;from 
[EMAIL PROTECTED]) -->
<!--X-Message-Id: [EMAIL PROTECTED] -->
<!--X-Content-Type: multipart/mixed -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML//EN">
<HTML>                   
<HEAD>                                                                
<META NAME="robots" CONTENT="all">
<TITLE>Patch to check whether we are in TX when to lo_*</TITLE>                        
                 
</HEAD>
<BODY BGCOLOR="#FFFDEC">
<CENTER><A HREF="http://ads.pgsql.com/cgi-bin/redirect.cgi"><IMG 
SRC="http://ads.pgsql.com/cgi-bin/display_image.cgi" BORDER=0 HEIGHT=60 
WIDTH=468></A></CENTER>
<P><HR WIDTH=40% SIZE=3 NOSHADE><P>
<!--X-Body-Begin-->
<!--X-User-Header-->
<!--X-User-Header-End-->
<!--X-TopPNI-->
<p>

<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<h2>Patch to check whether we are in TX when to lo_*</h2>
<HR SIZE=3 WIDTH=40% NOSHADE>
<!--X-Subject-Header-End-->
<!--X-Head-of-Message-->
<ul>
<li><strong>From</strong>: <strong>Denis Perchine <<A 
HREF="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</A>></strong></li>
<li><strong>To</strong>: <strong><A 
HREF="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</A></strong></li>
<li><strong>Subject</strong>: <strong>Patch to check whether we are in TX when to 
lo_*</strong></li>
<li>Date: Fri, 3 Nov 2000 21:59:47 +0600</li>
</ul>
<!--X-Head-of-Message-End-->
<!--X-Head-Body-Sep-Begin-->
<hr>
<!--X-Head-Body-Sep-End-->
<!--X-Body-of-Message-->
<PRE>
Hello,

here is the patch attached which do check in each BLOB operation, if we are 
in transaction, and raise an error otherwise. This will prevent such mistakes.

-- 
Sincerely Yours,
Denis Perchine

----------------------------------
E-Mail: [EMAIL PROTECTED]
HomePage: <A  HREF="http://www.perchine.com/dyp/">http://www.perchine.com/dyp/</A>
FidoNet: 2:5000/120.5
----------------------------------
</PRE>
<PRE>
Index: inv_api.c
===================================================================
RCS file: 
/home/projects/pgsql/cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v
retrieving revision 1.80
diff -u -r1.80 inv_api.c
--- inv_api.c   2000/11/02 23:52:06     1.80
+++ inv_api.c   2000/11/03 16:57:57
@@ -64,6 +64,9 @@
        Oid                     file_oid;
        LargeObjectDesc *retval;
 
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_create: Not in transaction. BLOBs should be used 
+inside transaction.");
+
        /*
         * Allocate an OID to be the LO's identifier.
         */
@@ -117,6 +120,9 @@
 {
        LargeObjectDesc *retval;
 
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_open: Not in transaction. BLOBs should be used inside 
+transaction.");
+
        if (! LargeObjectExists(lobjId))
                elog(ERROR, "inv_open: large object %u not found", lobjId);
        
@@ -145,6 +151,9 @@
 void
 inv_close(LargeObjectDesc *obj_desc)
 {
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_close: Not in transaction. BLOBs should be used 
+inside transaction.");
+
        Assert(PointerIsValid(obj_desc));
 
        if (obj_desc->flags & IFS_WRLOCK)
@@ -164,6 +173,9 @@
 int
 inv_drop(Oid lobjId)
 {
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_drop: Not in transaction. BLOBs should be used inside 
+transaction.");
+
        LargeObjectDrop(lobjId);
 
        /*
@@ -248,6 +260,9 @@
 int
 inv_seek(LargeObjectDesc *obj_desc, int offset, int whence)
 {
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_seek: Not in transaction. BLOBs should be used inside 
+transaction.");
+
        Assert(PointerIsValid(obj_desc));
 
        switch (whence)
@@ -280,6 +295,9 @@
 int
 inv_tell(LargeObjectDesc *obj_desc)
 {
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_tell: Not in transaction. BLOBs should be used inside 
+transaction.");
+
        Assert(PointerIsValid(obj_desc));
 
        return obj_desc->offset;
@@ -303,6 +321,9 @@
        bytea              *datafield;
        bool                    pfreeit;
 
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_read: Not in transaction. BLOBs should be used inside 
+transaction.");
+
        Assert(PointerIsValid(obj_desc));
        Assert(buf != NULL);
 
@@ -414,6 +435,9 @@
        char                    replace[Natts_pg_largeobject];
        bool                    write_indices;
        Relation                idescs[Num_pg_largeobject_indices];
+
+       if (!IsTransactionBlock())
+               elog(ERROR, "inv_write: Not in transaction. BLOBs should be used 
+inside transaction.");
 
        Assert(PointerIsValid(obj_desc));
        Assert(buf != NULL);
</PRE>

<!--X-Body-of-Message-End-->
<!--X-MsgBody-End-->
<!--X-Follow-Ups-->
<hr>
<!--X-Follow-Ups-End-->
<!--X-References-->
<!--X-References-End-->
<!--X-BotPNI-->
<ul>
<li>Prev by Date:
<strong><a href="msg00012.html">Re: Small fix for inv_getsize</a></strong>
</li>
<li>Next by Date:
<strong><a href="msg00014.html">Re: Patch to check whether we are in TX when to 
lo_*</a></strong>
</li>
<li>Prev by thread:
<strong><a href="msg00018.html">Re: Inherited column patches</a></strong>
</li>
<li>Next by thread:
<strong><a href="msg00014.html">Re: Patch to check whether we are in TX when to 
lo_*</a></strong>
</li>
<li>Index(es):
<ul>
<li><a href="index.html#00013"><strong>Date</strong></a></li>
<li><a href="threads.html#00013"><strong>Thread</strong></a></li>
</ul>
</li>
</ul>

<!--X-BotPNI-End-->
<!--X-User-Footer-->
<strong>
<a href="http://www.postgresql.org/mhonarc/">Home</a> |
<a href="index.html">Main Index</a> |
<a href="threads.html">Thread Index</a>
</strong>
<!--X-User-Footer-End-->
</body>
</html>

Reply via email to