2

I'm currently using Liquibase for creating test data in my database before each test run.

I came across a problem where some of the test cases need special data, while others need the tables to be empty.

So I decided to give Liquibase contexts a try and only insert the data I really need for the current testcase plus - in an abstract superclass - all the data every test case needs (user accounts and stuff)...

I would like to clear the tables before each run, however I can't seem to find anything for this case except dropAll(), which seems to be overkill...

I'm not quite sure if it is even possible - because of foreign keys and other constraints - but I wonder if there is a way to delete the content of ALL the tables without dropping them completely?

1 Answer 1

1

I guess the fastest way would be to use a custom sql tag that uses truncate ... cascade on all "top-level" tables.

Using the cascade keyword for truncate will also (recursively) delete all rows from all dependent tables (all tables referencing the one that is being truncated).

Something like:

<sql>
   truncate table parent_1, parent_2, foobar cascade;
</sql>

Don't know if that is feasible with the number of tables you have or not.

3
  • Thanks for your reply :-) Since I don't know if it's feasible (and because "dropAll()" runs for at least 10min now without any visible success), I'll go talk to someone who's in charge (:P) and tell him about it ... :-)
    – gilaras
    Apr 3, 2012 at 7:20
  • @gilaras: if a dropAll() takes that long, I would suspect some locking, e.g. transactions still referencing the tables that are to be dropped. If that is the case you would have the same problem with truncate.
    – user1822
    Apr 3, 2012 at 7:23
  • you're right, there was something wrong that made the dropAll() take so long; my IDE thought it would be funny to import a wrong package (long live auto-completion!) ... so there was a loop somewhere ... now that I told which package to import by hand, everything works ;-) Thanks! :)
    – gilaras
    Apr 3, 2012 at 8:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.