DbUnit 2.4.5 : problem with a dataset having one table used differently

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

DbUnit 2.4.5 : problem with a dataset having one table used differently

christophe blin
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

John Hurst-2
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

christophe blin
First, I use INSERT (not CLEAN_INSERT).
But because I use a DELETE_ALL manually before, I assume this would be the same.
I can't use CLEAN_INSERT because I sometimes use multiple datasets on the same tables (I can guarantee that delete_all has correctly reset all the tables).

Nevertheless, I think my use case is not the one you describe. Here is my (simplified) failing dataset (in dbUnit 2.4.5)
<cf_types ID="0000808614162849011416343d010001" />
<cf_translations ID="4028808614162849011416343d211002" TRANSLATION="nature" TYPE_ID="0000808614162849011416343d010001"/>
<cf_cf_percentages ID="40288086114ac1c601114ad87622008f" />
<cf_translations ID="40288086114ac1c601114ad8763c0090" TRANSLATION="env p c" PERCENTAGE_ID="40288086114ac1c601114ad87622008f"/>

I think that "the first occurrence of any parent is before the first occurrence of any corresponding child." because the record in cf_types is the parent of the first record of cf_translations and the record of cf_cf_percentages is the parent of the second record of cf_translations (so parents are before children).

So I think this may be something else, maybe due to the fact that the cf_translations table has 2 FKs with always one set to not_null for a given record.
Or maybe I did not understand your expalnation (if so, please bear with me and try to explain again).

I'm ready to provide more details if needed

Regards,
chris

John Hurst a écrit :
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

John Hurst-2
I think it is the same issue. The DbUnit delete order change I described is actually in the DELETE_ALL operation. CLEAN_INSERT is defined as a composite of DELETE_ALL and INSERT.

DELETE_ALL deletes tables in reverse order that they first appear in the dataset. Thus with your example the delete order will be:
  - cf_cf_percentages
  - cf_translations
  - cf_types

This causes an error because a cf_translation row refers to a cf_cf_percentage row. cf_cf_percentage is a parent of cf_translation, and children need to be deleted from before parents.

You can avoid the problem by placing at least one cf_cf_percentage row in your dataset before the first cf_translation row.

Hope this helps.

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 7:44 PM, Christope Blin <[hidden email]> wrote:
First, I use INSERT (not CLEAN_INSERT).
But because I use a DELETE_ALL manually before, I assume this would be the same.
I can't use CLEAN_INSERT because I sometimes use multiple datasets on the same tables (I can guarantee that delete_all has correctly reset all the tables).

Nevertheless, I think my use case is not the one you describe. Here is my (simplified) failing dataset (in dbUnit 2.4.5)
<cf_types ID="0000808614162849011416343d010001" />
<cf_translations ID="4028808614162849011416343d211002" TRANSLATION="nature" TYPE_ID="0000808614162849011416343d010001"/>
<cf_cf_percentages ID="40288086114ac1c601114ad87622008f" />
<cf_translations ID="40288086114ac1c601114ad8763c0090" TRANSLATION="env p c" PERCENTAGE_ID="40288086114ac1c601114ad87622008f"/>

I think that "the first occurrence of any parent is before the first occurrence of any corresponding child." because the record in cf_types is the parent of the first record of cf_translations and the record of cf_cf_percentages is the parent of the second record of cf_translations (so parents are before children).

So I think this may be something else, maybe due to the fact that the cf_translations table has 2 FKs with always one set to not_null for a given record.
Or maybe I did not understand your expalnation (if so, please bear with me and try to explain again).

I'm ready to provide more details if needed

Regards,
chris

John Hurst a écrit :
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

christophe blin
Again, I do NOT use CLEAN_INSERT (only INSERT). So the problem CAN NOT BE in the DELETE_ALL operation.
The error is during the INSERT where all tables are empty.
Now, this may be the same cause BUT I think this is nevertheless a bug because in the dataset, parents ARE before related children (i.e dbUnit does not respect the CORRECT order of the user file).
>From what you said, I think that this is because dbUnit tries to insert all cf_percents, then all cf_translations, then all cf_types because of the first appearance of the table in the dataset.
IMHO, dbUnit should insert the data as they appears in the file (without reordering them).

