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

av pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 7950200445f IGNITE-21367 IgniteH2Indexing transactional code removal 
(#11242)
7950200445f is described below

commit 7950200445fb2daef8e78134f5ed0380ee7b7c1b
Author: Ilya Shishkov <shishkovi...@gmail.com>
AuthorDate: Tue Mar 19 12:22:18 2024 +0300

    IGNITE-21367 IgniteH2Indexing transactional code removal (#11242)
---
 .../processors/query/GridQueryIndexing.java        |  33 --
 .../processors/query/GridQueryProcessor.java       |  51 ---
 .../processors/query/UpdateSourceIterator.java     |  89 -----
 .../main/resources/META-INF/classnames.properties  |   1 -
 .../processors/query/DummyQueryIndexing.java       |  19 -
 .../processors/query/h2/IgniteH2Indexing.java      | 395 ++++-----------------
 .../internal/processors/query/h2/QueryParser.java  |  69 +---
 .../query/h2/QueryParserResultSelect.java          |  75 +---
 .../query/h2/dml/DmlUpdateResultsIterator.java     |  70 ----
 .../query/h2/dml/DmlUpdateSingleEntryIterator.java |  66 ----
 .../processors/query/h2/dml/UpdatePlan.java        | 211 -----------
 .../query/h2/sql/SqlUnsupportedSelfTest.java       |   2 +
 12 files changed, 82 insertions(+), 999 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
index f0e3c20db31..32323300a8d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
@@ -28,7 +28,6 @@ import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContextInfo;
-import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import org.apache.ignite.internal.processors.odbc.jdbc.JdbcParameterMeta;
 import org.apache.ignite.internal.processors.query.running.RunningQueryManager;
@@ -153,38 +152,6 @@ public interface GridQueryIndexing {
      */
     public void unregisterCache(GridCacheContextInfo<?, ?> cacheInfo);
 
-    /**
-     *
-     * @param cctx Cache context.
-     * @param ids Involved cache ids.
-     * @param parts Partitions.
-     * @param schema Schema name.
-     * @param qry Query string.
-     * @param params Query parameters.
-     * @param flags Flags.
-     * @param pageSize Fetch page size.
-     * @param timeout Timeout.
-     * @param topVer Topology version.
-     * @param mvccSnapshot MVCC snapshot.
-     * @param cancel Query cancel object.
-     * @return Cursor over entries which are going to be changed.
-     * @throws IgniteCheckedException If failed.
-     */
-    public UpdateSourceIterator<?> executeUpdateOnDataNodeTransactional(
-        GridCacheContext<?, ?> cctx,
-        int[] ids,
-        int[] parts,
-        String schema,
-        String qry,
-        Object[] params,
-        int flags,
-        int pageSize,
-        int timeout,
-        AffinityTopologyVersion topVer,
-        MvccSnapshot mvccSnapshot,
-        GridQueryCancel cancel
-    ) throws IgniteCheckedException;
-
     /**
      * Jdbc parameters metadata of the specified query.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index adac49aadb9..da378a5833b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -87,7 +87,6 @@ import 
org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
 import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture;
-import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture;
 import org.apache.ignite.internal.processors.cache.query.GridCacheQueryType;
@@ -2905,56 +2904,6 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
         }
     }
 
-    /**
-     * Execute update on DHT node (i.e. when it is possible to execute and 
update on all nodes independently).
-     *
-     * @param cctx Cache context.
-     * @param cacheIds Involved cache ids.
-     * @param parts Partitions.
-     * @param schema Schema name.
-     * @param qry Query string.
-     * @param params Query parameters.
-     * @param flags Flags.
-     * @param pageSize Fetch page size.
-     * @param timeout Timeout.
-     * @param topVer Topology version.
-     * @param mvccSnapshot MVCC snapshot.
-     * @param cancel Query cancel object.
-     * @return Cursor over entries which are going to be changed.
-     * @throws IgniteCheckedException If failed.
-     */
-    public UpdateSourceIterator<?> executeUpdateOnDataNodeTransactional(
-        GridCacheContext<?, ?> cctx,
-        int[] cacheIds,
-        int[] parts,
-        String schema,
-        String qry,
-        Object[] params,
-        int flags,
-        int pageSize,
-        int timeout,
-        AffinityTopologyVersion topVer,
-        MvccSnapshot mvccSnapshot,
-        GridQueryCancel cancel
-    ) throws IgniteCheckedException {
-        checkxIndexingEnabled();
-
-        return idx.executeUpdateOnDataNodeTransactional(
-            cctx,
-            cacheIds,
-            parts,
-            schema,
-            qry,
-            params,
-            flags,
-            pageSize,
-            timeout,
-            topVer,
-            mvccSnapshot,
-            cancel
-        );
-    }
-
     /**
      * Query SQL fields.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/UpdateSourceIterator.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/UpdateSourceIterator.java
deleted file mode 100644
index 69feb0fc194..00000000000
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/UpdateSourceIterator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.query;
-
-import java.util.Iterator;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.util.lang.GridCloseableIterator;
-import org.jetbrains.annotations.NotNull;
-
-/** */
-public interface UpdateSourceIterator<T> extends GridCloseableIterator<T> {
-    /**
-     * @return Operation.
-     */
-    public EnlistOperation operation();
-
-    /**
-     * Callback method which should be called before moving iteration into 
another thread.
-     */
-    public default void beforeDetach() {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override default void close() throws IgniteCheckedException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override default boolean isClosed() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override default void removeX() throws IgniteCheckedException {
-        throw new UnsupportedOperationException("remove");
-    }
-
-    /** {@inheritDoc} */
-    @Override default boolean hasNext() {
-        try {
-            return hasNextX();
-        }
-        catch (IgniteCheckedException e) {
-            throw new IgniteException(e);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override default T next() {
-        try {
-            return nextX();
-        }
-        catch (IgniteCheckedException e) {
-            throw new IgniteException(e);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override default void remove() {
-        try {
-            removeX();
-        }
-        catch (IgniteCheckedException e) {
-            throw new IgniteException(e);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @NotNull default Iterator<T> iterator() {
-        return this;
-    }
-}
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties 
b/modules/core/src/main/resources/META-INF/classnames.properties
index ba8ec659f20..df34244fe99 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1649,7 +1649,6 @@ org.apache.ignite.internal.processors.query.QueryField
 org.apache.ignite.internal.processors.query.QueryIndexKey
 org.apache.ignite.internal.processors.query.QuerySchema
 org.apache.ignite.internal.processors.query.running.RunningQueryManager$1
-org.apache.ignite.internal.processors.query.UpdateSourceIterator
 org.apache.ignite.internal.processors.query.aware.IndexBuildStatusHolder$Status
 org.apache.ignite.internal.processors.query.aware.IndexRebuildCacheInfo
 
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/DummyQueryIndexing.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/DummyQueryIndexing.java
index 44be692e128..0d5244cff4b 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/DummyQueryIndexing.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/DummyQueryIndexing.java
@@ -27,7 +27,6 @@ import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContextInfo;
-import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import org.apache.ignite.internal.processors.odbc.jdbc.JdbcParameterMeta;
 import org.apache.ignite.internal.processors.query.running.RunningQueryManager;
@@ -123,24 +122,6 @@ public class DummyQueryIndexing implements 
GridQueryIndexing {
 
     }
 
-    /** {@inheritDoc} */
-    @Override public UpdateSourceIterator<?> 
executeUpdateOnDataNodeTransactional(
-        GridCacheContext<?, ?> cctx,
-        int[] ids,
-        int[] parts,
-        String schema,
-        String qry,
-        Object[] params,
-        int flags,
-        int pageSize,
-        int timeout,
-        AffinityTopologyVersion topVer,
-        MvccSnapshot mvccSnapshot,
-        GridQueryCancel cancel
-    ) throws IgniteCheckedException {
-        return null;
-    }
-
     /** {@inheritDoc} */
     @Override public List<JdbcParameterMeta> parameterMetaData(
         String schemaName,
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index ec627587d9f..2356550a4d8 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -62,15 +62,10 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheContextInfo;
 import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.IgniteClusterReadOnlyException;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture;
-import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal;
-import org.apache.ignite.internal.processors.cache.mvcc.MvccQueryTracker;
-import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
-import org.apache.ignite.internal.processors.cache.mvcc.StaticMvccQueryTracker;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import 
org.apache.ignite.internal.processors.cache.query.GridCacheQueryMarshallable;
 import org.apache.ignite.internal.processors.cache.query.GridCacheQueryType;
 import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
-import 
org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter;
 import org.apache.ignite.internal.processors.cache.tree.CacheDataTree;
 import org.apache.ignite.internal.processors.odbc.jdbc.JdbcParameterMeta;
 import 
org.apache.ignite.internal.processors.query.GridQueryCacheObjectsIterator;
@@ -86,7 +81,6 @@ import 
org.apache.ignite.internal.processors.query.IgniteSQLException;
 import org.apache.ignite.internal.processors.query.QueryField;
 import org.apache.ignite.internal.processors.query.QueryUtils;
 import org.apache.ignite.internal.processors.query.SqlClientContext;
-import org.apache.ignite.internal.processors.query.UpdateSourceIterator;
 import 
org.apache.ignite.internal.processors.query.h2.affinity.H2PartitionResolver;
 import 
org.apache.ignite.internal.processors.query.h2.affinity.PartitionExtractor;
 import 
org.apache.ignite.internal.processors.query.h2.dml.DmlDistributedPlanInfo;
@@ -116,8 +110,6 @@ import 
org.apache.ignite.internal.processors.tracing.MTC.TraceSurroundings;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.apache.ignite.internal.sql.SqlParseException;
 import org.apache.ignite.internal.sql.command.SqlCommand;
-import org.apache.ignite.internal.sql.command.SqlCommitTransactionCommand;
-import org.apache.ignite.internal.sql.command.SqlRollbackTransactionCommand;
 import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult;
 import org.apache.ignite.internal.util.GridEmptyCloseableIterator;
 import org.apache.ignite.internal.util.GridSpinBusyLock;
@@ -127,7 +119,6 @@ import 
org.apache.ignite.internal.util.lang.IgniteInClosure2X;
 import org.apache.ignite.internal.util.lang.IgniteSingletonIterator;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiClosure;
 import org.apache.ignite.lang.IgniteBiTuple;
@@ -147,11 +138,8 @@ import org.h2.util.JdbcUtils;
 import org.h2.value.CompareMode;
 import org.jetbrains.annotations.Nullable;
 
-import static java.lang.Math.max;
-import static java.lang.Math.min;
 import static java.util.Collections.singletonList;
 import static org.apache.ignite.events.EventType.EVT_SQL_QUERY_EXECUTION;
-import static org.apache.ignite.internal.processors.cache.mvcc.MvccUtils.tx;
 import static 
org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.TEXT;
 import static 
org.apache.ignite.internal.processors.query.h2.H2Utils.UPDATE_RESULT_META;
 import static 
org.apache.ignite.internal.processors.query.h2.H2Utils.generateFieldsQueryString;
@@ -392,9 +380,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
      * @param qryParams Query parameters.
      * @param select Select.
      * @param filter Cache name and key filter.
-     * @param mvccTracker Query tracker.
      * @param cancel Query cancel.
-     * @param inTx Flag whether the query is executed in transaction.
      * @param timeout Timeout.
      * @return Query result.
      */
@@ -404,139 +390,92 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         QueryParameters qryParams,
         QueryParserResultSelect select,
         final IndexingQueryFilter filter,
-        MvccQueryTracker mvccTracker,
         GridQueryCancel cancel,
-        boolean inTx,
         int timeout
     ) {
-        String qry;
+        String qry = qryDesc.sql();
 
-        if (select.forUpdate())
-            qry = inTx ? select.forUpdateQueryTx() : 
select.forUpdateQueryOutTx();
-        else
-            qry = qryDesc.sql();
-
-        boolean mvccEnabled = mvccTracker != null;
-
-        try {
-            assert select != null;
-
-            if (ctx.security().enabled())
-                checkSecurity(select.cacheIds());
+        assert select != null;
 
-            MvccSnapshot mvccSnapshot = null;
+        if (ctx.security().enabled())
+            checkSecurity(select.cacheIds());
 
-            if (mvccEnabled)
-                mvccSnapshot = mvccTracker.snapshot();
+        final QueryContext qctx = new QueryContext(
+            0,
+            filter,
+            null,
+            null,
+            null,
+            true
+        );
 
-            final QueryContext qctx = new QueryContext(
-                0,
-                filter,
-                null,
-                mvccSnapshot,
-                null,
-                true
-            );
+        return new GridQueryFieldsResultAdapter(select.meta(), null) {
+            @Override public GridCloseableIterator<List<?>> iterator() throws 
IgniteCheckedException {
+                H2PooledConnection conn = 
connections().connection(qryDesc.schemaName());
 
-            return new GridQueryFieldsResultAdapter(select.meta(), null) {
-                @Override public GridCloseableIterator<List<?>> iterator() 
throws IgniteCheckedException {
-                    H2PooledConnection conn = 
connections().connection(qryDesc.schemaName());
+                try (TraceSurroundings ignored = 
MTC.support(ctx.tracing().create(SQL_ITER_OPEN, MTC.span()))) {
+                    H2Utils.setupConnection(conn, qctx,
+                        qryDesc.distributedJoins(), 
qryDesc.enforceJoinOrder(), qryParams.lazy());
 
-                    try (TraceSurroundings ignored = 
MTC.support(ctx.tracing().create(SQL_ITER_OPEN, MTC.span()))) {
-                        H2Utils.setupConnection(conn, qctx,
-                            qryDesc.distributedJoins(), 
qryDesc.enforceJoinOrder(), qryParams.lazy());
+                    PreparedStatement stmt = conn.prepareStatement(qry, 
H2StatementCache.queryFlags(qryDesc));
 
-                        PreparedStatement stmt = conn.prepareStatement(qry, 
H2StatementCache.queryFlags(qryDesc));
+                    // Convert parameters into BinaryObjects.
+                    Marshaller m = ctx.config().getMarshaller();
+                    byte[] paramsBytes = U.marshal(m, qryParams.arguments());
+                    final ClassLoader ldr = U.resolveClassLoader(ctx.config());
 
-                        // Convert parameters into BinaryObjects.
-                        Marshaller m = ctx.config().getMarshaller();
-                        byte[] paramsBytes = U.marshal(m, 
qryParams.arguments());
-                        final ClassLoader ldr = 
U.resolveClassLoader(ctx.config());
+                    Object[] params;
 
-                        Object[] params;
+                    if (m instanceof BinaryMarshaller) {
+                        params = 
BinaryUtils.rawArrayFromBinary(((BinaryMarshaller)m).binaryMarshaller()
+                            .unmarshal(paramsBytes, ldr));
+                    }
+                    else
+                        params = U.unmarshal(m, paramsBytes, ldr);
 
-                        if (m instanceof BinaryMarshaller) {
-                            params = 
BinaryUtils.rawArrayFromBinary(((BinaryMarshaller)m).binaryMarshaller()
-                                .unmarshal(paramsBytes, ldr));
-                        }
-                        else
-                            params = U.unmarshal(m, paramsBytes, ldr);
-
-                        H2Utils.bindParameters(stmt, F.asList(params));
-
-                        H2QueryInfo qryInfo = new 
H2QueryInfo(H2QueryInfo.QueryType.LOCAL, stmt, qry,
-                            ctx.localNodeId(), qryId);
-
-                        if (ctx.performanceStatistics().enabled()) {
-                            ctx.performanceStatistics().queryProperty(
-                                GridCacheQueryType.SQL_FIELDS,
-                                qryInfo.nodeId(),
-                                qryInfo.queryId(),
-                                "Local plan",
-                                qryInfo.plan()
-                            );
-                        }
+                    H2Utils.bindParameters(stmt, F.asList(params));
 
-                        ResultSet rs = executeSqlQueryWithTimer(
-                            stmt,
-                            conn,
-                            qry,
-                            timeout,
-                            cancel,
-                            qryParams.dataPageScanEnabled(),
-                            qryInfo
-                        );
+                    H2QueryInfo qryInfo = new 
H2QueryInfo(H2QueryInfo.QueryType.LOCAL, stmt, qry,
+                        ctx.localNodeId(), qryId);
 
-                        return new H2FieldsIterator(
-                            rs,
-                            mvccTracker,
-                            conn,
-                            qryParams.pageSize(),
-                            log,
-                            IgniteH2Indexing.this,
-                            qryInfo,
-                            ctx.tracing()
+                    if (ctx.performanceStatistics().enabled()) {
+                        ctx.performanceStatistics().queryProperty(
+                            GridCacheQueryType.SQL_FIELDS,
+                            qryInfo.nodeId(),
+                            qryInfo.queryId(),
+                            "Local plan",
+                            qryInfo.plan()
                         );
                     }
-                    catch (IgniteCheckedException | RuntimeException | Error 
e) {
-                        conn.close();
 
-                        try {
-                            if (mvccTracker != null)
-                                mvccTracker.onDone();
-                        }
-                        catch (Exception e0) {
-                            e.addSuppressed(e0);
-                        }
+                    ResultSet rs = executeSqlQueryWithTimer(
+                        stmt,
+                        conn,
+                        qry,
+                        timeout,
+                        cancel,
+                        qryParams.dataPageScanEnabled(),
+                        qryInfo
+                    );
 
-                        throw e;
-                    }
+                    return new H2FieldsIterator(
+                        rs,
+                        null,
+                        conn,
+                        qryParams.pageSize(),
+                        log,
+                        IgniteH2Indexing.this,
+                        qryInfo,
+                        ctx.tracing()
+                    );
                 }
-            };
-        }
-        catch (Exception e) {
-            GridNearTxLocal tx = null;
-
-            if (mvccEnabled && (tx != null || (tx = tx(ctx)) != null))
-                tx.setRollbackOnly();
+                catch (IgniteCheckedException | RuntimeException | Error e) {
+                    conn.close();
 
-            throw e;
-        }
-    }
-
-    /**
-     * @param qryTimeout Query timeout in milliseconds.
-     * @param tx Transaction.
-     * @return Timeout for operation in milliseconds based on query and tx 
timeouts.
-     */
-    public static int operationTimeout(int qryTimeout, IgniteTxAdapter tx) {
-        if (tx != null) {
-            int remaining = (int)tx.remainingTime();
-
-            return remaining > 0 && qryTimeout > 0 ? min(remaining, 
qryTimeout) : max(remaining, qryTimeout);
-        }
-
-        return qryTimeout;
+                    throw e;
+                }
+            }
+        };
     }
 
     /** {@inheritDoc} */
@@ -684,8 +623,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                 selectParseRes.select(),
                 null,
                 null,
-                null,
-                false,
                 0
             );
 
@@ -953,23 +890,10 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
     }
 
     /**
-     * Check whether command could be executed with the given cluster state.
-     *
-     * @param parseRes Parsing result.
+     * Check cluster state.
      */
-    private void checkClusterState(QueryParserResult parseRes) {
+    private void checkClusterState() {
         if (!ctx.state().publicApiActiveState(true)) {
-            if (parseRes.isCommand()) {
-                QueryParserResultCommand cmd = parseRes.command();
-
-                assert cmd != null;
-
-                SqlCommand cmd0 = cmd.commandNative();
-
-                if (cmd0 instanceof SqlCommitTransactionCommand || cmd0 
instanceof SqlRollbackTransactionCommand)
-                    return;
-            }
-
             throw new IgniteException("Can not perform the operation because 
the cluster is inactive. Note, " +
                 "that the cluster is considered inactive by default if Ignite 
Persistent Store is used to " +
                 "let all the nodes join the cluster. To activate the cluster 
call" +
@@ -1018,7 +942,7 @@ public class IgniteH2Indexing implements GridQueryIndexing 
{
                 }
 
                 // Check if cluster state is valid.
-                checkClusterState(parseRes);
+                checkClusterState();
 
                 // Execute.
                 if (parseRes.isCommand()) {
@@ -1188,28 +1112,14 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         long qryId = registerRunningQuery(qryDesc, qryParams, cancel, 
select.statement());
 
         try (TraceSurroundings ignored = 
MTC.support(ctx.tracing().create(SQL_CURSOR_OPEN, MTC.span()))) {
-            GridNearTxLocal tx = null;
-            MvccQueryTracker tracker = null;
-            GridCacheContext mvccCctx = null;
-
-            boolean inTx = false;
-
-            int timeout = operationTimeout(qryParams.timeout(), tx);
-
             Iterable<List<?>> iter = executeSelect0(
                 qryId,
                 qryDesc,
                 qryParams,
                 select,
                 keepBinary,
-                tracker,
                 cancel,
-                inTx,
-                timeout);
-
-            // Execute SELECT FOR UPDATE if needed.
-            if (select.forUpdate() && inTx)
-                iter = lockSelectedRows(iter, mvccCctx, timeout, 
qryParams.pageSize());
+                qryParams.timeout());
 
             RegisteredQueryCursor<List<?>> cursor = new 
RegisteredQueryCursor<>(iter, cancel, runningQueryManager(),
                 qryParams.lazy(), qryId, ctx.tracing());
@@ -1241,7 +1151,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
      * @param qryId Query id.
      * @param schema Schema.
      * @param selectQry Select query.
-     * @param mvccTracker MVCC tracker.
      * @param cancel Cancel.
      * @param timeout Timeout.
      * @return Fields query.
@@ -1250,7 +1159,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         long qryId,
         String schema,
         SqlFieldsQuery selectQry,
-        MvccQueryTracker mvccTracker,
         GridQueryCancel cancel,
         int timeout
     ) {
@@ -1266,9 +1174,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
             parseRes.queryParameters(),
             select,
             true,
-            mvccTracker,
             cancel,
-            false,
             timeout
         );
 
@@ -1289,9 +1195,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
      * @param qryParams Parameters.
      * @param select Select.
      * @param keepBinary Whether binary objects must not be deserialized 
automatically.
-     * @param mvccTracker MVCC tracker.
      * @param cancel Query cancel state holder.
-     * @param inTx Flag whether query is executed within transaction.
      * @param timeout Timeout.
      * @return Query result.
      */
@@ -1301,9 +1205,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         QueryParameters qryParams,
         QueryParserResultSelect select,
         boolean keepBinary,
-        MvccQueryTracker mvccTracker,
         GridQueryCancel cancel,
-        boolean inTx,
         int timeout
     ) {
         // Check security.
@@ -1314,8 +1216,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
 
         if (select.splitNeeded()) {
             // Distributed query.
-            GridCacheTwoStepQuery twoStepQry = select.forUpdate() && inTx ?
-                select.forUpdateTwoStepQuery() : select.twoStepQuery();
+            GridCacheTwoStepQuery twoStepQry = select.twoStepQuery();
 
             assert twoStepQry != null;
 
@@ -1325,7 +1226,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                 qryParams,
                 twoStepQry,
                 keepBinary,
-                mvccTracker,
                 cancel,
                 timeout
             );
@@ -1340,9 +1240,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                 qryParams,
                 select,
                 filter,
-                mvccTracker,
                 cancel,
-                inTx,
                 timeout
             );
 
@@ -1359,21 +1257,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         return iter;
     }
 
-    /**
-     * Locks rows from query cursor and returns the select result.
-     *
-     * @param cur Query cursor.
-     * @param cctx Cache context.
-     * @param pageSize Page size.
-     * @param timeout Timeout.
-     * @return Query results cursor.
-     */
-    private Iterable<List<?>> lockSelectedRows(Iterable<List<?>> cur, 
GridCacheContext cctx, int pageSize, long timeout) {
-        assert false; // ex mvcc code, should never happen
-
-        return null;
-    }
-
     /**
      * Register running query.
      *
@@ -1477,123 +1360,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         return runningQueryManager().unregisterQueryFinishedListener(lsnr);
     }
 
-    /** {@inheritDoc} */
-    @Override public UpdateSourceIterator<?> 
executeUpdateOnDataNodeTransactional(
-        GridCacheContext<?, ?> cctx,
-        int[] ids,
-        int[] parts,
-        String schema,
-        String qry,
-        Object[] params,
-        int flags,
-        int pageSize,
-        int timeout,
-        AffinityTopologyVersion topVer,
-        MvccSnapshot mvccSnapshot,
-        GridQueryCancel cancel
-    ) {
-        SqlFieldsQuery fldsQry = QueryUtils.withQueryTimeout(new 
SqlFieldsQuery(qry), timeout, TimeUnit.MILLISECONDS);
-
-        if (params != null)
-            fldsQry.setArgs(params);
-
-        fldsQry.setEnforceJoinOrder(U.isFlagSet(flags, 
GridH2QueryRequest.FLAG_ENFORCE_JOIN_ORDER));
-        fldsQry.setTimeout(timeout, TimeUnit.MILLISECONDS);
-        fldsQry.setPageSize(pageSize);
-        fldsQry.setLocal(true);
-        fldsQry.setLazy(U.isFlagSet(flags, GridH2QueryRequest.FLAG_LAZY));
-
-        boolean loc = true;
-
-        final boolean replicated = U.isFlagSet(flags, 
GridH2QueryRequest.FLAG_REPLICATED);
-
-        GridCacheContext<?, ?> cctx0;
-
-        if (!replicated
-            && !F.isEmpty(ids)
-            && (cctx0 = CU.firstPartitioned(cctx.shared(), ids)) != null
-            && cctx0.config().getQueryParallelism() > 1) {
-            fldsQry.setDistributedJoins(true);
-
-            loc = false;
-        }
-
-        QueryParserResult parseRes = parser.parse(schema, fldsQry, false);
-
-        assert parseRes.remainingQuery() == null;
-
-        QueryParserResultDml dml = parseRes.dml();
-
-        assert dml != null;
-
-        IndexingQueryFilter filter = backupFilter(topVer, parts);
-
-        UpdatePlan plan = dml.plan();
-
-        GridCacheContext planCctx = plan.cacheContext();
-
-        // Force keepBinary for operation context to avoid binary 
deserialization inside entry processor
-        DmlUtils.setKeepBinaryContext(planCctx);
-
-        SqlFieldsQuery selectFieldsQry = QueryUtils.withQueryTimeout(
-            new SqlFieldsQuery(plan.selectQuery(), fldsQry.isCollocated()),
-            fldsQry.getTimeout(),
-            TimeUnit.MILLISECONDS
-        )
-            .setArgs(fldsQry.getArgs())
-            .setDistributedJoins(fldsQry.isDistributedJoins())
-            .setEnforceJoinOrder(fldsQry.isEnforceJoinOrder())
-            .setLocal(fldsQry.isLocal())
-            .setPageSize(fldsQry.getPageSize())
-            .setTimeout(fldsQry.getTimeout(), TimeUnit.MILLISECONDS)
-            .setLazy(fldsQry.isLazy());
-
-        QueryCursorImpl<List<?>> cur;
-
-        // Do a two-step query only if locality flag is not set AND if plan's 
SELECT corresponds to an actual
-        // sub-query and not some dummy stuff like "select 1, 2, 3;"
-        if (!loc && !plan.isLocalSubquery()) {
-            cur = executeSelectForDml(
-                RunningQueryManager.UNDEFINED_QUERY_ID,
-                schema,
-                selectFieldsQry,
-                new StaticMvccQueryTracker(planCctx, mvccSnapshot),
-                cancel,
-                timeout
-            );
-        }
-        else {
-            selectFieldsQry.setLocal(true);
-
-            QueryParserResult selectParseRes = parser.parse(schema, 
selectFieldsQry, false);
-
-            GridQueryFieldsResult res = executeSelectLocal(
-                RunningQueryManager.UNDEFINED_QUERY_ID,
-                selectParseRes.queryDescriptor(),
-                selectParseRes.queryParameters(),
-                selectParseRes.select(),
-                filter,
-                new StaticMvccQueryTracker(planCctx, mvccSnapshot),
-                cancel,
-                true,
-                timeout
-            );
-
-            cur = new QueryCursorImpl<>(new Iterable<List<?>>() {
-                @Override public Iterator<List<?>> iterator() {
-                    try {
-                        return res.iterator();
-                    }
-                    catch (IgniteCheckedException e) {
-                        throw new IgniteException(e);
-                    }
-                }
-            }, cancel, true, selectParseRes.queryParameters().lazy());
-        }
-
-        return plan.iteratorForTransaction(connMgr, cur);
-    }
-
     /**
      * Run distributed query on detected set of partitions.
      *
@@ -1602,7 +1368,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
      * @param qryParams Query parameters.
      * @param twoStepQry Two-step query.
      * @param keepBinary Keep binary flag.
-     * @param mvccTracker Query tracker.
      * @param cancel Cancel handler.
      * @param timeout Timeout.
      * @return Cursor representing distributed query result.
@@ -1614,7 +1379,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
         final QueryParameters qryParams,
         final GridCacheTwoStepQuery twoStepQry,
         final boolean keepBinary,
-        MvccQueryTracker mvccTracker,
         final GridQueryCancel cancel,
         int timeout
     ) {
@@ -1660,17 +1424,11 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                             qryParams.arguments(),
                             parts,
                             qryParams.lazy(),
-                            mvccTracker,
+                            null,
                             qryParams.dataPageScanEnabled(),
                             qryParams.pageSize()
                         );
                     }
-                    catch (Throwable e) {
-                        if (mvccTracker != null)
-                            mvccTracker.onDone();
-
-                        throw e;
-                    }
                 }
             };
         }
@@ -2326,7 +2084,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
             UpdateResult r;
 
             try {
-                r = executeUpdateNonTransactional(
+                r = executeUpdate0(
                     qryId,
                     qryDesc,
                     qryParams,
@@ -2360,7 +2118,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
     }
 
     /**
-     * Execute update in non-transactional mode.
+     * Execute update.
      *
      * @param qryId Query id.
      * @param qryDesc Query descriptor.
@@ -2372,7 +2130,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
      * @return Update result.
      * @throws IgniteCheckedException If failed.
      */
-    private UpdateResult executeUpdateNonTransactional(
+    private UpdateResult executeUpdate0(
         long qryId,
         QueryDescriptor qryDesc,
         QueryParameters qryParams,
@@ -2424,7 +2182,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
             .setLocal(qryDesc.local())
             .setPageSize(qryParams.pageSize())
             .setTimeout(qryParams.timeout(), TimeUnit.MILLISECONDS)
-            // On no MVCC mode we cannot use lazy mode when UPDATE query 
contains updated columns
+            // We cannot use lazy mode when UPDATE query contains updated 
columns
             // in WHERE condition because it may be cause of update one entry 
several times
             // (when index for such columns is selected for scan):
             // e.g. : UPDATE test SET val = val + 1 WHERE val >= ?
@@ -2441,7 +2199,6 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                 qryId,
                 qryDesc.schemaName(),
                 selectFieldsQry,
-                null,
                 selectCancel,
                 qryParams.timeout()
             );
@@ -2459,9 +2216,7 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                 selectParseRes.queryParameters(),
                 selectParseRes.select(),
                 filters,
-                null,
                 selectCancel,
-                false,
                 qryParams.timeout()
             );
 
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParser.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParser.java
index ec27eee5da3..abe10324d88 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParser.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParser.java
@@ -43,12 +43,10 @@ import 
org.apache.ignite.internal.processors.query.h2.dml.UpdatePlan;
 import org.apache.ignite.internal.processors.query.h2.dml.UpdatePlanBuilder;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
 import org.apache.ignite.internal.processors.query.h2.opt.QueryContext;
-import org.apache.ignite.internal.processors.query.h2.sql.GridSqlAlias;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlInsert;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuery;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQueryParser;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter;
-import org.apache.ignite.internal.processors.query.h2.sql.GridSqlSelect;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlStatement;
 import org.apache.ignite.internal.processors.tracing.MTC;
 import org.apache.ignite.internal.processors.tracing.MTC.TraceSurroundings;
@@ -64,7 +62,6 @@ import org.h2.command.Prepared;
 import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.failure.FailureType.CRITICAL_ERROR;
-import static 
org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.keyColumn;
 import static 
org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PARSER_CACHE_HIT;
 import static 
org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY_PARSE;
 
@@ -456,7 +453,6 @@ public class QueryParser {
                 GridSqlQuery selectStmt = (GridSqlQuery)parser.parse(prepared);
 
                 List<Integer> cacheIds = parser.cacheIds();
-                Integer mvccCacheId = null;
 
                 // Calculate if query is in fact can be executed locally.
                 boolean loc = qry.isLocal();
@@ -481,62 +477,9 @@ public class QueryParser {
                 // node stripes in parallel and then merged through reduce 
process.
                 boolean splitNeeded = !loc || locSplit;
 
-                String forUpdateQryOutTx = null;
-                String forUpdateQryTx = null;
-                GridCacheTwoStepQuery forUpdateTwoStepQry = null;
-
-                boolean forUpdate = 
GridSqlQueryParser.isForUpdateQuery(prepared);
-
-                // SELECT FOR UPDATE case handling. We need to create extra 
queries with appended _key
-                // column to be able to lock selected rows further.
-                if (forUpdate) {
-                    // We have checked above that it's not an UNION query, so 
it's got to be SELECT.
-                    assert selectStmt instanceof GridSqlSelect;
-
-                    // Check FOR UPDATE invariants: only one table, MVCC is 
there.
-                    if (cacheIds.size() != 1)
-                        throw new IgniteSQLException("SELECT FOR UPDATE is 
supported only for queries " +
-                            "that involve single transactional cache.");
-
-                    if (mvccCacheId == null)
-                        throw new IgniteSQLException("SELECT FOR UPDATE query 
requires transactional cache " +
-                            "with MVCC enabled.", 
IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
-
-                    // We need a copy because we are going to modify AST a 
bit. We do not want to modify original select.
-                    GridSqlSelect selForUpdate = 
((GridSqlSelect)selectStmt).copySelectForUpdate();
-
-                    // Clear forUpdate flag to run it as a plain query.
-                    selForUpdate.forUpdate(false);
-                    ((GridSqlSelect)selectStmt).forUpdate(false);
-
-                    // Remember sql string without FOR UPDATE clause.
-                    forUpdateQryOutTx = selForUpdate.getSQL();
-
-                    GridSqlAlias keyCol = keyColumn(selForUpdate);
-
-                    selForUpdate.addColumn(keyCol, true);
-
-                    // Remember sql string without FOR UPDATE clause and with 
_key column.
-                    forUpdateQryTx = selForUpdate.getSQL();
-
-                    // Prepare additional two-step query for FOR UPDATE case.
-                    if (splitNeeded) {
-                        c.schema(newQry.getSchema());
-
-                        forUpdateTwoStepQry = GridSqlQuerySplitter.split(
-                            c,
-                            selForUpdate,
-                            forUpdateQryTx,
-                            newQry.isCollocated(),
-                            newQry.isDistributedJoins(),
-                            newQry.isEnforceJoinOrder(),
-                            locSplit,
-                            idx,
-                            paramsCnt,
-                            log
-                        );
-                    }
-                }
+                if (GridSqlQueryParser.isForUpdateQuery(prepared))
+                    throw new IgniteSQLException("SELECT FOR UPDATE queries 
are not supported.",
+                        IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
 
                 GridCacheTwoStepQuery twoStepQry = null;
 
@@ -564,12 +507,8 @@ public class QueryParser {
                 QueryParserResultSelect select = new QueryParserResultSelect(
                     selectStmt,
                     twoStepQry,
-                    forUpdateTwoStepQry,
                     meta,
-                    cacheIds,
-                    mvccCacheId,
-                    forUpdateQryOutTx,
-                    forUpdateQryTx
+                    cacheIds
                 );
 
                 return new QueryParserResult(
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParserResultSelect.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParserResultSelect.java
index 8c6c5ff4d62..d4b4443c43d 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParserResultSelect.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/QueryParserResultSelect.java
@@ -33,68 +33,30 @@ public class QueryParserResultSelect {
     /** Two-step query, or {@code} null if this result is for local query. */
     private final GridCacheTwoStepQuery twoStepQry;
 
-    /**
-     * Two-step query in SELECT FOR UPDATE case, or {@code} null if this 
result is for local query.
-     * If a query is for update, we need to save two  variants of the this 
query.
-     * First variant {@link QueryParserResultSelect#twoStepQry} is used  when 
the query is executed outside
-     * of transaction - it is executed as a plain query.  The second variant 
of the query - is actually
-     * a "for update" query which is used when running within transaction. In 
this query an extra _key column
-     * is implicitly appended to query columns. This extra column is used to 
lock the selected rows.
-     * This column is hidden from client.
-     */
-    private final GridCacheTwoStepQuery forUpdateTwoStepQry;
-
     /** Metadata for two-step query, or {@code} null if this result is for 
local query. */
     private final List<GridQueryFieldMetadata> meta;
 
     /** Involved cache IDs. */
     private final List<Integer> cacheIds;
 
-    /** ID of the first MVCC cache. */
-    private final Integer mvccCacheId;
-
-    /**
-     * Sql query with cleared "FOR UPDATE" statement.
-     * This string is used when query is executed out of transaction.
-     */
-    private final String forUpdateQryOutTx;
-
-    /**
-     * Sql query for update. Contains additional "_key" column.
-     * This string is used when executing query within explicit transaction.
-     */
-    private final String forUpdateQryTx;
-
     /**
      * Constructor.
      *
      * @param stmt Statement.
      * @param twoStepQry Distributed query plan.
-     * @param forUpdateTwoStepQry FOR UPDATE query for execution within 
transaction.
      * @param meta Fields metadata.
      * @param cacheIds Cache IDs.
-     * @param mvccCacheId ID of the first MVCC cache.
-     * @param forUpdateQryOutTx FOR UPDATE query string for execution out of 
transaction.
-     * @param forUpdateQryTx FOR UPDATE query string for execution within 
transaction.
      */
     public QueryParserResultSelect(
         GridSqlStatement stmt,
         @Nullable GridCacheTwoStepQuery twoStepQry,
-        @Nullable GridCacheTwoStepQuery forUpdateTwoStepQry,
         List<GridQueryFieldMetadata> meta,
-        List<Integer> cacheIds,
-        @Nullable Integer mvccCacheId,
-        String forUpdateQryOutTx,
-        String forUpdateQryTx
+        List<Integer> cacheIds
     ) {
         this.stmt = stmt;
         this.twoStepQry = twoStepQry;
-        this.forUpdateTwoStepQry = forUpdateTwoStepQry;
         this.meta = meta;
         this.cacheIds = cacheIds;
-        this.mvccCacheId = mvccCacheId;
-        this.forUpdateQryOutTx = forUpdateQryOutTx;
-        this.forUpdateQryTx = forUpdateQryTx;
     }
 
     /**
@@ -111,13 +73,6 @@ public class QueryParserResultSelect {
         return twoStepQry;
     }
 
-    /**
-     * @return Two-step query for update, or {@code} null if this result is 
for local query.
-     */
-    @Nullable public GridCacheTwoStepQuery forUpdateTwoStepQuery() {
-        return forUpdateTwoStepQry;
-    }
-
     /**
      * @return Two-step query metadata.
      */
@@ -138,32 +93,4 @@ public class QueryParserResultSelect {
     public List<Integer> cacheIds() {
         return cacheIds;
     }
-
-    /**
-     * @return ID of the first MVCC cache.
-     */
-    public Integer mvccCacheId() {
-        return mvccCacheId;
-    }
-
-    /**
-     * @return Whether this is FOR UPDATE query.
-     */
-    public boolean forUpdate() {
-        return forUpdateQryTx != null;
-    }
-
-    /**
-     * @return Sql FOR UPDATE query for execution out of transaction.
-     */
-    public String forUpdateQueryOutTx() {
-        return forUpdateQryOutTx;
-    }
-
-    /**
-     * @return Sql FOR UPDATE query for execution within transaction.
-     */
-    public String forUpdateQueryTx() {
-        return forUpdateQryTx;
-    }
 }
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateResultsIterator.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateResultsIterator.java
deleted file mode 100644
index 5dd9ea203f4..00000000000
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateResultsIterator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.query.h2.dml;
-
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.processors.query.EnlistOperation;
-import org.apache.ignite.internal.processors.query.UpdateSourceIterator;
-
-/**
- * DML update results iterator.
- */
-public class DmlUpdateResultsIterator implements UpdateSourceIterator<Object> {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private final EnlistOperation op;
-
-    /** */
-    private final UpdatePlan plan;
-
-    /** */
-    private Iterator<List<?>> it;
-
-    /**
-     * Constructor.
-     *
-     * @param op Operation.
-     * @param plan Plan.
-     * @param rows Rows.
-     */
-    public DmlUpdateResultsIterator(EnlistOperation op, UpdatePlan plan, 
Iterable<List<?>> rows) {
-        this.op = op;
-        this.plan = plan;
-
-        it = rows.iterator();
-    }
-
-    /** {@inheritDoc} */
-    @Override public EnlistOperation operation() {
-        return op;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean hasNextX() {
-        return it.hasNext();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object nextX() throws IgniteCheckedException {
-        return plan.processRowForTx(it.next());
-    }
-}
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateSingleEntryIterator.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateSingleEntryIterator.java
deleted file mode 100644
index 0266806a565..00000000000
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUpdateSingleEntryIterator.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.query.h2.dml;
-
-import org.apache.ignite.internal.processors.query.EnlistOperation;
-import org.apache.ignite.internal.processors.query.UpdateSourceIterator;
-
-/** */
-public class DmlUpdateSingleEntryIterator<T> implements 
UpdateSourceIterator<T> {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private final EnlistOperation op;
-
-    /** */
-    private final T entry;
-
-    /** */
-    private boolean first = true;
-
-    /**
-     * Constructor.
-     *
-     * @param op Operation.
-     * @param entry Entry.
-     */
-    public DmlUpdateSingleEntryIterator(EnlistOperation op, T entry) {
-        this.op = op;
-        this.entry = entry;
-    }
-
-    /** {@inheritDoc} */
-    @Override public EnlistOperation operation() {
-        return op;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean hasNextX() {
-        return first;
-    }
-
-    /** {@inheritDoc} */
-    @Override public T nextX() {
-        T res = first ? entry : null;
-
-        first = false;
-
-        return res;
-    }
-}
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
index 5151b673839..e68b71682e2 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
@@ -19,26 +19,20 @@ package org.apache.ignite.internal.processors.query.h2.dml;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
-import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
-import org.apache.ignite.internal.processors.query.EnlistOperation;
 import org.apache.ignite.internal.processors.query.GridQueryProperty;
 import org.apache.ignite.internal.processors.query.GridQueryRowDescriptor;
 import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
 import org.apache.ignite.internal.processors.query.IgniteSQLException;
 import org.apache.ignite.internal.processors.query.QueryUtils;
-import org.apache.ignite.internal.processors.query.UpdateSourceIterator;
-import org.apache.ignite.internal.processors.query.h2.ConnectionManager;
 import org.apache.ignite.internal.processors.query.h2.UpdateResult;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
-import org.apache.ignite.internal.util.GridCloseableIteratorAdapterEx;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.T3;
 import org.apache.ignite.lang.IgniteBiTuple;
@@ -375,13 +369,6 @@ public final class UpdatePlan {
         return new T3<>(key, oldVal, newVal);
     }
 
-    /**
-     * @return {@code True} if DML can be fast processed.
-     */
-    public boolean fastResult() {
-        return fastUpdate != null;
-    }
-
     /**
      * Process fast DML operation if possible.
      *
@@ -496,48 +483,6 @@ public final class UpdatePlan {
         }
     }
 
-    /**
-     * Create iterator for transaction.
-     *
-     * @param connMgr Connection manager.
-     * @param cur Cursor.
-     * @return Iterator.
-     */
-    public UpdateSourceIterator<?> iteratorForTransaction(ConnectionManager 
connMgr, QueryCursor<List<?>> cur) {
-        switch (mode) {
-            case MERGE:
-                return new InsertIterator(cur, this, EnlistOperation.UPSERT);
-            case INSERT:
-                return new InsertIterator(cur, this, EnlistOperation.INSERT);
-            case UPDATE:
-                return new UpdateIterator(cur, this, EnlistOperation.UPDATE);
-            case DELETE:
-                return new DeleteIterator( cur, this, EnlistOperation.DELETE);
-
-            default:
-                throw new IllegalArgumentException(String.valueOf(mode));
-        }
-    }
-
-    /**
-     * @param updMode Update plan mode.
-     * @return Operation.
-     */
-    public static EnlistOperation enlistOperation(UpdateMode updMode) {
-        switch (updMode) {
-            case INSERT:
-                return EnlistOperation.INSERT;
-            case MERGE:
-                return EnlistOperation.UPSERT;
-            case UPDATE:
-                return EnlistOperation.UPDATE;
-            case DELETE:
-                return EnlistOperation.DELETE;
-            default:
-                throw new IllegalArgumentException(String.valueOf(updMode));
-        }
-    }
-
     /**
      * @return Update mode.
      */
@@ -580,166 +525,10 @@ public final class UpdatePlan {
         return isLocSubqry;
     }
 
-    /**
-     * @param args Query parameters.
-     * @return Iterator.
-     * @throws IgniteCheckedException If failed.
-     */
-    public IgniteBiTuple getFastRow(Object[] args) throws 
IgniteCheckedException {
-        if (fastUpdate != null)
-            return fastUpdate.getRow(args);
-
-        return null;
-    }
-
-    /**
-     * @param row Row.
-     * @return Resulting entry.
-     * @throws IgniteCheckedException If failed.
-     */
-    public Object processRowForTx(List<?> row) throws IgniteCheckedException {
-        switch (mode()) {
-            case INSERT:
-            case MERGE:
-                return processRow(row);
-
-            case UPDATE: {
-                T3<Object, Object, Object> row0 = processRowForUpdate(row);
-
-                return new IgniteBiTuple<>(row0.get1(), row0.get3());
-            }
-            case DELETE:
-                return row.get(0);
-
-            default:
-                throw new 
UnsupportedOperationException(String.valueOf(mode()));
-        }
-    }
-
     /**
      * @return {@code true} is the SELECT query may be executed in lazy mode.
      */
     public boolean canSelectBeLazy() {
         return canSelectBeLazy;
     }
-
-    /**
-     * Abstract iterator.
-     */
-    private abstract static class AbstractIterator extends 
GridCloseableIteratorAdapterEx<Object>
-        implements UpdateSourceIterator<Object> {
-        /** */
-        private final QueryCursor<List<?>> cur;
-
-        /** */
-        protected final UpdatePlan plan;
-
-        /** */
-        private final Iterator<List<?>> it;
-
-        /** */
-        private final EnlistOperation op;
-
-        /**
-         * @param cur Query cursor.
-         * @param plan Update plan.
-         * @param op Operation.
-         */
-        private AbstractIterator(QueryCursor<List<?>> cur, UpdatePlan plan,
-            EnlistOperation op) {
-            this.cur = cur;
-            this.plan = plan;
-            this.op = op;
-
-            it = cur.iterator();
-        }
-
-        /** {@inheritDoc} */
-        @Override public EnlistOperation operation() {
-            return op;
-        }
-
-        /** {@inheritDoc} */
-        @Override protected void onClose() {
-            cur.close();
-        }
-
-        /** {@inheritDoc} */
-        @Override protected Object onNext() throws IgniteCheckedException {
-            return process(it.next());
-        }
-
-        /** {@inheritDoc} */
-        @Override protected boolean onHasNext() throws IgniteCheckedException {
-            return it.hasNext();
-        }
-
-        /** */
-        protected abstract Object process(List<?> row) throws 
IgniteCheckedException;
-    }
-
-    /** */
-    private static final class UpdateIterator extends AbstractIterator {
-        /** */
-        private static final long serialVersionUID = -4949035950470324961L;
-
-        /**
-         * @param cur Query cursor.
-         * @param plan Update plan.
-         * @param op Operation.
-         */
-        private UpdateIterator(QueryCursor<List<?>> cur, UpdatePlan plan,
-            EnlistOperation op) {
-            super(cur, plan, op);
-        }
-
-        /** {@inheritDoc} */
-        @Override protected Object process(List<?> row) throws 
IgniteCheckedException {
-            T3<Object, Object, Object> row0 = plan.processRowForUpdate(row);
-
-            return new IgniteBiTuple<>(row0.get1(), row0.get3());
-        }
-    }
-
-    /** */
-    private static final class DeleteIterator extends AbstractIterator {
-        /** */
-        private static final long serialVersionUID = -4949035950470324961L;
-
-        /**
-         * @param cur Query cursor.
-         * @param plan Update plan.
-         * @param op Operation.
-         */
-        private DeleteIterator(QueryCursor<List<?>> cur, UpdatePlan plan,
-            EnlistOperation op) {
-            super(cur, plan, op);
-        }
-
-        /** {@inheritDoc} */
-        @Override protected Object process(List<?> row) throws 
IgniteCheckedException {
-            return row.get(0);
-        }
-    }
-
-    /** */
-    private static final class InsertIterator extends AbstractIterator {
-        /** */
-        private static final long serialVersionUID = -4949035950470324961L;
-
-        /**
-         * @param cur Query cursor.
-         * @param plan Update plan.
-         * @param op Operation.
-         */
-        private InsertIterator(QueryCursor<List<?>> cur, UpdatePlan plan,
-            EnlistOperation op) {
-            super(cur, plan, op);
-        }
-
-        /** {@inheritDoc} */
-        @Override protected Object process(List<?> row) throws 
IgniteCheckedException {
-            return plan.processRow(row);
-        }
-    }
 }
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/SqlUnsupportedSelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/SqlUnsupportedSelfTest.java
index 66233bbfc6b..456504665ee 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/SqlUnsupportedSelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/SqlUnsupportedSelfTest.java
@@ -257,6 +257,8 @@ public class SqlUnsupportedSelfTest extends 
AbstractIndexingCommonTest {
 
         assertSqlUnsupported("GRANT SELECT ON test TO PUBLIC");
         assertSqlUnsupported("REVOKE SELECT ON test FROM PUBLIC");
+
+        assertSqlUnsupported("SELECT * FROM TEST FOR UPDATE");
     }
 
     /**

Reply via email to