1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.dbunit.operation;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import java.util.BitSet;
28
29 import org.dbunit.DatabaseUnitException;
30 import org.dbunit.database.IDatabaseConnection;
31 import org.dbunit.dataset.Column;
32 import org.dbunit.dataset.DataSetException;
33 import org.dbunit.dataset.IDataSet;
34 import org.dbunit.dataset.ITableIterator;
35 import org.dbunit.dataset.ITableMetaData;
36 import org.dbunit.dataset.NoPrimaryKeyException;
37
38
39
40
41
42
43
44
45
46
47 public class DeleteOperation extends AbstractBatchOperation
48 {
49
50
51
52
53 private static final Logger logger = LoggerFactory.getLogger(DeleteOperation.class);
54
55 DeleteOperation()
56 {
57 _reverseRowOrder = true;
58 }
59
60
61
62
63 protected ITableIterator iterator(IDataSet dataSet) throws DatabaseUnitException
64 {
65 logger.debug("iterator(dataSet={}) - start", dataSet);
66 return dataSet.reverseIterator();
67 }
68
69 public OperationData getOperationData(ITableMetaData metaData, BitSet ignoreMapping, IDatabaseConnection connection) throws DataSetException
70 {
71 if (logger.isDebugEnabled())
72 {
73 logger.debug("getOperationData(metaData={}, ignoreMapping={}, connection={}) - start",
74 metaData, ignoreMapping, connection);
75 }
76
77
78 Column[] primaryKeys = metaData.getPrimaryKeys();
79 if (primaryKeys.length == 0)
80 {
81 throw new NoPrimaryKeyException(metaData.getTableName());
82 }
83
84
85 final StringBuilder sqlBuffer = new StringBuilder(128);
86 sqlBuffer.append("delete from ");
87 sqlBuffer.append(getQualifiedName(connection.getSchema(),
88 metaData.getTableName(), connection));
89
90
91 sqlBuffer.append(" where ");
92 for (int i = 0; i < primaryKeys.length; i++)
93 {
94
95 String columnName = getQualifiedName(null,
96 primaryKeys[i].getColumnName(), connection);
97 sqlBuffer.append(columnName);
98
99 sqlBuffer.append(" = ?");
100 if (i + 1 < primaryKeys.length)
101 {
102 sqlBuffer.append(" and ");
103 }
104 }
105
106 return new OperationData(sqlBuffer.toString(), primaryKeys);
107 }
108
109 }