I've written a failed test case to demonstrate the problem :
package test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import junit.framework.TestCase;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

public class DbUnitBugTest extends TestCase {
    public void testProblemWith2NullableFK() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver").newInstance();
        Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:test", "sa", "");
        //CREATE EMPTY DB
        Statement s = c.createStatement();
        s.executeUpdate("CREATE TABLE CF_TYPES (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_PERCENTS (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_TRANSLATIONS (ID VARCHAR(255) PRIMARY KEY" +
                ", FK_TYPE VARCHAR(255)" +
                ", FK_PERCENT VARCHAR(255))");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_TYPE FOREIGN KEY(FK_TYPE) " +
                "REFERENCES CF_TYPES(ID)");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_PERCENT FOREIGN KEY(FK_PERCENT) " +
        "REFERENCES CF_PERCENTS(ID)");

        //DEFINE DATASET
        //this is a "bug" because the dataset respects the parent-child relationships but the insert
        //is failing (because it tries to reorder my dataset)
        //if you put the first CF_TRANSLATIONS line under the CF_TYPES record, the test is working
        String xml = "<?xml version='1.0' encoding='UTF-8'?>\n" +
                "<dataset>\n" +
                "<CF_PERCENTS ID=\"P1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c0090\" FK_PERCENT=\"P1\"/>\n" +
                "<CF_TYPES ID=\"T1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c009A\" FK_TYPE=\"T1\"/>\n" +
                "</dataset>\n";
        String dtd = "<!ELEMENT dataset (\n" +
                "CF_TYPES*,\n" +
                "CF_PERCENTS*,\n" +
                "CF_TRANSLATIONS*)>\n" +
                "<!ELEMENT CF_TYPES EMPTY>\n" +
                "<!ATTLIST CF_TYPES\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_PERCENTS EMPTY>\n" +
                "<!ATTLIST CF_PERCENTS\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_TRANSLATIONS EMPTY>\n" +
                "<!ATTLIST CF_TRANSLATIONS\n" +
                "ID CDATA #REQUIRED\n" +
                "FK_TYPE CDATA #IMPLIED\n" +
                "FK_PERCENT CDATA #IMPLIED\n" +
                ">\n";
       
        //EXECUTE IT
        InputStream datasetFile = new ByteArrayInputStream(xml.getBytes());
        InputStream dtdFile = new ByteArrayInputStream(dtd.getBytes());
        IDataSet dataSet = new FlatXmlDataSet(datasetFile, dtdFile);
        IDatabaseConnection connection = new DatabaseConnection(c);
        DatabaseOperation.INSERT.execute(connection, dataSet);
    }
}



John Hurst a écrit :
I think it is the same issue. The DbUnit delete order change I described is actually in the DELETE_ALL operation. CLEAN_INSERT is defined as a composite of DELETE_ALL and INSERT.

DELETE_ALL deletes tables in reverse order that they first appear in the dataset. Thus with your example the delete order will be:
  - cf_cf_percentages
  - cf_translations
  - cf_types

This causes an error because a cf_translation row refers to a cf_cf_percentage row. cf_cf_percentage is a parent of cf_translation, and children need to be deleted from before parents.

You can avoid the problem by placing at least one cf_cf_percentage row in your dataset before the first cf_translation row.

Hope this helps.

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 7:44 PM, Christope Blin <[hidden email]> wrote:
First, I use INSERT (not CLEAN_INSERT).
But because I use a DELETE_ALL manually before, I assume this would be the same.
I can't use CLEAN_INSERT because I sometimes use multiple datasets on the same tables (I can guarantee that delete_all has correctly reset all the tables).

Nevertheless, I think my use case is not the one you describe. Here is my (simplified) failing dataset (in dbUnit 2.4.5)
<cf_types ID="0000808614162849011416343d010001" />
<cf_translations ID="4028808614162849011416343d211002" TRANSLATION="nature" TYPE_ID="0000808614162849011416343d010001"/>
<cf_cf_percentages ID="40288086114ac1c601114ad87622008f" />
<cf_translations ID="40288086114ac1c601114ad8763c0090" TRANSLATION="env p c" PERCENTAGE_ID="40288086114ac1c601114ad87622008f"/>

