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 java.util.ArrayList;
25 import java.util.BitSet;
26 import java.util.List;
27
28 import org.dbunit.database.IDatabaseConnection;
29 import org.dbunit.dataset.Column;
30 import org.dbunit.dataset.Columns;
31 import org.dbunit.dataset.DataSetException;
32 import org.dbunit.dataset.ITableMetaData;
33 import org.dbunit.dataset.NoPrimaryKeyException;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43
44
45 public class UpdateOperation extends AbstractBatchOperation
46 {
47
48
49
50
51 private static final Logger logger = LoggerFactory.getLogger(UpdateOperation.class);
52
53 UpdateOperation()
54 {
55 }
56
57
58
59
60 public OperationData getOperationData(ITableMetaData metaData, BitSet ignoreMapping, IDatabaseConnection connection) throws DataSetException
61 {
62 if(logger.isDebugEnabled())
63 logger.debug("getOperationData(metaData={}, ignoreMapping={}, connection={}) - start",
64 new Object[]{metaData, ignoreMapping, connection});
65
66 Column[] columns = metaData.getColumns();
67 Column[] primaryKeys = metaData.getPrimaryKeys();
68
69
70 if (primaryKeys.length == 0)
71 {
72 throw new NoPrimaryKeyException(metaData.getTableName());
73 }
74
75
76 final StringBuilder sqlBuffer = new StringBuilder(128);
77 sqlBuffer.append("update ");
78 sqlBuffer.append(getQualifiedName(connection.getSchema(),
79 metaData.getTableName(), connection));
80
81
82 boolean firstSet = true;
83 List columnList = new ArrayList(columns.length);
84 sqlBuffer.append(" set ");
85 for (int i = 0; i < columns.length; i++)
86 {
87 Column column = columns[i];
88
89
90 if (Columns.getColumn(column.getColumnName(), primaryKeys) == null)
91 {
92 if (!firstSet)
93 {
94 sqlBuffer.append(", ");
95 }
96 firstSet = false;
97
98
99 String columnName = getQualifiedName(null,
100 column.getColumnName(), connection);
101 sqlBuffer.append(columnName);
102 sqlBuffer.append(" = ?");
103 columnList.add(column);
104 }
105 }
106
107
108 sqlBuffer.append(" where ");
109 for (int i = 0; i < primaryKeys.length; i++)
110 {
111 Column column = primaryKeys[i];
112
113 if (i > 0)
114 {
115 sqlBuffer.append(" and ");
116 }
117
118
119 String columnName = getQualifiedName(null,
120 column.getColumnName(), connection);
121 sqlBuffer.append(columnName);
122 sqlBuffer.append(" = ?");
123 columnList.add(column);
124 }
125
126 return new OperationData(sqlBuffer.toString(),
127 (Column[])columnList.toArray(new Column[0]));
128 }
129
130 }