This is an automated email from the ASF dual-hosted git repository.
MartijnVisser pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-connector-jdbc.git
The following commit(s) were added to refs/heads/main by this push:
new 5e625825 [FLINK-41208][connector-jdbc] Only accept
TYPE_SCROLL_INSENSITIVE for exactly-once JdbcSource
5e625825 is described below
commit 5e625825418e1d1c1b2e1db2d094ff27c08fb313
Author: Purushottam Sinha <[email protected]>
AuthorDate: Mon Oct 26 19:10:44 2026 +0530
[FLINK-41208][connector-jdbc] Only accept TYPE_SCROLL_INSENSITIVE for
exactly-once JdbcSource
JdbcSourceBuilder.build() also accepted ResultSet.CONCUR_READ_ONLY as the
result set type for exactly-once, but that is a concurrency constant, not
a result set type.
Generated-by: Claude Code (Claude Opus 5.5)
---
.../jdbc/core/datastream/source/JdbcSourceBuilder.java | 5 ++---
.../core/datastream/source/JdbcSourceBuilderTest.java | 18 ++++++++++++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git
a/flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilder.java
b/flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilder.java
index 3d370a56..be32e1fc 100644
---
a/flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilder.java
+++
b/flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilder.java
@@ -306,9 +306,8 @@ public class JdbcSourceBuilder<OUT> {
if (deliveryGuarantee == DeliveryGuarantee.EXACTLY_ONCE) {
Preconditions.checkArgument(
- this.resultSetType == ResultSet.TYPE_SCROLL_INSENSITIVE
- || this.resultSetType ==
ResultSet.CONCUR_READ_ONLY,
- "The 'resultSetType' must be
ResultSet.TYPE_SCROLL_INSENSITIVE or ResultSet.CONCUR_READ_ONLY when using %s",
+ this.resultSetType == ResultSet.TYPE_SCROLL_INSENSITIVE,
+ "The 'resultSetType' must be
ResultSet.TYPE_SCROLL_INSENSITIVE when using %s",
DeliveryGuarantee.EXACTLY_ONCE);
}
diff --git
a/flink-connector-jdbc-core/src/test/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilderTest.java
b/flink-connector-jdbc-core/src/test/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilderTest.java
index 488ae807..858e0ea8 100644
---
a/flink-connector-jdbc-core/src/test/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilderTest.java
+++
b/flink-connector-jdbc-core/src/test/java/org/apache/flink/connector/jdbc/core/datastream/source/JdbcSourceBuilderTest.java
@@ -20,6 +20,7 @@ package
org.apache.flink.connector.jdbc.core.datastream.source;
import org.apache.flink.api.common.typeinfo.TypeHint;
import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.connector.base.DeliveryGuarantee;
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import
org.apache.flink.connector.jdbc.core.datastream.source.config.ContinuousUnBoundingSettings;
import
org.apache.flink.connector.jdbc.core.datastream.source.enumerator.splitter.JdbcSqlSplitterEnumerator;
@@ -37,6 +38,7 @@ import org.apache.flink.types.Row;
import org.junit.jupiter.api.Test;
import java.io.Serializable;
+import java.sql.ResultSet;
import java.time.Duration;
import static
org.apache.flink.connector.jdbc.core.datastream.source.JdbcSourceOptions.READER_FETCH_BATCH_SIZE;
@@ -211,6 +213,22 @@ class JdbcSourceBuilderTest {
.hasMessage(JdbcSourceBuilder.INVALID_CONTINUOUS_SLIDE_TIMING_HINT);
}
+ @Test
+ void testExactlyOnceRequiresScrollInsensitiveResultSetType() {
+ sourceBuilder.setDeliveryGuarantee(DeliveryGuarantee.EXACTLY_ONCE);
+
+ assertThatThrownBy(
+ () ->
sourceBuilder.setResultSetType(ResultSet.TYPE_FORWARD_ONLY).build())
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessageContaining("ResultSet.TYPE_SCROLL_INSENSITIVE");
+ assertThatThrownBy(() ->
sourceBuilder.setResultSetType(ResultSet.CONCUR_READ_ONLY).build())
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessageContaining("ResultSet.TYPE_SCROLL_INSENSITIVE");
+
+
assertThat(sourceBuilder.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE).build())
+ .isNotNull();
+ }
+
@Test
void testSetConnectionProvider() {
assertThatThrownBy(() ->
JdbcSource.builder().setConnectionProvider(null))