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

amashenkov pushed a commit to branch jdbc_over_thin_sql
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/jdbc_over_thin_sql by this 
push:
     new 0652f026cc2 IGNITE-26141 Sql. Jdbc. Migrate (Prepared)Statement 
methods (executeUpdate, executeQuery, execute) to use thin client SQL API 
(#6740)
0652f026cc2 is described below

commit 0652f026cc23ec56bd5185b919804e4462a59f85
Author: Max Zhuravkov <[email protected]>
AuthorDate: Tue Oct 14 12:41:00 2025 +0300

    IGNITE-26141 Sql. Jdbc. Migrate (Prepared)Statement methods (executeUpdate, 
executeQuery, execute) to use thin client SQL API (#6740)
---
 .../cli/commands/sql/ItSqlCommandTest.java         |  4 ++
 .../cli/commands/sql/ItSqlMultistatementTest.java  |  6 ++
 .../cli/commands/sql/ItSqlReplCommandTest.java     |  3 +
 .../internal/jdbc/ItJdbcMetadataSelfTest.java      | 28 ++++----
 .../jdbc/ItJdbcResultSetMetadataSelfTest.java      |  8 +--
 .../apache/ignite/jdbc/ItJdbcBatchSelfTest.java    |  3 +
 .../ignite/jdbc/ItJdbcComplexQuerySelfTest.java    |  8 +--
 .../ignite/jdbc/ItJdbcConnectionSelfTest.java      | 53 +++++++-------
 .../apache/ignite/jdbc/ItJdbcErrorsSelfTest.java   |  2 +
 .../ignite/jdbc/ItJdbcMultiStatementSelfTest.java  | 18 ++---
 .../ignite/jdbc/ItJdbcMultipleConnectionsTest.java |  2 +
 .../apache/ignite/jdbc/ItJdbcQueryMetricsTest.java | 13 ++--
 .../org/apache/ignite/jdbc/ItJdbcSchemaTest.java   |  2 +
 .../ignite/jdbc/ItJdbcStatementCancelSelfTest.java |  2 +
 .../ignite/jdbc/ItJdbcStatementSelfTest.java       | 40 ++++++-----
 .../apache/ignite/jdbc/ItJdbcTransactionTest.java  |  2 +
 .../internal/jdbc/JdbcClientQueryEventHandler.java |  2 +-
 .../ignite/internal/jdbc/JdbcDatabaseMetadata.java |  6 +-
 .../ignite/internal/jdbc2/JdbcConnection2.java     | 35 ++++++---
 .../ignite/internal/jdbc2/JdbcResultSet.java       |  2 +-
 .../ignite/internal/jdbc2/JdbcStatement2.java      | 15 +++-
 .../org/apache/ignite/jdbc/IgniteJdbcDriver.java   | 83 ++++++++++++++++++----
 .../jdbc/JdbcDatabaseMetadataSelfTest.java         |  4 +-
 .../internal/jdbc/JdbcResultSetBaseSelfTest.java   |  5 +-
 .../internal/jdbc2/JdbcConnection2SelfTest.java    |  7 +-
 .../org/apache/ignite/data/SpringDataJdbcTest.java |  2 +
 26 files changed, 238 insertions(+), 117 deletions(-)

diff --git 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java
 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java
index 0743227c6cc..7226e48e2a5 100644
--- 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java
+++ 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.cli.commands.sql;
 import static 
org.apache.ignite.internal.cli.core.exception.handler.SqlExceptionHandler.CLIENT_CONNECTION_FAILED_MESSAGE;
 import static org.junit.jupiter.api.Assertions.assertAll;
 
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -154,6 +155,7 @@ class ItSqlCommandTest extends CliSqlCommandTestBase {
 
     @Test
     @DisplayName("Should execute multiline sql script from file")
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void multilineScript() {
         String filePath = getClass().getResource("/multiline.sql").getPath();
         execute("sql", "--file", filePath, "--jdbc-url", JDBC_URL);
@@ -175,6 +177,7 @@ class ItSqlCommandTest extends CliSqlCommandTestBase {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void exceptionHandler() {
         execute("sql", "SELECT 1/0;", "--jdbc-url", JDBC_URL);
 
@@ -197,6 +200,7 @@ class ItSqlCommandTest extends CliSqlCommandTestBase {
 
     @Test
     @DisplayName("An error should be displayed indicating that the script 
transaction was not completed by the script.")
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void scriptTxNotFinishedByScript() {
         String expectedError = "Transaction block doesn't have a COMMIT 
statement at the end.";
 
diff --git 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlMultistatementTest.java
 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlMultistatementTest.java
index a194cc26c2c..057c23bf3cd 100644
--- 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlMultistatementTest.java
+++ 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlMultistatementTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.cli.commands.sql;
 import static org.junit.jupiter.api.Assertions.assertAll;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -36,6 +37,7 @@ public class ItSqlMultistatementTest extends 
CliSqlCommandTestBase {
      * Test for multiple insert queries. It ensures that the output contains 
the number of updated rows for each query.
      */
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void sequentialUpdates() {
         String testQuery = "insert into mytable(id) values (1);insert into 
mytable(id) values (2), (3)";
         String expectedOutput = "Updated 1 rows.\n"
@@ -51,6 +53,7 @@ public class ItSqlMultistatementTest extends 
CliSqlCommandTestBase {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void sequentialSelects() {
         String testQuery = "select * from mytable order by id; insert into 
mytable(id) values(3); select * from mytable order by id;";
         String expectedOutput =
@@ -84,6 +87,7 @@ public class ItSqlMultistatementTest extends 
CliSqlCommandTestBase {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void deleteAfterInserts() {
         String testQuery = "insert into mytable(id) values (1);insert into 
mytable(id) values (2), (3); delete from mytable;";
         String expectedOutput = "Updated 1 rows.\n"
@@ -100,6 +104,7 @@ public class ItSqlMultistatementTest extends 
CliSqlCommandTestBase {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void updateAfterInserts() {
         String testQuery = "insert into mytable(id) values (1);insert into 
mytable(id) values (2), (3); update mytable set Name = 'Name1';";
         String expectedOutput = "Updated 1 rows.\n"
@@ -116,6 +121,7 @@ public class ItSqlMultistatementTest extends 
CliSqlCommandTestBase {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void sequentialCreateTable() {
         String testQuery = "create table mytable1(id int primary key); create 
table mytable2(id int primary key)";
         String expectedOutput = "Updated 0 rows.\n"
diff --git 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java
 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java
index e4ebcf03fa5..4f33ca79a18 100644
--- 
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java
+++ 
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java
@@ -23,6 +23,7 @@ import io.micronaut.context.annotation.Bean;
 import io.micronaut.context.annotation.Replaces;
 import org.apache.ignite.internal.cli.CliIntegrationTest;
 import org.apache.ignite.internal.cli.core.repl.executor.ReplExecutorProvider;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -63,6 +64,7 @@ class ItSqlReplCommandTest extends CliIntegrationTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void multilineCommand() {
         execute("CREATE TABLE MULTILINE_TABLE(K INT PRIMARY KEY); \n INSERT 
INTO MULTILINE_TABLE VALUES(1);", "--jdbc-url", JDBC_URL);
 
@@ -98,6 +100,7 @@ class ItSqlReplCommandTest extends CliIntegrationTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     void exceptionHandler() {
         execute("SELECT 1/0;", "--jdbc-url", JDBC_URL);
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcMetadataSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcMetadataSelfTest.java
index 96988a37ffd..14ccdce26fc 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcMetadataSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcMetadataSelfTest.java
@@ -52,21 +52,21 @@ public class ItJdbcMetadataSelfTest extends 
AbstractJdbcSelfTest {
     /** Creates tables. */
     @BeforeAll
     public static void createTables() throws SQLException {
+        // TODO https://issues.apache.org/jira/browse/IGNITE-26142 convert 
these statements back into a script 
         try (Statement stmt = conn.createStatement()) {
-            stmt.execute("CREATE SCHEMA IF NOT EXISTS PUBLIC;"
-                    + "CREATE SCHEMA IF NOT EXISTS META;"
-                    + "CREATE SCHEMA IF NOT EXISTS USER2;"
-                    + "CREATE SCHEMA IF NOT EXISTS \"user0\";"
-                    + "CREATE SCHEMA IF NOT EXISTS USER1;"
-                    + "CREATE TABLE person(name VARCHAR(32), age INT, orgid 
INT PRIMARY KEY);"
-                    + "CREATE TABLE organization(id INT PRIMARY KEY, name 
VARCHAR, bigdata DECIMAL(20, 10));"
-                    + "CREATE TABLE user1.table1(id INT PRIMARY KEY);"
-                    + "CREATE TABLE user2.\"table2\"(id INT PRIMARY KEY);"
-                    + "CREATE TABLE \"user0\".\"table0\"(\"id\" INT PRIMARY 
KEY);"
-                    + "CREATE TABLE \"user0\".table0(id INT PRIMARY KEY);"
-                    + "INSERT INTO person (orgid, name, age) VALUES (1, '111', 
111);"
-                    + "INSERT INTO organization (id, name, bigdata) VALUES (1, 
'AAA', 10);"
-            );
+            stmt.execute("CREATE SCHEMA IF NOT EXISTS PUBLIC;");
+            stmt.execute("CREATE SCHEMA IF NOT EXISTS META;");
+            stmt.execute("CREATE SCHEMA IF NOT EXISTS USER2;");
+            stmt.execute("CREATE SCHEMA IF NOT EXISTS \"user0\";");
+            stmt.execute("CREATE SCHEMA IF NOT EXISTS USER1;");
+            stmt.execute("CREATE TABLE person(name VARCHAR(32), age INT, orgid 
INT PRIMARY KEY);");
+            stmt.execute("CREATE TABLE organization(id INT PRIMARY KEY, name 
VARCHAR, bigdata DECIMAL(20, 10));");
+            stmt.execute("CREATE TABLE user1.table1(id INT PRIMARY KEY);");
+            stmt.execute("CREATE TABLE user2.\"table2\"(id INT PRIMARY KEY);");
+            stmt.execute("CREATE TABLE \"user0\".\"table0\"(\"id\" INT PRIMARY 
KEY);");
+            stmt.execute("CREATE TABLE \"user0\".table0(id INT PRIMARY KEY);");
+            stmt.execute("INSERT INTO person (orgid, name, age) VALUES (1, 
'111', 111);");
+            stmt.execute("INSERT INTO organization (id, name, bigdata) VALUES 
(1, 'AAA', 10);");
         }
     }
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcResultSetMetadataSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcResultSetMetadataSelfTest.java
index d90a02a2a41..6c5958b114d 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcResultSetMetadataSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/internal/jdbc/ItJdbcResultSetMetadataSelfTest.java
@@ -25,9 +25,9 @@ import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.sql.Types;
-import java.util.concurrent.TimeUnit;
 import org.apache.ignite.jdbc.AbstractJdbcSelfTest;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -66,12 +66,8 @@ public class ItJdbcResultSetMetadataSelfTest extends 
AbstractJdbcSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26145";)
     public void testResultSetMetaData() throws Exception {
-        // This delays make this test case less susceptible to 
https://issues.apache.org/jira/browse/IGNITE-25935
-        // Mandatory nodes was excluded from mapping: []
-        // TODO https://issues.apache.org/jira/browse/IGNITE-25935 Remove this 
delay.
-        TimeUnit.SECONDS.sleep(5);
-
         ResultSet rs = stmt.executeQuery(
                 "select p.name, o.id as orgId, p.age from PERSON p, 
ORGANIZATION o where p.orgId = o.id");
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
index 603a73c69a7..b650c4b76d8 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
@@ -60,6 +60,7 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
@@ -68,6 +69,8 @@ import org.junit.jupiter.params.provider.MethodSource;
 /**
  * Statement test.
  */
+// TODO https://issues.apache.org/jira/browse/IGNITE-26190
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26143";)
 public class ItJdbcBatchSelfTest extends AbstractJdbcSelfTest {
     /** SQL CREATE TABLE query. */
     private static final String SQL_CREATE = "CREATE TABLE Person(id INT 
PRIMARY KEY, firstName VARCHAR, lastName VARCHAR, age INT)";
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
index 5e150deed4a..99c91c6d353 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
@@ -99,7 +99,7 @@ public class ItJdbcComplexQuerySelfTest extends 
AbstractJdbcSelfTest {
     @Test
     public void testJoinWithoutAlias() throws Exception {
         ResultSet rs = stmt.executeQuery(
-                "select p.id, p.name, o.name from PUBLIC.Person p, PUBLIC.Org 
o where p.orgId = o.id");
+                "select p.id, p.name, o.name from PUBLIC.Person p, PUBLIC.Org 
o where p.orgId = o.id order by id");
 
         assertNotNull(rs);
 
@@ -109,15 +109,15 @@ public class ItJdbcComplexQuerySelfTest extends 
AbstractJdbcSelfTest {
             int id = rs.getInt(1);
 
             if (id == 1) {
-                assertEquals("John White", rs.getString("name"));
+                assertEquals("A", rs.getString("name"));
                 assertEquals("John White", rs.getString(2));
                 assertEquals("A", rs.getString(3));
             } else if (id == 2) {
-                assertEquals("Joe Black", rs.getString("name"));
+                assertEquals("A", rs.getString("name"));
                 assertEquals("Joe Black", rs.getString(2));
                 assertEquals("A", rs.getString(3));
             } else if (id == 3) {
-                assertEquals("Mike Green", rs.getString("name"));
+                assertEquals("B", rs.getString("name"));
                 assertEquals("Mike Green", rs.getString(2));
                 assertEquals("B", rs.getString(3));
             } else {
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
index f7e43563475..4959c0f8501 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.jdbc;
 
-import static java.sql.Connection.TRANSACTION_NONE;
 import static java.sql.Connection.TRANSACTION_READ_COMMITTED;
 import static java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;
 import static java.sql.Connection.TRANSACTION_REPEATABLE_READ;
@@ -138,17 +137,17 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
                 "Invalid URL format (only schema name is allowed in URL path 
parameter 'host:port[/schemaName]')");
 
         try (Connection conn = DriverManager.getConnection(URL + "/public")) {
-            assertEquals("PUBLIC", conn.getSchema(), "Invalid schema");
+            assertEquals("public", conn.getSchema(), "Invalid schema");
         }
 
         String dfltSchema = "DEFAULT";
 
         try (Connection conn = DriverManager.getConnection(URL + "/\"" + 
dfltSchema + '"')) {
-            assertEquals(dfltSchema, conn.getSchema(), "Invalid schema");
+            assertEquals("\"DEFAULT\"", conn.getSchema(), "Invalid schema");
         }
 
         try (Connection conn = DriverManager.getConnection(URL + 
"/_not_exist_schema_")) {
-            assertEquals("_NOT_EXIST_SCHEMA_", conn.getSchema(), "Invalid 
schema");
+            assertEquals("_not_exist_schema_", conn.getSchema(), "Invalid 
schema");
         }
     }
 
@@ -162,16 +161,16 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
         String dfltSchema = "DEFAULT";
 
         try (Connection conn = DriverManager.getConnection(URL + 
";schema=public")) {
-            assertEquals("PUBLIC", conn.getSchema(), "Invalid schema");
+            assertEquals("public", conn.getSchema(), "Invalid schema");
         }
 
         try (Connection conn =
                 DriverManager.getConnection(URL + ";schema=\"" + dfltSchema + 
'"')) {
-            assertEquals(dfltSchema, conn.getSchema(), "Invalid schema");
+            assertEquals("\"DEFAULT\"", conn.getSchema(), "Invalid schema");
         }
 
         try (Connection conn = DriverManager.getConnection(URL + 
";schema=_not_exist_schema_")) {
-            assertEquals("_NOT_EXIST_SCHEMA_", conn.getSchema(), "Invalid 
schema");
+            assertEquals("_not_exist_schema_", conn.getSchema(), "Invalid 
schema");
         }
     }
 
@@ -272,7 +271,7 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
 
             int[] rsConcurs = {CONCUR_READ_ONLY, ResultSet.CONCUR_UPDATABLE};
 
-            int[] rsHoldabilities = {HOLD_CURSORS_OVER_COMMIT, 
CLOSE_CURSORS_AT_COMMIT};
+            int[] rsHoldabilities = {CLOSE_CURSORS_AT_COMMIT};
 
             DatabaseMetaData meta = conn.getMetaData();
 
@@ -434,24 +433,24 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
         try (Connection conn = DriverManager.getConnection(URL)) {
             final String sqlText = "insert into test (val) values (?)";
 
+            String error = "Returning auto-generated keys is not supported.";
+
             JdbcTestUtils.assertThrowsSqlException(
-                    "Auto generated keys are not supported.",
+                    error,
                     () -> conn.prepareStatement(sqlText, RETURN_GENERATED_KEYS)
-
             );
 
-            JdbcTestUtils.assertThrowsSqlException(
-                    "Auto generated keys are not supported.",
-                    () -> conn.prepareStatement(sqlText, NO_GENERATED_KEYS)
-            );
+            try (PreparedStatement stmt = conn.prepareStatement("SELECT 1", 
NO_GENERATED_KEYS)) {
+                stmt.executeQuery().close();
+            }
 
             JdbcTestUtils.assertThrowsSqlException(
-                    "Auto generated keys are not supported.",
+                    error,
                     () -> conn.prepareStatement(sqlText, new int[]{1})
             );
 
             JdbcTestUtils.assertThrowsSqlException(
-                    "Auto generated keys are not supported.",
+                    error,
                     () -> conn.prepareStatement(sqlText, new String[]{"ID"})
             );
         }
@@ -531,7 +530,7 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
         try (Connection conn = DriverManager.getConnection(URL)) {
             // Should not be called in auto-commit mode
             JdbcTestUtils.assertThrowsSqlException(
-                    "Transaction cannot be rolled back explicitly in 
auto-commit mode.",
+                    "Transaction cannot be committed explicitly in auto-commit 
mode.",
                     conn::rollback
             );
 
@@ -579,11 +578,11 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
         try (Connection conn = DriverManager.getConnection(URL)) {
             
assertFalse(conn.getMetaData().supportsCatalogsInDataManipulation());
 
-            assertNull(conn.getCatalog());
+            assertEquals("IGNITE", conn.getCatalog());
 
             conn.setCatalog("catalog");
 
-            assertNull(conn.getCatalog());
+            assertEquals("IGNITE", conn.getCatalog());
 
             conn.close();
 
@@ -605,7 +604,7 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
             );
 
             // default level
-            assertEquals(TRANSACTION_NONE, conn.getTransactionIsolation());
+            assertEquals(TRANSACTION_SERIALIZABLE, 
conn.getTransactionIsolation());
 
             int[] levels = {TRANSACTION_READ_UNCOMMITTED, 
TRANSACTION_READ_COMMITTED,
                     TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE};
@@ -691,16 +690,12 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
             // default value
             assertEquals(conn.getMetaData().getResultSetHoldability(), 
conn.getHoldability());
 
-            assertEquals(HOLD_CURSORS_OVER_COMMIT, conn.getHoldability());
-
-            conn.setHoldability(CLOSE_CURSORS_AT_COMMIT);
-
             assertEquals(CLOSE_CURSORS_AT_COMMIT, conn.getHoldability());
 
             // Invalid constant
 
             JdbcTestUtils.assertThrowsSqlException(
-                    "Invalid result set holdability value",
+                    "Invalid result set holdability (only close cursors at 
commit option is supported)",
                     () -> conn.setHoldability(-1)
             );
 
@@ -856,7 +851,7 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
 
             // Invalid typename
             JdbcTestUtils.assertThrowsSqlException(
-                    "Type name cannot be null",
+                    "SQL-specific types are not supported.",
                     () -> conn.createArrayOf(null, null)
             );
 
@@ -875,7 +870,7 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
         try (Connection conn = DriverManager.getConnection(URL)) {
             // Invalid typename
             JdbcTestUtils.assertThrowsSqlException(
-                    "Type name cannot be null",
+                    "SQL-specific types are not supported.",
                     () -> conn.createStruct(null, null)
             );
 
@@ -900,11 +895,11 @@ public class ItJdbcConnectionSelfTest extends 
AbstractJdbcSelfTest {
 
             conn.setSchema(schema);
 
-            assertEquals(schema.toUpperCase(), conn.getSchema());
+            assertEquals("test", conn.getSchema());
 
             conn.setSchema('"' + schema + '"');
 
-            assertEquals(schema, conn.getSchema());
+            assertEquals("\"test\"", conn.getSchema());
 
             conn.close();
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
index 4ba59b5c741..c852a1e5039 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
@@ -112,6 +112,7 @@ public class ItJdbcErrorsSelfTest extends 
ItJdbcErrorsAbstractSelfTest {
      * @throws SQLException if failed.
      */
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26143";)
     public void testBatchUpdateException() throws SQLException {
 
         stmt.executeUpdate("CREATE TABLE test2 (id int primary key, val 
varchar)");
@@ -136,6 +137,7 @@ public class ItJdbcErrorsSelfTest extends 
ItJdbcErrorsAbstractSelfTest {
      * @throws SQLException if failed.
      */
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26139";)
     public void testDdlWithDisabledAutoCommit() throws SQLException {
         conn.setAutoCommit(false);
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
index b4e080fcead..54326c2f5a5 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
@@ -36,7 +36,7 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import org.apache.ignite.internal.jdbc.JdbcStatement;
+import org.apache.ignite.internal.jdbc2.JdbcStatement2;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
@@ -47,6 +47,7 @@ import org.junit.jupiter.params.provider.ValueSource;
 /**
  * Tests for queries containing multiple sql statements, separated by ";".
  */
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
 public class ItJdbcMultiStatementSelfTest extends AbstractJdbcSelfTest {
     /**
      * Setup tables.
@@ -76,6 +77,7 @@ public class ItJdbcMultiStatementSelfTest extends 
AbstractJdbcSelfTest {
         stmt.close();
 
         openCursorResources = openResources();
+
         // only connection context or 0 if already closed.
         assertTrue(openResources() <= 1, "Open cursors: " + 
openCursorResources);
         assertTrue(waitForCondition(() -> openCursors() == 0, 5_000));
@@ -624,11 +626,11 @@ public class ItJdbcMultiStatementSelfTest extends 
AbstractJdbcSelfTest {
 
         String complexQuery =
                 "INSERT INTO TEST_TX VALUES (5, ?, 'Leo'); "
-                    + "START TRANSACTION ; "
-                    + "UPDATE TEST_TX SET name = ? WHERE name = 'Nick' ;"
-                    + "INSERT INTO TEST_TX VALUES (6, ?, ?); "
-                    + "DELETE FROM TEST_TX WHERE age < ?; "
-                    + "COMMIT;";
+                        + "START TRANSACTION ; "
+                        + "UPDATE TEST_TX SET name = ? WHERE name = 'Nick' ;"
+                        + "INSERT INTO TEST_TX VALUES (6, ?, ?); "
+                        + "DELETE FROM TEST_TX WHERE age < ?; "
+                        + "COMMIT;";
 
         try (PreparedStatement p = conn.prepareStatement(complexQuery)) {
             p.setInt(1, leoAge);
@@ -659,8 +661,8 @@ public class ItJdbcMultiStatementSelfTest extends 
AbstractJdbcSelfTest {
 
     @Test
     public void testTimeout() throws SQLException {
-        JdbcStatement igniteStmt = (JdbcStatement) stmt;
-        igniteStmt.timeout(500);
+        JdbcStatement2 igniteStmt = stmt.unwrap(JdbcStatement2.class);
+        igniteStmt.setQueryTimeout(1);
 
         int attempts = 10;
 
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultipleConnectionsTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultipleConnectionsTest.java
index 197246f37a7..2c6995bda8a 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultipleConnectionsTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultipleConnectionsTest.java
@@ -27,11 +27,13 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
  * Multiple JDBC connections test.
  */
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26617";)
 public class ItJdbcMultipleConnectionsTest extends AbstractJdbcSelfTest {
     private static final String URL1 = "jdbc:ignite:thin://127.0.0.1:10800";
     private static final String URL2 = "jdbc:ignite:thin://127.0.0.1:10801";
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcQueryMetricsTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcQueryMetricsTest.java
index 16b8b250893..eca7adc20ae 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcQueryMetricsTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcQueryMetricsTest.java
@@ -34,12 +34,13 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
-import org.apache.ignite.internal.jdbc.JdbcStatement;
+import org.apache.ignite.internal.jdbc2.JdbcStatement2;
 import org.apache.ignite.internal.metrics.LongMetric;
 import org.apache.ignite.internal.metrics.MetricSet;
 import org.apache.ignite.internal.sql.metrics.SqlQueryMetricSource;
 import org.awaitility.Awaitility;
 import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -57,6 +58,7 @@ public class ItJdbcQueryMetricsTest extends 
AbstractJdbcSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testScriptErrors() throws SQLException {
         try (var stmt = conn.prepareStatement("SELECT 1; SELECT 1/?;")) {
             stmt.setInt(1, 0);
@@ -91,6 +93,7 @@ public class ItJdbcQueryMetricsTest extends 
AbstractJdbcSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testScriptCancellation() throws SQLException {
         try (var stmt = conn.prepareStatement("SELECT 1; SELECT 1/?;")) {
             stmt.setInt(1, 0);
@@ -123,6 +126,7 @@ public class ItJdbcQueryMetricsTest extends 
AbstractJdbcSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testScriptTimeout() {
         Callable<Map<String, Long>> runScript = () -> {
 
@@ -135,11 +139,10 @@ public class ItJdbcQueryMetricsTest extends 
AbstractJdbcSelfTest {
                     success0, failed0, cancelled0, timedout0);
 
             SQLException err;
-            int timeoutMillis = 200;
 
             try (var stmt = conn.createStatement()) {
-                JdbcStatement jdbc = stmt.unwrap(JdbcStatement.class);
-                jdbc.timeout(timeoutMillis);
+                JdbcStatement2 jdbc = stmt.unwrap(JdbcStatement2.class);
+                jdbc.setQueryTimeout(1);
 
                 // Start a script
                 err = assertThrows(SQLException.class, () -> {
@@ -155,7 +158,7 @@ public class ItJdbcQueryMetricsTest extends 
AbstractJdbcSelfTest {
                     assertTrue(stmt.getMoreResults());
                     try (var rs = stmt.getResultSet()) {
                         // Introduce a delay to trigger a timeout.
-                        TimeUnit.MILLISECONDS.sleep(timeoutMillis * 2);
+                        TimeUnit.SECONDS.sleep(2);
 
                         // Triggers the timeout
                         while (rs.next()) {
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSchemaTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSchemaTest.java
index 71ea66e1bb4..970932e4d3d 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSchemaTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSchemaTest.java
@@ -26,6 +26,7 @@ import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -147,6 +148,7 @@ public class ItJdbcSchemaTest extends AbstractJdbcSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26143";)
     public void useSchemaWithBatch() throws SQLException {
         try (Statement stmt = conn.createStatement()) {
             stmt.executeUpdate("CREATE SCHEMA schema1");
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
index 15d9f37d5d2..9048394ba49 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
@@ -32,11 +32,13 @@ import java.sql.Statement;
 import java.util.concurrent.CompletableFuture;
 import org.apache.ignite.internal.sql.engine.QueryCancelledException;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
  * Statement cancel test.
  */
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26139";)
 @SuppressWarnings({"ThrowableNotThrown", 
"JDBCResourceOpenedButNotSafelyClosed"})
 public class ItJdbcStatementCancelSelfTest extends AbstractJdbcSelfTest {
     @AfterEach
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
index 8a6b13d9ad7..a40fa0aec41 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
@@ -37,13 +37,13 @@ import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Statement;
 import java.util.UUID;
-import java.util.concurrent.ThreadLocalRandom;
-import org.apache.ignite.internal.jdbc.JdbcStatement;
+import org.apache.ignite.internal.jdbc2.JdbcStatement2;
 import org.apache.ignite.sql.ColumnType;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -218,7 +218,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     @Test
     public void testExecuteWrongFetchCount() throws Exception {
         try (Statement statement = conn.createStatement()) {
-            assertThrowsSqlException("Fetch size must be greater than zero.", 
() -> statement.setFetchSize(-2));
+            assertThrowsSqlException("Invalid fetch size.", () -> 
statement.setFetchSize(-2));
         }
     }
 
@@ -380,6 +380,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testExecuteQueryMultipleOnlyResultSets() throws Exception {
         assertTrue(conn.getMetaData().supportsMultipleResultSets());
 
@@ -413,6 +414,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testExecuteQueryMultipleOnlyDml() throws Exception {
         Statement stmt0 = conn.createStatement();
 
@@ -447,6 +449,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testExecuteQueryMultipleMixed() throws Exception {
         int stmtCnt = 10;
 
@@ -560,7 +563,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
 
         assertThrowsSqlException(
                 SQLFeatureNotSupportedException.class,
-                "Field size limitation is not supported",
+                "Field size limit is not supported.",
                 () -> stmt.setMaxFieldSize(100));
 
         assertEquals(0, stmt.getMaxFieldSize());
@@ -674,6 +677,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testGetMoreResults() throws Exception {
         assertFalse(stmt.getMoreResults());
 
@@ -695,8 +699,8 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     @Test
     public void testGetMoreResultsKeepCurrent() throws Exception {
         assertFalse(stmt.getMoreResults(Statement.CLOSE_CURRENT_RESULT));
-        assertFalse(stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
-        assertFalse(stmt.getMoreResults(Statement.CLOSE_ALL_RESULTS));
+        assertThrows(SQLFeatureNotSupportedException.class, () -> 
stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
+        assertThrows(SQLFeatureNotSupportedException.class, () -> 
stmt.getMoreResults(Statement.CLOSE_ALL_RESULTS));
 
         stmt.execute("select 1; ");
 
@@ -712,8 +716,8 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     @Test
     public void testGetMoreResultsCloseAll() throws Exception {
         assertFalse(stmt.getMoreResults(Statement.CLOSE_CURRENT_RESULT));
-        assertFalse(stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
-        assertFalse(stmt.getMoreResults(Statement.CLOSE_ALL_RESULTS));
+        assertThrows(SQLFeatureNotSupportedException.class, () -> 
stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
+        assertThrows(SQLFeatureNotSupportedException.class, () -> 
stmt.getMoreResults(Statement.CLOSE_ALL_RESULTS));
 
         stmt.execute("select 1; ");
 
@@ -725,6 +729,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26143";)
     public void testBatchEmpty() throws Exception {
         assertTrue(conn.getMetaData().supportsBatchUpdates());
 
@@ -782,6 +787,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testStatementTypeMismatchSelectForCachedQuery() throws 
Exception {
         // Put query to cache.
         stmt.executeQuery("select 1;");
@@ -814,6 +820,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
     }
 
     @Test
+    @Disabled("https://issues.apache.org/jira/browse/IGNITE-26142";)
     public void testOpenCursorsPureQuery() throws Exception {
         stmt.execute("SELECT 1; SELECT 2;");
         ResultSet rs = stmt.getResultSet();
@@ -843,12 +850,12 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
 
     @Test
     public void testTimeout() throws Exception {
-        JdbcStatement igniteStmt = stmt.unwrap(JdbcStatement.class);
+        JdbcStatement2 igniteStmt = stmt.unwrap(JdbcStatement2.class);
 
         // No timeout
 
         {
-            igniteStmt.timeout(0);
+            igniteStmt.setQueryTimeout(0);
 
             try (ResultSet rs = igniteStmt.executeQuery("SELECT * FROM 
TABLE(SYSTEM_RANGE(1, 100))")) {
                 while (rs.next()) {
@@ -860,8 +867,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
         // Rise timeout
 
         {
-            int timeoutMillis = ThreadLocalRandom.current().nextInt(10, 200);
-            igniteStmt.timeout(timeoutMillis);
+            igniteStmt.setQueryTimeout(1);
 
             // Catch both execution and planning timeouts.
             assertThrowsSqlException(SQLException.class,
@@ -877,7 +883,7 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
         {
             // Disable timeout
 
-            igniteStmt.timeout(0);
+            igniteStmt.setQueryTimeout(0);
 
             try (ResultSet rs = igniteStmt.executeQuery("SELECT * FROM 
TABLE(SYSTEM_RANGE(1, 100))")) {
                 while (rs.next()) {
@@ -889,18 +895,18 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
 
     @Test
     public void testSetTimeoutValues() throws SQLException {
-        JdbcStatement igniteStmt = stmt.unwrap(JdbcStatement.class);
+        JdbcStatement2 igniteStmt = stmt.unwrap(JdbcStatement2.class);
 
-        igniteStmt.timeout(1_234_000);
+        igniteStmt.setQueryTimeout(1_234);
         assertEquals(1_234, igniteStmt.getQueryTimeout());
 
         igniteStmt.setQueryTimeout(Integer.MAX_VALUE);
         assertEquals(Integer.MAX_VALUE, igniteStmt.getQueryTimeout());
 
-        igniteStmt.timeout(Integer.MAX_VALUE * 1000L);
+        igniteStmt.setQueryTimeout(Integer.MAX_VALUE);
         assertEquals(Integer.MAX_VALUE, igniteStmt.getQueryTimeout());
 
-        SQLException err = assertThrows(SQLException.class, () -> 
igniteStmt.timeout(-1));
+        SQLException err = assertThrows(SQLException.class, () -> 
igniteStmt.setQueryTimeout(-1));
         assertThat(err.getMessage(), containsString("Invalid timeout value"));
     }
 }
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java
index ed4fa64a9da..88a491f2450 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java
@@ -36,6 +36,7 @@ import 
org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.apache.ignite.internal.tx.TxManager;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
@@ -43,6 +44,7 @@ import org.junit.jupiter.params.provider.CsvSource;
 /**
  * Verifies that SQL DML statements can use an explicit transaction using the 
jdbc API.
  */
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26139";)
 public class ItJdbcTransactionTest extends AbstractJdbcSelfTest {
     /** Insert query. */
     private static final String SQL_INSERT = "insert into TEST values (%d, 
'%s')";
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
index e5d07d9691c..257601dfb85 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
@@ -52,7 +52,7 @@ public class JdbcClientQueryEventHandler implements 
JdbcQueryEventHandler {
      *
      * @param client TcpIgniteClient.
      */
-    JdbcClientQueryEventHandler(TcpIgniteClient client) {
+    public JdbcClientQueryEventHandler(TcpIgniteClient client) {
         this.client = client;
     }
 
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
index 262f149d721..d58df2df21d 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
@@ -18,8 +18,8 @@
 package org.apache.ignite.internal.jdbc;
 
 import static java.sql.Connection.TRANSACTION_SERIALIZABLE;
+import static java.sql.ResultSet.CLOSE_CURSORS_AT_COMMIT;
 import static java.sql.ResultSet.CONCUR_READ_ONLY;
-import static java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT;
 import static java.sql.ResultSet.TYPE_FORWARD_ONLY;
 import static java.sql.RowIdLifetime.ROWID_UNSUPPORTED;
 import static java.util.Arrays.asList;
@@ -1556,13 +1556,13 @@ public class JdbcDatabaseMetadata implements 
DatabaseMetaData {
     /** {@inheritDoc} */
     @Override
     public boolean supportsResultSetHoldability(int holdability) {
-        return holdability == HOLD_CURSORS_OVER_COMMIT;
+        return holdability == CLOSE_CURSORS_AT_COMMIT;
     }
 
     /** {@inheritDoc} */
     @Override
     public int getResultSetHoldability() {
-        return HOLD_CURSORS_OVER_COMMIT;
+        return CLOSE_CURSORS_AT_COMMIT;
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection2.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection2.java
index 1033f4fb0a7..63046055fc3 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection2.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection2.java
@@ -46,6 +46,7 @@ import java.util.Objects;
 import java.util.Properties;
 import java.util.concurrent.Executor;
 import java.util.concurrent.locks.ReentrantLock;
+import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.internal.jdbc.ConnectionProperties;
 import org.apache.ignite.internal.jdbc.JdbcDatabaseMetadata;
 import org.apache.ignite.internal.jdbc.proto.JdbcQueryEventHandler;
@@ -100,6 +101,8 @@ public class JdbcConnection2 implements Connection {
     private static final String TYPES_MAPPING_IS_NOT_SUPPORTED =
             "Types mapping is not supported.";
 
+    private final IgniteClient igniteClient;
+
     private final IgniteSql igniteSql;
 
     private final ReentrantLock lock = new ReentrantLock();
@@ -130,11 +133,12 @@ public class JdbcConnection2 implements Connection {
      * @param props Connection properties.
      */
     public JdbcConnection2(
-            IgniteSql client,
+            IgniteClient client,
             JdbcQueryEventHandler eventHandler,
             ConnectionProperties props
     ) {
-        igniteSql = client;
+        igniteClient = client;
+        igniteSql = client.sql();
         autoCommit = true;
         networkTimeoutMillis = props.getConnectionTimeout();
         txIsolation = TRANSACTION_SERIALIZABLE;
@@ -192,7 +196,7 @@ public class JdbcConnection2 implements Connection {
             throw new 
SQLFeatureNotSupportedException(RETURNING_AUTO_GENERATED_KEYS_IS_NOT_SUPPORTED);
         }
 
-        throw new UnsupportedOperationException();
+        return prepareStatement(sql);
     }
 
     /** {@inheritDoc} */
@@ -208,13 +212,13 @@ public class JdbcConnection2 implements Connection {
             int resSetHoldability) throws SQLException {
         ensureNotClosed();
 
-        checkCursorOptions(resSetType, resSetConcurrency, resSetHoldability);
-
         if (sql == null) {
             throw new SQLException("SQL string cannot be null.");
         }
 
-        throw new UnsupportedOperationException();
+        checkCursorOptions(resSetType, resSetConcurrency, resSetHoldability);
+
+        return new JdbcPreparedStatement2(this, igniteSql, schemaName, 
resSetHoldability, sql);
     }
 
     /** {@inheritDoc} */
@@ -305,8 +309,6 @@ public class JdbcConnection2 implements Connection {
             return;
         }
 
-        closed = true;
-
         List<Exception> suppressedExceptions = null;
 
         lock.lock();
@@ -314,6 +316,7 @@ public class JdbcConnection2 implements Connection {
             if (closed) {
                 return;
             }
+            closed = true;
 
             for (Statement statement : statements) {
                 try {
@@ -330,13 +333,25 @@ public class JdbcConnection2 implements Connection {
             lock.unlock();
         }
 
+        try {
+            igniteClient.close();
+        } catch (Exception e) {
+            throw connectionCloseException(e, suppressedExceptions);
+        }
+
+        if (suppressedExceptions != null) {
+            throw connectionCloseException(null, suppressedExceptions);
+        }
+    }
+
+    private static SQLException connectionCloseException(@Nullable Exception 
e, @Nullable List<Exception> suppressedExceptions) {
+        SQLException err = new SQLException("Exception occurred while closing 
a connection.", e);
         if (suppressedExceptions != null) {
-            SQLException err = new SQLException("Exception occurred while 
closing a connection.");
             for (Exception suppressed : suppressedExceptions) {
                 err.addSuppressed(suppressed);
             }
-            throw err;
         }
+        return err;
     }
 
     /**
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
index 2e82c529869..ad6d4b1d39a 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
@@ -110,7 +110,7 @@ public class JdbcResultSet implements ResultSet {
     /**
      * Constructor.
      */
-    public JdbcResultSet(
+    JdbcResultSet(
             org.apache.ignite.sql.ResultSet<SqlRow> rs,
             Statement statement,
             Supplier<ZoneId> zoneIdSupplier,
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement2.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement2.java
index f1612305525..2e5d660da89 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement2.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement2.java
@@ -77,7 +77,9 @@ public class JdbcStatement2 implements Statement {
 
     private static final String STATEMENT_IS_CLOSED =
             "Statement is closed.";
-    public static final String ONLY_FORWARD_DIRECTION_IS_SUPPORTED = "Only 
forward direction is supported.";
+
+    private static final String ONLY_FORWARD_DIRECTION_IS_SUPPORTED =
+            "Only forward direction is supported.";
 
     private final IgniteSql igniteSql;
 
@@ -152,6 +154,7 @@ public class JdbcStatement2 implements Statement {
             throw new UnsupportedOperationException("Explicit transactions are 
not supported yet.");
         }
 
+        // TODO https://issues.apache.org/jira/browse/IGNITE-26142 
multistatement.
         if (sql.indexOf(';') == -1 || sql.indexOf(';') == sql.length() - 1) {
             queryModifiers.remove(QueryModifier.ALLOW_MULTISTATEMENT);
         }
@@ -416,7 +419,7 @@ public class JdbcStatement2 implements Statement {
     public @Nullable ResultSet getResultSet() throws SQLException {
         ensureNotClosed();
 
-        return resultSet;
+        return isQuery() ? resultSet : null;
     }
 
     /** {@inheritDoc} */
@@ -445,6 +448,14 @@ public class JdbcStatement2 implements Statement {
 
         switch (current) {
             case CLOSE_CURRENT_RESULT:
+
+                JdbcResultSet currentRs = resultSet;
+                if (currentRs == null) {
+                    return false;
+                }
+
+                resultSet = null;
+                currentRs.close();
                 return false;
 
             case CLOSE_ALL_RESULTS:
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java 
b/modules/jdbc/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java
index ef605a95d89..80f7cb0d8aa 100644
--- a/modules/jdbc/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java
+++ b/modules/jdbc/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.jdbc;
 
 import static 
org.apache.ignite.internal.jdbc.ConnectionPropertiesImpl.URL_PREFIX;
+import static 
org.apache.ignite.internal.jdbc.proto.SqlStateCode.CLIENT_CONNECTION_FAILED;
 
 import com.google.auto.service.AutoService;
 import java.sql.Connection;
@@ -26,12 +27,24 @@ import java.sql.DriverManager;
 import java.sql.DriverPropertyInfo;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
+import java.util.Arrays;
 import java.util.Properties;
 import java.util.logging.Logger;
+import org.apache.ignite.client.BasicAuthenticator;
+import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.client.IgniteClientAuthenticator;
+import org.apache.ignite.client.IgniteClientConfiguration;
+import org.apache.ignite.client.SslConfiguration;
+import org.apache.ignite.internal.client.HostAndPort;
+import org.apache.ignite.internal.client.IgniteClientConfigurationImpl;
+import org.apache.ignite.internal.client.TcpIgniteClient;
 import org.apache.ignite.internal.client.proto.ProtocolVersion;
-import org.apache.ignite.internal.hlc.HybridTimestampTracker;
+import org.apache.ignite.internal.jdbc.ConnectionProperties;
 import org.apache.ignite.internal.jdbc.ConnectionPropertiesImpl;
-import org.apache.ignite.internal.jdbc.JdbcConnection;
+import org.apache.ignite.internal.jdbc.JdbcClientQueryEventHandler;
+import org.apache.ignite.internal.jdbc.proto.JdbcQueryEventHandler;
+import org.apache.ignite.internal.jdbc2.JdbcConnection2;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * JDBC driver implementation for Apache Ignite 3.x.
@@ -162,15 +175,6 @@ public class IgniteJdbcDriver implements Driver {
     /** Minor version. */
     private static final int MINOR_VER = ProtocolVersion.LATEST_VER.minor();
 
-    /**
-     * Tracker of the latest time observed by client.
-     *
-     * <p>All connections created by this driver use the same tracker.
-     * This is done so that read-only transactions from different connections 
can observe changes made in other connections,
-     * which in turn ensures visibility of changes when working through the 
jdbc connection pool.
-     */
-    private final HybridTimestampTracker observableTimeTracker = 
HybridTimestampTracker.atomicTracker(null);
-
     /** {@inheritDoc} */
     @Override
     public Connection connect(String url, Properties props) throws 
SQLException {
@@ -179,10 +183,18 @@ public class IgniteJdbcDriver implements Driver {
         }
 
         ConnectionPropertiesImpl connProps = new ConnectionPropertiesImpl();
-
         connProps.init(url, props);
 
-        return new JdbcConnection(connProps, observableTimeTracker);
+        TcpIgniteClient client;
+        try {
+            client = createIgniteClient(connProps);
+        } catch (Exception e) {
+            throw new SQLException("Failed to connect to server", 
CLIENT_CONNECTION_FAILED, e);
+        }
+
+        JdbcQueryEventHandler eventHandler = new 
JdbcClientQueryEventHandler(client);
+
+        return new JdbcConnection2(client, eventHandler, connProps);
     }
 
     /** {@inheritDoc} */
@@ -253,4 +265,49 @@ public class IgniteJdbcDriver implements Driver {
     private static boolean isRegistered() {
         return instance != null;
     }
+
+    private static TcpIgniteClient createIgniteClient(ConnectionProperties 
connProps) {
+        String[] addresses = Arrays.stream(connProps.getAddresses())
+                .map(HostAndPort::toString)
+                .toArray(String[]::new);
+
+        SslConfiguration sslConfiguration = extractSslConfiguration(connProps);
+        IgniteClientAuthenticator authenticator = 
extractAuthenticationConfiguration(connProps);
+
+        return (TcpIgniteClient) IgniteClient.builder()
+                .addresses(addresses)
+                .authenticator(authenticator)
+                .ssl(sslConfiguration)
+                
.operationTimeout(IgniteClientConfiguration.DFLT_OPERATION_TIMEOUT)
+                
.backgroundReconnectInterval(IgniteClientConfigurationImpl.DFLT_BACKGROUND_RECONNECT_INTERVAL)
+                .build();
+    }
+
+    private static @Nullable SslConfiguration 
extractSslConfiguration(ConnectionProperties connProps) {
+        if (connProps.isSslEnabled()) {
+            return SslConfiguration.builder()
+                    .enabled(true)
+                    .trustStorePath(connProps.getTrustStorePath())
+                    .trustStorePassword(connProps.getTrustStorePassword())
+                    .ciphers(connProps.getCiphers())
+                    .keyStorePath(connProps.getKeyStorePath())
+                    .keyStorePassword(connProps.getKeyStorePassword())
+                    .build();
+        } else {
+            return null;
+        }
+    }
+
+    private static @Nullable IgniteClientAuthenticator 
extractAuthenticationConfiguration(ConnectionProperties connProps) {
+        String username = connProps.getUsername();
+        String password = connProps.getPassword();
+        if (username != null && password != null) {
+            return BasicAuthenticator.builder()
+                    .username(username)
+                    .password(password)
+                    .build();
+        } else {
+            return null;
+        }
+    }
 }
diff --git 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadataSelfTest.java
 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadataSelfTest.java
index e9be3712d68..8713a69fd53 100644
--- 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadataSelfTest.java
+++ 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadataSelfTest.java
@@ -243,8 +243,8 @@ public class JdbcDatabaseMetadataSelfTest extends 
BaseIgniteAbstractTest {
         
assertFalse(metaData.insertsAreDetected(ResultSet.TYPE_SCROLL_INSENSITIVE));
 
         // Holdability, JDBC and SQL state meta
-        
assertTrue(metaData.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT));
-        assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, 
metaData.getResultSetHoldability());
+        
assertTrue(metaData.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT));
+        assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, 
metaData.getResultSetHoldability());
         assertTrue(metaData.getDatabaseMajorVersion() >= 0);
         assertTrue(metaData.getDatabaseMinorVersion() >= 0);
         assertTrue(metaData.getJDBCMajorVersion() >= 0);
diff --git 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetBaseSelfTest.java
 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetBaseSelfTest.java
index 061e917fcf7..ec0b41ed9b2 100644
--- 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetBaseSelfTest.java
+++ 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetBaseSelfTest.java
@@ -3730,7 +3730,9 @@ public abstract class JdbcResultSetBaseSelfTest extends 
BaseIgniteAbstractTest {
                 new ColumnDefinition("column", ColumnType.BOOLEAN, 0, 0, 
false),
                 new ColumnDefinition("Column N", ColumnType.BOOLEAN, 0, 0, 
false),
                 new ColumnDefinition(" ", ColumnType.BOOLEAN, 0, 0, false),
-                new ColumnDefinition(":)", ColumnType.BOOLEAN, 0, 0, false)
+                new ColumnDefinition(":)", ColumnType.BOOLEAN, 0, 0, false),
+                new ColumnDefinition("C1", ColumnType.BOOLEAN, 0, 0, false),
+                new ColumnDefinition("C1", ColumnType.BOOLEAN, 0, 0, false)
         );
 
         List<List<Object>> rows = IntStream.range(0, columns.size())
@@ -3743,6 +3745,7 @@ public abstract class JdbcResultSetBaseSelfTest extends 
BaseIgniteAbstractTest {
             assertEquals(3, rs.findColumn("\"Column N\""));
             assertEquals(4, rs.findColumn("\" \""));
             assertEquals(5, rs.findColumn("\":)\""));
+            assertEquals(7, rs.findColumn("C1"));
 
             expectSqlException(() -> rs.findColumn(" COLUMN "), "Column not 
found:  COLUMN ");
             expectSqlException(() -> rs.findColumn(" column "), "Column not 
found:  column ");
diff --git 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnection2SelfTest.java
 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnection2SelfTest.java
index 5796cb03a9f..abb622040a0 100644
--- 
a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnection2SelfTest.java
+++ 
b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnection2SelfTest.java
@@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.when;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -36,6 +37,7 @@ import java.sql.Statement;
 import java.util.Map;
 import java.util.Properties;
 import java.util.function.Consumer;
+import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.internal.jdbc.ConnectionProperties;
 import org.apache.ignite.internal.jdbc.ConnectionPropertiesImpl;
 import org.apache.ignite.internal.jdbc.proto.JdbcQueryEventHandler;
@@ -453,8 +455,11 @@ public class JdbcConnection2SelfTest extends 
BaseIgniteAbstractTest {
     }
 
     private static Connection createConnection(Consumer<ConnectionProperties> 
setup) throws SQLException {
+        IgniteClient ignite = Mockito.mock(IgniteClient.class);
         IgniteSql igniteSql = Mockito.mock(IgniteSql.class);
 
+        when(ignite.sql()).thenReturn(igniteSql);
+
         ConnectionProperties properties = new ConnectionPropertiesImpl();
         properties.setUrl("jdbc:ignite:thin://127.0.0.1:10800/");
 
@@ -462,7 +467,7 @@ public class JdbcConnection2SelfTest extends 
BaseIgniteAbstractTest {
 
         JdbcQueryEventHandler eventHandler = 
Mockito.mock(JdbcQueryEventHandler.class);
 
-        return new JdbcConnection2(igniteSql, eventHandler, properties);
+        return new JdbcConnection2(ignite, eventHandler, properties);
     }
 
     private static void expectClosed(Executable method) {
diff --git 
a/modules/spring/spring-data-ignite/src/test/java/org/apache/ignite/data/SpringDataJdbcTest.java
 
b/modules/spring/spring-data-ignite/src/test/java/org/apache/ignite/data/SpringDataJdbcTest.java
index 33ae5acec66..f4e122c1050 100644
--- 
a/modules/spring/spring-data-ignite/src/test/java/org/apache/ignite/data/SpringDataJdbcTest.java
+++ 
b/modules/spring/spring-data-ignite/src/test/java/org/apache/ignite/data/SpringDataJdbcTest.java
@@ -40,6 +40,7 @@ import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -70,6 +71,7 @@ import org.springframework.data.util.Streamable;
  */
 @SpringBootTest(classes = TestApplication.class)
 @ExtendWith(WorkDirectoryExtension.class)
+@Disabled("https://issues.apache.org/jira/browse/IGNITE-26139";)
 public class SpringDataJdbcTest extends BaseIgniteAbstractTest {
 
     @WorkDirectory

Reply via email to