[ http://issues.apache.org/jira/browse/DERBY-721?page=comments#action_12358338 ]
Tomohito Nakayama commented on DERBY-721: ----------------------------------------- I found that BinaryToRawStream is subclass of java.io.FilteredInputStream and would just close source InputStream when close method was called. However, source InputStream was shared between bunch of destination InputStream. Then, just closing source InputStream may be not correct. I found when this phenomena was found , substantial class of source InputStream object implements Resetable . I will call method to reset source InputStream object ,if it was Resetable object , in BinaryToRawSteream. > State of InputStream retrieved from resultset is not clean , if there exists > previous InputStream . > --------------------------------------------------------------------------------------------------- > > Key: DERBY-721 > URL: http://issues.apache.org/jira/browse/DERBY-721 > Project: Derby > Type: Bug > Components: Unknown > Environment: [EMAIL PROTECTED]:~/derby/dev/trunk$ cat /proc/version > Linux version 2.6.12-1-386 ([EMAIL PROTECTED]) (gcc version 4.0.2 20050917 > (prerelease) (Debian 4.0.1-8)) #1 Tue Sep 27 12:41:08 JST 2005 > [EMAIL PROTECTED]:~/derby/dev/trunk$ java -version > java version "1.4.2_10" > Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_10-b03) > Java HotSpot(TM) Client VM (build 1.4.2_10-b03, mixed mode) > Reporter: Tomohito Nakayama > Assignee: Tomohito Nakayama > Attachments: testLob.java, testResult.txt > > State of InputStream retrieved from ResultSet was not clean , if there exists > previous InputStream retrieved from ResultSet . > Test code ... > PreparedStatement pst = conn.prepareStatement("insert into a(b) > values(?)"); > byte[] data = new byte[1024 * 1024]; > for(int i = 0; > i < 1024 * 1024; > i ++){ > data[i] = (byte)(i % 256); > } > pst.setBinaryStream(1,new ByteArrayInputStream(data),data.length); > pst.executeUpdate(); > pst.close(); > > > st = conn.createStatement(); > ResultSet rs = st.executeQuery("select b from a"); > rs.next(); > > InputStream is = rs.getBinaryStream(1); > System.out.println("Here goes first stream"); > System.out.println(is.read()); > System.out.println(is.read()); > System.out.println(is.read()); > > is = rs.getBinaryStream(1); > System.out.println("Here goes 2nd stream"); > System.out.println(is.read()); > System.out.println(is.read()); > System.out.println(is.read()); > Result .... > [EMAIL PROTECTED]:~/derby/test/20051121$ java testLob > Here goes first stream > 0 > 1 > 2 > Here goes 2nd stream > 7 > 8 > 9 > It is expected that result printed from first stream is as same as result > printed from 2nd. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
