org.dbunit.ant
Class QuerySet
java.lang.Object
org.apache.tools.ant.ProjectComponent
org.dbunit.ant.QuerySet
- All Implemented Interfaces:
- Cloneable
public class QuerySet
- extends org.apache.tools.ant.ProjectComponent
This element is a container for Queries. It facilitates reuse
through references. Using Ant 1.6 and greater, references can be
defined in a single build file and imported into many others.
An example of where this is useful follows:
In our database
we have INDIVIDUALS which must have an associated NAME_INFO and
at least one IND_ADDRESS. The developer creating a dataset for
his/her tests probably won't know all the details of what relationships are
expected, and if he did, its an error prone and repetitive task
to create the correct SQL for entities in each dataset.
Missing a related table, not only creates invalid data for your tests,
but also is likely to cause DBUnit setUp() failures from foreign key
constraint violation errors.
(example: If a previous test had inserted INDIVIDUALS
and NAME_INFO and my test tries to delete only the INDIVIDUALS, the
NAME_INFO.IND_ID constraint would be violated)
Each queryset is internally converted to a QueryDataSet
and then
combined using a CompositeDataSet
. This means that you can use
more than one query
element for any given table provided they
are nested within separate queryset
s.
Usage:
<!-- ======== Define the reusable reference ========== -->
<queryset id="individuals">
<query name="INDIVIDUALS" sql="
SELECT * FROM INDIVIDUALS WHERE IND_ID IN (@subQuery@)"/>
<query name="NAME_INFO" sql="
SELECT B.* FROM INDIVIDUALS A, NAME_INFO B
WHERE A.IND_ID IN (@subQuery@)
AND B.IND_ID = A.IND_ID"/>
<query name="IND_ADDRESSES" sql="
SELECT B.* FROM INDIVIDUALS A, IND_ADDRESSES B
WHERE A.IND_ID IN (@subQuery@)
AND B.IND_ID = A.IND_ID"/>
</queryset>
<!-- ========= Use the reference ====================== -->
<dbunit driver="${jdbcDriver}"
url="${jdbcURL}" userid="${jdbcUser}" password="${jdbcPassword}">
<export dest="${dest}">
<queryset refid="individuals">
<filterset>
<filter token="subQuery" value="
SELECT IND_ID FROM INDIVIDUALS WHERE USER_NAME = 'UNKNOWN'"/>
</filterset>
</queryset>
</export>
</dbunit>
- Since:
- 2.2.0 (Sep. 13 2004)
- Version:
- $Revision: 852 $ $Date: 2008-11-01 11:38:03 +0100 (Sat, 01 Nov 2008) $
- Author:
- Lenny Marks lenny@aps.org, Last changed by: $Author: gommma $
Fields inherited from class org.apache.tools.ant.ProjectComponent |
description, location, project |
Methods inherited from class org.apache.tools.ant.ProjectComponent |
clone, getDescription, getLocation, getProject, log, log, setDescription, setLocation, setProject |
QuerySet
public QuerySet()
addQuery
public void addQuery(Query query)
addFilterSet
public void addFilterSet(org.apache.tools.ant.types.FilterSet filterSet)
getId
public String getId()
getRefid
public String getRefid()
setId
public void setId(String string)
setRefid
public void setRefid(String string)
getQueries
public List getQueries()
copyQueriesFrom
public void copyQueriesFrom(QuerySet referenced)
getQueryDataSet
public QueryDataSet getQueryDataSet(IDatabaseConnection connection)
throws SQLException,
AmbiguousTableNameException
- Throws:
SQLException
AmbiguousTableNameException
Copyright © 2002-2012. All Rights Reserved.