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

vozerov 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 47693b6  IGNITE-11443: SQL: Usability changes to system views. This 
closes #6248.
47693b6 is described below

commit 47693b61ede12f4b94cb42c51e1cc67cd82bff8b
Author: Yuriy Gerzhedovich <[email protected]>
AuthorDate: Tue Mar 26 16:34:05 2019 +0300

    IGNITE-11443: SQL: Usability changes to system views. This closes #6248.
---
 .../h2/sys/view/SqlAbstractLocalSystemView.java    |  46 ++++
 .../h2/sys/view/SqlSystemViewBaselineNodes.java    |   2 +-
 .../h2/sys/view/SqlSystemViewCacheGroups.java      |  51 ++--
 .../view/SqlSystemViewCacheGroupsIOStatistics.java |   8 +-
 .../query/h2/sys/view/SqlSystemViewCaches.java     | 147 ++++++------
 .../query/h2/sys/view/SqlSystemViewIndexes.java    |  32 ++-
 .../query/h2/sys/view/SqlSystemViewNodes.java      |   8 +-
 .../query/h2/sys/view/SqlSystemViewTables.java     |  35 ++-
 .../processors/query/SqlSystemViewsSelfTest.java   | 262 +++++++++++++--------
 9 files changed, 368 insertions(+), 223 deletions(-)

diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlAbstractLocalSystemView.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlAbstractLocalSystemView.java
index 01102da..ef1d329 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlAbstractLocalSystemView.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlAbstractLocalSystemView.java
@@ -18,7 +18,11 @@
 package org.apache.ignite.internal.processors.query.h2.sys.view;
 
 import java.util.UUID;
+
+import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.lang.IgnitePredicate;
 import org.h2.engine.Session;
 import org.h2.result.Row;
 import org.h2.result.SearchRow;
@@ -27,6 +31,7 @@ import org.h2.value.Value;
 import org.h2.value.ValueNull;
 import org.h2.value.ValueString;
 import org.h2.value.ValueTimestamp;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Local system view base class (which uses only local node data).
@@ -147,4 +152,45 @@ public abstract class SqlAbstractLocalSystemView extends 
SqlAbstractSystemView {
         else
             return ValueTimestamp.fromMillis(millis);
     }
