Skip to content

Commit faee851

Browse files
committed
Reestablish warning on duplicate column in query.
Closes #1680 Original pull request #1825
1 parent 5c76ddc commit faee851

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/RowDocumentResultSetExtractor.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.Iterator;
2323
import java.util.Map;
2424

25+
import org.slf4j.Logger;
26+
import org.slf4j.LoggerFactory;
2527
import org.springframework.dao.DataRetrievalFailureException;
2628
import org.springframework.data.jdbc.core.convert.RowDocumentExtractorSupport.AggregateContext;
2729
import org.springframework.data.jdbc.core.convert.RowDocumentExtractorSupport.RowDocumentSink;
@@ -43,6 +45,9 @@
4345
*/
4446
class RowDocumentResultSetExtractor {
4547

48+
private static final Logger log = LoggerFactory.getLogger(RowDocumentResultSetExtractor.class);
49+
public static final String DUPLICATE_COLUMN_WARNING = "ResultSet contains column \"{}\" multiple times. Later column index is {}";
50+
4651
private final RelationalMappingContext context;
4752
private final PathToColumnMapping propertyToColumn;
4853

@@ -66,9 +71,13 @@ static RowDocument toRowDocument(ResultSet resultSet) throws SQLException {
6671
RowDocument document = new RowDocument(columnCount);
6772

6873
for (int i = 0; i < columnCount; i++) {
74+
6975
Object rsv = JdbcUtils.getResultSetValue(resultSet, i + 1);
7076
String columnName = md.getColumnLabel(i + 1);
71-
document.put(columnName, rsv instanceof Array a ? a.getArray() : rsv);
77+
Object old = document.put(columnName, rsv instanceof Array a ? a.getArray() : rsv);
78+
if (old != null) {
79+
log.warn(DUPLICATE_COLUMN_WARNING, columnName, i);
80+
}
7281
}
7382

7483
return document;
@@ -107,7 +116,12 @@ public Map<String, Integer> getColumnMap(ResultSet result) {
107116
Map<String, Integer> columns = new LinkedCaseInsensitiveMap<>(metaData.getColumnCount());
108117

109118
for (int i = 0; i < metaData.getColumnCount(); i++) {
110-
columns.put(metaData.getColumnLabel(i + 1), i + 1);
119+
120+
String columnLabel = metaData.getColumnLabel(i + 1);
121+
Object old = columns.put(columnLabel, i + 1);
122+
if (old != null) {
123+
log.warn(DUPLICATE_COLUMN_WARNING, columnLabel, i);
124+
}
111125
}
112126
return columns;
113127
} catch (SQLException e) {

0 commit comments

Comments
 (0)