Repository: ignite Updated Branches: refs/heads/master f8824c861 -> ca6662bcb
IGNITE-6637: SQL: add statements cache clear on cache destroy. This closes #2860. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ca6662bc Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ca6662bc Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ca6662bc Branch: refs/heads/master Commit: ca6662bcb4eecc62493e2e25a572ed0b982c046c Parents: f8824c8 Author: Alexander Paschenko <alexander.a.pasche...@gmail.com> Authored: Mon Oct 16 16:41:36 2017 +0300 Committer: devozerov <voze...@gridgain.com> Committed: Mon Oct 16 16:41:36 2017 +0300 ---------------------------------------------------------------------- .../processors/query/h2/IgniteH2Indexing.java | 8 ++-- .../cache/index/H2DynamicTableSelfTest.java | 43 ++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ca6662bc/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index 0fdc2e4..541b80f 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -59,7 +59,6 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.GridTopic; import org.apache.ignite.internal.IgniteInternalFuture; -import org.apache.ignite.internal.processors.cache.query.SqlFieldsQueryEx; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheEntryImpl; import org.apache.ignite.internal.processors.cache.CacheObject; @@ -79,6 +78,7 @@ import org.apache.ignite.internal.processors.cache.query.GridCacheQueryMarshalla import org.apache.ignite.internal.processors.cache.query.GridCacheTwoStepQuery; import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode; import org.apache.ignite.internal.processors.cache.query.QueryTable; +import org.apache.ignite.internal.processors.cache.query.SqlFieldsQueryEx; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.query.CacheQueryObjectValueContext; import org.apache.ignite.internal.processors.query.GridQueryCacheObjectsIterator; @@ -103,10 +103,10 @@ import org.apache.ignite.internal.processors.query.h2.ddl.DdlStatementsProcessor import org.apache.ignite.internal.processors.query.h2.opt.DistributedJoinMode; import org.apache.ignite.internal.processors.query.h2.opt.GridH2DefaultTableEngine; import org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase; +import org.apache.ignite.internal.processors.query.h2.opt.GridH2PlainRowFactory; import org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryContext; import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row; import org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor; -import org.apache.ignite.internal.processors.query.h2.opt.GridH2PlainRowFactory; import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table; import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQueryParser; import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter; @@ -2342,6 +2342,8 @@ public class IgniteH2Indexing implements GridQueryIndexing { } } + stmtCache.clear(); + for (H2TableDescriptor tbl : rmvTbls) { for (Index idx : tbl.table().getIndexes()) idx.close(null); @@ -2364,7 +2366,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** * Remove all cached queries from cached two-steps queries. */ - public void clearCachedQueries() { + private void clearCachedQueries() { twoStepCache.clear(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ca6662bc/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java index b108bb3..c56db84 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java @@ -48,6 +48,7 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor; +import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.IgniteInternalCache; import org.apache.ignite.internal.processors.query.GridQueryProperty; import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor; @@ -997,6 +998,39 @@ public class H2DynamicTableSelfTest extends AbstractSchemaSelfTest { } /** + * @throws Exception If test failed. + */ + public void testQueryLocalWithRecreate() throws Exception { + execute("CREATE TABLE A(id int primary key, name varchar, surname varchar) WITH \"cache_name=cache," + + "template=replicated\""); + + // In order for local queries to work, let's use non client node. + IgniteInternalCache cache = grid(0).cachex("cache"); + + assertNotNull(cache); + + executeLocal(cache.context(), "INSERT INTO A(id, name, surname) values (1, 'X', 'Y')"); + + assertEqualsCollections(Collections.singletonList(Arrays.asList(1, "X", "Y")), + executeLocal(cache.context(), "SELECT id, name, surname FROM A")); + + execute("DROP TABLE A"); + + execute("CREATE TABLE A(id int primary key, name varchar, surname varchar) WITH \"cache_name=cache\""); + + cache = grid(0).cachex("cache"); + + assertNotNull(cache); + + try { + executeLocal(cache.context(), "INSERT INTO A(id, name, surname) values (1, 'X', 'Y')"); + } + finally { + execute("DROP TABLE A"); + } + } + + /** * Test that it's impossible to create tables with same name regardless of key/value wrapping settings. */ public void testWrappedAndUnwrappedKeyTablesInteroperability() { @@ -1443,6 +1477,15 @@ public class H2DynamicTableSelfTest extends AbstractSchemaSelfTest { } /** + * Execute DDL statement on given node. + * + * @param sql Statement. + */ + private List<List<?>> executeLocal(GridCacheContext cctx, String sql) { + return queryProcessor(cctx.grid()).querySqlFields(cctx, new SqlFieldsQuery(sql).setLocal(true), true).getAll(); + } + + /** * @return Client node. */ private IgniteEx client() {