IGNITE-5325: CREATE TABLE: added "cacheGroup" property. This closes #2099.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/45bb5b3a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/45bb5b3a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/45bb5b3a

Branch: refs/heads/ignite-5414
Commit: 45bb5b3a2faca318ede6dd194bd2fb7fb9898d7c
Parents: 5c77dab
Author: Alexander Paschenko <alexander.a.pasche...@gmail.com>
Authored: Thu Jun 8 13:00:34 2017 +0300
Committer: devozerov <voze...@gridgain.com>
Committed: Thu Jun 8 13:00:34 2017 +0300

----------------------------------------------------------------------
 .../processors/query/GridQueryProcessor.java    |  9 ++++-
 .../query/h2/ddl/DdlStatementsProcessor.java    |  3 +-
 .../query/h2/sql/GridSqlCreateTable.java        | 20 +++++++++-
 .../query/h2/sql/GridSqlQueryParser.java        | 10 +++++
 .../cache/index/H2DynamicTableSelfTest.java     | 39 +++++++++++++++-----
 5 files changed, 65 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb5b3a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 4311b12..dd07584 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -1278,6 +1278,7 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
      * @param schemaName Schema name to create table in.
      * @param entity Entity to create table from.
      * @param templateName Template name.
+     * @param cacheGroup Cache group name.
      * @param affinityKey Affinity key column name.
      * @param atomicityMode Atomicity mode.
      * @param backups Backups.
@@ -1285,8 +1286,9 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
      * @throws IgniteCheckedException If failed.
      */
     @SuppressWarnings("unchecked")
