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";
+ }
+ }
}