I think that "the first occurrence of any parent is before the first occurrence of any corresponding child." because the record in cf_types is the parent of the first record of cf_translations and the record of cf_cf_percentages is the parent of the second record of cf_translations (so parents are before children).

So I think this may be something else, maybe due to the fact that the cf_translations table has 2 FKs with always one set to not_null for a given record.
Or maybe I did not understand your expalnation (if so, please bear with me and try to explain again).

I'm ready to provide more details if needed

Regards,
chris

John Hurst a écrit :
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

John Hurst-2
Sorry, you are quite right. Not only did I misread your post and not note that DELETE_ALL was working correctly, I was also wrong about when the DELETE_ALL order changed. It changed in DbUnit 2.1, not 2.2, so that change is not implicated in your problem.

I reproduced your test failing with DbUnit 2.4.5 and passing with 2.1.

Oddly, there seems to be no difference in the InsertOperation or AbstractBatchOperation (its base class) between those versions (apart from adding slf4j logging). I've run out of time to look at this today because I am at a client's, but I may be able to look tomorrow. One thing you could try is running with p6spy to verify the SQL statements being issued.

Sorry if my comments wasted your time, and thanks for posting an excellent test case.

Regards

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 9:06 PM, Christope Blin <[hidden email]> wrote:
Again, I do NOT use CLEAN_INSERT (only INSERT). So the problem CAN NOT BE in the DELETE_ALL operation.
The error is during the INSERT where all tables are empty.
Now, this may be the same cause BUT I think this is nevertheless a bug because in the dataset, parents ARE before related children (i.e dbUnit does not respect the CORRECT order of the user file).
>From what you said, I think that this is because dbUnit tries to insert all cf_percents, then all cf_translations, then all cf_types because of the first appearance of the table in the dataset.
IMHO, dbUnit should insert the data as they appears in the file (without reordering them).

I've written a failed test case to demonstrate the problem :
package test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import junit.framework.TestCase;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

public class DbUnitBugTest extends TestCase {
    public void testProblemWith2NullableFK() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver").newInstance();
        Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:test", "sa", "");
        //CREATE EMPTY DB
        Statement s = c.createStatement();
        s.executeUpdate("CREATE TABLE CF_TYPES (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_PERCENTS (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_TRANSLATIONS (ID VARCHAR(255) PRIMARY KEY" +
                ", FK_TYPE VARCHAR(255)" +
                ", FK_PERCENT VARCHAR(255))");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_TYPE FOREIGN KEY(FK_TYPE) " +
                "REFERENCES CF_TYPES(ID)");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_PERCENT FOREIGN KEY(FK_PERCENT) " +
        "REFERENCES CF_PERCENTS(ID)");

        //DEFINE DATASET
        //this is a "bug" because the dataset respects the parent-child relationships but the insert
        //is failing (because it tries to reorder my dataset)
        //if you put the first CF_TRANSLATIONS line under the CF_TYPES record, the test is working
        String xml = "<?xml version='1.0' encoding='UTF-8'?>\n" +
                "<dataset>\n" +
                "<CF_PERCENTS ID=\"P1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c0090\" FK_PERCENT=\"P1\"/>\n" +
                "<CF_TYPES ID=\"T1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c009A\" FK_TYPE=\"T1\"/>\n" +
                "</dataset>\n";
        String dtd = "<!ELEMENT dataset (\n" +
                "CF_TYPES*,\n" +
                "CF_PERCENTS*,\n" +
                "CF_TRANSLATIONS*)>\n" +
                "<!ELEMENT CF_TYPES EMPTY>\n" +
                "<!ATTLIST CF_TYPES\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_PERCENTS EMPTY>\n" +
                "<!ATTLIST CF_PERCENTS\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_TRANSLATIONS EMPTY>\n" +
                "<!ATTLIST CF_TRANSLATIONS\n" +
                "ID CDATA #REQUIRED\n" +
                "FK_TYPE CDATA #IMPLIED\n" +
                "FK_PERCENT CDATA #IMPLIED\n" +
                ">\n";
       
        //EXECUTE IT
        InputStream datasetFile = new ByteArrayInputStream(xml.getBytes());
        InputStream dtdFile = new ByteArrayInputStream(dtd.getBytes());
        IDataSet dataSet = new FlatXmlDataSet(datasetFile, dtdFile);
        IDatabaseConnection connection = new DatabaseConnection(c);
        DatabaseOperation.INSERT.execute(connection, dataSet);

    }
}



