You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pp...@apache.org on 2022/09/26 14:22:36 UTC

[ignite-3] branch main updated: IGNITE-17687 Get rid of using deprecated exception constructors in the sql-engine module (#1114)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 16c407504e IGNITE-17687 Get rid of using deprecated exception constructors in the sql-engine module (#1114)
16c407504e is described below

commit 16c407504e49029b7fa5a1d18043d6d2dc0a8fe1
Author: Pavel Pereslegin <xx...@gmail.com>
AuthorDate: Mon Sep 26 17:22:31 2022 +0300

    IGNITE-17687 Get rid of using deprecated exception constructors in the sql-engine module (#1114)
---
 .../java/org/apache/ignite/lang/ErrorGroups.java   | 71 +++++++++++++++++++++-
 .../ignite/internal/sql/api/SessionImpl.java       | 12 ++--
 .../ignite/internal/sql/engine/QueryCancel.java    |  5 +-
 .../sql/engine/QueryCancelledException.java        |  4 +-
 .../internal/sql/engine/SqlQueryProcessor.java     | 14 +++--
 .../sql/engine/exec/ExchangeServiceImpl.java       |  5 +-
 .../engine/exec/ExecutionCancelledException.java   |  8 +++
 .../internal/sql/engine/exec/ExecutionContext.java |  5 +-
 .../sql/engine/exec/ExecutionServiceImpl.java      | 16 +++--
 .../sql/engine/exec/QueryValidationException.java  |  6 +-
 .../sql/engine/exec/ddl/DdlCommandHandler.java     |  8 ++-
 .../internal/sql/engine/exec/rel/AbstractNode.java |  3 +-
 .../sql/engine/exec/rel/HashAggregateNode.java     |  3 +-
 .../ignite/internal/sql/engine/exec/rel/Inbox.java |  5 +-
 .../internal/sql/engine/exec/rel/RootNode.java     |  6 +-
 .../internal/sql/engine/externalize/RelJson.java   |  8 ++-
 .../sql/engine/externalize/RelJsonReader.java      |  6 +-
 .../sql/engine/externalize/RelJsonWriter.java      |  6 +-
 .../sql/engine/message/MessageServiceImpl.java     |  7 ++-
 .../internal/sql/engine/prepare/IgnitePlanner.java |  4 +-
 .../sql/engine/prepare/PrepareServiceImpl.java     |  6 +-
 .../internal/sql/engine/prepare/QueryTemplate.java |  5 +-
 .../prepare/ddl/DdlSqlToCommandConverter.java      | 20 +++---
 .../sql/engine/schema/SqlSchemaManagerImpl.java    | 10 ++-
 .../ignite/internal/sql/engine/util/Commons.java   |  4 +-
 .../sql/engine/exec/ExecutionServiceImplTest.java  |  5 +-
 26 files changed, 189 insertions(+), 63 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/lang/ErrorGroups.java b/modules/core/src/main/java/org/apache/ignite/lang/ErrorGroups.java
index 0fb2f6d56f..2e582e1532 100755
--- a/modules/core/src/main/java/org/apache/ignite/lang/ErrorGroups.java
+++ b/modules/core/src/main/java/org/apache/ignite/lang/ErrorGroups.java
@@ -118,8 +118,77 @@ public class ErrorGroups {
         /** Cursor is already closed error. */
         public static final int CURSOR_CLOSED_ERR = SQL_ERR_GROUP.registerErrorCode(9);
 
-        /** Some keys can't be inserted because they violates unique constraint PK. */
+        /** Constraint violation: some keys can't be inserted because they violate unique constraint PK. */
         public static final int DUPLICATE_KEYS_ERR = SQL_ERR_GROUP.registerErrorCode(10);
+
+        /** Constraint violation: deleting a column that belongs to the primary key. */
+        public static final int DEL_PK_COMUMN_CONSTRAINT_ERR = SQL_ERR_GROUP.registerErrorCode(11);
+
+        /**  Too many grouping expressions. */
+        public static final int TOO_MANY_GROUPING_EXPRESSIONS_ERR = SQL_ERR_GROUP.registerErrorCode(12);
+
+        /** Unsupported sql operation. */
+        public static final int USUPPORTED_SQL_OPERATION_KIND_ERR = SQL_ERR_GROUP.registerErrorCode(13);
+
+        /** Unsupported DDL operation. */
+        public static final int UNSUPPORTED_DDL_OPERATION_ERR = SQL_ERR_GROUP.registerErrorCode(14);
+
+        /** Query validation error. */
+        public static final int QUERY_VALIDATION_ERR = SQL_ERR_GROUP.registerErrorCode(15);
+
+        /** Table not found. */
+        public static final int TABLE_NOT_FOUND_ERR = SQL_ERR_GROUP.registerErrorCode(16);
+
+        /** Table version not found. */
+        public static final int TABLE_VER_NOT_FOUND_ERR = SQL_ERR_GROUP.registerErrorCode(17);
+
+        /** Invalid table option. */
+        public static final int TABLE_OPTION_ERR = SQL_ERR_GROUP.registerErrorCode(18);
+
+        /** Query mapping error. */
+        public static final int QUERY_MAPPING_ERR = SQL_ERR_GROUP.registerErrorCode(19);
+
+        /** DDL execution error. */
+        public static final int DDL_EXEC_ERR = SQL_ERR_GROUP.registerErrorCode(20);
+
+        /** DML result error. */
+        public static final int INVALID_DML_RESULT_ERR = SQL_ERR_GROUP.registerErrorCode(21);
+
+        /** SQL data type to relational conversion error. */
+        public static final int SQL_TO_REL_CONVERSION_ERR = SQL_ERR_GROUP.registerErrorCode(22);
+
+        /** Relational expression serialization error. */
+        public static final int REL_SERIALIZATION_ERR = SQL_ERR_GROUP.registerErrorCode(23);
+
+        /** Relational expression deserialization error. */
+        public static final int REL_DESERIALIZATION_ERR = SQL_ERR_GROUP.registerErrorCode(24);
+
+        /** Class not found error. */
+        public static final int CLASS_NOT_FOUND_ERR = SQL_ERR_GROUP.registerErrorCode(25);
+
+        /** Expression compilation error. */
+        public static final int EXPRESSION_COMPILATION_ERR = SQL_ERR_GROUP.registerErrorCode(26);
+
+        /** Node left the cluster. */
+        public static final int NODE_LEFT_ERR = SQL_ERR_GROUP.registerErrorCode(27);
+
+        /** Message send error. */
+        public static final int MESSAGE_SEND_ERR = SQL_ERR_GROUP.registerErrorCode(28);
+
+        /** Operation aborted/interrupted error. */
+        public static final int OPERATION_INTERRUPTED_ERR = SQL_ERR_GROUP.registerErrorCode(29);
+
+        /** An error occurred while canceling the operation. */
+        public static final int CANCEL_OPERATION_ERR = SQL_ERR_GROUP.registerErrorCode(30);
+
+        /** Session expired error. */
+        public static final int SESSION_EXPIRED_ERR = SQL_ERR_GROUP.registerErrorCode(31);
+
+        /** Session evaluation error. */
+        public static final int SCHEMA_EVALUATION_ERR = SQL_ERR_GROUP.registerErrorCode(32);
+
+        /** Execution cancelled. */
+        public static final int EXECUTION_CANCELLED_ERR = SQL_ERR_GROUP.registerErrorCode(33);
     }
 
     /** Meta storage error group. */
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/SessionImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/SessionImpl.java
index 21d0e9ae93..55a89bb227 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/SessionImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/SessionImpl.java
@@ -17,7 +17,9 @@
 
 package org.apache.ignite.internal.sql.api;
 
-import static org.apache.ignite.lang.ErrorGroups.Common.UNKNOWN_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Common.UNEXPECTED_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.INVALID_DML_RESULT_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.SESSION_NOT_FOUND_ERR;
 
@@ -245,7 +247,7 @@ public class SessionImpl implements Session {
                         Throwable cause = ExceptionUtils.unwrapCause(ex);
 
                         throw new SqlBatchException(
-                                cause instanceof IgniteException ? ((IgniteException) cause).code() : UNKNOWN_ERR,
+                                cause instanceof IgniteException ? ((IgniteException) cause).code() : UNEXPECTED_ERR,
                                 counters.toArray(ArrayUtils.LONG_EMPTY_ARRAY),
                                 ex);
                     })
@@ -333,9 +335,9 @@ public class SessionImpl implements Session {
         try {
             return stage.toCompletableFuture().get();
         } catch (ExecutionException e) {
-            throw new IgniteException(e.getCause());
+            throw new SqlException(OPERATION_INTERRUPTED_ERR, e.getCause());
         } catch (Throwable e) {
-            throw new IgniteException(e);
+            throw new SqlException(OPERATION_INTERRUPTED_ERR, e);
         }
     }
 
@@ -351,7 +353,7 @@ public class SessionImpl implements Session {
                 || page.items().size() != 1
                 || page.items().get(0).size() != 1
                 || page.hasMore()) {
-            throw new SqlException(UNKNOWN_ERR, "Invalid DML results: " + page);
+            throw new SqlException(INVALID_DML_RESULT_ERR, "Invalid DML results: " + page);
         }
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancel.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancel.java
index d35522cd54..254cc6798a 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancel.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancel.java
@@ -17,10 +17,13 @@
 
 package org.apache.ignite.internal.sql.engine;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.CANCEL_OPERATION_ERR;
+
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.ignite.internal.util.Cancellable;
 import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.SqlException;
 
 /**
  * Holds query cancel state.
@@ -65,7 +68,7 @@ public class QueryCancel {
                 act.cancel();
             } catch (Exception e) {
                 if (ex == null) {
-                    ex = new IgniteException(e);
+                    ex = new SqlException(CANCEL_OPERATION_ERR, e);
                 } else {
                     ex.addSuppressed(e);
                 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancelledException.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancelledException.java
index 44168b424b..56d2ddd9ba 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancelledException.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryCancelledException.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
+
 import org.apache.ignite.lang.IgniteException;
 
 /**
@@ -31,6 +33,6 @@ public class QueryCancelledException extends IgniteException {
      * Default constructor.
      */
     public QueryCancelledException() {
-        super(ERR_MSG);
+        super(OPERATION_INTERRUPTED_ERR, ERR_MSG);
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
index 1b6bc83fc9..534402ea3f 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
@@ -18,7 +18,10 @@
 package org.apache.ignite.internal.sql.engine;
 
 import static org.apache.ignite.internal.sql.engine.util.Commons.FRAMEWORK_CONFIG;
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.SCHEMA_NOT_FOUND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.SESSION_EXPIRED_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.SESSION_NOT_FOUND_ERR;
 import static org.apache.ignite.lang.IgniteStringFormatter.format;
 
@@ -282,7 +285,7 @@ public class SqlQueryProcessor implements QueryProcessor {
     public List<CompletableFuture<AsyncSqlCursor<List<Object>>>> queryAsync(QueryContext context, String schemaName,
             String qry, Object... params) {
         if (!busyLock.enterBusy()) {
-            throw new IgniteInternalException(new NodeStoppingException());
+            throw new IgniteInternalException(OPERATION_INTERRUPTED_ERR, new NodeStoppingException());
         }
 
         try {
@@ -298,7 +301,7 @@ public class SqlQueryProcessor implements QueryProcessor {
             SessionId sessionId, QueryContext context, String qry, Object... params
     ) {
         if (!busyLock.enterBusy()) {
-            throw new IgniteInternalException(new NodeStoppingException());
+            throw new IgniteInternalException(OPERATION_INTERRUPTED_ERR, new NodeStoppingException());
         }
 
         try {
@@ -344,7 +347,8 @@ public class SqlQueryProcessor implements QueryProcessor {
         SchemaPlus schema = sqlSchemaManager.schema(schemaName);
 
         if (schema == null) {
-            return CompletableFuture.failedFuture(new IgniteInternalException(format("Schema not found [schemaName={}]", schemaName)));
+            return CompletableFuture.failedFuture(
+                    new IgniteInternalException(SCHEMA_NOT_FOUND_ERR, format("Schema not found [schemaName={}]", schemaName)));
         }
 
         InternalTransaction outerTx = context.unwrap(InternalTransaction.class);
@@ -361,7 +365,7 @@ public class SqlQueryProcessor implements QueryProcessor {
         try {
             session.registerResource(closeableResource);
         } catch (IllegalStateException ex) {
-            return CompletableFuture.failedFuture(new IgniteInternalException(
+            return CompletableFuture.failedFuture(new IgniteInternalException(SESSION_EXPIRED_ERR,
                     format("Session has been expired [{}]", session.sessionId()), ex));
         }
 
@@ -449,7 +453,7 @@ public class SqlQueryProcessor implements QueryProcessor {
         SchemaPlus schema = sqlSchemaManager.schema(schemaName);
 
         if (schema == null) {
-            throw new IgniteInternalException(format("Schema not found [schemaName={}]", schemaName));
+            throw new IgniteInternalException(SCHEMA_NOT_FOUND_ERR, format("Schema not found [schemaName={}]", schemaName));
         }
 
         SqlNodeList nodes = Commons.parse(sql, FRAMEWORK_CONFIG.getParserConfig());
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
index d862ccdaf0..1ec7f53dc0 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.exec;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Common.UNEXPECTED_ERR;
 
 import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
 import java.util.Collection;
@@ -176,7 +177,7 @@ public class ExchangeServiceImpl implements ExchangeService {
             } catch (Throwable e) {
                 outbox.onError(e);
 
-                throw new IgniteInternalException("Unexpected exception", e);
+                throw new IgniteInternalException(UNEXPECTED_ERR, "Unexpected exception", e);
             }
         } else if (LOG.isDebugEnabled()) {
             LOG.debug("Stale acknowledge message received: [nodeId={}, queryId={}, fragmentId={}, exchangeId={}, batchId={}]",
@@ -202,7 +203,7 @@ public class ExchangeServiceImpl implements ExchangeService {
             } catch (Throwable e) {
                 inbox.onError(e);
 
-                throw new IgniteInternalException("Unexpected exception", e);
+                throw new IgniteInternalException(UNEXPECTED_ERR, "Unexpected exception", e);
             }
         } else if (LOG.isDebugEnabled()) {
             LOG.debug("Stale batch message received: [nodeId={}, queryId={}, fragmentId={}, exchangeId={}, batchId={}]",
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionCancelledException.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionCancelledException.java
index b9ffe00585..d4dd4fe2ac 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionCancelledException.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionCancelledException.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine.exec;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.EXECUTION_CANCELLED_ERR;
+
 import org.apache.ignite.lang.IgniteInternalCheckedException;
 
 /**
@@ -24,4 +26,10 @@ import org.apache.ignite.lang.IgniteInternalCheckedException;
  * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
  */
 public class ExecutionCancelledException extends IgniteInternalCheckedException {
+    /**
+     * Constructs a new exception with null as its detail message.
+     */
+    public ExecutionCancelledException() {
+        super(EXECUTION_CANCELLED_ERR);
+    }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
index 98b9dba1db..6487ea5f0d 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionContext.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.exec;
 
 import static org.apache.ignite.internal.sql.engine.util.Commons.checkRange;
+import static org.apache.ignite.lang.ErrorGroups.Common.UNEXPECTED_ERR;
 
 import java.util.List;
 import java.util.Locale;
@@ -305,7 +306,7 @@ public class ExecutionContext<RowT> extends AbstractQueryContext implements Data
             } catch (Throwable e) {
                 onError.accept(e);
 
-                throw new IgniteInternalException("Unexpected exception", e);
+                throw new IgniteInternalException(UNEXPECTED_ERR, "Unexpected exception", e);
             }
         });
     }
@@ -326,7 +327,7 @@ public class ExecutionContext<RowT> extends AbstractQueryContext implements Data
             } catch (Throwable e) {
                 onError.accept(e);
 
-                throw new IgniteInternalException("Unexpected exception", e);
+                throw new IgniteInternalException(UNEXPECTED_ERR, "Unexpected exception", e);
             }
         });
     }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
index 60c44c413f..c2afd25a9d 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
@@ -20,6 +20,9 @@ package org.apache.ignite.internal.sql.engine.exec;
 import static org.apache.ignite.internal.sql.engine.externalize.RelJsonReader.fromJson;
 import static org.apache.ignite.internal.sql.engine.util.Commons.FRAMEWORK_CONFIG;
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Sql.DDL_EXEC_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.MESSAGE_SEND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.NODE_LEFT_ERR;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -71,12 +74,12 @@ import org.apache.ignite.internal.sql.engine.util.TypeUtils;
 import org.apache.ignite.internal.storage.DataStorageManager;
 import org.apache.ignite.internal.table.distributed.TableManager;
 import org.apache.ignite.internal.tx.InternalTransaction;
-import org.apache.ignite.lang.IgniteException;
 import org.apache.ignite.lang.IgniteInternalCheckedException;
 import org.apache.ignite.lang.IgniteInternalException;
 import org.apache.ignite.network.ClusterNode;
 import org.apache.ignite.network.TopologyEventHandler;
 import org.apache.ignite.network.TopologyService;
+import org.apache.ignite.sql.SqlException;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -272,11 +275,11 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
         }
 
         if (e instanceof IgniteInternalCheckedException) {
-            return new IgniteInternalException("Failed to execute DDL statement [stmt=" /*+ qry.sql()*/
+            return new IgniteInternalException(DDL_EXEC_ERR, "Failed to execute DDL statement [stmt=" /*+ qry.sql()*/
                     + ", err=" + e.getMessage() + ']', e);
         }
 
-        return (e instanceof RuntimeException) ? (RuntimeException) e : new IgniteException(e);
+        return (e instanceof RuntimeException) ? (RuntimeException) e : new SqlException(DDL_EXEC_ERR, e);
     }
 
     private AsyncCursor<List<Object>> executeExplain(ExplainPlan plan) {
@@ -464,7 +467,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
         private void onNodeLeft(String nodeId) {
             remoteFragmentInitCompletion.entrySet().stream().filter(e -> nodeId.equals(e.getKey().nodeId()))
                     .forEach(e -> e.getValue()
-                            .completeExceptionally(new IgniteInternalException("Node left the cluster [nodeId=" + nodeId + "]")));
+                            .completeExceptionally(new IgniteInternalException(
+                                    NODE_LEFT_ERR, "Node left the cluster [nodeId=" + nodeId + "]")));
         }
 
         private void executeFragment(FragmentPlan plan, ExecutionContext<RowT> ectx) {
@@ -504,7 +508,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
                                 .build()
                 );
             } catch (IgniteInternalCheckedException e) {
-                throw new IgniteInternalException("Failed to send reply. [nodeId=" + origNodeId + ']', e);
+                throw new IgniteInternalException(MESSAGE_SEND_ERR, "Failed to send reply. [nodeId=" + origNodeId + ']', e);
             }
 
             if (node instanceof Outbox) {
@@ -650,7 +654,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
                                                 try {
                                                     exchangeSrvc.closeQuery(nodeId, ctx.queryId());
                                                 } catch (IgniteInternalCheckedException e) {
-                                                    throw new IgniteInternalException(
+                                                    throw new IgniteInternalException(MESSAGE_SEND_ERR,
                                                             "Failed to send cancel message. [nodeId=" + nodeId + ']', e);
                                                 }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/QueryValidationException.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/QueryValidationException.java
index dcffff0b2d..d291dfa4b2 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/QueryValidationException.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/QueryValidationException.java
@@ -17,10 +17,12 @@
 
 package org.apache.ignite.internal.sql.engine.exec;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_VALIDATION_ERR;
+
 import org.apache.ignite.lang.IgniteInternalException;
 
 /**
- * StatementMismatchException is used during query validation.
+ * QueryValidationException is used during query validation.
  *
  * <p>The exception is used when the expected query type does not match the actual query type obtained after parsing a sql string.
  */
@@ -31,6 +33,6 @@ public class QueryValidationException extends IgniteInternalException {
      * @param msg Error message.
      */
     public QueryValidationException(String msg) {
-        super(msg);
+        super(QUERY_VALIDATION_ERR, msg);
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
index c90cda813f..d0a2739d31 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ddl/DdlCommandHandler.java
@@ -20,6 +20,8 @@ package org.apache.ignite.internal.sql.engine.exec.ddl;
 import static java.util.concurrent.CompletableFuture.completedFuture;
 import static java.util.concurrent.CompletableFuture.failedFuture;
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Sql.DEL_PK_COMUMN_CONSTRAINT_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.UNSUPPORTED_DDL_OPERATION_ERR;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -75,11 +77,11 @@ import org.apache.ignite.internal.util.IgniteObjectName;
 import org.apache.ignite.internal.util.StringUtils;
 import org.apache.ignite.lang.ColumnAlreadyExistsException;
 import org.apache.ignite.lang.ColumnNotFoundException;
-import org.apache.ignite.lang.IgniteException;
 import org.apache.ignite.lang.IgniteInternalCheckedException;
 import org.apache.ignite.lang.IgniteStringFormatter;
 import org.apache.ignite.lang.TableAlreadyExistsException;
 import org.apache.ignite.lang.TableNotFoundException;
+import org.apache.ignite.sql.SqlException;
 
 /** DDL commands handler. */
 public class DdlCommandHandler {
@@ -119,7 +121,7 @@ public class DdlCommandHandler {
         } else if (cmd instanceof DropIndexCommand) {
             return handleDropIndex((DropIndexCommand) cmd);
         } else {
-            return failedFuture(new IgniteInternalCheckedException("Unsupported DDL operation ["
+            return failedFuture(new IgniteInternalCheckedException(UNSUPPORTED_DDL_OPERATION_ERR, "Unsupported DDL operation ["
                     + "cmdName=" + (cmd == null ? null : cmd.getClass().getSimpleName()) + "; "
                     + "cmd=\"" + cmd + "\"]"));
         }
@@ -406,7 +408,7 @@ public class DdlCommandHandler {
                                 }
 
                                 if (primaryCols.contains(colName)) {
-                                    throw new IgniteException(IgniteStringFormatter
+                                    throw new SqlException(DEL_PK_COMUMN_CONSTRAINT_ERR, IgniteStringFormatter
                                             .format("Can`t delete column, belongs to primary key: [name={}]", colName));
                                 }
                             }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractNode.java
index 079e49228b..33c73bf8f9 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AbstractNode.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.exec.rel;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
 import static org.apache.ignite.lang.IgniteStringFormatter.format;
 
 import java.util.Collection;
@@ -175,7 +176,7 @@ public abstract class AbstractNode<RowT> implements Node<RowT> {
             throw new ExecutionCancelledException();
         }
         if (Thread.interrupted()) {
-            throw new IgniteInternalCheckedException("Thread was interrupted.");
+            throw new IgniteInternalCheckedException(OPERATION_INTERRUPTED_ERR, "Thread was interrupted.");
         }
         if (!IgniteUtils.assertionsEnabled()) {
             return;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
index ce155f8b76..e1d60a088d 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.exec.rel;
 import static java.util.stream.Collectors.toCollection;
 import static org.apache.ignite.internal.sql.engine.util.Commons.negate;
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Sql.TOO_MANY_GROUPING_EXPRESSIONS_ERR;
 
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -80,7 +81,7 @@ public class HashAggregateNode<RowT> extends AbstractNode<RowT> implements Singl
         ImmutableBitSet.Builder b = ImmutableBitSet.builder();
 
         if (grpSets.size() > Byte.MAX_VALUE) {
-            throw new IgniteInternalException("Too many groups");
+            throw new IgniteInternalException(TOO_MANY_GROUPING_EXPRESSIONS_ERR, "Too many groups");
         }
 
         groupings = new ArrayList<>(grpSets.size());
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
index ebdb387f09..4e40d18cdc 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/Inbox.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.exec.rel;
 
 import static org.apache.calcite.util.Util.unexpected;
+import static org.apache.ignite.lang.ErrorGroups.Sql.NODE_LEFT_ERR;
 
 import java.util.Collection;
 import java.util.Comparator;
@@ -358,13 +359,13 @@ public class Inbox<RowT> extends AbstractNode<RowT> implements Mailbox<RowT>, Si
         checkState();
 
         if (getOrCreateBuffer(nodeId).check() != State.END) {
-            throw new IgniteInternalCheckedException("Failed to execute query, node left [nodeId=" + nodeId + ']');
+            throw new IgniteInternalCheckedException(NODE_LEFT_ERR, "Failed to execute query, node left [nodeId=" + nodeId + ']');
         }
     }
 
     private void checkNode(String nodeId) throws IgniteInternalCheckedException {
         if (!exchange.alive(nodeId)) {
-            throw new IgniteInternalCheckedException("Failed to execute query, node left [nodeId=" + nodeId + ']');
+            throw new IgniteInternalCheckedException(NODE_LEFT_ERR, "Failed to execute query, node left [nodeId=" + nodeId + ']');
         }
     }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/RootNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/RootNode.java
index 6991dfe142..ab4f7fc559 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/RootNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/RootNode.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.internal.sql.engine.exec.rel;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Common.UNEXPECTED_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
 
 import java.util.ArrayDeque;
 import java.util.Deque;
@@ -257,7 +259,7 @@ public class RootNode<RowT> extends AbstractNode<RowT> implements SingleNode<Row
                 cond.await();
             }
         } catch (InterruptedException e) {
-            throw new IgniteInternalException(e);
+            throw new IgniteInternalException(OPERATION_INTERRUPTED_ERR, e);
         } finally {
             lock.unlock();
         }
@@ -275,7 +277,7 @@ public class RootNode<RowT> extends AbstractNode<RowT> implements SingleNode<Row
         if (e instanceof RuntimeException) {
             throw (RuntimeException) e;
         } else {
-            throw new IgniteInternalException("An error occurred while query executing.", e);
+            throw new IgniteInternalException(UNEXPECTED_ERR, "An error occurred while query executing.", e);
         }
         // TODO: rework with SQL error code
         //        if (e instanceof IgniteSQLException)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
index a91e0a1da2..fbe8f67a5c 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
@@ -20,6 +20,8 @@ package org.apache.ignite.internal.sql.engine.externalize;
 import static org.apache.ignite.internal.sql.engine.util.Commons.FRAMEWORK_CONFIG;
 import static org.apache.ignite.internal.util.ArrayUtils.asList;
 import static org.apache.ignite.internal.util.IgniteUtils.igniteClassLoader;
+import static org.apache.ignite.lang.ErrorGroups.Sql.CLASS_NOT_FOUND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.REL_DESERIALIZATION_ERR;
 
 import com.github.benmanes.caffeine.cache.Caffeine;
 import com.github.benmanes.caffeine.cache.LoadingCache;
@@ -110,7 +112,7 @@ import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.SqlException;
 
 /**
  * Utilities for converting {@link RelNode} into JSON format.
@@ -150,7 +152,7 @@ class RelJson {
         try {
             constructor = (Constructor<RelNode>) clazz.getConstructor(RelInput.class);
         } catch (NoSuchMethodException e) {
-            throw new IgniteException("class does not have required constructor, "
+            throw new SqlException(REL_DESERIALIZATION_ERR, "class does not have required constructor, "
                     + clazz + "(RelInput)");
         }
 
@@ -204,7 +206,7 @@ class RelJson {
             return IgniteUtils.forName(typeName, igniteClassLoader());
         } catch (ClassNotFoundException e) {
             if (!skipNotFound) {
-                throw new IgniteException("unknown type " + typeName);
+                throw new SqlException(CLASS_NOT_FOUND_ERR, "unknown type " + typeName);
             }
         }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
index 73bed2ac46..ea55c72dc3 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine.externalize;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.REL_DESERIALIZATION_ERR;
+
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -50,7 +52,7 @@ import org.apache.calcite.util.Util;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.apache.ignite.internal.sql.engine.schema.SqlSchemaManager;
 import org.apache.ignite.internal.sql.engine.util.Commons;
-import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.SqlException;
 
 /**
  * RelJsonReader.
@@ -103,7 +105,7 @@ public class RelJsonReader {
             readRels(rels);
             return lastRel;
         } catch (IOException e) {
-            throw new IgniteException(e);
+            throw new SqlException(REL_DESERIALIZATION_ERR, e);
         }
     }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonWriter.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonWriter.java
index 6db6fd664d..9542e93820 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonWriter.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonWriter.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine.externalize;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.REL_SERIALIZATION_ERR;
+
 import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
@@ -30,7 +32,7 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.RelWriter;
 import org.apache.calcite.sql.SqlExplainLevel;
 import org.apache.calcite.util.Pair;
-import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.SqlException;
 
 /**
  * Callback for a relational expression to dump itself as JSON.
@@ -127,7 +129,7 @@ public class RelJsonWriter implements RelWriter {
 
             return writer.toString();
         } catch (IOException e) {
-            throw new IgniteException(e);
+            throw new SqlException(REL_SERIALIZATION_ERR, e);
         }
     }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
index 6617a66f90..8964b04453 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.internal.sql.engine.message;
 
 import static org.apache.ignite.internal.sql.engine.message.SqlQueryMessageGroup.GROUP_TYPE;
+import static org.apache.ignite.lang.ErrorGroups.Sql.MESSAGE_SEND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.NODE_LEFT_ERR;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -92,7 +94,8 @@ public class MessageServiceImpl implements MessageService {
                 ClusterNode node = topSrvc.allMembers().stream()
                         .filter(cn -> nodeId.equals(cn.id()))
                         .findFirst()
-                        .orElseThrow(() -> new IgniteInternalException("Failed to send message to node (has node left grid?): " + nodeId));
+                        .orElseThrow(() -> new IgniteInternalException(
+                                NODE_LEFT_ERR, "Failed to send message to node (has node left grid?): " + nodeId));
 
                 try {
                     messagingSrvc.send(node, msg).join();
@@ -101,7 +104,7 @@ public class MessageServiceImpl implements MessageService {
                         throw (IgniteInternalCheckedException) ex;
                     }
 
-                    throw new IgniteInternalCheckedException(ex);
+                    throw new IgniteInternalCheckedException(MESSAGE_SEND_ERR, ex);
                 }
             }
         } finally {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePlanner.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePlanner.java
index d54ee43f90..a90a33ac21 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePlanner.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePlanner.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.sql.engine.prepare;
 
+import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR;
+
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.io.StringWriter;
@@ -233,7 +235,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
             sqlNode = parser.parseQuery();
         } catch (SqlParseException e) {
             //            throw new IgniteSQLException("parse failed", IgniteQueryErrorCode.PARSING, e);
-            throw new IgniteException("parse failed", e);
+            throw new IgniteException(QUERY_INVALID_ERR, "parse failed", e);
         }
 
         CalciteCatalogReader catalogReader = this.catalogReader.withSchemaPath(schemaPath);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
index e438344cc2..70a956d561 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.internal.sql.engine.prepare;
 
 import static org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize;
+import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_VALIDATION_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.USUPPORTED_SQL_OPERATION_KIND_ERR;
 
 import com.github.benmanes.caffeine.cache.Caffeine;
 import java.util.ArrayList;
@@ -169,12 +171,12 @@ public class PrepareServiceImpl implements PrepareService, SchemaUpdateListener
                     return prepareExplain(sqlNode, planningContext);
 
                 default:
-                    throw new IgniteInternalException("Unsupported operation ["
+                    throw new IgniteInternalException(USUPPORTED_SQL_OPERATION_KIND_ERR, "Unsupported operation ["
                             + "sqlNodeKind=" + sqlNode.getKind() + "; "
                             + "querySql=\"" + planningContext.query() + "\"]");
             }
         } catch (CalciteContextException e) {
-            throw new IgniteInternalException("Failed to validate query. " + e.getMessage(), e);
+            throw new IgniteInternalException(QUERY_VALIDATION_ERR, "Failed to validate query. " + e.getMessage(), e);
         }
     }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryTemplate.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryTemplate.java
index e68b4d4158..40cb3a31db 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryTemplate.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryTemplate.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.prepare;
 
 import static org.apache.ignite.internal.util.CollectionUtils.first;
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
+import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_MAPPING_ERR;
 
 import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap;
 import java.util.ArrayList;
@@ -30,7 +31,7 @@ import org.apache.ignite.internal.sql.engine.metadata.MappingService;
 import org.apache.ignite.internal.sql.engine.rel.IgniteReceiver;
 import org.apache.ignite.internal.sql.engine.rel.IgniteSender;
 import org.apache.ignite.internal.sql.engine.util.Commons;
-import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.SqlException;
 import org.jetbrains.annotations.NotNull;
 
 /**
@@ -79,7 +80,7 @@ public class QueryTemplate {
             }
         }
 
-        throw new IgniteException("Failed to map query.", ex);
+        throw new SqlException(QUERY_MAPPING_ERR, "Failed to map query.", ex);
     }
 
     @NotNull
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
index ac44905a00..0fbffcd5c8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
@@ -25,7 +25,10 @@ import static org.apache.ignite.lang.ErrorGroups.Sql.PRIMARY_KEYS_MULTIPLE_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.PRIMARY_KEY_MISSING_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.SCHEMA_NOT_FOUND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.SQL_TO_REL_CONVERSION_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.STORAGE_ENGINE_NOT_VALID_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.TABLE_OPTION_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.UNSUPPORTED_DDL_OPERATION_ERR;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -169,7 +172,7 @@ public class DdlSqlToCommandConverter {
             return convertDropIndex((IgniteSqlDropIndex) ddlNode, ctx);
         }
 
-        throw new IgniteException("Unsupported operation ["
+        throw new SqlException(UNSUPPORTED_DDL_OPERATION_ERR, "Unsupported operation ["
                 + "sqlNodeKind=" + ddlNode.getKind() + "; "
                 + "querySql=\"" + ctx.query() + "\"]");
     }
@@ -201,7 +204,8 @@ public class DdlSqlToCommandConverter {
                 } else if (dataStorageOptionInfos.get(createTblCmd.dataStorage()).containsKey(optionKey)) {
                     processTableOption(dataStorageOptionInfos.get(createTblCmd.dataStorage()).get(optionKey), option, ctx, createTblCmd);
                 } else {
-                    throw new IgniteException(String.format("Unexpected table option [option=%s, query=%s]", optionKey, ctx.query()));
+                    throw new IgniteException(
+                            TABLE_OPTION_ERR, String.format("Unexpected table option [option=%s, query=%s]", optionKey, ctx.query()));
                 }
             }
         }
@@ -559,19 +563,19 @@ public class DdlSqlToCommandConverter {
         try {
             optionValue = ((SqlLiteral) option.value()).getValueAs(tableOptionInfo.type);
         } catch (AssertionError | ClassCastException e) {
-            throw new IgniteException(String.format(
+            throw new IgniteException(TABLE_OPTION_ERR, String.format(
                     "Unsuspected table option type [option=%s, expectedType=%s, query=%s]",
                     option.key().getSimple(),
                     tableOptionInfo.type.getSimpleName(),
-                    context.query()
-            ));
+                    context.query())
+            );
         }
 
         if (tableOptionInfo.validator != null) {
             try {
                 tableOptionInfo.validator.accept(optionValue);
             } catch (Throwable e) {
-                throw new IgniteException(String.format(
+                throw new IgniteException(TABLE_OPTION_ERR, String.format(
                         "Table option validation failed [option=%s, err=%s, query=%s]",
                         option.key().getSimple(),
                         e.getMessage(),
@@ -585,7 +589,7 @@ public class DdlSqlToCommandConverter {
 
     private void checkPositiveNumber(int num) {
         if (num < 0) {
-            throw new IgniteException("Must be positive:" + num);
+            throw new IgniteException(TABLE_OPTION_ERR, "Must be positive:" + num);
         }
     }
 
@@ -654,7 +658,7 @@ public class DdlSqlToCommandConverter {
             }
         } catch (Throwable th) {
             // catch throwable here because literal throws an AssertionError when unable to cast value to a given class
-            throw new IgniteException("Unable co convert literal", th);
+            throw new SqlException(SQL_TO_REL_CONVERSION_ERR, "Unable co convert literal", th);
         }
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java
index 398b545685..ff3822adf7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImpl.java
@@ -22,6 +22,9 @@ import static java.util.concurrent.CompletableFuture.failedFuture;
 import static org.apache.ignite.internal.schema.SchemaUtils.extractSchema;
 import static org.apache.ignite.internal.util.IgniteUtils.inBusyLock;
 import static org.apache.ignite.lang.ErrorGroups.Common.NODE_STOPPING_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.SCHEMA_EVALUATION_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.TABLE_NOT_FOUND_ERR;
+import static org.apache.ignite.lang.ErrorGroups.Sql.TABLE_VER_NOT_FOUND_ERR;
 
 import java.util.Comparator;
 import java.util.HashMap;
@@ -110,7 +113,8 @@ public class SqlSchemaManagerImpl implements SqlSchemaManager {
                 if (throwable != null) {
                     calciteSchemaVv.completeExceptionally(
                             token,
-                            new IgniteInternalException("Couldn't evaluate sql schemas for causality token: " + token, throwable)
+                            new IgniteInternalException(
+                                    SCHEMA_EVALUATION_ERR, "Couldn't evaluate sql schemas for causality token: " + token, throwable)
                     );
 
                     return;
@@ -153,12 +157,12 @@ public class SqlSchemaManagerImpl implements SqlSchemaManager {
             }
 
             if (table == null) {
-                throw new IgniteInternalException(
+                throw new IgniteInternalException(TABLE_NOT_FOUND_ERR,
                         IgniteStringFormatter.format("Table not found [tableId={}]", id));
             }
 
             if (table.version() < ver) {
-                throw new IgniteInternalException(
+                throw new IgniteInternalException(TABLE_VER_NOT_FOUND_ERR,
                         IgniteStringFormatter.format("Table version not found [tableId={}, requiredVer={}, latestKnownVer={}]",
                                 id, ver, table.version()));
             }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
index 183066f073..869e046e05 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
@@ -21,6 +21,7 @@ import static org.apache.ignite.internal.sql.engine.util.BaseQueryContext.CLUSTE
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 import static org.apache.ignite.internal.util.ExceptionUtils.withCauseAndCode;
 import static org.apache.ignite.lang.ErrorGroup.extractCauseMessage;
+import static org.apache.ignite.lang.ErrorGroups.Sql.EXPRESSION_COMPILATION_ERR;
 import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR;
 
 import it.unimi.dsi.fastutil.ints.IntArrayList;
@@ -108,7 +109,6 @@ import org.apache.ignite.internal.sql.engine.trait.RewindabilityTraitDef;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeSystem;
 import org.apache.ignite.internal.util.ArrayUtils;
-import org.apache.ignite.lang.IgniteException;
 import org.apache.ignite.lang.IgniteSystemProperties;
 import org.apache.ignite.sql.ResultSetMetadata;
 import org.apache.ignite.sql.SqlException;
@@ -499,7 +499,7 @@ public final class Commons {
 
             return (T) cbe.createInstance(new StringReader(body));
         } catch (Exception e) {
-            throw new IgniteException(e);
+            throw new SqlException(EXPRESSION_COMPILATION_ERR, e);
         }
     }
 
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
index 3a70143729..114338f3d2 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
@@ -21,6 +21,7 @@ import static org.apache.ignite.internal.sql.engine.util.BaseQueryContext.CLUSTE
 import static org.apache.ignite.internal.sql.engine.util.Commons.FRAMEWORK_CONFIG;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.await;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition;
+import static org.apache.ignite.lang.ErrorGroups.Sql.OPERATION_INTERRUPTED_ERR;
 import static org.apache.ignite.lang.IgniteStringFormatter.format;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasSize;
@@ -217,7 +218,7 @@ public class ExecutionServiceImplTest {
                             .build()
                     );
                 } catch (IgniteInternalCheckedException e) {
-                    throw new IgniteInternalException(e);
+                    throw new IgniteInternalException(OPERATION_INTERRUPTED_ERR, e);
                 }
             } else {
                 original.onMessage(nodeId, msg);
@@ -529,7 +530,7 @@ public class ExecutionServiceImplTest {
                                         try {
                                             task.run();
                                         } catch (Throwable ex) {
-                                            throw new IgniteInternalException(ex);
+                                            throw new IgniteInternalException(OPERATION_INTERRUPTED_ERR, ex);
                                         }
                                     }
                                 }