From: <de...@us...> - 2002-12-11 15:52:52
|
Update of /cvsroot/dbunit/dbunit/docs In directory sc8-pr-cvs1:/tmp/cvs-serv28422 Modified Files: anttask.html components.html faq.html howto.html index.html Log Message: New docs to support the new ant step parameter <query> for the <export> step. Index: anttask.html =================================================================== RCS file: /cvsroot/dbunit/dbunit/docs/anttask.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** anttask.html 17 Jul 2002 01:55:20 -0000 1.2 --- anttask.html 11 Dec 2002 15:52:47 -0000 1.3 *************** *** 1,3 **** ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> --- 1,3 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> *************** *** 5,15 **** <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - Ant Task</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> --- 5,15 ---- <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - Ant Task</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> *************** *** 17,24 **** </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> --- 17,24 ---- </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> *************** *** 37,53 **** <br> </p> ! <div align="center"><a href="http://sourceforge.net"> <img alt="SourceForge Logo" border="0" height="31" width="88" src="http://sourceforge.net/sflogo.php?group_id=47439"> </a></div> <br> ! <div align="center"><a href="http://www.silphid.com/"><img alt="Silphid Creations" src="images/silphid.gif" border=0></a></div> </td> ! <td class="body" valign="top"> <!-- #BeginEditable "body" --> <h2>Ant Integration</h2> <h3>Installation</h3> ! The steps required to add the DbUnit task to your system are: <ol> <li>Add the DbUnit jar to Ant's classpath. </li> ! <li>Add a <taskdef> element to your build script as follows: <pre class=code><taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask"/></pre> </li> --- 37,53 ---- <br> </p> ! <div align="center"><a href="http://sourceforge.net"> <img alt="SourceForge Logo" border="0" height="31" width="88" src="http://sourceforge.net/sflogo.php?group_id=47439"> </a></div> <br> ! <div align="center"><a href="http://www.silphid.com/"><img alt="Silphid Creations" src="images/silphid.gif" border=0></a></div> </td> ! <td class="body" valign="top"> <!-- #BeginEditable "body" --> <h2>Ant Integration</h2> <h3>Installation</h3> ! The steps required to add the DbUnit task to your system are: <ol> <li>Add the DbUnit jar to Ant's classpath. </li> ! <li>Add a <taskdef> element to your build script as follows: <pre class=code><taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask"/></pre> </li> *************** *** 55,93 **** </ol> <h3>Usage </h3> ! <p>Executes either a single transaction, or a group of transactions, under the DbUnit database testing framework.</p> <h4>Parameters</h4> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>driver</td> <td>Class name of the jdbc driver</td> <td>Yes</td> </tr> ! <tr> <td>url</td> <td>Database connection url</td> <td>Yes</td> </tr> ! <tr> <td>userid</td> <td>Database username</td> <td>Yes</td> </tr> ! <tr> <td>password</td> <td>Database password</td> <td>Yes</td> </tr> ! <tr> <td>schema </td> <td>Database schema</td> <td>No</td> </tr> ! <tr> <td>useQualifiedTableNames</td> <td>Set System.property dbunit.qualified.table.names <br> --- 55,93 ---- </ol> <h3>Usage </h3> ! <p>Executes either a single transaction, or a group of transactions, under the DbUnit database testing framework.</p> <h4>Parameters</h4> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>driver</td> <td>Class name of the jdbc driver</td> <td>Yes</td> </tr> ! <tr> <td>url</td> <td>Database connection url</td> <td>Yes</td> </tr> ! <tr> <td>userid</td> <td>Database username</td> <td>Yes</td> </tr> ! <tr> <td>password</td> <td>Database password</td> <td>Yes</td> </tr> ! <tr> <td>schema </td> <td>Database schema</td> <td>No</td> </tr> ! <tr> <td>useQualifiedTableNames</td> <td>Set System.property dbunit.qualified.table.names <br> *************** *** 95,99 **** <td>No</td> </tr> ! <tr> <td>supportBatchStatement</td> <td>Set System.property<br> --- 95,99 ---- <td>No</td> </tr> ! <tr> <td>supportBatchStatement</td> <td>Set System.property<br> *************** *** 105,121 **** <h4>Parameters specified as nested elements</h4> <table cellspadding = 0 border = 1 > ! <tr> <td>operation</td> ! <td> ! <p>Use nested <operation> elements to specify which DbUnit operation to perform on the particular file. <br> </p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>type</td> <td>Type of Database operation to perform. Supported types are<br> --- 105,121 ---- <h4>Parameters specified as nested elements</h4> <table cellspadding = 0 border = 1 > ! <tr> <td>operation</td> ! <td> ! <p>Use nested <operation> elements to specify which DbUnit operation to perform on the particular file. <br> </p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>type</td> <td>Type of Database operation to perform. Supported types are<br> *************** *** 126,139 **** <td>Yes</td> </tr> ! <tr> <td>src</td> <td>The xml source upon which the operation is to be performed</td> <td>Yes</td> </tr> ! <tr> <td>format</td> ! <td>Format type of supplied source file. Possible values are "flat" or "xml". Defaults to <a class="code">"flat"</a></td> ! <td> <p>No</p> </td> --- 126,139 ---- <td>Yes</td> </tr> ! <tr> <td>src</td> <td>The xml source upon which the operation is to be performed</td> <td>Yes</td> </tr> ! <tr> <td>format</td> ! <td>Format type of supplied source file. Possible values are "flat" or "xml". Defaults to <a class="code">"flat"</a></td> ! <td> <p>No</p> </td> *************** *** 143,169 **** </tr> <!-- ! <tr> <td>composite</td> ! <td> ! <p>Use nested <a class="code"><composite></a> operation elements ! to combine multiple <a class="code"><operation></a>s (on the same file) into a single one.</p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>src</td> <td>The xml source upon which the operation is to be performed</td> <td>Yes</td> </tr> ! <tr> <td>flat</td> ! <td>If true, use <a class="code">FlatXmlDataSet</a> type in the ! supplied src file. Otherwise use <a class="code">XmlDataSet</a>. Defaults to <a class="code">true</a></td> ! <td> <p>No</p> </td> --- 143,169 ---- </tr> <!-- ! <tr> <td>composite</td> ! <td> ! <p>Use nested <a class="code"><composite></a> operation elements ! to combine multiple <a class="code"><operation></a>s (on the same file) into a single one.</p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>src</td> <td>The xml source upon which the operation is to be performed</td> <td>Yes</td> </tr> ! <tr> <td>flat</td> ! <td>If true, use <a class="code">FlatXmlDataSet</a> type in the ! supplied src file. Otherwise use <a class="code">XmlDataSet</a>. Defaults to <a class="code">true</a></td> ! <td> <p>No</p> </td> *************** *** 172,180 **** <h4>Parameters specified as nested elements </h4> <table border="1"> ! <tr> <td>operation</td> ! <td>See above definition for details. The src and flat attributes ! are supplied as attributes to the <a class="code"><composite></a> ! step and should not be attempted to be overridden by the nested <a class="code"><operation></a> step.</td> </tr> --- 172,180 ---- <h4>Parameters specified as nested elements </h4> <table border="1"> ! <tr> <td>operation</td> ! <td>See above definition for details. The src and flat attributes ! are supplied as attributes to the <a class="code"><composite></a> ! step and should not be attempted to be overridden by the nested <a class="code"><operation></a> step.</td> </tr> *************** *** 183,213 **** </tr> --> ! <tr> <td>export</td> ! <td> ! <p>Use nested <a class="code"><export></a> operation elements ! to export the database to the supplied filename. The default operation ! is to <a class="code"><export></a> the entire database to ! the destination filename with the supplied dataset type. You can ! specify individual tables to<br> ! <a class="code"><export></a> by nesting them under the <export> step.</p> <table width="100%" border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>dest</td> <td>The xml destination filename</td> <td>Yes</td> </tr> ! <tr> <td>format</td> ! <td>Format type of supplied destination file. Possible values ! are "flat", "xml" or "dtd". Defaults to <a class="code">"flat"</a></td> ! <td> <p>No</p> </td> --- 183,213 ---- </tr> --> ! <tr> <td>export</td> ! <td> ! <p>Use nested <a class="code"><export></a> operation elements ! to export the database to the supplied filename. The default operation ! is to <a class="code"><export></a> the entire database to ! the destination filename with the supplied dataset type. You can ! specify individual tables or queries to<br> ! <a class="code"><export></a> by nesting them under the <export> step.</p> <table width="100%" border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>dest</td> <td>The xml destination filename</td> <td>Yes</td> </tr> ! <tr> <td>format</td> ! <td>Format type of supplied destination file. Possible values ! are "flat", "xml" or "dtd". Defaults to <a class="code">"flat"</a></td> ! <td> <p>No</p> </td> *************** *** 216,231 **** <h4>Parameters specified as nested elements </h4> <table border="1"> ! <tr> <td>table</td> ! <td> ! <p>Use nested <a class=code><table></a> elements to <a class=code><export></a> specific tables. </p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>name</td> <td>Name of the database table to export.</td> --- 216,231 ---- <h4>Parameters specified as nested elements </h4> <table border="1"> ! <tr> <td>table</td> ! <td> ! <p>Use nested <a class=code><table></a> elements to <a class=code><export></a> specific tables. </p> <table border="1"> ! <tr> <td><b>Attribute</b></td> <td><b>Description</b></td> <td><b>Required</b></td> </tr> ! <tr> <td>name</td> <td>Name of the database table to export.</td> *************** *** 235,238 **** --- 235,262 ---- </td> </tr> + <tr> + <td>query</td> + <td> + <p>Use nested <a class=code><query></a> elements to <a class=code><export></a> + data according to a sql statement. </p> + <table border="1"> + <tr> + <td><b>Attribute</b></td> + <td><b>Description</b></td> + <td><b>Required</b></td> + </tr> + <tr> + <td>name</td> + <td>Name to reference the sql statement.</td> + <td>No</td> + </tr> + <tr> + <td>sql</td> + <td>The sql to execute. You can use either SELECT * from Mytable or SELECT col1, col4 from MyTable</td> + <td>No</td> + </tr> + </table> + </td> + </tr> </table> </td> *************** *** 241,294 **** <h3>Examples</h3> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="UPDATE" src="updateFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and executes the UPDATE operation contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="INSERT" src="insertFile.xml"/><br> <operation type="UPDATE" src="updateFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the INSERT operation contained within the FlatXmlDataSet file insertFile.xml <br> ! followed by the execution of the UPDATE operation contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="UPDATE" src="updateFile.xml" flat="false"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and executes the UPDATE operation contained within the XmlDataSet file updateFile.xml.</p> <!-- <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <composite src="compositeFile.xml"><br> <operation type="DELETE"/><br> <operation type="INSERT"/><br> </composite><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the CompositeOperation, DELETE and then UPDATE, contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <composite src="compositeFile.xml" flat="false"><br> <operation type="INSERT"/><br> <operation type="UPDATE"/><br> </composite><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the CompositeOperation, DELETE and then UPDATE, contained within the XmlDataSet file updateFile.xml.</p> --> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the database to the given destination file as a FlatXmlDataSet. </p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportNonFlatFile.xml" format="xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the database to the given destination file as an XmlDataSet. </p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="export.dtd" format="dtd"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver and <br> exports the document type definition (dtd) describing the flat xml format.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportFile.xml"><br> <table name="FOO"/><br> <table name="BAR"/><br> </export><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the contents of the provided tables to the given destination file as an FlatXmlDataSet. <br> </p> ! <!-- #EndEditable --> <hr> ! <div align="center"> <p><font size="2">Copyright ©2002, Manuel Laflamme, All Rights Reserved</font></p> ! <p><font size="1"><a href="index.html">Home</a> - <a href="intro.html">Introduction</a> ! - <a href="components.html">Core Classes</a> - <a href="anttask.html">Ant ! Task</a> - <a href="howto.html">How-to Guides</a> - <a href="bestpractices.html">Best ! Practices</a> - <a href="properties.html">Properties</a> - <a href="api/index.html">API ! Reference</a> - <a href="faq.html">FAQ</a> - <a href="changes.html">Changes ! History</a> - <a href="download.html">Download</a> - <a href="support.html">Support</a> - <a href="resources.html">Resources</a></font></p> <font size="1">$Revision$ $Date$</font> </div> --- 265,324 ---- <h3>Examples</h3> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="UPDATE" src="updateFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and executes the UPDATE operation contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="INSERT" src="insertFile.xml"/><br> <operation type="UPDATE" src="updateFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the INSERT operation contained within the FlatXmlDataSet file insertFile.xml <br> ! followed by the execution of the UPDATE operation contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <operation type="UPDATE" src="updateFile.xml" flat="false"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and executes the UPDATE operation contained within the XmlDataSet file updateFile.xml.</p> <!-- <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <composite src="compositeFile.xml"><br> <operation type="DELETE"/><br> <operation type="INSERT"/><br> </composite><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the CompositeOperation, DELETE and then UPDATE, contained within the FlatXmlDataSet file updateFile.xml.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <composite src="compositeFile.xml" flat="false"><br> <operation type="INSERT"/><br> <operation type="UPDATE"/><br> </composite><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver. ! It then executes the CompositeOperation, DELETE and then UPDATE, contained within the XmlDataSet file updateFile.xml.</p> --> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportFile.xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the database to the given destination file as a FlatXmlDataSet. </p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportNonFlatFile.xml" format="xml"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the database to the given destination file as an XmlDataSet. </p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="export.dtd" format="dtd"/><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver and <br> exports the document type definition (dtd) describing the flat xml format.</p> <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportFile.xml"><br> <table name="FOO"/><br> <table name="BAR"/><br> </export><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the contents of the provided tables to the given destination file as an FlatXmlDataSet. <br> </p> ! <pre> <dbunit driver="org.hsqldb.jdbcDriver"<br> url="jdbc:hsqldb:."<br> userid="sa"<br> password=""><br> <export dest="exportFile.xml"><br> <table name="FOO"/><br> <query name="BAR" sql="SELECT COL1, COL2, COL3 as 'COLSPECIAL' FROM BAR WHERE COL1=4"/><br> </export><br> </dbunit></pre> ! <p> Connects to the database given in url as the dbunit user using the org.hsqldb.jdbcDriver ! and exports the contents of the provided tables to the given destination file as an FlatXmlDataSet. The contents ! of the BAR table are only shown where col1 is equal to 4. Col3 is renamed COLSPECIAL as well. ! <br> ! </p> ! <!-- #EndEditable --> <hr> ! <div align="center"> <p><font size="2">Copyright ©2002, Manuel Laflamme, All Rights Reserved</font></p> ! <p><font size="1"><a href="index.html">Home</a> - <a href="intro.html">Introduction</a> ! - <a href="components.html">Core Classes</a> - <a href="anttask.html">Ant ! Task</a> - <a href="howto.html">How-to Guides</a> - <a href="bestpractices.html">Best ! Practices</a> - <a href="properties.html">Properties</a> - <a href="api/index.html">API ! Reference</a> - <a href="faq.html">FAQ</a> - <a href="changes.html">Changes ! History</a> - <a href="download.html">Download</a> - <a href="support.html">Support</a> - <a href="resources.html">Resources</a></font></p> <font size="1">$Revision$ $Date$</font> </div> Index: components.html =================================================================== RCS file: /cvsroot/dbunit/dbunit/docs/components.html,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** components.html 16 Jun 2002 19:21:09 -0000 1.16 --- components.html 11 Dec 2002 15:52:47 -0000 1.17 *************** *** 1,3 **** ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> --- 1,3 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> *************** *** 5,15 **** <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - Framework Components</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> --- 5,15 ---- <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - Framework Components</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> *************** *** 17,24 **** </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> --- 17,24 ---- </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> *************** *** 37,49 **** <br> </p> ! <div align="center"><a href="http://sourceforge.net"> <img alt="SourceForge Logo" border="0" height="31" width="88" src="http://sourceforge.net/sflogo.php?group_id=47439"> </a></div> <br> ! <div align="center"><a href="http://www.silphid.com/"><img alt="Silphid Creations" src="images/silphid.gif" border=0></a></div> </td> ! <td class="body" valign="top"> <!-- #BeginEditable "body" --> <h2>Core Classes</h2> ! The following walks you through the core classes that make up DbUnit: <ul> <li><a href="#dataset">IDataSet (org.dbunit.dataset)</a></li> --- 37,49 ---- <br> </p> ! <div align="center"><a href="http://sourceforge.net"> <img alt="SourceForge Logo" border="0" height="31" width="88" src="http://sourceforge.net/sflogo.php?group_id=47439"> </a></div> <br> ! <div align="center"><a href="http://www.silphid.com/"><img alt="Silphid Creations" src="images/silphid.gif" border=0></a></div> </td> ! <td class="body" valign="top"> <!-- #BeginEditable "body" --> <h2>Core Classes</h2> ! The following walks you through the core classes that make up DbUnit: <ul> <li><a href="#dataset">IDataSet (org.dbunit.dataset)</a></li> *************** *** 51,62 **** <li><a href="#databaseoperation">DatabaseOperation (org.dbunit.operation)</a></li> </ul> ! <p>All the above are interfaces or abstract classes and you will find yourself using implementations or subclasses.</p> <hr> <h3><a name="dataset">IDataSet</a></h3> ! <p>The <a class="code">IDataSet</a> interface represents is a collection ! of data from various tables. As explained later, these data is used to execute setup operations on a target database. </p> ! <p>The <a class="code">IDataSet</a> implementations provided by the framework are: </p> <ul> --- 51,62 ---- <li><a href="#databaseoperation">DatabaseOperation (org.dbunit.operation)</a></li> </ul> ! <p>All the above are interfaces or abstract classes and you will find yourself using implementations or subclasses.</p> <hr> <h3><a name="dataset">IDataSet</a></h3> ! <p>The <a class="code">IDataSet</a> interface represents is a collection ! of data from various tables. As explained later, these data is used to execute setup operations on a target database. </p> ! <p>The <a class="code">IDataSet</a> implementations provided by the framework are: </p> <ul> *************** *** 68,73 **** <li><a href="#FilteredDataSet">FilteredDataSet</a></li> <li><a href="#CaseInsentiveDataSet" >CaseInsentiveDataSet</a></li> </ul> ! The <a class="code">IDataSet</a> interface: <pre>public interface IDataSet { --- 68,74 ---- <li><a href="#FilteredDataSet">FilteredDataSet</a></li> <li><a href="#CaseInsentiveDataSet" >CaseInsentiveDataSet</a></li> + <li><a href="#QueryDataSet" >QueryDataSet</a></li> </ul> ! The <a class="code">IDataSet</a> interface: <pre>public interface IDataSet { *************** *** 88,96 **** public ITable getTable(String tableName) throws DataSetException; }</pre> ! <a name="XmlDataSet"> <h4>XmlDataSet </h4> ! </a> ! <p>The <a class="code">XmlDataSet</a> class provides the persistence support ! to read from and write to the generic xml dataset format. This format is very generic and must conform to a predefined DTD.</p> <p>The generic xml dataset DTD:<br> --- 89,97 ---- public ITable getTable(String tableName) throws DataSetException; }</pre> ! <a name="XmlDataSet"> <h4>XmlDataSet </h4> ! </a> ! <p>The <a class="code">XmlDataSet</a> class provides the persistence support ! to read from and write to the generic xml dataset format. This format is very generic and must conform to a predefined DTD.</p> <p>The generic xml dataset DTD:<br> *************** *** 150,163 **** </dataset></pre> <h4><a name="FlatXmlDataSet">FlatXmlDataSet</a></h4> ! <p>The <a class="code">FlatXmlDataSet</a> class has been introduced in version ! 1.2 because I found that generic xml datasets were hard to create and ! to maintain. This was particularly painful for tables with several columns. </p> ! <p>In the flat xml format, each xml element corresponds to a table row. ! Each element name corresponds to its table name. The columns correspond ! to attributes. This format has no predefined DTD since it is different ! for each database. DbUnit can generate a DTD for your database (see the <a href="howto.html#generatedtd">How-to guide</a>). </p> ! <p> Here is a sample dataset containing the same data than the <a href="#originalxmlsample">XmlDataSet sample</a>:<br> </p> --- 151,164 ---- </dataset></pre> <h4><a name="FlatXmlDataSet">FlatXmlDataSet</a></h4> ! <p>The <a class="code">FlatXmlDataSet</a> class has been introduced in version ! 1.2 because I found that generic xml datasets were hard to create and ! to maintain. This was particularly painful for tables with several columns. </p> ! <p>In the flat xml format, each xml element corresponds to a table row. ! Each element name corresponds to its table name. The columns correspond ! to attributes. This format has no predefined DTD since it is different ! for each database. DbUnit can generate a DTD for your database (see the <a href="howto.html#generatedtd">How-to guide</a>). </p> ! <p> Here is a sample dataset containing the same data than the <a href="#originalxmlsample">XmlDataSet sample</a>:<br> </p> *************** *** 165,169 **** <!DOCTYPE dataset SYSTEM "my-dataset.dtd"> <dataset> ! <TEST_TABLE COLUMN0="row 0 col 0" COLUMN1="row 0 col 1" COLUMN2="row 0 col 2" COLUMN3="row 0 col 3"/> <TEST_TABLE COLUMN0="row 1 col 0" COLUMN3="row 1 col 3"/> --- 166,170 ---- <!DOCTYPE dataset SYSTEM "my-dataset.dtd"> <dataset> ! <TEST_TABLE COLUMN0="row 0 col 0" COLUMN1="row 0 col 1" COLUMN2="row 0 col 2" COLUMN3="row 0 col 3"/> <TEST_TABLE COLUMN0="row 1 col 0" COLUMN3="row 1 col 3"/> *************** *** 173,217 **** </dataset></pre> <h5>Null Values</h5> ! To specify a null value, you simply have to omit its corresponding attribute. ! In the above example, COLUMN1 and COLUMN2 are nulls for the second row of ! TEST_TABLE. <h5>Table metadata</h5> ! DbUnit generate table metadata from the DTD pointed by the document type ! declaration. DbUnit only support external system URI. The URI can be absolute ! or relative. ! <p> Example of system document type declaration: <pre><!DOCTYPE dataset SYSTEM "my-dataset.dtd"></pre> ! <p>If the xml document does not contain a document type declaration, the ! metadata is generated from the first row of each table. This is highly ! recommended to always provide a document type declaration since DbUnit ! will think your table is missing some columns if the first row has one ! or more null values. <h4><a name="DatabaseDataSet">DatabaseDataSet</a></h4> ! The <a class=code>DatabaseDataSet</a> is an adapter class that allows access ! to a database contents as a dataset. This class is not usually instantiated directly but from the factory method <a class="code">IDatabaseConnection.createDataSet()</a>.<br> <h4><a name="DefaultDataSet">DefaultDataSet</a></h4> ! The <a class=code>DefaultDataSet</a> class can be used to create datasets programmatically. <br> <h4><a name="CompositeDataSet">CompositeDataSet</a></h4> ! The <a class=code>CompositeDataSet</a> class combines multiple datasets into a single one at runtime.<br> <h4><a name="FilteredDataSet">FilteredDataSet</a></h4> ! The <a class="code">FileteredDataSet</a> class is is a decorator which exposes only some tables from the decorated dataset. <br> <h4><a name="CaseInsentiveDataSet">CaseInsentiveDataSet</a></h4> ! The <a class="code">CaseInsentiveDataSet</a> class is a decorator that allows ! access to a decorated dataset in a case insensitive way. Dataset implementations ! provided by the framework are case sensitive. This class allows using them in situation where case sensitiveness is not desirable. <br> <hr> <h3><a name="databaseconnection">IDatabaseConnection</a></h3> ! <p>As its name implies, the <a class="code">IDatabaseConnection</a> represent a connection to a database. </p> <p>The DbUnit framework provides two implementations: </p> <ul> ! <li><a class="code">DatabaseConnection</a>, which is a JDBC Connection adapter.</li> ! <li><a class="code">DatabaseDataSourceConnection</a>, which is a JDBC DataSource adapter.<br> </li> --- 174,222 ---- </dataset></pre> <h5>Null Values</h5> ! To specify a null value, you simply have to omit its corresponding attribute. ! In the above example, COLUMN1 and COLUMN2 are nulls for the second row of ! TEST_TABLE. <h5>Table metadata</h5> ! DbUnit generate table metadata from the DTD pointed by the document type ! declaration. DbUnit only support external system URI. The URI can be absolute ! or relative. ! <p> Example of system document type declaration: <pre><!DOCTYPE dataset SYSTEM "my-dataset.dtd"></pre> ! <p>If the xml document does not contain a document type declaration, the ! metadata is generated from the first row of each table. This is highly ! recommended to always provide a document type declaration since DbUnit ! will think your table is missing some columns if the first row has one ! or more null values. <h4><a name="DatabaseDataSet">DatabaseDataSet</a></h4> ! The <a class=code>DatabaseDataSet</a> is an adapter class that allows access ! to a database contents as a dataset. This class is not usually instantiated directly but from the factory method <a class="code">IDatabaseConnection.createDataSet()</a>.<br> <h4><a name="DefaultDataSet">DefaultDataSet</a></h4> ! The <a class=code>DefaultDataSet</a> class can be used to create datasets programmatically. <br> <h4><a name="CompositeDataSet">CompositeDataSet</a></h4> ! The <a class=code>CompositeDataSet</a> class combines multiple datasets into a single one at runtime.<br> <h4><a name="FilteredDataSet">FilteredDataSet</a></h4> ! The <a class="code">FileteredDataSet</a> class is is a decorator which exposes only some tables from the decorated dataset. <br> <h4><a name="CaseInsentiveDataSet">CaseInsentiveDataSet</a></h4> ! The <a class="code">CaseInsentiveDataSet</a> class is a decorator that allows ! access to a decorated dataset in a case insensitive way. Dataset implementations ! provided by the framework are case sensitive. This class allows using them in situation where case sensitiveness is not desirable. <br> + <h4><a name="QueryDataSet">QueryDataSet</a></h4> + The <a class="code">QueryDataSet</a> class is a dataset that allows you to + add tables, and the sql to extract the data to populate the table. It is + currently only used by the Ant query step and export step.<br> <hr> <h3><a name="databaseconnection">IDatabaseConnection</a></h3> ! <p>As its name implies, the <a class="code">IDatabaseConnection</a> represent a connection to a database. </p> <p>The DbUnit framework provides two implementations: </p> <ul> ! <li><a class="code">DatabaseConnection</a>, which is a JDBC Connection adapter.</li> ! <li><a class="code">DatabaseDataSourceConnection</a>, which is a JDBC DataSource adapter.<br> </li> *************** *** 219,224 **** <hr> <h3><a name="databaseoperation">DatabaseOperation</a></h3> ! <p>The <a class="code">DatabaseOperation</a> abstract class defines operations ! performed on a target database before and after each test. Again, the framework provides several implementations. <br> </p> --- 224,229 ---- <hr> <h3><a name="databaseoperation">DatabaseOperation</a></h3> ! <p>The <a class="code">DatabaseOperation</a> abstract class defines operations ! performed on a target database before and after each test. Again, the framework provides several implementations. <br> </p> *************** *** 235,241 **** <li><a href="#IdentityInsertOperation">IdentityInsertOperation</a> </li> </ul> ! <p>The two most usefull operations are <a href="#refresh">REFRESH</a> and ! <a href="#cleanInsert">CLEAN_INSERT</a>. As you will shortly see, they ! are the ones you will deal with most of the time. They represent two opposite testing strategies with different benefits and tradeoffs. </p> <p>The <a class="code">DatabaseOperation</a> class declaration: </p> --- 240,246 ---- <li><a href="#IdentityInsertOperation">IdentityInsertOperation</a> </li> </ul> ! <p>The two most usefull operations are <a href="#refresh">REFRESH</a> and ! <a href="#cleanInsert">CLEAN_INSERT</a>. As you will shortly see, they ! are the ones you will deal with most of the time. They represent two opposite testing strategies with different benefits and tradeoffs. </p> <p>The <a class="code">DatabaseOperation</a> class declaration: </p> *************** *** 248,254 **** public static final IDatabaseOperation REFRESH = new RefreshOperation(); public static final IDatabaseOperation DELETE = new DeleteOperation(); ! public static final IDatabaseOperation DELETE_ALL = new DeleteAllOperation(); ! public static final IDatabaseOperation CLEAN_INSERT = new CompositeOperation(DELETE_ALL, INSERT); --- 253,259 ---- public static final IDatabaseOperation REFRESH = new RefreshOperation(); public static final IDatabaseOperation DELETE = new DeleteOperation(); ! public static final IDatabaseOperation DELETE_ALL = new DeleteAllOperation(); ! public static final IDatabaseOperation CLEAN_INSERT = new CompositeOperation(DELETE_ALL, INSERT); *************** *** 260,264 **** private static class DummyAction extends DatabaseOperation { ! public void execute(IDatabaseConnection connection, IDataSet dataSet) { --- 265,269 ---- private static class DummyAction extends DatabaseOperation { ! public void execute(IDatabaseConnection connection, IDataSet dataSet) { *************** *** 267,305 **** }</pre> <h4><a name="update">DatabaseOperation</a>.UPDATE</h4> ! This operation updates the database from the dataset contents. This operation ! assumes that table data already exists in the target database and fails if this is not the case.<br> <br> <h4><a name="insert">DatabaseOperation.INSERT</a></h4> ! This operation inserts the dataset contents into the database. This operation ! assumes that table data does not exist in the target database and fails ! if this is not the case. To prevent problems with foreign keys, tables must be sequenced appropriately in the dataset. <br> <h4><a name="delete">DatabaseOperation.DELETE</a></h4> ! This operation deletes only the dataset contents from the database. This ! operation does not delete the entire table contents but only data that are present in the dataset. <br> <h4><a name="deleteall">DatabaseOperation.DELETE_ALL</a></h4> ! This operation deletes entire target database table contents for each table ! contained in dataset. In other words, if a dataset does not contain a particular ! table, but that table exists in the database, the contents of that table is not deleted. Deletes are performed on table in reverse sequence.<br> <h4><a name="refresh">DatabaseOperation.REFRESH</a></h4> ! This operation literally refreshes dataset contents into the target database. ! This means that data of existing rows are updated and non-existing row get ! inserted. Any rows which exist in the database but not in dataset stay unaffected. ! This approach is more appropriate for tests that assume other data may exist in the database. <br> <br> ! As you understand, this is a very powerful operation. This strategy can ! help you deal more easily with foreign key constraints, as you don't necessarily need to insert data in a specific sequence. <br> <br> ! If they are correctly written, tests using this strategy can even be performed on a populated database like a copy of a production database. <br> <h4><a name="cleaninsert">DatabaseOperation.CLEAN_INSERT</a></h4> ! This composite operation performs a DELETE_ALL operation followed by an ! INSERT operation. This is the safest approach to ensure that the database ! is in a known state. This is appropriate for tests that require the database to only contain a specific set of data.<br> <h4><a name="none">DatabaseOperation.NONE</a></h4> --- 272,310 ---- }</pre> <h4><a name="update">DatabaseOperation</a>.UPDATE</h4> ! This operation updates the database from the dataset contents. This operation ! assumes that table data already exists in the target database and fails if this is not the case.<br> <br> <h4><a name="insert">DatabaseOperation.INSERT</a></h4> ! This operation inserts the dataset contents into the database. This operation ! assumes that table data does not exist in the target database and fails ! if this is not the case. To prevent problems with foreign keys, tables must be sequenced appropriately in the dataset. <br> <h4><a name="delete">DatabaseOperation.DELETE</a></h4> ! This operation deletes only the dataset contents from the database. This ! operation does not delete the entire table contents but only data that are present in the dataset. <br> <h4><a name="deleteall">DatabaseOperation.DELETE_ALL</a></h4> ! This operation deletes entire target database table contents for each table ! contained in dataset. In other words, if a dataset does not contain a particular ! table, but that table exists in the database, the contents of that table is not deleted. Deletes are performed on table in reverse sequence.<br> <h4><a name="refresh">DatabaseOperation.REFRESH</a></h4> ! This operation literally refreshes dataset contents into the target database. ! This means that data of existing rows are updated and non-existing row get ! inserted. Any rows which exist in the database but not in dataset stay unaffected. ! This approach is more appropriate for tests that assume other data may exist in the database. <br> <br> ! As you understand, this is a very powerful operation. This strategy can ! help you deal more easily with foreign key constraints, as you don't necessarily need to insert data in a specific sequence. <br> <br> ! If they are correctly written, tests using this strategy can even be performed on a populated database like a copy of a production database. <br> <h4><a name="cleaninsert">DatabaseOperation.CLEAN_INSERT</a></h4> ! This composite operation performs a DELETE_ALL operation followed by an ! INSERT operation. This is the safest approach to ensure that the database ! is in a known state. This is appropriate for tests that require the database to only contain a specific set of data.<br> <h4><a name="none">DatabaseOperation.NONE</a></h4> *************** *** 308,326 **** This operation combines multiple operations into a single one.<br> <h4><a name="TransactionOperation">TransactionOperation</a></h4> ! <p>This operation decorates an operation and executes it within the context of a transaction.</p> <h4><a name="IdentityInsertOperation">IdentityInsertOperation<a ></a></a></h4> ! <p>This operation decorates an operation and disables the MS SQL Server automatic identifier generation (IDENTITY) during its execution.</p> ! <!-- #EndEditable --> <hr> ! <div align="center"> <p><font size="2">Copyright ©2002, Manuel Laflamme, All Rights Reserved</font></p> ! <p><font size="1"><a href="index.html">Home</a> - <a href="intro.html">Introduction</a> ! - <a href="components.html">Core Classes</a> - <a href="anttask.html">Ant ! Task</a> - <a href="howto.html">How-to Guides</a> - <a href="bestpractices.html">Best ! Practices</a> - <a href="properties.html">Properties</a> - <a href="api/index.html">API ! Reference</a> - <a href="faq.html">FAQ</a> - <a href="changes.html">Changes ! History</a> - <a href="download.html">Download</a> - <a href="support.html">Support</a> - <a href="resources.html">Resources</a></font></p> <font size="1">$Revision$ $Date$</font> </div> --- 313,331 ---- This operation combines multiple operations into a single one.<br> <h4><a name="TransactionOperation">TransactionOperation</a></h4> ! <p>This operation decorates an operation and executes it within the context of a transaction.</p> <h4><a name="IdentityInsertOperation">IdentityInsertOperation<a ></a></a></h4> ! <p>This operation decorates an operation and disables the MS SQL Server automatic identifier generation (IDENTITY) during its execution.</p> ! <!-- #EndEditable --> <hr> ! <div align="center"> <p><font size="2">Copyright ©2002, Manuel Laflamme, All Rights Reserved</font></p> ! <p><font size="1"><a href="index.html">Home</a> - <a href="intro.html">Introduction</a> ! - <a href="components.html">Core Classes</a> - <a href="anttask.html">Ant ! Task</a> - <a href="howto.html">How-to Guides</a> - <a href="bestpractices.html">Best ! Practices</a> - <a href="properties.html">Properties</a> - <a href="api/index.html">API ! Reference</a> - <a href="faq.html">FAQ</a> - <a href="changes.html">Changes ! History</a> - <a href="download.html">Download</a> - <a href="support.html">Support</a> - <a href="resources.html">Resources</a></font></p> <font size="1">$Revision$ $Date$</font> </div> Index: faq.html =================================================================== RCS file: /cvsroot/dbunit/dbunit/docs/faq.html,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** faq.html 17 Jul 2002 01:55:21 -0000 1.18 --- faq.html 11 Dec 2002 15:52:48 -0000 1.19 *************** *** 1,3 **** ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> --- 1,3 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><!-- #BeginTemplate "/Templates/main.dwt" --> *************** *** 5,15 **** <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - FAQ</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> --- 5,15 ---- <meta http-equiv="Content-Style-Type" content="text/css"> <link href="stylesheet.css" rel="stylesheet" type="text/css"> ! <!-- #BeginEditable "doctitle" --> <title>The Dbunit Framework - FAQ</title> ! <!-- #EndEditable --> </head> <body> <table cellspadding = 0 cellspacing = 0 border = 0 width="100%"> ! <tr height="100"> <td class="logo" width = 200><img src="images/logo.jpg" width=200 height=100></td> <td class="header"></td> *************** *** 17,24 **** </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> --- 17,24 ---- </table> <table cellspadding = 0 cellspacing = 0 border = 0> ! <tr> ! ! <td class="menu" nowrap valign="top" > ! <p><a href="index.html">Home</a><br> <br> <a href="intro.html">Introduction</a><br> *************** *** 37,100 **** <br> </p> ! <div align="center"><a href="http://sourceforge.net"> <img alt="SourceForge Logo" border="0" height="31" width="88" src="http://sourceforge.net/sflogo.php?group_id=47439"> </a></div> <br> ! <div align="center"><a href="http://www.silphid.com/"><img alt="Silphid Creations" src="images/silphid.gif" border=0></a></div> </td> ! <td class="body" valign="top"> <!-- #BeginEditable "body" --> <h2><a name="faq">Frequently asked questions</a></h2> <ul> <li><a href="#supportedvendors">Which database system are supported?</a></li> ! <li><a href="#identity">Can I use DbUnit with IDENTITY or auto-increment columns?</a></li> ! <li><a href="#clonedconnection">Why I get a "Can't start a cloned connection" exception when I use InsertIdentityOperation?</a></li> ! <li><a><a href="UnsatisfiedLinkError">Why I get an "UnsatisfiedLinkError" with the DB2 driver?</a></a></li> ! <li><a href="#AmbiguousTableNameException">Why I get a AmbiguousTableNameException?</a></li> </ul> <hr> <h3><a name="supportedvendors">Which database systems are supported?</a></h3> ! <p>The Dbunit framework has been developed and tested with Oracle and HypersonicSQL. ! It uses a fairly simple SQL syntax and should be compatible with the other ! database systems. <a href="support.html">Let us know</a> if you find any incompat... [truncated message content] |