John Hurst a écrit :
I think it is the same issue. The DbUnit delete order change I described is actually in the DELETE_ALL operation. CLEAN_INSERT is defined as a composite of DELETE_ALL and INSERT.

DELETE_ALL deletes tables in reverse order that they first appear in the dataset. Thus with your example the delete order will be:
  - cf_cf_percentages
  - cf_translations
  - cf_types

This causes an error because a cf_translation row refers to a cf_cf_percentage row. cf_cf_percentage is a parent of cf_translation, and children need to be deleted from before parents.

You can avoid the problem by placing at least one cf_cf_percentage row in your dataset before the first cf_translation row.

Hope this helps.

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 7:44 PM, Christope Blin <[hidden email]> wrote:
First, I use INSERT (not CLEAN_INSERT).
But because I use a DELETE_ALL manually before, I assume this would be the same.
I can't use CLEAN_INSERT because I sometimes use multiple datasets on the same tables (I can guarantee that delete_all has correctly reset all the tables).

Nevertheless, I think my use case is not the one you describe. Here is my (simplified) failing dataset (in dbUnit 2.4.5)
<cf_types ID="0000808614162849011416343d010001" />
<cf_translations ID="4028808614162849011416343d211002" TRANSLATION="nature" TYPE_ID="0000808614162849011416343d010001"/>
<cf_cf_percentages ID="40288086114ac1c601114ad87622008f" />
<cf_translations ID="40288086114ac1c601114ad8763c0090" TRANSLATION="env p c" PERCENTAGE_ID="40288086114ac1c601114ad87622008f"/>

I think that "the first occurrence of any parent is before the first occurrence of any corresponding child." because the record in cf_types is the parent of the first record of cf_translations and the record of cf_cf_percentages is the parent of the second record of cf_translations (so parents are before children).

So I think this may be something else, maybe due to the fact that the cf_translations table has 2 FKs with always one set to not_null for a given record.
Or maybe I did not understand your expalnation (if so, please bear with me and try to explain again).

I'm ready to provide more details if needed

Regards,
chris

John Hurst a écrit :
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

John Hurst-2
I think that the behavior you're seeing is a result of a change on 2008-09-28 with message "Fail-Fast if AmbiguousTableNames found." This change altered CachedDataSet's method of iteration over its tables. (FlatXmlDataSet extends CachedDataSet.) It seems that instead of a simple list of tables, it now uses an OrderedTableMap.

Perhaps it would be a good idea for DbUnit to include test cases that reflect the diferent valid orderings of tables within a dataset. Then changes like this would be flagged as potentially breaking.

Regards

John Hurst
Wellington, New Zealand

On Fri, Jul 17, 2009 at 8:52 AM, John Hurst <[hidden email]> wrote:
Sorry, you are quite right. Not only did I misread your post and not note that DELETE_ALL was working correctly, I was also wrong about when the DELETE_ALL order changed. It changed in DbUnit 2.1, not 2.2, so that change is not implicated in your problem.

I reproduced your test failing with DbUnit 2.4.5 and passing with 2.1.

Oddly, there seems to be no difference in the InsertOperation or AbstractBatchOperation (its base class) between those versions (apart from adding slf4j logging). I've run out of time to look at this today because I am at a client's, but I may be able to look tomorrow. One thing you could try is running with p6spy to verify the SQL statements being issued.

Sorry if my comments wasted your time, and thanks for posting an excellent test case.


