You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "David Crossley (JIRA)" <ji...@apache.org> on 2006/03/01 08:08:41 UTC

[jira] Updated: (COCOON-825) [PATCH] Fix Bug: Better handling of CLOB in esql (get-xml) and handling of Oracle 'temporary lobs'

     [ http://issues.apache.org/jira/browse/COCOON-825?page=all ]

David Crossley updated COCOON-825:
----------------------------------

    Bugzilla Id:   (was: 23542)
     Other Info: [Patch available]
    Description: 
It concerns 2.0.3+ as well.
Two changes to properly handle clob's for Oracle:
1.
File esql.xsl:
in <xsl:template
match="esql:row-results//esql:get-xml|esql:call-results//esql:get-xml">
instead of get-string use get-clob.
Issue: or make it much cleaner - in get-string-encoded check if column is CLOB
and call get-clob from there - I don't understand fully the issue with encoded.

2. Fix problem with temporary clob for Oracle 
When such a statement is used in esql:
select something_what_returnes_temporary_clob from dual
(it applies also for call statement)
Oracle keeps return clob in TEMP segment and is not willing to free it.
Solution: according to Oracle JDBC docs call freeTemporary!
Patch:
File EsqlHelper.java:

In each place where the CLOB/BLOB is taken (getBlob, getClob), put before return:

//ORACLE 'temporary lob' problem patch start
if (dbClob.getClass().getName().equals("oracle.sql.CLOB")) 
     dbClob.getClass().getMethod("freeTemporary", new Class[0]).invoke(dbClob,
new Object[0]);
//ORACLE 'temporary lob' problem patch end

Hope it will be in the next release,
if need some explanation feel free to use my email.

   Tomasz Bech

  was:
It concerns 2.0.3+ as well.
Two changes to properly handle clob's for Oracle:
1.
File esql.xsl:
in <xsl:template
match="esql:row-results//esql:get-xml|esql:call-results//esql:get-xml">
instead of get-string use get-clob.
Issue: or make it much cleaner - in get-string-encoded check if column is CLOB
and call get-clob from there - I don't understand fully the issue with encoded.

2. Fix problem with temporary clob for Oracle 
When such a statement is used in esql:
select something_what_returnes_temporary_clob from dual
(it applies also for call statement)
Oracle keeps return clob in TEMP segment and is not willing to free it.
Solution: according to Oracle JDBC docs call freeTemporary!
Patch:
File EsqlHelper.java:

In each place where the CLOB/BLOB is taken (getBlob, getClob), put before return:

//ORACLE 'temporary lob' problem patch start
if (dbClob.getClass().getName().equals("oracle.sql.CLOB")) 
     dbClob.getClass().getMethod("freeTemporary", new Class[0]).invoke(dbClob,
new Object[0]);
//ORACLE 'temporary lob' problem patch end

Hope it will be in the next release,
if need some explanation feel free to use my email.

   Tomasz Bech


> [PATCH] Fix Bug: Better handling of CLOB in esql (get-xml) and handling of Oracle 'temporary lobs'
> --------------------------------------------------------------------------------------------------
>
>          Key: COCOON-825
>          URL: http://issues.apache.org/jira/browse/COCOON-825
>      Project: Cocoon
>         Type: Bug
>   Components: - Components: Avalon
>     Versions: 2.1.8
>  Environment: Operating System: All
> Platform: All
>     Reporter: Tomasz Bech
>     Assignee: Cocoon Developers Team
>  Attachments: esql.xsl.diff
>
> It concerns 2.0.3+ as well.
> Two changes to properly handle clob's for Oracle:
> 1.
> File esql.xsl:
> in <xsl:template
> match="esql:row-results//esql:get-xml|esql:call-results//esql:get-xml">
> instead of get-string use get-clob.
> Issue: or make it much cleaner - in get-string-encoded check if column is CLOB
> and call get-clob from there - I don't understand fully the issue with encoded.
> 2. Fix problem with temporary clob for Oracle 
> When such a statement is used in esql:
> select something_what_returnes_temporary_clob from dual
> (it applies also for call statement)
> Oracle keeps return clob in TEMP segment and is not willing to free it.
> Solution: according to Oracle JDBC docs call freeTemporary!
> Patch:
> File EsqlHelper.java:
> In each place where the CLOB/BLOB is taken (getBlob, getClob), put before return:
> //ORACLE 'temporary lob' problem patch start
> if (dbClob.getClass().getName().equals("oracle.sql.CLOB")) 
>      dbClob.getClass().getMethod("freeTemporary", new Class[0]).invoke(dbClob,
> new Object[0]);
> //ORACLE 'temporary lob' problem patch end
> Hope it will be in the next release,
> if need some explanation feel free to use my email.
>    Tomasz Bech

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