Bug 60066 - JDBC Sampler: Provide Support for CLOB
Summary: JDBC Sampler: Provide Support for CLOB
Status: RESOLVED FIXED
Alias: None
Product: JMeter
Classification: Unclassified
Component: Main (show other bugs)
Version: 3.0
Hardware: All All
: P2 enhancement (vote)
Target Milestone: ---
Assignee: JMeter issues mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-08-30 11:34 UTC by Jacob Zwiers
Modified: 2016-09-20 19:20 UTC (History)
1 user (show)



Attachments
Quick hack of AbstractJDBCTestElement to support CLOB OUT (2.11 KB, patch)
2016-08-30 11:42 UTC, Jacob Zwiers
Details | Diff
Handle BLOBs and CLOBs (6.21 KB, patch)
2016-09-10 19:23 UTC, Felix Schumacher
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jacob Zwiers 2016-08-30 11:34:29 UTC

    
Comment 1 Jacob Zwiers 2016-08-30 11:42:42 UTC
Created attachment 34184 [details]
Quick hack of AbstractJDBCTestElement to support CLOB OUT

Intended for hints/guidance only.
Comment 2 Jacob Zwiers 2016-08-30 11:43:58 UTC
A discussion on the mailing list (http://jmeter.512774.n5.nabble.com/CLOB-Supported-in-JDBC-Sampler-tt5724712.html) highlighted that a CLOB OUT / INOUT parameter does not have it's content returned by the JDBC Sampler.

The cause is that AbstractJDBCTestElement.resultSetsToString() loops through the declared variables and (if not an instance of java.sql.ResultSet) simply calls o.toString().  This is not sufficient to get content from a CLOB (at least not from an Oracle DB).

The mailing list item points out that there may be nuances to different DB / JDBC Driver implementations around CLOB.

A patch is provided and attached here with the caveat that it was simply "good enough" to get the data I was looking for.  There is no attempt to validate / support IN CLOB parameters, integrate code style with JMeter, validate that all Java features are provided in the JMeter supported version of Java, etc. and and there was very little testing / validation of the code.

Provided simply as a hint to anyone stumbling across this looking for a hint or quick implementation.
Comment 3 Felix Schumacher 2016-09-06 19:24:53 UTC
Do you think it would be helpful, to use the resultSetHandler variable to decide, whether we want the clob as an object, or a string representation? 

And would it be a good idea, to specify an upper limit for the string representation that is lower than Integer.MAX_VALUE?
Comment 4 Jacob Zwiers 2016-09-07 12:02:42 UTC
Not sure if those questions were for me or for more general discussion... but I'll take a stab.

re/ resultSetHandler I'll leave it to you.  I'm generally a user of JMeter and this is only my second time looking into the code in any detail. I'm sure there are preferences and/or conventions that I'm not aware or and therefore don't feel qualified to comment here.

re/ Integer.MAX_VALUE   That's only used if the CLOB itself provides a length (type long) which is larger than the Integer.MAX_VALUE which the CharBuffer accepts.  Otherwise, the upper limit is the declared .length() of the CLOB.  Maybe that's what you're asking... after you get to 2GB of text you've probably got other issues.  A lower threshold would likely be advisable.  Either way, a warning if data is truncated.

As other comments indicate, the implementation was designed to get only what I need and to do it quickly.  The code is likely problematic in other areas.  For example, the value of totalRead is incorrect and doesn't get propagated.  Provided for inspiration rather than as a claim of solid implementation.
Comment 5 Felix Schumacher 2016-09-10 19:23:40 UTC
Created attachment 34229 [details]
Handle BLOBs and CLOBs

Another patch for converting CLOBs and CLOBs.

This one limits the results stored in the sampler to the value of jdbcsampler.max_retain_result_size (which defaults to 64k).

Could you try it out?
Comment 6 Felix Schumacher 2016-09-20 19:20:35 UTC
Date: Tue Sep 20 18:55:08 2016
New Revision: 1761614

URL: http://svn.apache.org/viewvc?rev=1761614&view=rev
Log:
Handle CLOBs and BLOBs and limit them if necessary when storing them in result sampler.

Bugzilla Id: 60085

Modified:
    jmeter/trunk/bin/jmeter.properties
    jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java
    jmeter/trunk/xdocs/changes.xml
    jmeter/trunk/xdocs/usermanual/component_reference.xml
    jmeter/trunk/xdocs/usermanual/properties_reference.xml

Date: Tue Sep 20 19:19:52 2016
New Revision: 1761624

URL: http://svn.apache.org/viewvc?rev=1761624&view=rev
Log:
Followup to r1761614. The correct bugzilla id is 60066.

Modified:
    jmeter/trunk/xdocs/changes.xml