Uploaded image for project: 'Teiid'
  1. Teiid
  2. TEIID-3971

Clob.getSubstring(int,int) returns empty or whole string

    Details

    • Steps to Reproduce:
      Hide

      DDL:

      CREATE FOREIGN TABLE smalla(
          intkey integer PRIMARY KEY OPTIONS(NAMEINSOURCE 'intkey', NATIVE_TYPE 'int4'),
          objectvalue clob OPTIONS(NAMEINSOURCE 'objectvalue', NATIVE_TYPE 'text'))
        OPTIONS(NAMEINSOURCE 'smalla');
      

      Query:

      SELECT * FROM smalla
      

      Java code:

      Connection con = org.teiid.jdbc.TeiidDriver.getInstance().connect("jdbc:teiid:test@mm://localhost:31000", info);
      ResultSet rs = con.createStatement().executeQuery("select * from source_pg.smalla");
      rs.next();
      LOG.info("CLOB: {}", rs.getClob(2).getClass());
      LOG.info("CLOB: {}", rs.getClob(2).getSubString(1, 1));
      LOG.info("CLOB: {}", rs.getClob(2).getSubString(1, 0));
      LOG.info("CLOB: {}", rs.getClob(2).getSubString(1, -1));
      con.close();

      Output:

      08:03:44.089 [main] INFO  sandbox.MainClass - CLOB: class org.teiid.core.types.ClobImpl
      08:03:44.091 [main] INFO  sandbox.MainClass - CLOB: -24
      08:03:44.092 [main] INFO  sandbox.MainClass - CLOB: 
      Exception in thread "main" java.sql.SQLException: Invalid length argument to getSubString(): -1
      	at org.teiid.core.types.ClobImpl.getSubString(ClobImpl.java:154)
      	at sandbox.MainClass.main(MainClass.java:81)
      

      Show
      DDL: CREATE FOREIGN TABLE smalla( intkey integer PRIMARY KEY OPTIONS(NAMEINSOURCE 'intkey' , NATIVE_TYPE 'int4' ), objectvalue clob OPTIONS(NAMEINSOURCE 'objectvalue' , NATIVE_TYPE 'text' )) OPTIONS(NAMEINSOURCE 'smalla' ); Query: SELECT * FROM smalla Java code: Connection con = org.teiid.jdbc.TeiidDriver.getInstance().connect( "jdbc:teiid:test@mm://localhost:31000" , info); ResultSet rs = con.createStatement().executeQuery( "select * from source_pg.smalla" ); rs.next(); LOG.info( "CLOB: {}" , rs.getClob( 2 ).getClass()); LOG.info( "CLOB: {}" , rs.getClob( 2 ).getSubString( 1 , 1 )); LOG.info( "CLOB: {}" , rs.getClob( 2 ).getSubString( 1 , 0 )); LOG.info( "CLOB: {}" , rs.getClob( 2 ).getSubString( 1 , - 1 )); con.close(); Output: 08:03:44.089 [main] INFO sandbox.MainClass - CLOB: class org.teiid.core.types.ClobImpl 08:03:44.091 [main] INFO sandbox.MainClass - CLOB: -24 08:03:44.092 [main] INFO sandbox.MainClass - CLOB: Exception in thread "main" java.sql.SQLException: Invalid length argument to getSubString(): -1 at org.teiid.core.types.ClobImpl.getSubString(ClobImpl.java:154) at sandbox.MainClass.main(MainClass.java:81)
    • Bugzilla Update:
      Perform

      Description

      Method java.sql.Clob.getSubstring(int,int) returns either empty string (if second argument, length, is 0) or whole string (if length >= 1).

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                shawkins Steven Hawkins
                Reporter:
                jdurani Juraj Duráni
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: