1 /*
2 *
3 * The DbUnit Database Testing Framework
4 * Copyright (C)2002-2004, DbUnit.org
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22 package org.dbunit.operation;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import org.dbunit.DatabaseUnitException;
28 import org.dbunit.database.DatabaseConfig;
29 import org.dbunit.database.IDatabaseConnection;
30 import org.dbunit.dataset.IDataSet;
31
32 import java.sql.SQLException;
33
34 /**
35 * Truncate tables present in the specified dataset. If the dataset does not
36 * contains a particular table, but that table exists in the database,
37 * the database table is not affected. Table are truncated in
38 * reverse sequence.
39 * <p>
40 * This operation has the same effect of as {@link DeleteAllOperation}.
41 * TruncateTableOperation is faster, and it is non-logged, meaning it cannot be
42 * rollback. DeleteAllOperation is more portable because not all database vendor
43 * support TRUNCATE_TABLE TABLE statement.
44 *
45 * @author Manuel Laflamme
46 * @since Apr 10, 2003
47 * @version $Revision$
48 * @see DeleteAllOperation
49 */
50 public class TruncateTableOperation extends DeleteAllOperation
51 {
52
53 /**
54 * Logger for this class
55 */
56 private static final Logger logger = LoggerFactory.getLogger(TruncateTableOperation.class);
57
58 TruncateTableOperation()
59 {
60 }
61
62 ////////////////////////////////////////////////////////////////////////////
63 // DeleteAllOperation class
64
65 protected String getDeleteAllCommand()
66 {
67 return "truncate table ";
68 }
69
70 ////////////////////////////////////////////////////////////////////////////
71 // DatabaseOperation class
72
73 public void execute(IDatabaseConnection connection, IDataSet dataSet)
74 throws DatabaseUnitException, SQLException
75 {
76 logger.debug("execute(connection={}, dataSet={}) - start", connection, dataSet);
77
78 // Patch to make it work with MS SQL Server
79 DatabaseConfig config = connection.getConfig();
80 boolean oldValue = config.getFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS);
81 try
82 {
83 config.setFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS, false);
84 super.execute(connection, dataSet);
85 }
86 finally
87 {
88 config.setFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS, oldValue);
89 }
90 }
91 }