[ 
http://issues.apache.org/jira/browse/DERBY-1341?page=comments#action_12414019 ] 

Anurag Shekhar commented on DERBY-1341:
---------------------------------------

Currently the blob and clob can be constructed only by resultset. jdbc 4.0 
connection object does have methods to construct these methods but the absence 
of set methods in embedded driver makes these objects (created by connection) 
useless. 

To implement these method I will be making some mdofication in the way 
behaviour of lob objects. 

Currently the lob objects stores data either in an array (or string in case of 
clob)  or a stream is constructed directly on top of linked field in store if 
the size of the lob stored is found to be more than one page. Side effect of 
this impelementation  is that the life time of lob is restrcited till the 
transaction in which the objects are fetched.


Client implementation assumes all of it can be kept in main memory but that 
doesn't looks like a reasonable assumption. I can think of only one solution to 
handle this, by having a temporary file. 

I am thinking of using the temp file from the StoreFactory. StoreFactory has 
methods to create temporary file.


This is what I was thinking to implement (with assumption that I can use temp 
files) 

setBytes/String methods can use array/string field initially once the size 
crosses initial threshold the data will be written into the file 
and further set methods will operate on file. In case the blob/clob size is 
smaller than 
threshold the data is copied in memory other wise a stream is attached with the 
object. I haven't checked how this stream is created I am not sure if the 
stream is always operates on store api as the blob and clob objects remain 
valid even after closing result set. 

setStream methods can return a custom stream which will initially store the 
data in memory and once the threshold is reached it will use temp file. 

While setting the blob/clob into prepared statement internally it will call 
setString/setBytes in case the data is in memory and setStream in case the temp 
file is in use. 



> LOB setBytes method(s) are currently no supported, but part of the Java 1.4 
> JDBC interface
> ------------------------------------------------------------------------------------------
>
>          Key: DERBY-1341
>          URL: http://issues.apache.org/jira/browse/DERBY-1341
>      Project: Derby
>         Type: Bug

>   Components: JDBC
>     Versions: 10.0.2.0, 10.0.2.1, 10.0.2.2, 10.1.1.0, 10.2.0.0, 10.1.2.0, 
> 10.1.1.1, 10.1.1.2, 10.1.2.1, 10.1.3.0, 10.1.2.2, 10.1.2.3, 10.3.0.0, 
> 10.1.2.4, 10.1.2.5
>  Environment: Windows 2000
>     Reporter: Keith McFarlane
>     Assignee: Anurag Shekhar

>
>  JDBC LOB . getBtypes methods are not implemented in any Derby version to 
> date: there is a "place-holder" method that throws a SQLException reporting 
> that the methods are not implemented.
> It would be excellent to have any efficient Derby implementation of the 
> getBytes LOB methods that provide "random-access" to the binary // character 
> content of database large objects. The specific context is implementing a 
> Lucene Directory interface that stores indexing data (index files) and other 
> binary data in a local encrypted Derby instance. 
>  A work around is to write an encrypted RandomAccessFile implementation as a 
> file-sdystem buffer, perhaps writing to the database on closure. An efficient 
> Derby implementation of LOB . getBytes would avoid this an make for a clean 
> design. I can think of several reasons why random-access to LOBs would be 
> valuable in a "hostile"  client environment. 
>  

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