ClickHouse / ClickHouse/clickhouse-java

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

Offen
#2,637 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug investigating jdbc-v2
Vorherrschende Sprache
Java
Sterne
1.6k
Forks
636
Ø Merge
2 T. 23 Std.
Gemergte PRs (30 T.)
29

Beschreibung

**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

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Start at the JDBC PreparedStatement.setQueryTimeout() entry point and reproduce the issue with SELECT sleep(3) using Java 17 and the 0.9.1-all driver. Verify that a one-second timeout interrupts execution and produces an SQLTimeoutException, as described in the expected behavior.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.