ClickHouse / ClickHouse/clickhouse-java

PreparedStatement.setQueryTimeout() not honored in ClickHouse JDBC driver (version 0.9.1-all)

Đang mở
#2,637 6 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug investigating jdbc-v2
Ngôn ngữ chính
Java
Star
1.6k
Fork
636
Merge trung bình
2 ngày 23 giờ
Pull request đã merge (30 ngày)
29

Mô tả

**Description**

When setQueryTimeout() is applied to a PreparedStatement, the timeout is not honored during query execution.
Even if the query exceeds the configured timeout value, it continues to run until completion or manual termination.

This behavior is observed with the ClickHouse JDBC driver 0.9.1 (classifier: all).

**Steps to Reproduce**

1. Configure a ClickHouse JDBC connection using version 0.9.1-all.
2. Create a long-running query (e.g., SELECT sleep(3)).
3. Use PreparedStatement.setQueryTimeout(1) to set a 1-second timeout.
4. Execute the query.

**Error Log or Exception StackTrace**

No exception or timeout is thrown.
The query runs to completion, ignoring the configured timeout.

**Expected Behaviour**
The query should stop execution after the specified timeout period and throw an SQLTimeoutException.

**Code Example**
```

try (Connection connection = DriverManager.getConnection(url, user, password)) {
String sql = "SELECT sleep(3)"; // intentionally long query
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setQueryTimeout(1); // set timeout to 1 seconds
long start = System.currentTimeMillis();
stmt.executeQuery();
long end = System.currentTimeMillis();
System.out.println("Query completed in " + (end - start) / 1000 + " seconds");
}
}catch (SQLTimeoutException te) {
System.err.println("Query timed out: " + te.getMessage());
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
e.printStackTrace();
}
```

Actual Result: The query runs for approximately 3 seconds.
Expected Result: The query should terminate after around 1 seconds and throw an SQLTimeoutException.

### Configuration

#### Client Configuration
```

com.clickhouse
clickhouse-jdbc
0.9.1
all

```
#### Environment
* [ ] Cloud
Client version: java jdbc v2 0.9.2 and 0.9.1
Language version: Java 17
OS:

#### ClickHouse Server
* ClickHouse Server version:
* ClickHouse Server non-default settings, if any:
* `CREATE TABLE` statements for tables involved:
* Sample data for all these tables, use [clickhouse-obfuscator](https://github.com/ClickHouse/ClickHouse/blob/master/programs/obfuscator/Obfuscator.cpp#L42-L80) if necessary

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu tại điểm vào JDBC PreparedStatement.setQueryTimeout() và tái hiện vấn đề với SELECT sleep(3) bằng Java 17 và driver 0.9.1-all. Xác minh rằng timeout một giây sẽ ngắt quá trình thực thi và tạo ra một SQLTimeoutException, như được mô tả trong hành vi mong đợi.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java
Lĩnh vực
databases
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
55/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.