[ 
http://issues.apache.org/jira/browse/DERBY-1917?page=comments#action_12461416 ] 
            
Bryan Pendleton commented on DERBY-1917:
----------------------------------------

Thanks for providing the explanation notes and good comments! 

Your description makes sense to me, and the code changes look reasonable.

Three comments:
1) Do you feel that we have adequate test coverage in this area?
2) It seems as though there may be some white-space/indentation mismatches
in your diff. Your new lines uses spaces for indentation, but the surrounding
code uses tabs. Also, your new lines assume a tab setting of 8, where 4 is
more common in the Derby code
3) I don't really understand the significance of the number 256 in this code. Is
there something fundamental going on, or did the original code just pick an
arbitrary constant to use as a "search chunk size". Would the code work
correctly if all the occurrences of 256 in this section were changed to some
other number, or is there some reason why 256 is a magic number here?


> 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: 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

        

Reply via email to