-    public void dynamicTableCreate(String schemaName, QueryEntity entity, 
String templateName, String affinityKey,
-        @Nullable CacheAtomicityMode atomicityMode, int backups, boolean 
ifNotExists) throws IgniteCheckedException {
+    public void dynamicTableCreate(String schemaName, QueryEntity entity, 
String templateName, String cacheGroup,
+        String affinityKey, @Nullable CacheAtomicityMode atomicityMode, int 
backups, boolean ifNotExists)
+        throws IgniteCheckedException {
         assert !F.isEmpty(templateName);
         assert backups >= 0;
 
@@ -1307,6 +1309,9 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
 
         ccfg.setName(QueryUtils.createTableCacheName(schemaName, 
entity.getTableName()));
 
+        if (!F.isEmpty(cacheGroup))
+            ccfg.setGroupName(cacheGroup);
+
         if (atomicityMode != null)
             ccfg.setAtomicityMode(atomicityMode);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb5b3a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
index d6bcabd..65e402d 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
@@ -22,7 +22,6 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
@@ -177,7 +176,7 @@ public class DdlStatementsProcessor {
                     if (err != null)
                         throw err;
 
-                    ctx.query().dynamicTableCreate(cmd.schemaName(), e, 
cmd.templateName(),
+                    ctx.query().dynamicTableCreate(cmd.schemaName(), e, 
cmd.templateName(), cmd.cacheGroup(),
                         cmd.affinityKey(), cmd.atomicityMode(), cmd.backups(), 
cmd.ifNotExists());
                 }
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb5b3a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlCreateTable.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlCreateTable.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlCreateTable.java
index edced6b..fa76123 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlCreateTable.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlCreateTable.java
@@ -17,11 +17,10 @@
 
 package org.apache.ignite.internal.processors.query.h2.sql;
 
-import org.apache.ignite.cache.CacheAtomicityMode;
-
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
+import org.apache.ignite.cache.CacheAtomicityMode;
 
 /**
  * CREATE TABLE statement.
@@ -38,6 +37,9 @@ public class GridSqlCreateTable extends GridSqlStatement {
     /** Cache name upon which new cache configuration for this table must be 
based. */
     private String templateName;
 
+    /** Group to put new cache into. */
+    private String cacheGrp;
+
     /** Atomicity mode for new cache. */
     private CacheAtomicityMode atomicityMode;
 
@@ -74,6 +76,20 @@ public class GridSqlCreateTable extends GridSqlStatement {
     }
 
     /**
+     * @return Group to put new cache into.
+     */
+    public String cacheGroup() {
+        return cacheGrp;
+    }
+
+    /**
+     * @param cacheGrp Group to put new cache into.
+     */
+    public void cacheGroup(String cacheGrp) {
+        this.cacheGrp = cacheGrp;
+    }
+
+    /**
      * @return Atomicity mode for new cache.
      */
     public CacheAtomicityMode atomicityMode() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb5b3a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
index d8baed3..0d6a0b2 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
@@ -405,6 +405,9 @@ public class GridSqlQueryParser {
     private static final String PARAM_ATOMICITY = "ATOMICITY";
 
     /** */
+    private static final String PARAM_CACHE_GROUP = "CACHEGROUP";
+
+    /** */
     private static final String PARAM_AFFINITY_KEY = "AFFINITYKEY";
 
     /** */
@@ -1051,6 +1054,13 @@ public class GridSqlQueryParser {
 
                 break;
 
+            case PARAM_CACHE_GROUP:
+                ensureNotEmpty(name, val);
+
+                res.cacheGroup(val);
+
+                break;
+
             case PARAM_AFFINITY_KEY:
                 ensureNotEmpty(name, val);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb5b3a/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 e4babba..2255fb8 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
@@ -105,7 +105,15 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTable() throws Exception {
-        doTestCreateTable(CACHE_NAME, null);
+        doTestCreateTable(CACHE_NAME, null, null);
+    }
+
+    /**
+     * Test that {@code CREATE TABLE} actually creates new cache, H2 table and 
type descriptor on all nodes.
+     * @throws Exception if failed.
+     */
+    public void testCreateTableWithCacheGroup() throws Exception {
+        doTestCreateTable(CACHE_NAME, "MyGroup", null);
     }
 
     /**
@@ -114,7 +122,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTableReplicated() throws Exception {
-        doTestCreateTable("REPLICATED", CacheMode.REPLICATED);
+        doTestCreateTable("REPLICATED", null, CacheMode.REPLICATED);
     }
 
     /**
@@ -123,7 +131,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTablePartitioned() throws Exception {
-        doTestCreateTable("PARTITIONED", CacheMode.PARTITIONED);
+        doTestCreateTable("PARTITIONED", null, CacheMode.PARTITIONED);
     }
 
     /**
@@ -132,7 +140,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTableReplicatedCaseInsensitive() throws Exception {
-        doTestCreateTable("replicated", CacheMode.REPLICATED);
+        doTestCreateTable("replicated", null, CacheMode.REPLICATED);
     }
 
     /**
@@ -141,7 +149,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTablePartitionedCaseInsensitive() throws Exception {
-        doTestCreateTable("partitioned", CacheMode.PARTITIONED);
+        doTestCreateTable("partitioned", null, CacheMode.PARTITIONED);
     }
 
     /**
@@ -150,19 +158,21 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
      * @throws Exception if failed.
      */
     public void testCreateTableNoTemplate() throws Exception {
-        doTestCreateTable(null, CacheMode.PARTITIONED);
+        doTestCreateTable(null, null, CacheMode.PARTITIONED);
     }
 
     /**
      * Test that {@code CREATE TABLE} with given template cache name actually 
creates new cache,
      * H2 table and type descriptor on all nodes, optionally with cache type 
check.
      * @param tplCacheName Template cache name.
+     * @param cacheGrp Cache group name, or {@code null} if no group is set.
      * @param mode Expected cache mode, or {@code null} if no check is needed.
      */
-    private void doTestCreateTable(String tplCacheName, CacheMode mode) {
+    private void doTestCreateTable(String tplCacheName, String cacheGrp, 
CacheMode mode) {
         executeDdl("CREATE TABLE \"Person\" (\"id\" int, \"city\" varchar," +
             " \"name\" varchar, \"surname\" varchar, \"age\" int, PRIMARY KEY 
(\"id\", \"city\")) WITH " +
-            (F.isEmpty(tplCacheName) ? "" : "\"template=" + tplCacheName + 
"\",") + "\"backups=10,atomicity=atomic\"");
+            (F.isEmpty(tplCacheName) ? "" : "\"template=" + tplCacheName + 
"\",") + "\"backups=10,atomicity=atomic\"" +
+            (F.isEmpty(cacheGrp) ? "" : ",\"cacheGroup=" + cacheGrp + '"'));
 
         String cacheName = cacheName("Person");
 
@@ -184,6 +194,8 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
 
             assertTrue(cacheDesc.sql());
 
+            assertEquals(cacheGrp, cacheDesc.groupDescriptor().groupName());
+
             if (mode != null)
                 assertEquals(mode, 
cacheDesc.cacheConfiguration().getCacheMode());
 
@@ -236,7 +248,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
     }
 
     /**
-     * Test that attempting to omit mandatory value of ATOMICITY parameter 
yields an error.
+     * Test that providing an invalid value of ATOMICITY parameter yields an 
error.
      */
     public void testInvalidAtomicity() {
         assertCreateTableWithParamsThrows("atomicity=InvalidValue",
@@ -244,6 +256,13 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
     }
 
     /**
+     * Test that attempting to omit mandatory value of CACHEGROUP parameter 
yields an error.
+     */
+    public void testEmptyCacheGroup() {
+        assertCreateTableWithParamsThrows("cachegroup=", "Parameter value 
cannot be empty: CACHEGROUP");
+    }
+
+    /**
      * Test that attempting to {@code CREATE TABLE} that already exists does 
not yield an error if the statement
      *     contains {@code IF NOT EXISTS} clause.
      * @throws Exception if failed.
@@ -405,7 +424,7 @@ public class H2DynamicTableSelfTest extends 
AbstractSchemaSelfTest {
                 e.setValueType("City");
 
                 queryProcessor(client()).dynamicTableCreate("PUBLIC", e, 
CacheMode.PARTITIONED.name(), null,
-                    CacheAtomicityMode.ATOMIC, 10, false);
+                    null, CacheAtomicityMode.ATOMIC, 10, false);
 
                 return null;
             }

Reply via email to