Regards

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 9:06 PM, Christope Blin <[hidden email]> wrote:
Again, I do NOT use CLEAN_INSERT (only INSERT). So the problem CAN NOT BE in the DELETE_ALL operation.
The error is during the INSERT where all tables are empty.
Now, this may be the same cause BUT I think this is nevertheless a bug because in the dataset, parents ARE before related children (i.e dbUnit does not respect the CORRECT order of the user file).
>From what you said, I think that this is because dbUnit tries to insert all cf_percents, then all cf_translations, then all cf_types because of the first appearance of the table in the dataset.
IMHO, dbUnit should insert the data as they appears in the file (without reordering them).

I've written a failed test case to demonstrate the problem :
package test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import junit.framework.TestCase;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

public class DbUnitBugTest extends TestCase {
    public void testProblemWith2NullableFK() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver").newInstance();
        Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:test", "sa", "");
        //CREATE EMPTY DB
        Statement s = c.createStatement();
        s.executeUpdate("CREATE TABLE CF_TYPES (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_PERCENTS (ID VARCHAR(255) PRIMARY KEY)");
        s.executeUpdate("CREATE TABLE CF_TRANSLATIONS (ID VARCHAR(255) PRIMARY KEY" +
                ", FK_TYPE VARCHAR(255)" +
                ", FK_PERCENT VARCHAR(255))");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_TYPE FOREIGN KEY(FK_TYPE) " +
                "REFERENCES CF_TYPES(ID)");
        s.executeUpdate("ALTER TABLE CF_TRANSLATIONS ADD CONSTRAINT FK_PERCENT FOREIGN KEY(FK_PERCENT) " +
        "REFERENCES CF_PERCENTS(ID)");

        //DEFINE DATASET
        //this is a "bug" because the dataset respects the parent-child relationships but the insert
        //is failing (because it tries to reorder my dataset)
        //if you put the first CF_TRANSLATIONS line under the CF_TYPES record, the test is working
        String xml = "<?xml version='1.0' encoding='UTF-8'?>\n" +
                "<dataset>\n" +
                "<CF_PERCENTS ID=\"P1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c0090\" FK_PERCENT=\"P1\"/>\n" +
                "<CF_TYPES ID=\"T1\"/>\n" +
                "<CF_TRANSLATIONS ID=\"40288086114ac1c601114ad8763c009A\" FK_TYPE=\"T1\"/>\n" +
                "</dataset>\n";
        String dtd = "<!ELEMENT dataset (\n" +
                "CF_TYPES*,\n" +
                "CF_PERCENTS*,\n" +
                "CF_TRANSLATIONS*)>\n" +
                "<!ELEMENT CF_TYPES EMPTY>\n" +
                "<!ATTLIST CF_TYPES\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_PERCENTS EMPTY>\n" +
                "<!ATTLIST CF_PERCENTS\n" +
                "ID CDATA #REQUIRED\n" +
                ">\n" +
                "<!ELEMENT CF_TRANSLATIONS EMPTY>\n" +
                "<!ATTLIST CF_TRANSLATIONS\n" +
                "ID CDATA #REQUIRED\n" +
                "FK_TYPE CDATA #IMPLIED\n" +
                "FK_PERCENT CDATA #IMPLIED\n" +
                ">\n";
       
        //EXECUTE IT
        InputStream datasetFile = new ByteArrayInputStream(xml.getBytes());
        InputStream dtdFile = new ByteArrayInputStream(dtd.getBytes());
        IDataSet dataSet = new FlatXmlDataSet(datasetFile, dtdFile);
        IDatabaseConnection connection = new DatabaseConnection(c);
        DatabaseOperation.INSERT.execute(connection, dataSet);

    }
}



John Hurst a écrit :
I think it is the same issue. The DbUnit delete order change I described is actually in the DELETE_ALL operation. CLEAN_INSERT is defined as a composite of DELETE_ALL and INSERT.

DELETE_ALL deletes tables in reverse order that they first appear in the dataset. Thus with your example the delete order will be:
  - cf_cf_percentages
  - cf_translations
  - cf_types

This causes an error because a cf_translation row refers to a cf_cf_percentage row. cf_cf_percentage is a parent of cf_translation, and children need to be deleted from before parents.

You can avoid the problem by placing at least one cf_cf_percentage row in your dataset before the first cf_translation row.

Hope this helps.

John Hurst
Wellington, New Zealand

