Skip to content

Commit 539fd94

Browse files
authored
Merge pull request #2490 from enqueue/connection_isvalid
Implement Connection#isValid
2 parents 72573f8 + 6af47f4 commit 539fd94

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.clickhouse.jdbc.internal.ParsedPreparedStatement;
1616
import com.clickhouse.jdbc.internal.SqlParser;
1717
import com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl;
18+
1819
import org.slf4j.Logger;
1920
import org.slf4j.LoggerFactory;
2021

@@ -35,6 +36,7 @@
3536
import java.sql.Savepoint;
3637
import java.sql.Statement;
3738
import java.sql.Struct;
39+
import java.time.Duration;
3840
import java.util.Arrays;
3941
import java.util.Calendar;
4042
import java.util.Collections;
@@ -487,13 +489,15 @@ public SQLXML createSQLXML() throws SQLException {
487489

488490
@Override
489491
public boolean isValid(int timeout) throws SQLException {
490-
checkOpen();
491492
if (timeout < 0) {
492493
throw new SQLException("Timeout must be >= 0", ExceptionUtils.SQL_STATE_CLIENT_ERROR);
493494
}
494-
495-
//TODO: This is a placeholder implementation
496-
return true;
495+
if (isClosed()) {
496+
return false;
497+
}
498+
return timeout == 0
499+
? client.ping()
500+
: client.ping(Duration.ofSeconds(timeout).toMillis());
497501
}
498502

499503
@Override

jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.github.tomakehurst.wiremock.client.WireMock;
1414
import com.github.tomakehurst.wiremock.common.ConsoleNotifier;
1515
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
16+
1617
import org.testng.Assert;
1718
import org.testng.annotations.DataProvider;
1819
import org.testng.annotations.Test;
@@ -34,7 +35,6 @@
3435
import static org.testng.Assert.assertThrows;
3536
import static org.testng.Assert.fail;
3637

37-
3838
public class ConnectionTest extends JdbcIntegrationTest {
3939

4040
@Test(groups = { "integration" }, enabled = false)
@@ -569,8 +569,32 @@ public void testConnectionWithValidDatabaseName(String dbName) throws Exception
569569
connCheck.close();
570570
}
571571

572+
@Test(groups = { "integration" })
573+
public void closedConnectionIsInvalid() throws Exception {
574+
if (isCloud()) {
575+
return;
576+
}
577+
Connection connection = this.getJdbcConnection();
578+
Assert.assertTrue(connection.isValid(3));
579+
connection.close();
580+
Assert.assertFalse(connection.isValid(3));
581+
}
582+
583+
@Test(groups = { "integration" })
584+
public void connectionWithWrongCredentialsIsInvalid() throws Exception {
585+
if (isCloud()) {
586+
return;
587+
}
588+
Connection connection = this.getJdbcConnection();
589+
Assert.assertTrue(connection.isValid(3));
590+
Properties properties = new Properties();
591+
properties.put("password", "invalid");
592+
connection = this.getJdbcConnection(properties);
593+
Assert.assertFalse(connection.isValid(3));
594+
}
595+
572596
@DataProvider(name = "validDatabaseNames")
573-
public Object[][] createValidDatabaseNames() {
597+
private static Object[][] createValidDatabaseNames() {
574598
return new Object[][] {
575599
{ "foo" },
576600
{ "with-dashes" },

0 commit comments

Comments
 (0)