This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 1491a8e0ad [Fix][Connector-V2][InfluxDB] Fix NPE when query returns 
empty result (#11966)
1491a8e0ad is described below

commit 1491a8e0ad6f0f77ed4853fd4db3d4ff1cdfbd2e
Author: yuge1805 <[email protected]>
AuthorDate: Wed Aug 26 08:13:16 2026 +0000

    [Fix][Connector-V2][InfluxDB] Fix NPE when query returns empty result 
(#11966)
---
 .../seatunnel/influxdb/source/InfluxDBSource.java  | 30 +++++++++++++++++++++-
 .../influxdb/source/InfluxdbSourceReader.java      |  7 ++++-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxDBSource.java
 
b/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxDBSource.java
index 282880482e..4273ac4cf9 100644
--- 
a/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxDBSource.java
+++ 
b/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxDBSource.java
@@ -31,6 +31,8 @@ import 
org.apache.seatunnel.connectors.seatunnel.influxdb.exception.InfluxdbConn
 import 
org.apache.seatunnel.connectors.seatunnel.influxdb.exception.InfluxdbConnectorException;
 import 
org.apache.seatunnel.connectors.seatunnel.influxdb.state.InfluxDBSourceState;
 
+import org.apache.commons.collections4.CollectionUtils;
+
 import org.influxdb.InfluxDB;
 import org.influxdb.dto.Query;
 import org.influxdb.dto.QueryResult;
@@ -112,7 +114,20 @@ public class InfluxDBSource
         try {
             QueryResult queryResult = influxdb.query(new Query(query, 
sourceConfig.getDatabase()));
 
-            List<QueryResult.Series> serieList = 
queryResult.getResults().get(0).getSeries();
+            List<QueryResult.Result> results = queryResult.getResults();
+            if (CollectionUtils.isEmpty(results)) {
+                log.warn(
+                        "InfluxDB query returned empty results, using default 
column index mapping.");
+                return buildDefaultColumnsIndex();
+            }
+
+            List<QueryResult.Series> serieList = results.get(0).getSeries();
+            if (CollectionUtils.isEmpty(serieList)) {
+                log.warn(
+                        "InfluxDB query returned no series (empty data), using 
default column index mapping.");
+                return buildDefaultColumnsIndex();
+            }
+
             List<String> fieldNames = new 
ArrayList<>(serieList.get(0).getColumns());
 
             return 
Arrays.stream(catalogTable.getSeaTunnelRowType().getFieldNames())
@@ -126,6 +141,19 @@ public class InfluxDBSource
         }
     }
 
+    /**
+     * Builds a default column index list based on the catalog table schema. 
Used when the query
+     * returns no data, where actual column indices are not needed since no 
rows will be read.
+     */
+    private List<Integer> buildDefaultColumnsIndex() {
+        int fieldCount = catalogTable.getSeaTunnelRowType().getTotalFields();
+        List<Integer> defaultIndexList = new ArrayList<>(fieldCount);
+        for (int i = 0; i < fieldCount; i++) {
+            defaultIndexList.add(i);
+        }
+        return defaultIndexList;
+    }
+
     private static int containTzFunction(String sql) {
         Pattern pattern = Pattern.compile("tz\\(.*\\)");
         Matcher matcher = pattern.matcher(sql);
diff --git 
a/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxdbSourceReader.java
 
b/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxdbSourceReader.java
index 16eec22839..9d59c3d659 100644
--- 
a/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxdbSourceReader.java
+++ 
b/seatunnel-connectors-v2/connector-influxdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/influxdb/source/InfluxdbSourceReader.java
@@ -135,7 +135,12 @@ public class InfluxdbSourceReader implements 
SourceReader<SeaTunnelRow, InfluxDB
 
     private void read(InfluxDBSourceSplit split, Collector<SeaTunnelRow> 
output) {
         QueryResult queryResult = influxdb.query(new Query(split.getQuery(), 
config.getDatabase()));
-        for (QueryResult.Result result : queryResult.getResults()) {
+        List<QueryResult.Result> results = queryResult.getResults();
+        if (CollectionUtils.isEmpty(results)) {
+            log.debug("split[{}] reader influxDB query result is empty.", 
split.splitId());
+            return;
+        }
+        for (QueryResult.Result result : results) {
             List<QueryResult.Series> serieList = result.getSeries();
             if (CollectionUtils.isNotEmpty(serieList)) {
                 for (QueryResult.Series series : serieList) {

Reply via email to