From 7435e6a0529545821f88a02b501e85a33fa45dd4 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 25 Jun 2024 10:25:42 +0200 Subject: [PATCH 1/2] 1680-duplicate-column - Prepare branch --- pom.xml | 2 +- spring-data-jdbc-distribution/pom.xml | 2 +- spring-data-jdbc/pom.xml | 4 ++-- spring-data-r2dbc/pom.xml | 4 ++-- spring-data-relational/pom.xml | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index f0b2a42b23..f49293315a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index 4626db4364..8b001af040 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index 266af71b96..473f9924ff 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-jdbc - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml index 3168f9d4f6..74537f6986 100644 --- a/spring-data-r2dbc/pom.xml +++ b/spring-data-r2dbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-r2dbc - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT Spring Data R2DBC Spring Data module for R2DBC @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 0287ece743..8fcf3e4988 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-relational - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.4.0-SNAPSHOT + 3.4.0-1680-duplicate-column-SNAPSHOT From a4b87ce60a2ffff32cc86f40ac2262284a49357b Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 25 Jun 2024 14:42:37 +0200 Subject: [PATCH 2/2] Reestablish warning on duplicate column in query. Closes #1680 --- .../convert/RowDocumentResultSetExtractor.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/RowDocumentResultSetExtractor.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/RowDocumentResultSetExtractor.java index 5d0878d4ca..bf200535d3 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/RowDocumentResultSetExtractor.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/RowDocumentResultSetExtractor.java @@ -22,6 +22,8 @@ import java.util.Iterator; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.dao.DataRetrievalFailureException; import org.springframework.data.jdbc.core.convert.RowDocumentExtractorSupport.AggregateContext; import org.springframework.data.jdbc.core.convert.RowDocumentExtractorSupport.RowDocumentSink; @@ -43,6 +45,9 @@ */ class RowDocumentResultSetExtractor { + private static final Logger log = LoggerFactory.getLogger(RowDocumentResultSetExtractor.class); + public static final String DUPLICATE_COLUMN_WARNING = "ResultSet contains column \"{}\" multiple times. Later column index is {}"; + private final RelationalMappingContext context; private final PathToColumnMapping propertyToColumn; @@ -66,9 +71,13 @@ static RowDocument toRowDocument(ResultSet resultSet) throws SQLException { RowDocument document = new RowDocument(columnCount); for (int i = 0; i < columnCount; i++) { + Object rsv = JdbcUtils.getResultSetValue(resultSet, i + 1); String columnName = md.getColumnLabel(i + 1); - document.put(columnName, rsv instanceof Array a ? a.getArray() : rsv); + Object old = document.put(columnName, rsv instanceof Array a ? a.getArray() : rsv); + if (old != null) { + log.warn(DUPLICATE_COLUMN_WARNING, columnName, i); + } } return document; @@ -107,7 +116,12 @@ public Map getColumnMap(ResultSet result) { Map columns = new LinkedCaseInsensitiveMap<>(metaData.getColumnCount()); for (int i = 0; i < metaData.getColumnCount(); i++) { - columns.put(metaData.getColumnLabel(i + 1), i + 1); + + String columnLabel = metaData.getColumnLabel(i + 1); + Object old = columns.put(columnLabel, i + 1); + if (old != null) { + log.warn(DUPLICATE_COLUMN_WARNING, columnLabel, i); + } } return columns; } catch (SQLException e) {