[ http://issues.apache.org/jira/browse/DERBY-1917?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12461757 ]
Bryan Pendleton commented on DERBY-1917: ---------------------------------------- Thanks for investigating the 256 value. It is good to know that it is just an arbitrary constant. I suppose that at some point we could replace it with a static final int, but that doesn't seem important for this fix. Regarding the testing, I agree that re-enabling the existing tests should be adequate. So in my opinion the only blocking issue is to resolve the tab/space issue, so that the modified code matches the style of the existing code. thanks, bryan > Clob.position fails with Embedded driver and large Clobs > -------------------------------------------------------- > > Key: DERBY-1917 > URL: http://issues.apache.org/jira/browse/DERBY-1917 > Project: Derby > Issue Type: Bug > Components: JDBC > Reporter: Fernanda Pizzorno > Assigned To: V.Narayanan > Priority: Minor > Attachments: Change256_128.diff, Change256_128.stat, > Position_patch_explanation.txt, position_patch_v1.diff, position_patch_v1.stat > > > The method Clob.position(String searchstr, long start) fails when used on > large lobs if the searchstr is bigger than 256 characters. I have seen two > different errors, if the search string it bigger than 256 character it is not > found and if the search string is bigger than 512 characters an exception is > thrown. > /* Repro */ > // Connect > Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); > Connection conn = > DriverManager.getConnection("jdbc:derby:ReproClob;create=true", "app", "app"); > > // Create table and populate > Statement stmt = conn.createStatement(); > try { > stmt.executeUpdate("DROP TABLE tmpClob"); > } catch (SQLException se) {} > stmt.executeUpdate("CREATE TABLE tmpClob (a int, b clob(40K))"); > > PreparedStatement ps = conn.prepareStatement("INSERT INTO tmpClob > VALUES (?, ?)"); > String tmp = "abcdefghijklmnopqrstuvxyz"; > StringBuilder sb = new StringBuilder(); > for (int i=0; i<1500; i++) { > sb.append(tmp); > } > ps.setInt(1, 1); > ps.setString(2, sb.toString()); > ps.executeUpdate(); > ps.close(); > ResultSet rs = stmt.executeQuery("SELECT * FROM tmpClob"); > if (rs.next()) { > Clob c = rs.getClob(2); > // Bug #1 > String subString1 = c.getSubString(100, 513); > try { > long i1 = c.position(subString1, 90); > System.out.println("Found searched string at: " + i1); > } catch (SQLException se) { > System.out.println("FAILURE REPRODUCED: > Clob.position(string, int) throws an exception when the length of the search > string is bigger than 512"); > se.printStackTrace(); > while (se != null) { > System.out.println("FAIL: " + se.getMessage()); > se = se.getNextException(); > } > } > // Bug #2 > String subString2 = c.getSubString(100, 257); > long i2 = c.position(subString2, 90); > if (i2 == -1) { > System.out.println("FAILURE REPRODUCED: > Clob.position(string, int) does not find the search string if its length is > bigger than 256"); > } else { > System.out.println("Found searched string at: " + i2); > } > } > rs.close(); > stmt.close(); > conn.rollback(); > conn.close(); -- 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