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