db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stanley Bradbury <Stan.Bradb...@gmail.com>
Subject Re: "ERROR 40XD1: Container was opened in read-only mode" when performing SELECT DISTINCT on database in jar
Date Fri, 16 Feb 2007 21:11:27 GMT
Rajesh Kartha wrote:
> Stanley Bradbury wrote:
>> Thomas Kelder wrote:
>>> Hello,
>>>
>>> I'm using Derby in embedded mode, with my databases stored in jar
>>> files. I've set the 'derby.storage.tempDirectory' and
>>> 'derby.stream.error.file' properties to writable locations, as advised
>>> in the help file.
>>>
>>> When I now perform a query like "SELECT DISTINCT FROM ..." on this
>>> database, it produces the following exception:
>>>
>>> ERROR 40XD1: Container was opened in read-only mode.
>>>
>>> Whether this exception occurs seems to depend on the number of rows in
>>> the database (e.g. on a small database with ~700 rows everything
>>> worked fine, but on a database with the same schema and about 3000
>>> rows, the exception occured).
>>>
>>> I've reproduced it in a testcase:
>>> http://ftp2.bigcat.unimaas.nl/~thomas.kelder/derbytest/DerbyTest.java
>>> Using the following database file:
>>> http://ftp2.bigcat.unimaas.nl/~thomas.kelder/derbytest/testdb.zip
>>>
>>> Does anyone have an idea about what causes this error?
>>> Thanks in advance.
>>>
>>> Thomas
>>>
>> Hi Thomas -
>>
>> I looked into this further after I discovered inconsistencies in our 
>> documentation and it making the change I suggested will not correct 
>> your problem (though I still believe that Static properties need to 
>> be set prior to loading the driver).  I am looking into this further 
>> but it looks like a bug so far.  Thank you for reporting this and 
>> supplying the easy to use test case.  I will let you know what I find.
>>
>> Stan
>>
>>
> Some observations:
>
> I am wondering could there be some issue with accessing rows using 
> INDEXES on such read-only database.
>
> Simple SELECT * seem to work fine, but using DISTINCTs on the entire
> row set fails.
>
> C:\workSP\testDerby>java -Dderby.storage.tempDirectory="c:\temp\derby"
> -Dderby.stream.error.file="c:\temp\derby.log" org.apache.derby.tools.ij
> ij version 10.2
> ij> connect 'jdbc:derby:jar:(testdb.zip)database';
> ij> select * from expression where groupid=6339;
> ID                                                |CODE
>                     |ENSID                                             
> |IDSAMPLE   |DATA                                              |GROUPID
> -------------------------------------------------------------------------------- 
>
> -------------------------------------------------------------------------------- 
>
> -------------------------------------------------------------------
> YPR204W                                           |D
>                     |YPR204W                                           |0
>    |NA                                                |6339
>
> 1 row selected
> ij> select distinct id from expression;
> ERROR 40XD1: Container was opened in read-only mode.
> ij> SELECT DISTINCT groupId FROM expression;
> ERROR 40XD1: Container was opened in read-only mode.
>
> On the related topic, looks like  only the SHOW TABLES/VIEWS/SYNONYMS 
> worked on the
> readonly database. All other SHOW INDEXES/PROCEDURES/SCHEMAS fails 
> with NullPointerException.
>
> ij version 10.2
> ij> connect 'jdbc:derby:jar:(testdb.zip)database';
> ij> show indexes;
> ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
>
> The trace looks like:
> 2007-02-16 20:41:23.475 GMT Thread[main,5,main] (XID = 4), (SESSIONID 
> = 0), (DATABASE = jar:(testdb.zip)database), (DRDAID = null), Failed 
> Statement is: EXECUTE STATEMENT SYS."getIndexInfo"
> java.lang.NullPointerException
>    at org.apache.derby.impl.sql.compile.ExecSPSNode.generate(Unknown 
> Source)
>    at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown 
> Source)
>    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>    at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown

> Source)
>    at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>    at org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedConnection.prepareMetaDataStatement(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.prepareSPS(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQueryUsingSystemTables(Unknown

> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getPreparedQuery(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.doGetIndexInfo(Unknown 
> Source)
>    at 
> org.apache.derby.impl.jdbc.EmbedDatabaseMetaData.getIndexInfo(Unknown 
> Source)
>    at org.apache.derby.impl.tools.ij.ij.showIndexes(Unknown Source)
>    at org.apache.derby.impl.tools.ij.ij.ShowStatement(Unknown Source)
>    at org.apache.derby.impl.tools.ij.ij.ijStatement(Unknown Source)
>    at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(Unknown 
> Source)
>    at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
>    at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
>    at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
>    at org.apache.derby.impl.tools.ij.Main14.main(Unknown Source)
>    at org.apache.derby.tools.ij.main(Unknown Source)
> Cleanup action completed
>
> Will post to the list if I find anything else.
>
> -Rajesh
>
Hi Rajesh -
I don't think indexes have anything to do with it - I recreated Thomas's 
DB in using version 10.0 - I did not bother to recreate the indexes - 
just the table and loaded the data.  I just posted my findings in a 
previous message - the query works fine using 10.0 but does not using 
10.1.3.2 or 10.2.  As you might expect trying to group on groupid 
produces the same error:

select groupid from expression group by groupid;



Mime
View raw message