Re: no way in LargeObject API to detect short read?

Paul M. Aoki <aoki@acm.org>

From: aoki@acm.org (Paul M. Aoki)
To: Bruce Momjian <pgman@candle.pha.pa.us>
Cc: pgsql-bugs@postgresql.org, PostgreSQL jdbc list <pgsql-jdbc@postgresql.org>, aoki@acm.org
Date: 2001-01-24T21:42:43Z
Lists: pgsql-bugs
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> Anyone able to fix this?

here's a hack we've been using in-house (written by Jun Gabayan,
<jgabayan@pahv.xerox.com>).

you may not like the style but it's a stab at a solution.
--
 Paul M. Aoki / Xerox Palo Alto Research Center / 3333 Coyote Hill Road
 aoki@acm.org / Computer Science Laboratory     / Palo Alto, CA 94304-1314

Index: LargeObject.java
===================================================================
RCS file: /project/placeless/cvsroot/placeless2/src/org/postgresql/largeobject/LargeObject.java,v
retrieving revision 1.1
retrieving revision 1.3
diff -r1.1 -r1.3
64c64,67
<   
---
> 
>   private int pos = 0; //current position
>   private int size = 0;
> 
85a89,90
>     pos = tell();
>     size = size();
102a108
>     if(fd == 0) return;
105a112
>     fd = 0;
118a126,132
>         // calculate available data to read to avoid reading pass the end
>         // to avoid an exception
>         pos = tell();
>         int avail = size - pos;
>         if(avail == 0) return null;
>         if(avail < len) len = avail;
>         try {
123c137,141
< 	
---
>         }catch(SQLException se) {
>           System.out.println("***LargeObject.read: Caught SQLException: " + se.getMessage());
>           return null;
>         }
> 
157c175
<   public void read(byte buf[],int off,int len) throws SQLException
---
>   public int read(byte buf[],int off,int len) throws SQLException
159c177,180
<     System.arraycopy(read(len),0,buf,off,len);
---
>     byte mybuf[] = read(len);
>     int sz = (mybuf != null) ? mybuf.length : -1; //must return -1 for end of data
>     if(sz > 0) System.arraycopy(mybuf,0,buf,off,sz);
>     return sz;