db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gabriele Kahlout <gabri...@mysimpatico.com>
Subject Re: cleaning database between test cases
Date Fri, 19 Mar 2010 14:36:45 GMT
'rm -R myDbDirectory' in *nix'
How do you programmatically, from java do that (OS independent)?
What I do is I iterate over the db folder and delete all contents, as
returned by the java.io API.

However, even doing that seems not sufficient.
I see that the test folder (the one that contains db.sqlwrapper) is
deleted after the first test, and created in the setup of the next.
However, I get:

Caused by: ERROR X0Y32: Table/View 'EXPRESSIONS' already exists in Schema 'APP'.

I think it has to do with the copy in memory not being updated with
the disk. That is because through the debugger, I've even manually
deleted the db, but to no avail.
Maybe this is more of a Java question now:
How do I make sure the memory is flushed/sync with the disk? Or that
derby, when creating a connection is not fooled by the cache in
memory?


2010/3/19, Kristian Waagan <Kristian.Waagan@sun.com>:
> On 19.03.10 10:11, Gabriele Kahlout wrote:
>> Also, I've copied from the code what I seem to need, and then end up
>> with when I use the db again in a 2nd method.
>>
>> Caused by: java.sql.SQLException: Database '/Volumes/STORE N
>> GO/ws/MemorizEasy/test/db.sqlwrapper' not found.
>>
>> Note that after destroying the schemas, I shut down the db, and delete
>> the test folder of the previous method.
>>
>
> Hi Gabriele,
>
> I don't know the requirements of your application, but note that in
> general you have three options:
>
>   - clean the database and reuse it
>     This is what we're doing in the Derby test framework (see the class
> that Bryan pointed to), because it would take much longer to actually
> delete and recreate the database files all the time. Here we use
> meta-data to detect all objects added to the database during the test,
> and then we drop them.
>
>   - simply just delete the database on disk (i.e. 'rm -R myDbDirectory'
> in *nix) and create a new one for the next test (through JDBC, using
> 'jdbc:derby:...;create=true').
>     You should shut down the database before deleting the files on disk.
>
>   - if you just need a database for a short period of time or similar,
> use an in-memory db.
>     Remember to drop it [1] to free up the memory.
>
> It's hard to tell exactly what went wrong above, but are you sure the
> database is still on disk?
> Can you locate the directory? (you should see the directories
> db.sqlwrapper, db.sqlwrapper/seg0 and db.sqlwrapper/log)
> If not, why did it get deleted?
>
>
> --
> Kristian
>
> [1] Note that proper support for this is added in 10.6, by using the
> "drop=true" attribute. In 10.5, the mechanism is different.
>
>> 2010/3/18, Gabriele Kahlout<gabriele@mysimpatico.com>:
>>
>>> I reached here:
>>> http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/CleanDatabaseTestSetup.java?view=markup
>>>
>>> But then what do I do? The code relies on some other class, and it
>>> seems like I'd have to import the whole package to use it. Is that it?
>>> Besides that one cannot delete the APP schema (which is the one i
>>> use), while the code seems to want to do that.
>>> If not, is there how I can use this without concerning myself with the
>>> impl. details?
>>>
>>> 2010/3/18, Gabriele Kahlout<gabriele@mysimpatico.com>:
>>>
>>>> Can you provide a link to it? Also, is it in some library I could use?
>>>>
>>>> 2010/3/18, Bryan Pendleton<bpendleton.derby@gmail.com>:
>>>>
>>>>>> For testing, how can I make sure the tearDown completely deletes
the
>>>>>> db, and setUp creates a completely new copy, without using in-memory
>>>>>> db?
>>>>>>
>>>>> We do this in the Derby regression test suite.
>>>>>
>>>>> Have a look at
>>>>> org.apache.derbyTesting.functionTests.junit.CleanDatabaseTestSetup.java
>>>>>
>>>>> thanks,
>>>>>
>>>>> bryan
>>>>>
>>>>>
>>>>
>>>> --
>>>> Regards,
>>>> K. Gabriele
>>>>
>>>> --- unchanged since 25/1/10 ---
>>>> P.S. Unless a notification (LON), please reply either with an answer
>>>> OR with " ACK" appended to this subject within 48 hours. Otherwise, I
>>>> might resend.
>>>> In(LON, this) ∨ In(48h, TimeNow) ∨ ∃x. In(x, MyInbox) ∧ IsAnswerTo(x,
>>>> this) ∨ (In(subject(this), subject(x)) ∧ In(ACK, subject(x)) ∧
>>>> ¬IsAnswerTo(x,this)) ⇒ ¬IResend(this).
>>>>
>>>> Also note that correspondence may be received only from specified a
>>>> priori senders, or if the subject of this email ends with a code, eg.
>>>> -LICHT01X, then also from senders whose reply contains it.
>>>> ∀x. In(x, MyInbox) ⇒ In(senderAddress(x), MySafeSenderList) ∨ (∃y.
>>>> In(y, subject(this) ) ∧ In(y,x) ∧ isCodeLike(y, -LICHT01X) ).
>>>>
>>>>
>>>
>>> --
>>> Regards,
>>> K. Gabriele
>>>
>>> --- unchanged since 25/1/10 ---
>>> P.S. Unless a notification (LON), please reply either with an answer
>>> OR with " ACK" appended to this subject within 48 hours. Otherwise, I
>>> might resend.
>>> In(LON, this) ∨ In(48h, TimeNow) ∨ ∃x. In(x, MyInbox) ∧ IsAnswerTo(x,
>>> this) ∨ (In(subject(this), subject(x)) ∧ In(ACK, subject(x)) ∧
>>> ¬IsAnswerTo(x,this)) ⇒ ¬IResend(this).
>>>
>>> Also note that correspondence may be received only from specified a
>>> priori senders, or if the subject of this email ends with a code, eg.
>>> -LICHT01X, then also from senders whose reply contains it.
>>> ∀x. In(x, MyInbox) ⇒ In(senderAddress(x), MySafeSenderList) ∨ (∃y.
>>> In(y, subject(this) ) ∧ In(y,x) ∧ isCodeLike(y, -LICHT01X) ).
>>>
>>>
>>
>>
>
>


-- 
Regards,
K. Gabriele

--- unchanged since 25/1/10 ---
P.S. Unless a notification (LON), please reply either with an answer
OR with " ACK" appended to this subject within 48 hours. Otherwise, I
might resend.
In(LON, this) ∨ In(48h, TimeNow) ∨ ∃x. In(x, MyInbox) ∧ IsAnswerTo(x,
this) ∨ (In(subject(this), subject(x)) ∧ In(ACK, subject(x)) ∧
¬IsAnswerTo(x,this)) ⇒ ¬IResend(this).

Also note that correspondence may be received only from specified a
priori senders, or if the subject of this email ends with a code, eg.
-LICHT01X, then also from senders whose reply contains it.
∀x. In(x, MyInbox) ⇒ In(senderAddress(x), MySafeSenderList) ∨ (∃y.
In(y, subject(this) ) ∧ In(y,x) ∧ isCodeLike(y, -LICHT01X) ).

Mime
View raw message