You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by mp...@apache.org on 2025/01/13 12:47:46 UTC
(ignite-3) branch IGNITE-24179 created (now 5c59c12afd)
This is an automated email from the ASF dual-hosted git repository.
mpochatkin pushed a change to branch IGNITE-24179
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
at 5c59c12afd IGNITE-24179 Fix SQL command exception handler providing
This branch includes the following new commits:
new 5c59c12afd IGNITE-24179 Fix SQL command exception handler providing
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(ignite-3) 01/01: IGNITE-24179 Fix SQL command exception handler providing
Posted by mp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mpochatkin pushed a commit to branch IGNITE-24179
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 5c59c12afdb0f5d022dad629f3abfcb9213700a3
Author: Mikhail Pochatkin <m....@gmail.com>
AuthorDate: Mon Jan 13 15:47:29 2025 +0300
IGNITE-24179 Fix SQL command exception handler providing
---
.../internal/cli/commands/sql/ItSqlCommandTest.java | 21 +++++++++++++++++++++
.../cli/commands/sql/ItSqlReplCommandTest.java | 21 +++++++++++++++++++++
.../internal/cli/commands/sql/SqlCommand.java | 3 ++-
.../internal/cli/commands/sql/SqlReplCommand.java | 3 ++-
.../core/exception/handler/SqlExceptionHandler.java | 4 +++-
5 files changed, 49 insertions(+), 3 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 83b6d1cd92..47a0087269 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
@@ -133,4 +133,25 @@ class ItSqlCommandTest extends CliSqlCommandTestBase {
this::assertErrOutputIsEmpty
);
}
+
+ @Test
+ void exceptionHandler() {
+ execute("sql", "SELECT 1/0;", "--jdbc-url", JDBC_URL);
+
+ assertAll(
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("SQL query execution error"),
+ () -> assertErrOutputContains("Division by zero"),
+ () -> assertErrOutputDoesNotContain("Unknown error")
+ );
+
+ execute("sql", "SELECT * FROM NOTEXISTEDTABLE;", "--jdbc-url", JDBC_URL);
+
+ assertAll(
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("SQL query execution error"),
+ () -> assertErrOutputContains("Object 'NOTEXISTEDTABLE' not found"),
+ () -> assertErrOutputDoesNotContain("Unknown error")
+ );
+ }
}
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 ce4f938c51..e4ebcf03fa 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
@@ -97,6 +97,27 @@ class ItSqlReplCommandTest extends CliIntegrationTest {
);
}
+ @Test
+ void exceptionHandler() {
+ execute("SELECT 1/0;", "--jdbc-url", JDBC_URL);
+
+ assertAll(
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("SQL query execution error"),
+ () -> assertErrOutputContains("Division by zero"),
+ () -> assertErrOutputDoesNotContain("Unknown error")
+ );
+
+ execute("SELECT * FROM NOTEXISTEDTABLE;", "--jdbc-url", JDBC_URL);
+
+ assertAll(
+ this::assertOutputIsEmpty,
+ () -> assertErrOutputContains("SQL query execution error"),
+ () -> assertErrOutputContains("Object 'NOTEXISTEDTABLE' not found"),
+ () -> assertErrOutputDoesNotContain("Unknown error")
+ );
+ }
+
@Bean
@Replaces(ReplExecutorProvider.class)
public ReplExecutorProvider replExecutorProvider() {
diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
index a730b10109..0c23597b4d 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
@@ -84,11 +84,12 @@ public class SqlCommand extends BaseCommand implements Callable<Integer> {
String executeCommand = execOptions.file != null ? extract(execOptions.file) : execOptions.command;
return runPipeline(CallExecutionPipeline.builder(new SqlQueryCall(sqlManager))
.inputProvider(() -> new StringCallInput(executeCommand))
+ .exceptionHandler(SqlExceptionHandler.INSTANCE)
.decorator(new SqlQueryResultDecorator(plain))
);
} catch (SQLException e) {
ExceptionWriter exceptionWriter = ExceptionWriter.fromPrintWriter(spec.commandLine().getErr());
- return new SqlExceptionHandler().handle(exceptionWriter, e);
+ return SqlExceptionHandler.INSTANCE.handle(exceptionWriter, e);
}
}
}
diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
index d0de3b5814..d15ee44cd8 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
@@ -155,7 +155,7 @@ public class SqlReplCommand extends BaseCommand implements Runnable {
new ClusterManagementApi(clientFactory.getClient(url)).clusterState();
}
- new SqlExceptionHandler().handle(exceptionWriter, e);
+ SqlExceptionHandler.INSTANCE.handle(exceptionWriter, e);
} catch (ApiException apiE) {
new ClusterNotInitializedExceptionHandler("Failed to start sql repl mode", "cluster init")
.handle(exceptionWriter, new IgniteCliApiException(apiE, url));
@@ -218,6 +218,7 @@ public class SqlReplCommand extends BaseCommand implements Runnable {
.errOutput(spec.commandLine().getErr())
.decorator(new SqlQueryResultDecorator(plain))
.verbose(verbose)
+ .exceptionHandler(SqlExceptionHandler.INSTANCE)
.build();
}
diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
index a3cba0b656..eef8ff728f 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
@@ -42,6 +42,8 @@ import org.apache.ignite.lang.IgniteException;
* Exception handler for {@link SQLException}.
*/
public class SqlExceptionHandler implements ExceptionHandler<SQLException> {
+ public static final SqlExceptionHandler INSTANCE = new SqlExceptionHandler();
+
private static final IgniteLogger LOG = Loggers.forClass(SqlExceptionHandler.class);
public static final String PARSING_ERROR_MESSAGE = "SQL query parsing error";
@@ -57,7 +59,7 @@ public class SqlExceptionHandler implements ExceptionHandler<SQLException> {
private final Map<Integer, Function<IgniteException, ErrorComponentBuilder>> sqlExceptionMappers = new HashMap<>();
/** Default constructor. */
- public SqlExceptionHandler() {
+ private SqlExceptionHandler() {
sqlExceptionMappers.put(Client.CONNECTION_ERR, SqlExceptionHandler::connectionErrUiComponent);
sqlExceptionMappers.put(Sql.STMT_PARSE_ERR, SqlExceptionHandler::sqlParseErrUiComponent);
}