01: /*
02: *
03: * The DbUnit Database Testing Framework
04: * Copyright (C)2002-2004, DbUnit.org
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * 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: 554 $
48: * @see DeleteAllOperation
49: */
50: public class TruncateTableOperation extends DeleteAllOperation {
51:
52: /**
53: * Logger for this class
54: */
55: private static final Logger logger = LoggerFactory
56: .getLogger(TruncateTableOperation.class);
57:
58: TruncateTableOperation() {
59: }
60:
61: ////////////////////////////////////////////////////////////////////////////
62: // DeleteAllOperation class
63:
64: protected String getDeleteAllCommand() {
65: logger.debug("getDeleteAllCommand() - start");
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: logger.debug("execute(connection=" + connection + ", dataSet="
76: + dataSet + ") - start");
77:
78: // Patch to make it work with MS SQL Server
79: DatabaseConfig config = connection.getConfig();
80: boolean oldValue = config
81: .getFeature(DatabaseConfig.FEATURE_BATCHED_STATEMENTS);
82: try {
83: config.setFeature(
84: DatabaseConfig.FEATURE_BATCHED_STATEMENTS, false);
85: super.execute(connection, dataSet);
86: } finally {
87: config
88: .setFeature(
89: DatabaseConfig.FEATURE_BATCHED_STATEMENTS,
90: oldValue);
91: }
92: }
93: }
|