+
+    /**
+     * Get node's filter string representation.
+     *
+     * @param ccfg Cache configuration.
+     *
+     * @return String representation of node filter.
+     */
+    @Nullable protected static String nodeFilter(CacheConfiguration<?, ?> 
ccfg) {
+        IgnitePredicate<ClusterNode> nodeFilter = ccfg.getNodeFilter();
+
+        if (nodeFilter instanceof CacheConfiguration.IgniteAllNodesPredicate)
+            nodeFilter = null;
+
+        return toStringSafe(nodeFilter);
+    }
+
+    /**
+     * Get string representation of an object properly catching all exceptions.
+     *
+     * @param obj Object.
+     * @return Result or {@code null}.
+     */
+    @Nullable protected static String toStringSafe(@Nullable Object obj) {
+        if (obj == null)
+            return null;
+        else {
+            try {
+                return obj.toString();
+            }
+            catch (Exception e) {
+                try {
+                    return "Failed to convert object to string: " + 
e.getMessage();
+                }
+                catch (Exception e0) {
+                    return "Failed to convert object to string (error message 
is not available)";
+                }
+            }
+        }
+
+    }
 }
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewBaselineNodes.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewBaselineNodes.java
index 54fb9b6..2090830 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewBaselineNodes.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewBaselineNodes.java
@@ -65,7 +65,7 @@ public class SqlSystemViewBaselineNodes extends 
SqlAbstractLocalSystemView {
             rows.add(
                 createRow(
                     ses,
-                    consistentId,
+                    toStringSafe(consistentId),
                     aliveNodeIds.contains(consistentId)
                 )
             );
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroups.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroups.java
index 9353f79..0db6b65 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroups.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroups.java
@@ -20,6 +20,8 @@ package 
org.apache.ignite.internal.processors.query.h2.sys.view;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
 import org.apache.ignite.internal.util.typedef.F;
@@ -36,9 +38,9 @@ public class SqlSystemViewCacheGroups extends 
SqlAbstractLocalSystemView {
      * @param ctx Grid context.
      */
     public SqlSystemViewCacheGroups(GridKernalContext ctx) {
-        super("CACHE_GROUPS", "Cache groups", ctx, "ID",
-            newColumn("ID", Value.INT),
-            newColumn("GROUP_NAME"),
+        super("CACHE_GROUPS", "Cache groups", ctx, "CACHE_GROUP_ID",
+            newColumn("CACHE_GROUP_ID", Value.INT),
+            newColumn("CACHE_GROUP_NAME"),
             newColumn("IS_SHARED", Value.BOOLEAN),
             newColumn("CACHE_COUNT", Value.INT),
             newColumn("CACHE_MODE"),
@@ -57,7 +59,6 @@ public class SqlSystemViewCacheGroups extends 
SqlAbstractLocalSystemView {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Iterator<Row> getRows(Session ses, SearchRow first, 
SearchRow last) {
         SqlSystemViewColumnCondition idCond = conditionForColumn("ID", first, 
last);
 
@@ -77,25 +78,29 @@ public class SqlSystemViewCacheGroups extends 
SqlAbstractLocalSystemView {
             cacheGroups = ctx.cache().cacheGroupDescriptors().values();
 
         return F.iterator(cacheGroups,
-            grp -> createRow(
-                ses,
-                grp.groupId(),
-                grp.cacheOrGroupName(),
-                grp.sharedGroup(),
-                grp.caches() == null ? 0 : grp.caches().size(),
-                grp.config().getCacheMode(),
-                grp.config().getAtomicityMode(),
-                grp.config().getAffinity(),
-                grp.config().getAffinity() != null ? 
grp.config().getAffinity().partitions() : null,
-                grp.config().getNodeFilter(),
-                grp.config().getDataRegionName(),
-                grp.config().getTopologyValidator(),
-                grp.config().getPartitionLossPolicy(),
-                grp.config().getRebalanceMode(),
-                grp.config().getRebalanceDelay(),
-                grp.config().getRebalanceOrder(),
-                grp.config().getBackups()
-            ), true);
+            grp -> {
+                CacheConfiguration<?, ?> ccfg = grp.config();
+
+                return createRow(
+                    ses,
+                    grp.groupId(),
+                    grp.cacheOrGroupName(),
+                    grp.sharedGroup(),
+                    grp.caches() == null ? 0 : grp.caches().size(),
+                    ccfg.getCacheMode(),
+                    ccfg.getAtomicityMode(),
+                    toStringSafe(ccfg.getAffinity()),
+                    ccfg.getAffinity() != null ? 
ccfg.getAffinity().partitions() : null,
+                    nodeFilter(ccfg),
+                    ccfg.getDataRegionName(),
+                    toStringSafe(ccfg.getTopologyValidator()),
+                    ccfg.getPartitionLossPolicy(),
+                    ccfg.getRebalanceMode(),
+                    ccfg.getRebalanceDelay(),
+                    ccfg.getRebalanceOrder(),
+                    ccfg.getCacheMode() == CacheMode.REPLICATED ? null : 
ccfg.getBackups()
+                );
+            }, true);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroupsIOStatistics.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroupsIOStatistics.java
index a2e0cfb..43dde0e 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroupsIOStatistics.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCacheGroupsIOStatistics.java
@@ -40,9 +40,9 @@ public class SqlSystemViewCacheGroupsIOStatistics extends 
SqlAbstractLocalSystem
      * @param ctx Grid context.
      */
     public SqlSystemViewCacheGroupsIOStatistics(GridKernalContext ctx) {
-        super("LOCAL_CACHE_GROUPS_IO", "Local node IO statistics for cache 
groups", ctx, "GROUP_NAME",
-            newColumn("GROUP_ID", Value.INT),
-            newColumn("GROUP_NAME"),
+        super("LOCAL_CACHE_GROUPS_IO", "Local node IO statistics for cache 
groups", ctx, "CACHE_GROUP_NAME",
+            newColumn("CACHE_GROUP_ID", Value.INT),
+            newColumn("CACHE_GROUP_NAME"),
             newColumn("PHYSICAL_READS", Value.LONG),
             newColumn("LOGICAL_READS", Value.LONG)
         );
@@ -50,7 +50,7 @@ public class SqlSystemViewCacheGroupsIOStatistics extends 
SqlAbstractLocalSystem
 
     /** {@inheritDoc} */
     @Override public Iterator<Row> getRows(Session ses, SearchRow first, 
SearchRow last) {
-        SqlSystemViewColumnCondition nameCond = 
conditionForColumn("GROUP_NAME", first, last);
+        SqlSystemViewColumnCondition nameCond = 
conditionForColumn("CACHE_GROUP_NAME", first, last);
 
         Map<IoStatisticsHolderKey, IoStatisticsHolder> stats = 
ctx.ioStats().statistics(IoStatisticsType.CACHE_GROUP);
 
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCaches.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCaches.java
index af78a98..974d72b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCaches.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewCaches.java
@@ -20,6 +20,8 @@ package 
org.apache.ignite.internal.processors.query.h2.sys.view;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
 import org.apache.ignite.internal.util.typedef.F;
@@ -36,12 +38,12 @@ public class SqlSystemViewCaches extends 
SqlAbstractLocalSystemView {
      * @param ctx Grid context.
      */
     public SqlSystemViewCaches(GridKernalContext ctx) {
-        super("CACHES", "Ignite caches", ctx, "NAME",
-            newColumn("NAME"),
+        super("CACHES", "Ignite caches", ctx, "CACHE_NAME",
+            newColumn("CACHE_GROUP_ID", Value.INT),
+            newColumn("CACHE_GROUP_NAME"),
             newColumn("CACHE_ID", Value.INT),
+            newColumn("CACHE_NAME"),
             newColumn("CACHE_TYPE"),
-            newColumn("GROUP_ID", Value.INT),
-            newColumn("GROUP_NAME"),
             newColumn("CACHE_MODE"),
             newColumn("ATOMICITY_MODE"),
             newColumn("IS_ONHEAP_CACHE_ENABLED", Value.BOOLEAN),
@@ -101,9 +103,8 @@ public class SqlSystemViewCaches extends 
SqlAbstractLocalSystemView {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Iterator<Row> getRows(Session ses, SearchRow first, 
SearchRow last) {
-        SqlSystemViewColumnCondition nameCond = conditionForColumn("NAME", 
first, last);
+        SqlSystemViewColumnCondition nameCond = 
conditionForColumn("CACHE_NAME", first, last);
 
         Collection<DynamicCacheDescriptor> caches;
 
@@ -116,71 +117,75 @@ public class SqlSystemViewCaches extends 
SqlAbstractLocalSystemView {
             caches = ctx.cache().cacheDescriptors().values();
 
         return F.iterator(caches,
-            cache -> createRow(
-                ses,
-                cache.cacheName(),
-                cache.cacheId(),
-                cache.cacheType(),
-                cache.groupId(),
-                cache.groupDescriptor().cacheOrGroupName(),
-                cache.cacheConfiguration().getCacheMode(),
-                cache.cacheConfiguration().getAtomicityMode(),
-                cache.cacheConfiguration().isOnheapCacheEnabled(),
-                cache.cacheConfiguration().isCopyOnRead(),
-                cache.cacheConfiguration().isLoadPreviousValue(),
-                cache.cacheConfiguration().isReadFromBackup(),
-                cache.cacheConfiguration().getPartitionLossPolicy(),
-                cache.cacheConfiguration().getNodeFilter(),
-                cache.cacheConfiguration().getTopologyValidator(),
-                cache.cacheConfiguration().isEagerTtl(),
-                cache.cacheConfiguration().getWriteSynchronizationMode(),
-                cache.cacheConfiguration().isInvalidate(),
-                cache.cacheConfiguration().isEventsDisabled(),
-                cache.cacheConfiguration().isStatisticsEnabled(),
-                cache.cacheConfiguration().isManagementEnabled(),
-                cache.cacheConfiguration().getBackups(),
-                cache.cacheConfiguration().getAffinity(),
-                cache.cacheConfiguration().getAffinityMapper(),
-                cache.cacheConfiguration().getRebalanceMode(),
-                cache.cacheConfiguration().getRebalanceBatchSize(),
-                cache.cacheConfiguration().getRebalanceTimeout(),
-                cache.cacheConfiguration().getRebalanceDelay(),
-                cache.cacheConfiguration().getRebalanceThrottle(),
-                cache.cacheConfiguration().getRebalanceBatchesPrefetchCount(),
-                cache.cacheConfiguration().getRebalanceOrder(),
-                cache.cacheConfiguration().getEvictionFilter(),
-                cache.cacheConfiguration().getEvictionPolicyFactory(),
-                cache.cacheConfiguration().getNearConfiguration() != null,
-                cache.cacheConfiguration().getNearConfiguration() != null ?
-                    
cache.cacheConfiguration().getNearConfiguration().getNearEvictionPolicyFactory()
 : null,
-                cache.cacheConfiguration().getNearConfiguration() != null ?
-                    
cache.cacheConfiguration().getNearConfiguration().getNearStartSize() : null,
-                cache.cacheConfiguration().getDefaultLockTimeout(),
-                cache.cacheConfiguration().getInterceptor(),
-                cache.cacheConfiguration().getCacheStoreFactory(),
-                cache.cacheConfiguration().isStoreKeepBinary(),
-                cache.cacheConfiguration().isReadThrough(),
-                cache.cacheConfiguration().isWriteThrough(),
-                cache.cacheConfiguration().isWriteBehindEnabled(),
-                cache.cacheConfiguration().getWriteBehindCoalescing(),
-                cache.cacheConfiguration().getWriteBehindFlushSize(),
-                cache.cacheConfiguration().getWriteBehindFlushFrequency(),
-                cache.cacheConfiguration().getWriteBehindFlushThreadCount(),
-                cache.cacheConfiguration().getWriteBehindBatchSize(),
-                cache.cacheConfiguration().getMaxConcurrentAsyncOperations(),
-                cache.cacheConfiguration().getCacheLoaderFactory(),
-                cache.cacheConfiguration().getCacheWriterFactory(),
-                cache.cacheConfiguration().getExpiryPolicyFactory(),
-                cache.cacheConfiguration().isSqlEscapeAll(),
-                cache.cacheConfiguration().getSqlSchema(),
-                cache.cacheConfiguration().getSqlIndexMaxInlineSize(),
-                cache.cacheConfiguration().isSqlOnheapCacheEnabled(),
-                cache.cacheConfiguration().getSqlOnheapCacheMaxSize(),
-                cache.cacheConfiguration().getQueryDetailMetricsSize(),
-                cache.cacheConfiguration().getQueryParallelism(),
-                cache.cacheConfiguration().getMaxQueryIteratorsCount(),
-                cache.cacheConfiguration().getDataRegionName()
-            ), true);
+            cache -> {
+                CacheConfiguration ccfg = cache.cacheConfiguration();
+
+                return createRow(
+                    ses,
+                    cache.groupId(),
+                    cache.groupDescriptor().cacheOrGroupName(),
+                    cache.cacheId(),
+                    cache.cacheName(),
+                    cache.cacheType(),
+                    ccfg.getCacheMode(),
+                    ccfg.getAtomicityMode(),
+                    ccfg.isOnheapCacheEnabled(),
+                    ccfg.isCopyOnRead(),
+                    ccfg.isLoadPreviousValue(),
+                    ccfg.isReadFromBackup(),
+                    ccfg.getPartitionLossPolicy(),
+                    nodeFilter(ccfg),
+                    toStringSafe(ccfg.getTopologyValidator()),
+                    ccfg.isEagerTtl(),
+                    ccfg.getWriteSynchronizationMode(),
+                    ccfg.isInvalidate(),
+                    ccfg.isEventsDisabled(),
+                    ccfg.isStatisticsEnabled(),
+                    ccfg.isManagementEnabled(),
+                    ccfg.getCacheMode() == CacheMode.REPLICATED ? null : 
ccfg.getBackups(),
+                    toStringSafe(ccfg.getAffinity()),
+                    toStringSafe(ccfg.getAffinityMapper()),
+                    ccfg.getRebalanceMode(),
+                    ccfg.getRebalanceBatchSize(),
+                    ccfg.getRebalanceTimeout(),
+                    ccfg.getRebalanceDelay(),
+                    ccfg.getRebalanceThrottle(),
+                    ccfg.getRebalanceBatchesPrefetchCount(),
+                    ccfg.getRebalanceOrder(),
+                    toStringSafe(ccfg.getEvictionFilter()),
+                    toStringSafe(ccfg.getEvictionPolicyFactory()),
+                    ccfg.getNearConfiguration() != null,
+                    ccfg.getNearConfiguration() != null ?
+                        
toStringSafe(ccfg.getNearConfiguration().getNearEvictionPolicyFactory()) : null,
+                    ccfg.getNearConfiguration() != null ?
+                        ccfg.getNearConfiguration().getNearStartSize() : null,
+                    ccfg.getDefaultLockTimeout(),
+                    toStringSafe(ccfg.getInterceptor()),
+                    toStringSafe(ccfg.getCacheStoreFactory()),
+                    ccfg.isStoreKeepBinary(),
+                    ccfg.isReadThrough(),
+                    ccfg.isWriteThrough(),
+                    ccfg.isWriteBehindEnabled(),
+                    ccfg.getWriteBehindCoalescing(),
+                    ccfg.getWriteBehindFlushSize(),
+                    ccfg.getWriteBehindFlushFrequency(),
+                    ccfg.getWriteBehindFlushThreadCount(),
+                    ccfg.getWriteBehindBatchSize(),
+                    ccfg.getMaxConcurrentAsyncOperations(),
+                    toStringSafe(ccfg.getCacheLoaderFactory()),
+                    toStringSafe(ccfg.getCacheWriterFactory()),
+                    toStringSafe(ccfg.getExpiryPolicyFactory()),
+                    ccfg.isSqlEscapeAll(),
+                    ccfg.getSqlSchema(),
+                    ccfg.getSqlIndexMaxInlineSize(),
+                    ccfg.isSqlOnheapCacheEnabled(),
+                    ccfg.getSqlOnheapCacheMaxSize(),
+                    ccfg.getQueryDetailMetricsSize(),
+                    ccfg.getQueryParallelism(),
+                    ccfg.getMaxQueryIteratorsCount(),
+                    ccfg.getDataRegionName()
+                );
+            }, true);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewIndexes.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewIndexes.java
index a195756..509889a 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewIndexes.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewIndexes.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.function.Predicate;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
 import org.apache.ignite.internal.processors.query.h2.SchemaManager;
 import 
org.apache.ignite.internal.processors.query.h2.database.IndexInformation;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
@@ -46,17 +47,17 @@ public class SqlSystemViewIndexes extends 
SqlAbstractLocalSystemView {
      */
     public SqlSystemViewIndexes(GridKernalContext ctx, SchemaManager 
schemaMgr) {
         super("INDEXES", "Ignite SQL indexes", ctx, "TABLE_NAME",
+            newColumn("CACHE_GROUP_ID", Value.INT),
+            newColumn("CACHE_GROUP_NAME"),
+            newColumn("CACHE_ID", Value.INT),
+            newColumn("CACHE_NAME"),
             newColumn("SCHEMA_NAME"),
             newColumn("TABLE_NAME"),
             newColumn("INDEX_NAME"),
-            newColumn("COLUMNS"),
             newColumn("INDEX_TYPE"),
+            newColumn("COLUMNS"),
             newColumn("IS_PK", Value.BOOLEAN),
             newColumn("IS_UNIQUE", Value.BOOLEAN),
-            newColumn("CACHE_ID", Value.INT),
-            newColumn("CACHE_NAME"),
-            newColumn("GROUP_ID", Value.INT),
-            newColumn("GROUP_NAME"),
             newColumn("INLINE_SIZE", Value.INT)
         );
 
@@ -82,8 +83,15 @@ public class SqlSystemViewIndexes extends 
SqlAbstractLocalSystemView {
         schemaMgr.dataTables().stream().filter(filter).forEach(tbl -> {
             String schema = tbl.getSchema().getName();
             String tblName = tbl.getName();
-            int grpId = tbl.cacheInfo().groupId();
-            String grpName = 
ctx.cache().cacheGroupDescriptors().get(grpId).cacheOrGroupName();
+            int cacheGrpId = tbl.cacheInfo().groupId();
+
+            CacheGroupDescriptor cacheGrpDesc = 
ctx.cache().cacheGroupDescriptors().get(cacheGrpId);
+
+            // We should skip all indexes related to the table in case 
regarding cache group has been removed.
+            if (cacheGrpDesc == null)
+                return;
+
+            String cacheGrpName = cacheGrpDesc.cacheOrGroupName();
             int cacheId = tbl.cacheId();
             String cacheName = tbl.cacheName();
 
@@ -91,17 +99,17 @@ public class SqlSystemViewIndexes extends 
SqlAbstractLocalSystemView {
 
             for (IndexInformation idxInfo : idxInfoList) {
                 Object[] data = new Object[] {
+                    cacheGrpId,
+                    cacheGrpName,
+                    cacheId,
+                    cacheName,
                     schema,
                     tblName,
                     idxInfo.name(),
-                    idxInfo.keySql(),
                     idxInfo.type(),
+                    idxInfo.keySql(),
                     idxInfo.pk(),
                     idxInfo.unique(),
-                    cacheId,
-                    cacheName,
-                    grpId,
-                    grpName,
                     idxInfo.inlineSize()
                 };
 
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewNodes.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewNodes.java
index 57bc8b3..720eb61 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewNodes.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewNodes.java
@@ -39,8 +39,8 @@ public class SqlSystemViewNodes extends 
SqlAbstractLocalSystemView {
      * @param ctx Grid context.
      */
     public SqlSystemViewNodes(GridKernalContext ctx) {
-        super("NODES", "Topology nodes", ctx, "ID",
-            newColumn("ID", Value.UUID),
+        super("NODES", "Topology nodes", ctx, "NODE_ID",
+            newColumn("NODE_ID", Value.UUID),
             newColumn("CONSISTENT_ID"),
             newColumn("VERSION"),
             newColumn("IS_CLIENT", Value.BOOLEAN),
@@ -57,7 +57,7 @@ public class SqlSystemViewNodes extends 
SqlAbstractLocalSystemView {
 
         Collection<ClusterNode> nodes;
 
-        SqlSystemViewColumnCondition idCond = conditionForColumn("ID", first, 
last);
+        SqlSystemViewColumnCondition idCond = conditionForColumn("NODE_ID", 
first, last);
 
         if (idCond.isEquality()) {
             UUID nodeId = uuidFromValue(idCond.valueForEquality());
@@ -73,7 +73,7 @@ public class SqlSystemViewNodes extends 
SqlAbstractLocalSystemView {
                     createRow(
                         ses,
                         node.id(),
-                        node.consistentId(),
+                        toStringSafe(node.consistentId()),
                         node.version(),
                         node.isClient(),
                         node.isDaemon(),
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewTables.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewTables.java
index 081b1e0..4ce9bc5 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewTables.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sys/view/SqlSystemViewTables.java
@@ -17,9 +17,12 @@
 
 package org.apache.ignite.internal.processors.query.h2.sys.view;
 
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.function.Predicate;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
 import org.apache.ignite.internal.processors.query.h2.SchemaManager;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
 import org.h2.engine.Session;
@@ -46,10 +49,12 @@ public class SqlSystemViewTables extends 
SqlAbstractLocalSystemView {
      */
     public SqlSystemViewTables(GridKernalContext ctx, SchemaManager schemaMgr) 
{
         super("TABLES", "Ignite tables", ctx, TABLE_NAME,
+            newColumn("CACHE_GROUP_ID", Value.INT),
+            newColumn("CACHE_GROUP_NAME"),
+            newColumn("CACHE_ID", Value.INT),
+            newColumn("CACHE_NAME"),
             newColumn("SCHEMA_NAME"),
             newColumn(TABLE_NAME),
-            newColumn("CACHE_NAME"),
-            newColumn("CACHE_ID", Value.INT),
             newColumn("AFFINITY_KEY_COLUMN"),
             newColumn("KEY_ALIAS"),
             newColumn("VALUE_ALIAS"),
@@ -74,14 +79,26 @@ public class SqlSystemViewTables extends 
SqlAbstractLocalSystemView {
         else
             filter = tab -> true;
 
-        return schemaMgr.dataTables().stream()
+        List<Row> rows = new ArrayList<>();
+
+        schemaMgr.dataTables().stream()
             .filter(filter)
-            .map(tbl -> {
+            .forEach(tbl -> {
+                    int cacheGrpId = tbl.cacheInfo().groupId();
+
+                    CacheGroupDescriptor cacheGrpDesc = 
ctx.cache().cacheGroupDescriptors().get(cacheGrpId);
+
+                    // We should skip table in case in case regarding cache 
group has been removed.
+                    if (cacheGrpDesc == null)
+                        return;
+
                     Object[] data = new Object[] {
+                        cacheGrpId,
+                        cacheGrpDesc.cacheOrGroupName(),
+                        tbl.cacheId(),
+                        tbl.cacheName(),
                         tbl.getSchema().getName(),
                         tbl.getName(),
-                        tbl.cacheName(),
-                        tbl.cacheId(),
                         computeAffinityColumn(tbl),
                         tbl.rowDescriptor().type().keyFieldAlias(),
                         tbl.rowDescriptor().type().valueFieldAlias(),
@@ -89,9 +106,11 @@ public class SqlSystemViewTables extends 
SqlAbstractLocalSystemView {
                         tbl.rowDescriptor().type().valueTypeName()
                     };
 
-                    return createRow(ses, data);
+                    rows.add(createRow(ses, data));
                 }
-            ).iterator();
+            );
+
+        return rows.iterator();
     }
 
     /**
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
index 1850eae..02936b5 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlSystemViewsSelfTest.java
@@ -68,6 +68,7 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.lang.IgniteFuture;
+import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteRunnable;
 import org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoveryNode;
 import org.apache.ignite.testframework.GridTestUtils;
@@ -157,21 +158,22 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
 
         assertSqlError("ALTER TABLE IGNITE.NODES ADD COLUMN C VARCHAR");
 
-        assertSqlError("ALTER TABLE IGNITE.NODES DROP COLUMN ID");
+        assertSqlError("ALTER TABLE IGNITE.NODES DROP COLUMN NODE_ID");
 
-        assertSqlError("ALTER TABLE IGNITE.NODES RENAME COLUMN ID TO C");
+        assertSqlError("ALTER TABLE IGNITE.NODES RENAME COLUMN NODE_ID TO C");
 
-        assertSqlError("CREATE INDEX IDX ON IGNITE.NODES(ID)");
+        assertSqlError("CREATE INDEX IDX ON IGNITE.NODES(NODE_ID)");
 
-        assertSqlError("INSERT INTO IGNITE.NODES (ID) VALUES ('-')");
+        assertSqlError("INSERT INTO IGNITE.NODES (NODE_ID) VALUES ('-')");
 
-        assertSqlError("UPDATE IGNITE.NODES SET ID = '-'");
+        assertSqlError("UPDATE IGNITE.NODES SET NODE_ID = '-'");
 
         assertSqlError("DELETE IGNITE.NODES");
     }
 
     /**
      * Test indexes system view.
+     *
      * @throws Exception in case of failure.
      */
     @Test
@@ -209,32 +211,32 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         //ToDo: As of now we can see duplicates columns within index due to 
https://issues.apache.org/jira/browse/IGNITE-11125
 
         String[][] expectedResults = {
-            {"PUBLIC", "AFF_CACHE", "AFFINITY_KEY", "\"ID2\" ASC, \"ID1\" 
ASC", "BTREE", "false", "false", "-825022849", "SQL_PUBLIC_AFF_CACHE", 
"-825022849", "SQL_PUBLIC_AFF_CACHE", "10"},
-            {"PUBLIC", "AFF_CACHE", "__SCAN_", "null", "SCAN", "false", 
"false", "-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "null"},
-            {"PUBLIC", "AFF_CACHE", "_key_PK", "\"ID1\" ASC, \"ID2\" ASC", 
"BTREE", "true", "true", "-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "10"},
-            {"PUBLIC", "AFF_CACHE", "_key_PK_hash", "\"ID1\" ASC, \"ID2\" ASC, 
\"ID2\" ASC", "HASH", "false", "true", "-825022849", "SQL_PUBLIC_AFF_CACHE", 
"-825022849", "SQL_PUBLIC_AFF_CACHE", "null"},
-
-            {"PUBLIC", "CACHE_SQL", "IDX_2", "\"ID\" DESC, \"ID\" ASC", 
"BTREE", "false", "false", "707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "13"},
-            {"PUBLIC", "CACHE_SQL", "__SCAN_", "null", "SCAN", "false", 
"false",  "707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "null"},
-            {"PUBLIC", "CACHE_SQL", "_key_PK", "\"ID\" ASC", "BTREE", "true", 
"true", "707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "5"},
-            {"PUBLIC", "CACHE_SQL", "_key_PK_hash", "\"ID\" ASC", "HASH", 
"false", "true", "707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "null"},
-
-            {"PUBLIC", "DFLT_AFF_CACHE", "AFFINITY_KEY", "\"ID1\" ASC, \"ID2\" 
ASC", "BTREE", "false", "false", "1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", 
"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "10"},
-            {"PUBLIC", "DFLT_AFF_CACHE", "IDX_AFF_1", "\"ID2\" DESC, \"ID1\" 
ASC, \"MY_VAL\" DESC", "BTREE", "false", "false", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "10"},
-            {"PUBLIC", "DFLT_AFF_CACHE", "__SCAN_", "null", "SCAN", "false", 
"false", "1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "null"},
-            {"PUBLIC", "DFLT_AFF_CACHE", "_key_PK", "\"ID1\" ASC, \"ID2\" 
ASC", "BTREE", "true", "true", "1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", 
"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "10"},
-            {"PUBLIC", "DFLT_AFF_CACHE", "_key_PK_hash", "\"ID1\" ASC, \"ID2\" 
ASC, \"ID1\" ASC", "HASH", "false", "true", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "null"},
-
-            {"PUBLIC", "DFLT_CACHE", "IDX_1", "\"ID2\" DESC, \"ID1\" ASC, 
\"MY_VAL\" DESC, \"ID1\" ASC, \"ID2\" ASC", "BTREE", "false", "false", 
"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", "SQL_PUBLIC_DFLT_CACHE", 
"10"},
-            {"PUBLIC", "DFLT_CACHE", "IDX_3", "\"MY_VAL\" ASC, \"ID1\" ASC, 
\"ID2\" ASC, \"ID1\" ASC, \"ID2\" ASC", "BTREE", "false", "false", 
"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", "SQL_PUBLIC_DFLT_CACHE", 
"10"},
-            {"PUBLIC", "DFLT_CACHE", "__SCAN_", "null", "SCAN", "false", 
"false", "1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "null"},
-            {"PUBLIC", "DFLT_CACHE", "_key_PK", "\"ID1\" ASC, \"ID2\" ASC", 
"BTREE", "true", "true", "1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "10"},
-            {"PUBLIC", "DFLT_CACHE", "_key_PK_hash", "\"ID1\" ASC, \"ID2\" 
ASC", "HASH", "false", "true", "1102275506", "SQL_PUBLIC_DFLT_CACHE", 
"1102275506", "SQL_PUBLIC_DFLT_CACHE", "null"},
-
-            {"TST1", "VALUECLASS", "TST1_INDEX", "\"KEY\" ASC, \"_KEY\" ASC", 
"BTREE", "false", "false", "2584860", "TST1", "2584860", "TST1", "10"},
-            {"TST1", "VALUECLASS", "__SCAN_", "null", "SCAN", "false", 
"false", "2584860", "TST1", "2584860", "TST1", "null"},
-            {"TST1", "VALUECLASS", "_key_PK", "\"_KEY\" ASC", "BTREE", "true", 
"true", "2584860", "TST1", "2584860", "TST1", "10"},
-            {"TST1", "VALUECLASS", "_key_PK_hash", "\"_KEY\" ASC", "HASH", 
"false", "true", "2584860", "TST1", "2584860", "TST1", "null"},
+            {"-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "PUBLIC", "AFF_CACHE", "AFFINITY_KEY", "BTREE", 
"\"ID2\" ASC, \"ID1\" ASC", "false", "false", "10"},
+            {"-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "PUBLIC", "AFF_CACHE", "__SCAN_", "SCAN", "null", 
"false", "false", "null"},
+            {"-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "PUBLIC", "AFF_CACHE", "_key_PK", "BTREE", "\"ID1\" 
ASC, \"ID2\" ASC", "true", "true", "10"},
+            {"-825022849", "SQL_PUBLIC_AFF_CACHE", "-825022849", 
"SQL_PUBLIC_AFF_CACHE", "PUBLIC", "AFF_CACHE", "_key_PK_hash", "HASH", "\"ID1\" 
ASC, \"ID2\" ASC, \"ID2\" ASC", "false", "true", "null"},
+
+            {"707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "PUBLIC", "CACHE_SQL", "IDX_2", "BTREE", "\"ID\" DESC, 
\"ID\" ASC", "false", "false", "13"},
+            {"707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "PUBLIC", "CACHE_SQL", "__SCAN_", "SCAN", "null", 
"false", "false", "null"},
+            {"707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "PUBLIC", "CACHE_SQL", "_key_PK", "BTREE", "\"ID\" 
ASC", "true", "true", "5"},
+            {"707660652", "SQL_PUBLIC_CACHE_SQL", "707660652", 
"SQL_PUBLIC_CACHE_SQL", "PUBLIC", "CACHE_SQL", "_key_PK_hash", "HASH", "\"ID\" 
ASC", "false", "true", "null"},
+
+            {"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "PUBLIC", "DFLT_AFF_CACHE", "AFFINITY_KEY", 
"BTREE", "\"ID1\" ASC, \"ID2\" ASC", "false", "false", "10"},
+            {"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "PUBLIC", "DFLT_AFF_CACHE", "IDX_AFF_1", "BTREE", 
"\"ID2\" DESC, \"ID1\" ASC, \"MY_VAL\" DESC", "false", "false", "10"},
+            {"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "PUBLIC", "DFLT_AFF_CACHE", "__SCAN_", "SCAN", 
"null", "false", "false", "null"},
+            {"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "PUBLIC", "DFLT_AFF_CACHE", "_key_PK", "BTREE", 
"\"ID1\" ASC, \"ID2\" ASC", "true", "true", "10"},
+            {"1374144180", "SQL_PUBLIC_DFLT_AFF_CACHE", "1374144180", 
"SQL_PUBLIC_DFLT_AFF_CACHE", "PUBLIC", "DFLT_AFF_CACHE", "_key_PK_hash", 
"HASH", "\"ID1\" ASC, \"ID2\" ASC, \"ID1\" ASC", "false", "true", "null"},
+
+            {"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "PUBLIC", "DFLT_CACHE", "IDX_1", "BTREE", "\"ID2\" 
DESC, \"ID1\" ASC, \"MY_VAL\" DESC, \"ID1\" ASC, \"ID2\" ASC", "false", 
"false", "10"},
+            {"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "PUBLIC", "DFLT_CACHE", "IDX_3", "BTREE", "\"MY_VAL\" 
ASC, \"ID1\" ASC, \"ID2\" ASC, \"ID1\" ASC, \"ID2\" ASC", "false", "false", 
"10"},
+            {"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "PUBLIC", "DFLT_CACHE", "__SCAN_", "SCAN", "null", 
"false", "false", "null"},
+            {"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "PUBLIC", "DFLT_CACHE", "_key_PK", "BTREE", "\"ID1\" 
ASC, \"ID2\" ASC", "true", "true", "10"},
+            {"1102275506", "SQL_PUBLIC_DFLT_CACHE", "1102275506", 
"SQL_PUBLIC_DFLT_CACHE", "PUBLIC", "DFLT_CACHE", "_key_PK_hash", "HASH", 
"\"ID1\" ASC, \"ID2\" ASC", "false", "true", "null"},
+
+            {"2584860", "TST1", "2584860", "TST1", "TST1", "VALUECLASS", 
"TST1_INDEX", "BTREE", "\"KEY\" ASC, \"_KEY\" ASC", "false", "false", "10"},
+            {"2584860", "TST1", "2584860", "TST1", "TST1", "VALUECLASS", 
"__SCAN_", "SCAN", "null", "false", "false", "null"},
+            {"2584860", "TST1", "2584860", "TST1", "TST1", "VALUECLASS", 
"_key_PK", "BTREE", "\"_KEY\" ASC", "true", "true", "10"},
+            {"2584860", "TST1", "2584860", "TST1", "TST1", "VALUECLASS", 
"_key_PK_hash", "HASH", "\"_KEY\" ASC", "false", "true", "null"},
         };
 
         for (int i = 0; i < srvNodeIndexes.size(); i++) {
@@ -290,7 +292,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
 
         IgniteCache cache = ignite.getOrCreateCache(DEFAULT_CACHE_NAME);
 
-        String sql = "SELECT ID FROM IGNITE.NODES WHERE NODE_ORDER = 1";
+        String sql = "SELECT NODE_ID FROM IGNITE.NODES WHERE NODE_ORDER = 1";
 
         SqlFieldsQuery qry;
 
@@ -534,7 +536,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
 
         awaitPartitionMapExchange();
 
-        List<List<?>> resAll = execSql("SELECT ID, CONSISTENT_ID, VERSION, 
IS_CLIENT, IS_DAEMON, " +
+        List<List<?>> resAll = execSql("SELECT NODE_ID, CONSISTENT_ID, 
VERSION, IS_CLIENT, IS_DAEMON, " +
             "NODE_ORDER, ADDRESSES, HOSTNAMES FROM IGNITE.NODES");
 
         assertColumnTypes(resAll.get(0), UUID.class, String.class, 
String.class, Boolean.class, Boolean.class,
@@ -543,7 +545,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         assertEquals(3, resAll.size());
 
         List<List<?>> resSrv = execSql(
-            "SELECT ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_CLIENT = FALSE 
AND IS_DAEMON = FALSE"
+            "SELECT NODE_ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_CLIENT = 
FALSE AND IS_DAEMON = FALSE"
         );
 
         assertEquals(1, resSrv.size());
@@ -553,7 +555,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         assertEquals(1, resSrv.get(0).get(1));
 
         List<List<?>> resCli = execSql(
-            "SELECT ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_CLIENT = TRUE");
+            "SELECT NODE_ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_CLIENT = 
TRUE");
 
         assertEquals(1, resCli.size());
 
@@ -562,7 +564,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         assertEquals(2, resCli.get(0).get(1));
 
         List<List<?>> resDaemon = execSql(
-            "SELECT ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_DAEMON = TRUE");
+            "SELECT NODE_ID, NODE_ORDER FROM IGNITE.NODES WHERE IS_DAEMON = 
TRUE");
 
         assertEquals(1, resDaemon.size());
 
@@ -571,30 +573,30 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         assertEquals(3, resDaemon.get(0).get(1));
 
         // Check index on ID column.
-        assertEquals(0, execSql("SELECT ID FROM IGNITE.NODES WHERE ID = 
'-'").size());
+        assertEquals(0, execSql("SELECT NODE_ID FROM IGNITE.NODES WHERE 
NODE_ID = '-'").size());
 
-        assertEquals(1, execSql("SELECT ID FROM IGNITE.NODES WHERE ID = ?",
+        assertEquals(1, execSql("SELECT NODE_ID FROM IGNITE.NODES WHERE 
NODE_ID = ?",
             nodeId0).size());
 
-        assertEquals(1, execSql("SELECT ID FROM IGNITE.NODES WHERE ID = ?",
+        assertEquals(1, execSql("SELECT NODE_ID FROM IGNITE.NODES WHERE 
NODE_ID = ?",
             nodeId(2)).size());
 
         // Check index on ID column with disjunction.
-        assertEquals(3, execSql("SELECT ID FROM IGNITE.NODES WHERE ID = ? " +
+        assertEquals(3, execSql("SELECT NODE_ID FROM IGNITE.NODES WHERE 
NODE_ID = ? " +
             "OR node_order=1 OR node_order=2 OR node_order=3", 
nodeId0).size());
 
         // Check quick-count.
         assertEquals(3L, execSql("SELECT COUNT(*) FROM 
IGNITE.NODES").get(0).get(0));
 
         // Check joins
-        assertEquals(nodeId0, execSql("SELECT N1.ID FROM IGNITE.NODES N1 JOIN 
" +
-            "IGNITE.NODES N2 ON N1.NODE_ORDER = N2.NODE_ORDER JOIN 
IGNITE.NODES N3 ON N2.ID = N3.ID " +
+        assertEquals(nodeId0, execSql("SELECT N1.NODE_ID FROM IGNITE.NODES N1 
JOIN " +
+            "IGNITE.NODES N2 ON N1.NODE_ORDER = N2.NODE_ORDER JOIN 
IGNITE.NODES N3 ON N2.NODE_ID = N3.NODE_ID " +
             "WHERE N3.NODE_ORDER = 1")
             .get(0).get(0));
 
         // Check sub-query
-        assertEquals(nodeId0, execSql("SELECT N1.ID FROM IGNITE.NODES N1 " +
-            "WHERE NOT EXISTS (SELECT 1 FROM IGNITE.NODES N2 WHERE N2.ID = 
N1.ID AND N2.NODE_ORDER <> 1)")
+        assertEquals(nodeId0, execSql("SELECT N1.NODE_ID FROM IGNITE.NODES N1 
" +
+            "WHERE NOT EXISTS (SELECT 1 FROM IGNITE.NODES N2 WHERE N2.NODE_ID 
= N1.NODE_ID AND N2.NODE_ORDER <> 1)")
             .get(0).get(0));
 
         // Check node attributes view
@@ -663,7 +665,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
 
         // Check join with nodes.
         assertEquals(3, execSql("SELECT NM.LAST_UPDATE_TIME FROM IGNITE.NODES 
N " +
-            "JOIN IGNITE.NODE_METRICS NM ON N.ID = NM.NODE_ID").size());
+            "JOIN IGNITE.NODE_METRICS NM ON N.NODE_ID = NM.NODE_ID").size());
 
         // Check index on NODE_ID column.
         assertEquals(1, execSql("SELECT LAST_UPDATE_TIME FROM 
IGNITE.NODE_METRICS WHERE NODE_ID = ?",
@@ -850,7 +852,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         for (int i = 0; i < 500; i++)
             execSql("INSERT INTO TST(id, name, age) VALUES (" + i + ",'name-" 
+ i + "'," + i + 1 + ")");
 
-        String sql1 = "SELECT GROUP_ID, GROUP_NAME, PHYSICAL_READS, 
LOGICAL_READS FROM IGNITE.LOCAL_CACHE_GROUPS_IO";
+        String sql1 = "SELECT CACHE_GROUP_ID, CACHE_GROUP_NAME, 
PHYSICAL_READS, LOGICAL_READS FROM IGNITE.LOCAL_CACHE_GROUPS_IO";
 
         List<List<?>> res1 = execSql(sql1);
 
@@ -864,8 +866,8 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
 
         assertTrue(map.containsKey(DEFAULT_CACHE_NAME));
 
-        sql1 = "SELECT GROUP_ID, GROUP_NAME, PHYSICAL_READS, LOGICAL_READS 
FROM IGNITE.LOCAL_CACHE_GROUPS_IO WHERE " +
-            "GROUP_NAME='SQL_PUBLIC_TST'";
+        sql1 = "SELECT CACHE_GROUP_ID, CACHE_GROUP_NAME, PHYSICAL_READS, 
LOGICAL_READS FROM IGNITE.LOCAL_CACHE_GROUPS_IO WHERE " +
+            "CACHE_GROUP_NAME='SQL_PUBLIC_TST'";
 
         assertEquals(1, execSql(sql1).size());
     }
@@ -891,10 +893,12 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         List<List<?>> cacheSqlInfos = execSql("SELECT * FROM IGNITE.TABLES 
WHERE TABLE_NAME = 'CACHE_SQL'");
 
         List<?> expRow = asList(
-            "PUBLIC",           // SCHEMA_NAME
-            "CACHE_SQL",         // TABLE_NAME
-            "cache_sql",         // CACHE_NAME
+            cacheSqlId,          // CACHE_GROUP_ID
+            "cache_sql",         // CACHE_GROUP_NAME
             cacheSqlId,          // CACHE_ID
+            "cache_sql",         // CACHE_NAME
+            "PUBLIC",            // SCHEMA_NAME
+            "CACHE_SQL",         // TABLE_NAME
             null,                // AFFINITY_KEY_COLUMN
             "ID",                // KEY_ALIAS
             null,                // VALUE_ALIAS
@@ -913,10 +917,12 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         List<?> allExpRows = asList(
             expRow,
             asList(
+                ddlTabId,                // CACHE_GROUP_ID
+                "SQL_PUBLIC_DFLT_CACHE", // CACHE_GROUP_NAME
+                ddlTabId,                // CACHE_ID
+                "SQL_PUBLIC_DFLT_CACHE", // CACHE_NAME
                 "PUBLIC",                // SCHEMA_NAME
                 "DFLT_CACHE",            // TABLE_NAME
-                "SQL_PUBLIC_DFLT_CACHE", // CACHE_NAME
-                ddlTabId,                // CACHE_ID
                 "ID2",                   // AFFINITY_KEY_COLUMN
                 null,                    // KEY_ALIAS
                 "MY_VAL",                // VALUE_ALIAS
@@ -946,10 +952,10 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             asList(
                 asList("DFLT_CACHE", "SQL_PUBLIC_DFLT_CACHE", 
"SQL_PUBLIC_DFLT_CACHE"),
                 asList("CACHE_SQL", "cache_sql", "cache_sql")),
-            execSql("SELECT TABLE_NAME, TAB.CACHE_NAME, C.NAME " +
+            execSql("SELECT TABLE_NAME, TAB.CACHE_NAME, C.CACHE_NAME " +
                 "FROM IGNITE.TABLES AS TAB JOIN IGNITE.CACHES AS C " +
                 "ON TAB.CACHE_ID = C.CACHE_ID " +
-                "ORDER BY C.NAME")
+                "ORDER BY C.CACHE_NAME")
         );
     }
 
@@ -1109,7 +1115,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
         DataStorageConfiguration dsCfg = new DataStorageConfiguration()
             .setDefaultDataRegionConfiguration(new 
DataRegionConfiguration().setName("def").setPersistenceEnabled(true))
             .setDataRegionConfigurations(new 
DataRegionConfiguration().setName("dr1"),
-                new DataRegionConfiguration().setName("dr2"));
+                new DataRegionConfiguration().setName("dr2"), new 
DataRegionConfiguration().setName("dr3"));
 
         IgniteEx ignite0 = 
startGrid(getConfiguration().setDataStorageConfiguration(dsCfg));
 
@@ -1156,12 +1162,34 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             .setOnheapCacheEnabled(true)
         );
 
+        ignite0.getOrCreateCache(new CacheConfiguration<>()
+            .setName("cache_cust_node_filter")
+            .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
+            .setCacheMode(CacheMode.REPLICATED)
+            .setDataRegionName("dr3")
+            .setEvictionFilter(new TestEvictionFilter())
+            .setEvictionPolicyFactory(new TestEvictionPolicyFactory())
+            .setOnheapCacheEnabled(true)
+            .setNodeFilter(new CustomNodeFilter(Integer.MAX_VALUE))
+        );
+
+        ignite0.getOrCreateCache(new CacheConfiguration<>()
+            .setName("cache_cust_err_node_filter")
+            .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
+            .setCacheMode(CacheMode.REPLICATED)
+            .setDataRegionName("dr3")
+            .setEvictionFilter(new TestEvictionFilter())
+            .setEvictionPolicyFactory(new TestEvictionPolicyFactory())
+            .setOnheapCacheEnabled(true)
+            .setNodeFilter(new CustomNodeFilter(1))
+        );
+
         execSql("CREATE TABLE cache_sql (ID INT PRIMARY KEY, VAL VARCHAR) WITH 
" +
             "\"cache_name=cache_sql,template=partitioned,atomicity=atomic\"");
 
         awaitPartitionMapExchange();
 
-        List<List<?>> resAll = execSql("SELECT NAME, CACHE_ID, CACHE_TYPE, 
GROUP_ID, GROUP_NAME, " +
+        List<List<?>> resAll = execSql("SELECT CACHE_GROUP_ID, 
CACHE_GROUP_NAME, CACHE_ID, CACHE_NAME, CACHE_TYPE," +
                 "CACHE_MODE, ATOMICITY_MODE, IS_ONHEAP_CACHE_ENABLED, 
IS_COPY_ON_READ, IS_LOAD_PREVIOUS_VALUE, " +
                 "IS_READ_FROM_BACKUP, PARTITION_LOSS_POLICY, NODE_FILTER, 
TOPOLOGY_VALIDATOR, IS_EAGER_TTL, " +
                 "WRITE_SYNCHRONIZATION_MODE, IS_INVALIDATE, 
IS_EVENTS_DISABLED, IS_STATISTICS_ENABLED, " +
@@ -1180,7 +1208,7 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
                 "DATA_REGION_NAME FROM IGNITE.CACHES");
 
         assertColumnTypes(resAll.get(0),
-            String.class, Integer.class, String.class, Integer.class, 
String.class,
+            Integer.class, String.class, Integer.class, String.class, 
String.class,
             String.class, String.class, Boolean.class, Boolean.class, 
Boolean.class,
             Boolean.class, String.class, String.class, String.class, 
Boolean.class,
             String.class, Boolean.class, Boolean.class, Boolean.class,
@@ -1198,63 +1226,63 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             Integer.class, Integer.class, Integer.class, Integer.class,
             String.class);
 
-        assertEquals("cache_tx_part", execSql("SELECT NAME FROM IGNITE.CACHES 
WHERE " +
-            "CACHE_MODE = 'PARTITIONED' AND ATOMICITY_MODE = 'TRANSACTIONAL' 
AND NAME like 'cache%'").get(0).get(0));
+        assertEquals("cache_tx_part", execSql("SELECT CACHE_NAME FROM 
IGNITE.CACHES WHERE " +
+            "CACHE_MODE = 'PARTITIONED' AND ATOMICITY_MODE = 'TRANSACTIONAL' 
AND CACHE_NAME like 'cache%'").get(0).get(0));
 
-        assertEquals("cache_atomic_repl", execSql("SELECT NAME FROM 
IGNITE.CACHES WHERE " +
-            "CACHE_MODE = 'REPLICATED' AND ATOMICITY_MODE = 'ATOMIC' AND NAME 
like 'cache%'").get(0).get(0));
+        assertEquals("cache_atomic_repl", execSql("SELECT CACHE_NAME FROM 
IGNITE.CACHES WHERE " +
+            "CACHE_MODE = 'REPLICATED' AND ATOMICITY_MODE = 'ATOMIC' AND 
CACHE_NAME like 'cache%'").get(0).get(0));
 
-        assertEquals(2L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
GROUP_NAME = 'cache_grp'")
+        assertEquals(2L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
CACHE_GROUP_NAME = 'cache_grp'")
             .get(0).get(0));
 
-        assertEquals("cache_atomic_repl", execSql("SELECT NAME FROM 
IGNITE.CACHES " +
+        assertEquals("cache_atomic_repl", execSql("SELECT CACHE_NAME FROM 
IGNITE.CACHES " +
             "WHERE DATA_REGION_NAME = 'dr1'").get(0).get(0));
 
-        assertEquals("cache_tx_repl", execSql("SELECT NAME FROM IGNITE.CACHES 
" +
+        assertEquals("cache_tx_repl", execSql("SELECT CACHE_NAME FROM 
IGNITE.CACHES " +
             "WHERE DATA_REGION_NAME = 'dr2'").get(0).get(0));
 
         assertEquals("PARTITIONED", execSql("SELECT CACHE_MODE FROM 
IGNITE.CACHES " +
-            "WHERE NAME = 'cache_atomic_part'").get(0).get(0));
+            "WHERE CACHE_NAME = 'cache_atomic_part'").get(0).get(0));
 
-        assertEquals("USER", execSql("SELECT CACHE_TYPE FROM IGNITE.CACHES 
WHERE NAME = 'cache_sql'")
+        assertEquals("USER", execSql("SELECT CACHE_TYPE FROM IGNITE.CACHES 
WHERE CACHE_NAME = 'cache_sql'")
             .get(0).get(0));
 
-        assertEquals(0L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
NAME = 'no_such_cache'").get(0)
+        assertEquals(0L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
CACHE_NAME = 'no_such_cache'").get(0)
             .get(0));
 
-        assertEquals(0L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
NAME = 1").get(0).get(0));
+        assertEquals(0L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
CACHE_NAME = 1").get(0).get(0));
 
-        assertEquals("TestNodeFilter", execSql("SELECT NODE_FILTER FROM 
IGNITE.CACHES WHERE NAME = " +
+        assertEquals("TestNodeFilter", execSql("SELECT NODE_FILTER FROM 
IGNITE.CACHES WHERE CACHE_NAME = " +
             "'cache_atomic_part'").get(0).get(0));
 
         assertEquals("TestEvictionFilter", execSql("SELECT EVICTION_FILTER 
FROM IGNITE.CACHES " +
-            "WHERE NAME = 'cache_tx_repl'").get(0).get(0));
+            "WHERE CACHE_NAME = 'cache_tx_repl'").get(0).get(0));
 
         assertEquals("TestEvictionPolicyFactory", execSql("SELECT 
EVICTION_POLICY_FACTORY " +
-            "FROM IGNITE.CACHES WHERE NAME = 'cache_tx_repl'").get(0).get(0));
+            "FROM IGNITE.CACHES WHERE CACHE_NAME = 
'cache_tx_repl'").get(0).get(0));
 
         assertEquals("TestTopologyValidator", execSql("SELECT 
TOPOLOGY_VALIDATOR FROM IGNITE.CACHES " +
-            "WHERE NAME = 'cache_atomic_repl'").get(0).get(0));
+            "WHERE CACHE_NAME = 'cache_atomic_repl'").get(0).get(0));
 
         // Check quick count.
         assertEquals(execSql("SELECT COUNT(*) FROM 
IGNITE.CACHES").get(0).get(0),
             execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE CACHE_ID <> 
CACHE_ID + 1").get(0).get(0));
 
         // Check that caches are the same on BLT, BLT filtered by node filter, 
non BLT and client nodes.
-        assertEquals(5L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
NAME like 'cache%'").get(0)
+        assertEquals(7L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES WHERE 
CACHE_NAME like 'cache%'").get(0)
             .get(0));
 
-        assertEquals(5L, execSql(ignite1, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE NAME like 'cache%'")
+        assertEquals(7L, execSql(ignite1, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE CACHE_NAME like 'cache%'")
             .get(0).get(0));
 
-        assertEquals(5L, execSql(ignite2, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE NAME like 'cache%'")
+        assertEquals(7L, execSql(ignite2, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE CACHE_NAME like 'cache%'")
             .get(0).get(0));
 
-        assertEquals(5L, execSql(ignite3, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE NAME like 'cache%'")
+        assertEquals(7L, execSql(ignite3, "SELECT COUNT(*) FROM IGNITE.CACHES 
WHERE CACHE_NAME like 'cache%'")
             .get(0).get(0));
 
         // Check cache groups.
-        resAll = execSql("SELECT ID, GROUP_NAME, IS_SHARED, CACHE_COUNT, " +
+        resAll = execSql("SELECT CACHE_GROUP_ID, CACHE_GROUP_NAME, IS_SHARED, 
CACHE_COUNT, " +
             "CACHE_MODE, ATOMICITY_MODE, AFFINITY, PARTITIONS_COUNT, " +
             "NODE_FILTER, DATA_REGION_NAME, TOPOLOGY_VALIDATOR, 
PARTITION_LOSS_POLICY, " +
             "REBALANCE_MODE, REBALANCE_DELAY, REBALANCE_ORDER, BACKUPS " +
@@ -1267,28 +1295,30 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             String.class, Long.class, Integer.class, Integer.class);
 
         assertEquals(2, execSql("SELECT CACHE_COUNT FROM IGNITE.CACHE_GROUPS " 
+
-            "WHERE GROUP_NAME = 'cache_grp'").get(0).get(0));
+            "WHERE CACHE_GROUP_NAME = 'cache_grp'").get(0).get(0));
 
-        assertEquals("cache_grp", execSql("SELECT GROUP_NAME FROM 
IGNITE.CACHE_GROUPS " +
-            "WHERE IS_SHARED = true AND GROUP_NAME like 
'cache%'").get(0).get(0));
+        assertEquals("cache_grp", execSql("SELECT CACHE_GROUP_NAME FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE IS_SHARED = true AND CACHE_GROUP_NAME like 
'cache%'").get(0).get(0));
 
         // Check index on ID column.
-        assertEquals("cache_tx_repl", execSql("SELECT GROUP_NAME FROM 
IGNITE.CACHE_GROUPS " +
-            "WHERE ID = ?", 
ignite0.cachex("cache_tx_repl").context().groupId()).get(0).get(0));
+        assertEquals("cache_tx_repl", execSql("SELECT CACHE_GROUP_NAME FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE CACHE_GROUP_ID = ?", 
ignite0.cachex("cache_tx_repl").context().groupId()).get(0).get(0));
 
-        assertEquals(0, execSql("SELECT ID FROM IGNITE.CACHE_GROUPS WHERE ID = 
0").size());
+        assertEquals(0, execSql("SELECT CACHE_GROUP_ID FROM 
IGNITE.CACHE_GROUPS WHERE CACHE_GROUP_ID = 0").size());
 
         // Check join by indexed column.
-        assertEquals("cache_tx_repl", execSql("SELECT CG.GROUP_NAME FROM 
IGNITE.CACHES C JOIN " +
-            "IGNITE.CACHE_GROUPS CG ON C.GROUP_ID = CG.ID WHERE C.NAME = 
'cache_tx_repl'").get(0).get(0));
+        assertEquals("cache_tx_repl", execSql("SELECT CG.CACHE_GROUP_NAME FROM 
IGNITE.CACHES C JOIN " +
+            "IGNITE.CACHE_GROUPS CG ON C.CACHE_GROUP_ID = CG.CACHE_GROUP_ID 
WHERE C.CACHE_NAME = 'cache_tx_repl'")
+            .get(0).get(0));
 
         // Check join by non-indexed column.
-        assertEquals("cache_grp", execSql("SELECT CG.GROUP_NAME FROM 
IGNITE.CACHES C JOIN " +
-            "IGNITE.CACHE_GROUPS CG ON C.GROUP_NAME = CG.GROUP_NAME WHERE 
C.NAME = 'cache_tx_part'").get(0).get(0));
+        assertEquals("cache_grp", execSql("SELECT CG.CACHE_GROUP_NAME FROM 
IGNITE.CACHES C JOIN " +
+            "IGNITE.CACHE_GROUPS CG ON C.CACHE_GROUP_NAME = 
CG.CACHE_GROUP_NAME WHERE C.CACHE_NAME = 'cache_tx_part'")
+            .get(0).get(0));
 
         // Check configuration equality for cache and cache group views.
-        assertEquals(3L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES C JOIN 
IGNITE.CACHE_GROUPS CG " +
-            "ON C.NAME = CG.GROUP_NAME WHERE C.NAME like 'cache%' " +
+        assertEquals(5L, execSql("SELECT COUNT(*) FROM IGNITE.CACHES C JOIN 
IGNITE.CACHE_GROUPS CG " +
+            "ON C.CACHE_NAME = CG.CACHE_GROUP_NAME WHERE C.CACHE_NAME like 
'cache%' " +
             "AND C.CACHE_MODE = CG.CACHE_MODE " +
             "AND C.ATOMICITY_MODE = CG.ATOMICITY_MODE " +
             "AND COALESCE(C.AFFINITY, '-') = COALESCE(CG.AFFINITY, '-') " +
@@ -1299,24 +1329,35 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             "AND C.REBALANCE_MODE = CG.REBALANCE_MODE " +
             "AND C.REBALANCE_DELAY = CG.REBALANCE_DELAY " +
             "AND C.REBALANCE_ORDER = CG.REBALANCE_ORDER " +
-            "AND C.BACKUPS = CG.BACKUPS").get(0).get(0));
+            "AND COALESCE(C.BACKUPS, -1) = COALESCE(CG.BACKUPS, -1)"
+        ).get(0).get(0));
 
         // Check quick count.
         assertEquals(execSql("SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS").get(0).get(0),
-            execSql("SELECT COUNT(*) FROM IGNITE.CACHE_GROUPS WHERE ID <> ID + 
1").get(0).get(0));
+            execSql("SELECT COUNT(*) FROM IGNITE.CACHE_GROUPS WHERE 
CACHE_GROUP_ID <> CACHE_GROUP_ID + 1")
+                .get(0).get(0));
 
         // Check that cache groups are the same on different nodes.
-        assertEquals(4L, execSql("SELECT COUNT(*) FROM IGNITE.CACHE_GROUPS " +
-            "WHERE GROUP_NAME like 'cache%'").get(0).get(0));
+        assertEquals(6L, execSql("SELECT COUNT(*) FROM IGNITE.CACHE_GROUPS " +
+            "WHERE CACHE_GROUP_NAME like 'cache%'").get(0).get(0));
 
-        assertEquals(4L, execSql(ignite1, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
-            "WHERE GROUP_NAME like 'cache%'").get(0).get(0));
+        assertEquals(6L, execSql(ignite1, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE CACHE_GROUP_NAME like 'cache%'").get(0).get(0));
 
-        assertEquals(4L, execSql(ignite2, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
-            "WHERE GROUP_NAME like 'cache%'").get(0).get(0));
+        assertEquals(6L, execSql(ignite2, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE CACHE_GROUP_NAME like 'cache%'").get(0).get(0));
 
-        assertEquals(4L, execSql(ignite3, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
-            "WHERE GROUP_NAME like 'cache%'").get(0).get(0));
+        assertEquals(6L, execSql(ignite3, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE CACHE_GROUP_NAME like 'cache%'").get(0).get(0));
+
+        assertEquals(5L, execSql(ignite0, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE NODE_FILTER is NULL").get(0).get(0));
+
+        assertEquals(1L, execSql(ignite0, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE NODE_FILTER = 'CUSTOM_NODE_FILTER'").get(0).get(0));
+
+        assertEquals(1L, execSql(ignite0, "SELECT COUNT(*) FROM 
IGNITE.CACHE_GROUPS " +
+            "WHERE NODE_FILTER like '%Oops... incorrect customer 
realization.'").get(0).get(0));
     }
 
     /**
@@ -1555,4 +1596,25 @@ public class SqlSystemViewsSelfTest extends 
AbstractIndexingCommonTest {
             return "TestTopologyValidator";
         }
     }
+
+    private static class CustomNodeFilter implements 
IgnitePredicate<ClusterNode> {
+        private final int attemptsBeforeException;
+
+        private volatile int attempts;
+
+        public CustomNodeFilter(int attemptsBeforeException) {
+            this.attemptsBeforeException = attemptsBeforeException;
+        }
+
+        @Override public boolean apply(ClusterNode node) {
+            return true;
+        }
+
+        @Override public String toString() {
+            if(attempts++ > attemptsBeforeException)
+                throw new NullPointerException("Oops... incorrect customer 
realization.");
+
+            return "CUSTOM_NODE_FILTER";
+        }
+    }
 }

Reply via email to