On Thu, Jul 16, 2009 at 7:44 PM, Christope Blin <[hidden email]> wrote:
First, I use INSERT (not CLEAN_INSERT).
But because I use a DELETE_ALL manually before, I assume this would be the same.
I can't use CLEAN_INSERT because I sometimes use multiple datasets on the same tables (I can guarantee that delete_all has correctly reset all the tables).

Nevertheless, I think my use case is not the one you describe. Here is my (simplified) failing dataset (in dbUnit 2.4.5)
<cf_types ID="0000808614162849011416343d010001" />
<cf_translations ID="4028808614162849011416343d211002" TRANSLATION="nature" TYPE_ID="0000808614162849011416343d010001"/>
<cf_cf_percentages ID="40288086114ac1c601114ad87622008f" />
<cf_translations ID="40288086114ac1c601114ad8763c0090" TRANSLATION="env p c" PERCENTAGE_ID="40288086114ac1c601114ad87622008f"/>

I think that "the first occurrence of any parent is before the first occurrence of any corresponding child." because the record in cf_types is the parent of the first record of cf_translations and the record of cf_cf_percentages is the parent of the second record of cf_translations (so parents are before children).

So I think this may be something else, maybe due to the fact that the cf_translations table has 2 FKs with always one set to not_null for a given record.
Or maybe I did not understand your expalnation (if so, please bear with me and try to explain again).

I'm ready to provide more details if needed

Regards,
chris

John Hurst a écrit :
I presume that anotherNullableFK refers into table2. The problem is due to deleting data from table2 while references still exist. (You are using CLEAN_INSERT, right?)

The order of handling tables within a dataset changed from DbUnit 2.1 to 2.2.

The new ordering handles tables in reverse order of their *first* appearance in the dataset. This makes for more robust deletion of foreign keys. For example if you want to arrange your test data like this:

<parent id="1" .../>
<child id="1" parent="1" .../>
<child id="2" parent="1" .../>
<child id="3" parent="1" .../>
<parent id="2" .../>
<child id="4" parent="2" .../>
...

DbUnit 2.1 would fail with this arrangement; DbUnit 2.2 onwards succeeds.

The answer is to reorder the tables in your dataset so that the first occurrence of any parent is before the first occurrence of any corresponding child.

Regards
John Hurst
Wellington, New Zealand


On Thu, Jul 16, 2009 at 12:04 AM, Christope Blin <[hidden email]> wrote:
[this is a resend of a previously refused email]

I was previously using dbunit 2.1

I upgrade to 2.4.5

I now have a problem with a dataset that I did not have before.

<dataset>
  <table nullableFK="123" />
  <table2 ... />
  <table anotherNullableFK="456" />
</dataset>

=> fail with a message "constraint key violation on nullableFk" (I presume
for the second row because if I reverse the 2 lines, the violation is on
anotherNullableFk)

<dataset>
  <table2 ... />
  <table nullableFK="123" />
  <table anotherNullableFK="456" />
</dataset>

=> success

My conclusion is that NOW I need to have the all the records of a table
succesively...

Does anyone knows about this problem ?

N.B: the dependency of the pom in repo1.maven.org does not specify a version
for slf4j BUT it does not work when you do not have the method
Logger.isTraceEnabled which appears in 1.4 of slf4j (and so you may need to
upgrade log4j to at least v12)
--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user




------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

christophe blin
Thanks for the explanation ... that I do nt understand because it is too deep into the dbUnit internals ;)
My non understanding is not important as long as this is fixed in a future release. For the moment, I will keep my 2.1 version since I have a lot of dataset using this kind of structure.
Should I report a bug or something ?

Thanks for your time and your efforts,

regards,
chris

John Hurst a écrit :
I think that the behavior you're seeing is a result of a change on 2008-09-28 with message "Fail-Fast if AmbiguousTableNames found." This change altered CachedDataSet's method of iteration over its tables. (FlatXmlDataSet extends CachedDataSet.) It seems that instead of a simple list of tables, it now uses an OrderedTableMap.

Perhaps it would be a good idea for DbUnit to include test cases that reflect the diferent valid orderings of tables within a dataset. Then changes like this would be flagged as potentially breaking.

