Bug 1306519

Summary: Clob.getSubstring(int,int) returns empty or whole string
Product: [JBoss] JBoss Data Virtualization 6 Reporter: Juraj Duráni <jdurani>
Component: TeiidAssignee: Van Halbert <vhalbert>
Status: CLOSED CURRENTRELEASE QA Contact: Juraj Duráni <jdurani>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.3.0CC: aszczucz, blafond, jolee, mbaluch, thauser, vhalbert
Target Milestone: ER1   
Target Release: 6.3.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-08-24 11:49:15 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Juraj Duráni 2016-02-11 07:10:27 UTC
Description of problem:
Method java.sql.Clob.getSubstring(int,int) returns either empty string (if second argument, length, is 0) or whole string (if length >= 1).

Steps to Reproduce:
> 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)

Comment 1 JBoss JIRA Server 2016-02-11 13:31:36 UTC
Steven Hawkins <shawkins> updated the status of jira TEIID-3971 to Resolved

Comment 2 Juraj Duráni 2016-02-11 14:16:33 UTC
Setting 'blocker' to ? because JIRA is blocker.

Comment 3 JBoss JIRA Server 2016-06-08 12:00:44 UTC
Steven Hawkins <shawkins> updated the status of jira TEIID-3971 to Closed