Regards

John Hurst
Wellington, New Zealand

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

John Hurst-2
You might report a bug (you've already done all the work). But I'm afraid you might find it's "working as designed" ... according to the current design anyway. Unfortunately it seems there is no one right way to order the inserts to satisfy all people.

For my own part while I used to intersperse data from different tables, I don't do that any more. I tend to put all the data for each table together. Then again, I also don't use large single datasets with DbUnit, rather many small ones that are test-specific.

Regards

John Hurst
Wellington, New Zealand

On Fri, Jul 17, 2009 at 9:24 PM, Christope Blin <[hidden email]> wrote:
Thanks for the explanation ... that I do nt understand because it is too deep into the dbUnit internals ;)
My non understanding is not important as long as this is fixed in a future release. For the moment, I will keep my 2.1 version since I have a lot of dataset using this kind of structure.
Should I report a bug or something ?

Thanks for your time and your efforts,


regards,
chris

John Hurst a écrit :
I think that the behavior you're seeing is a result of a change on 2008-09-28 with message "Fail-Fast if AmbiguousTableNames found." This change altered CachedDataSet's method of iteration over its tables. (FlatXmlDataSet extends CachedDataSet.) It seems that instead of a simple list of tables, it now uses an OrderedTableMap.


Perhaps it would be a good idea for DbUnit to include test cases that reflect the diferent valid orderings of tables within a dataset. Then changes like this would be flagged as potentially breaking.

Regards

John Hurst
Wellington, New Zealand

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user
Reply | Threaded
Open this post in threaded view
|

Re: DbUnit 2.4.5 : problem with a dataset having one table used differently

christophe blin
http://sourceforge.net/tracker/?func=detail&aid=2823084&group_id=47439&atid=449491

John Hurst a écrit :
You might report a bug (you've already done all the work). But I'm afraid you might find it's "working as designed" ... according to the current design anyway. Unfortunately it seems there is no one right way to order the inserts to satisfy all people.

For my own part while I used to intersperse data from different tables, I don't do that any more. I tend to put all the data for each table together. Then again, I also don't use large single datasets with DbUnit, rather many small ones that are test-specific.

Regards

John Hurst
Wellington, New Zealand

On Fri, Jul 17, 2009 at 9:24 PM, Christope Blin <[hidden email]> wrote:
Thanks for the explanation ... that I do nt understand because it is too deep into the dbUnit internals ;)
My non understanding is not important as long as this is fixed in a future release. For the moment, I will keep my 2.1 version since I have a lot of dataset using this kind of structure.
Should I report a bug or something ?

Thanks for your time and your efforts,


regards,
chris

John Hurst a écrit :
I think that the behavior you're seeing is a result of a change on 2008-09-28 with message "Fail-Fast if AmbiguousTableNames found." This change altered CachedDataSet's method of iteration over its tables. (FlatXmlDataSet extends CachedDataSet.) It seems that instead of a simple list of tables, it now uses an OrderedTableMap.


Perhaps it would be a good idea for DbUnit to include test cases that reflect the diferent valid orderings of tables within a dataset. Then changes like this would be flagged as potentially breaking.

Regards

John Hurst
Wellington, New Zealand

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user



------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge

_______________________________________________ dbunit-user mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/dbunit-user

--

Christophe Blin
Développeur - Chef de produit
--
3 cours Albert Thomas, F-69003 Lyon

+33 4 72 39 98 14
www.tennaxia.com

Tennaxia
> sustainability starts with compliance


Economisez du papier : n'imprimez ce mail que si nécessaire.
Save paper : please do not print this e-mail unless absolutely necessary.

Les informations contenues dans ce message sont confidentielles et sont établies à l'attention exclusive de leurs destinataires. L'accès à ce message par toute autre personne n'est pas autorisé. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'en avertir l'expéditeur : toute altération, copie, distribution ou toute action prise ou omise sont interdites et peuvent être illégales.
This message is confidential and may be legally privileged. It is intended solely for the addressee(s). Access to this message by anyone else is unauthorized. If you are not the intended recipient, please delete it and notify the sender : any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
dbunit-user mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/dbunit-user