From 1da9f0e4adf922b11257cf5c3b93df7508f0ee7b Mon Sep 17 00:00:00 2001 From: Alexander Paschenko Date: Wed, 11 Oct 2017 14:18:29 +0300 Subject: [PATCH 1/2] IGNITE-6270 Renamed user facing CREATE TABLE --- .../datagrid/CacheQueryDdlExample.java | 2 +- .../ignite/examples/datagrid/JdbcExample.java | 2 +- .../thin/JdbcThinComplexDmlDdlSelfTest.java | 5 ++-- .../query/h2/sql/GridSqlQueryParser.java | 4 +-- .../index/H2DynamicIndexingComplexTest.java | 4 +-- .../cache/index/H2DynamicTableSelfTest.java | 26 +++++++++---------- 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java index e27907d5013a7..7ac2751548826 100644 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDdlExample.java @@ -62,7 +62,7 @@ public static void main(String[] args) throws Exception { // Create table based on PARTITIONED template with one backup. cache.query(new SqlFieldsQuery( "CREATE TABLE person (id LONG, name VARCHAR, city_id LONG, PRIMARY KEY (id, city_id)) " + - "WITH \"backups=1, affinityKey=city_id\"")).getAll(); + "WITH \"backups=1, affinity_key=city_id\"")).getAll(); // Create an index. cache.query(new SqlFieldsQuery("CREATE INDEX on Person (city_id)")).getAll(); diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java index bc96e427e7ebb..7a02a7ee48472 100644 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/JdbcExample.java @@ -51,7 +51,7 @@ public static void main(String[] args) throws Exception { // Create table based on PARTITIONED template with one backup. stmt.executeUpdate("CREATE TABLE person (id LONG, name VARCHAR, city_id LONG, " + - "PRIMARY KEY (id, city_id)) WITH \"backups=1, affinityKey=city_id\""); + "PRIMARY KEY (id, city_id)) WITH \"backups=1, affinity_key=city_id\""); // Create an index. stmt.executeUpdate("CREATE INDEX on Person (city_id)"); diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinComplexDmlDdlSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinComplexDmlDdlSelfTest.java index 07601077a5a60..f85285da2a16c 100644 --- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinComplexDmlDdlSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinComplexDmlDdlSelfTest.java @@ -32,7 +32,6 @@ import org.apache.ignite.cache.CacheMode; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor; import org.apache.ignite.lang.IgniteCallable; import org.apache.ignite.lang.IgnitePredicate; @@ -143,12 +142,12 @@ public void testCreateSelect() throws Exception { sql(new UpdateChecker(0), "CREATE TABLE person (id int, name varchar, age int, company varchar, city varchar, " + "primary key (id, name, city)) WITH \"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() - + ",affinitykey=city\""); + + ",affinity_key=city\""); sql(new UpdateChecker(0), "CREATE INDEX idx on person (city asc, name asc)"); sql(new UpdateChecker(0), "CREATE TABLE city (name varchar, population int, primary key (name)) WITH " + - "\"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() + ",affinitykey=name\""); + "\"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() + ",affinity_key=name\""); sql(new UpdateChecker(3), "INSERT INTO city (name, population) values(?, ?), (?, ?), (?, ?)", 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 bf72200c45b02..4f0bd3d50b2d9 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 @@ -457,10 +457,10 @@ public class GridSqlQueryParser { private static final String PARAM_ATOMICITY = "ATOMICITY"; /** */ - private static final String PARAM_CACHE_GROUP = "CACHEGROUP"; + private static final String PARAM_CACHE_GROUP = "CACHE_GROUP"; /** */ - private static final String PARAM_AFFINITY_KEY = "AFFINITYKEY"; + private static final String PARAM_AFFINITY_KEY = "AFFINITY_KEY"; /** */ private static final String PARAM_WRITE_SYNC = "WRITE_SYNCHRONIZATION_MODE"; diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicIndexingComplexTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicIndexingComplexTest.java index 0be691e072f1f..f9d34085a1027 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicIndexingComplexTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicIndexingComplexTest.java @@ -94,12 +94,12 @@ public abstract class H2DynamicIndexingComplexTest extends DynamicIndexAbstractS public void testOperations() { executeSql("CREATE TABLE person (id int, name varchar, age int, company varchar, city varchar, " + "primary key (id, name, city)) WITH \"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() + - ",affinitykey=city\""); + ",affinity_key=city\""); executeSql("CREATE INDEX idx on person (city asc, name asc)"); executeSql("CREATE TABLE city (name varchar, population int, primary key (name)) WITH " + - "\"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() + ",affinitykey=name\""); + "\"template=" + cacheMode.name() + ",atomicity=" + atomicityMode.name() + ",affinity_key=name\""); executeSql("INSERT INTO city (name, population) values(?, ?), (?, ?), (?, ?)", "St. Petersburg", 6000000, 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 b108bb3f71c10..1198f041712da 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 @@ -478,7 +478,7 @@ private void doTestCreateTable(String tplCacheName, String cacheGrp, CacheMode c String sql = "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(cacheGrp) ? "" : ",\"cacheGroup=" + cacheGrp + '"'); + (F.isEmpty(cacheGrp) ? "" : ",\"cache_group=" + cacheGrp + '"'); for (String p : additionalParams) sql += ",\"" + p + "\""; @@ -573,7 +573,7 @@ public void testInvalidAtomicity() { * Test that attempting to omit mandatory value of CACHEGROUP parameter yields an error. */ public void testEmptyCacheGroup() { - assertCreateTableWithParamsThrows("cachegroup=", "Parameter value cannot be empty: CACHEGROUP"); + assertCreateTableWithParamsThrows("cache_group=", "Parameter value cannot be empty: CACHE_GROUP"); } /** @@ -808,7 +808,7 @@ public void testTableNameConflictCheckSql() throws Exception { */ public void testAffinityKey() throws Exception { execute("CREATE TABLE \"City\" (\"name\" varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey='name'\""); + "\"affinity_key='name'\""); assertAffinityCacheConfiguration("City", "name"); @@ -821,7 +821,7 @@ public void testAffinityKey() throws Exception { // We need unique name for this table to avoid conflicts with existing binary metadata. execute("CREATE TABLE \"Person2\" (\"id\" int, \"city\" varchar," + " \"name\" varchar, \"surname\" varchar, \"age\" int, PRIMARY KEY (\"id\", \"city\")) WITH " + - "wrap_key,wrap_value,\"template=cache,affinityKey='city'\""); + "wrap_key,wrap_value,\"template=cache,affinity_key='city'\""); assertAffinityCacheConfiguration("Person2", "city"); @@ -867,22 +867,22 @@ public void testAffinityKey() throws Exception { @SuppressWarnings("ThrowableResultOfMethodCallIgnored") public void testAffinityKeyCaseSensitivity() { execute("CREATE TABLE \"A\" (\"name\" varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey='name'\""); + "\"affinity_key='name'\""); assertAffinityCacheConfiguration("A", "name"); execute("CREATE TABLE \"B\" (name varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey=name\""); + "\"affinity_key=name\""); assertAffinityCacheConfiguration("B", "NAME"); execute("CREATE TABLE \"C\" (name varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey=NamE\""); + "\"affinity_key=NamE\""); assertAffinityCacheConfiguration("C", "NAME"); execute("CREATE TABLE \"D\" (\"name\" varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey=NAME\""); + "\"affinity_key=NAME\""); assertAffinityCacheConfiguration("D", "name"); @@ -890,7 +890,7 @@ public void testAffinityKeyCaseSensitivity() { GridTestUtils.assertThrows(null, new Callable() { @Override public Object call() throws Exception { execute("CREATE TABLE \"E\" (name varchar primary key, \"code\" int) WITH wrap_key,wrap_value," + - "\"affinityKey='Name'\""); + "\"affinity_key='Name'\""); return null; } @@ -901,14 +901,14 @@ public void testAffinityKeyCaseSensitivity() { GridTestUtils.assertThrows(null, new Callable() { @Override public Object call() throws Exception { execute("CREATE TABLE \"E\" (\"name\" varchar, \"Name\" int, val int, primary key(\"name\", " + - "\"Name\")) WITH \"affinityKey=name\""); + "\"Name\")) WITH \"affinity_key=name\""); return null; } }, IgniteSQLException.class, "Ambiguous affinity column name, use single quotes for case sensitivity: name"); execute("CREATE TABLE \"E\" (\"name\" varchar, \"Name\" int, val int, primary key(\"name\", " + - "\"Name\")) WITH wrap_key,wrap_value,\"affinityKey='Name'\""); + "\"Name\")) WITH wrap_key,wrap_value,\"affinity_key='Name'\""); assertAffinityCacheConfiguration("E", "Name"); @@ -931,7 +931,7 @@ public void testAffinityKeyNotKeyColumn() { // Error arises because user has specified case sensitive affinity column name GridTestUtils.assertThrows(null, new Callable() { @Override public Object call() throws Exception { - execute("CREATE TABLE \"E\" (name varchar primary key, \"code\" int) WITH \"affinityKey=code\""); + execute("CREATE TABLE \"E\" (name varchar primary key, \"code\" int) WITH \"affinity_key=code\""); return null; } @@ -946,7 +946,7 @@ public void testAffinityKeyNotFound() { // Error arises because user has specified case sensitive affinity column name GridTestUtils.assertThrows(null, new Callable() { @Override public Object call() throws Exception { - execute("CREATE TABLE \"E\" (name varchar primary key, \"code\" int) WITH \"affinityKey=missing\""); + execute("CREATE TABLE \"E\" (name varchar primary key, \"code\" int) WITH \"affinity_key=missing\""); return null; } From ac026a26f8d8951bf337b0f231148a92997c0083 Mon Sep 17 00:00:00 2001 From: Alexander Paschenko Date: Mon, 13 Nov 2017 13:32:04 +0300 Subject: [PATCH 2/2] Review fixes --- .../query/h2/sql/GridSqlQueryParser.java | 8 +++++ .../cache/index/H2DynamicTableSelfTest.java | 29 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) 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 1f8b665c5a8f0..8ffc5fab6289a 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 @@ -456,6 +456,12 @@ public class GridSqlQueryParser { /** */ private static final String PARAM_ATOMICITY = "ATOMICITY"; + /** */ + private static final String PARAM_CACHE_GROUP_OLD = "CACHEGROUP"; + + /** */ + private static final String PARAM_AFFINITY_KEY_OLD = "AFFINITYKEY"; + /** */ private static final String PARAM_CACHE_GROUP = "CACHE_GROUP"; @@ -1317,6 +1323,7 @@ else if (CacheAtomicityMode.ATOMIC.name().equalsIgnoreCase(val)) break; + case PARAM_CACHE_GROUP_OLD: case PARAM_CACHE_GROUP: ensureNotEmpty(name, val); @@ -1324,6 +1331,7 @@ else if (CacheAtomicityMode.ATOMIC.name().equalsIgnoreCase(val)) break; + case PARAM_AFFINITY_KEY_OLD: case PARAM_AFFINITY_KEY: ensureNotEmpty(name, val); 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 6c836ed837ae1..71b0b5f70c8ae 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 @@ -140,6 +140,14 @@ public void testCreateTableWithCacheGroup() throws Exception { doTestCreateTable(CACHE_NAME, "MyGroup", 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 testCreateTableWithCacheGroupAndLegacyParamName() throws Exception { + doTestCreateTable(CACHE_NAME, "MyGroup", null, null, true); + } + /** * Test that {@code CREATE TABLE} actually creates new cache from template, * H2 table and type descriptor on all nodes. @@ -484,10 +492,27 @@ private void assertDdlCommandThrowsTableNotFound(String checkedTblName, final St */ private void doTestCreateTable(String tplCacheName, String cacheGrp, CacheMode cacheMode, CacheWriteSynchronizationMode writeSyncMode, String... additionalParams) { + doTestCreateTable(tplCacheName, cacheGrp, cacheMode, writeSyncMode, false, additionalParams); + } + + /** + * 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 cacheMode Expected cache mode, or {@code null} if no check is needed. + * @param writeSyncMode Expected write sync mode, or {@code null} if no check is needed. + * @param useLegacyCacheGrpParamName Whether legacy (harder-to-read) cache group param name should be used. + * @param additionalParams Supplemental parameters to append to {@code CREATE TABLE} SQL. + */ + private void doTestCreateTable(String tplCacheName, String cacheGrp, CacheMode cacheMode, + CacheWriteSynchronizationMode writeSyncMode, boolean useLegacyCacheGrpParamName, String... additionalParams) { + String cacheGrpParamName = useLegacyCacheGrpParamName ? "cacheGroup" : "cache_group"; + String sql = "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(cacheGrp) ? "" : ",\"cache_group=" + cacheGrp + '"'); + (F.isEmpty(cacheGrp) ? "" : ",\"" + cacheGrpParamName + '=' + cacheGrp + '"'); for (String p : additionalParams) sql += ",\"" + p + "\""; @@ -944,7 +969,7 @@ public void testAffinityKeyCaseSensitivity() { }, IgniteSQLException.class, "Ambiguous affinity column name, use single quotes for case sensitivity: name"); execute("CREATE TABLE \"E\" (\"name\" varchar, \"Name\" int, val int, primary key(\"name\", " + - "\"Name\")) WITH wrap_key,wrap_value,\"affinity_key='Name'\""); + "\"Name\")) WITH wrap_key,wrap_value,\"affinityKey='Name'\""); assertAffinityCacheConfiguration("E", "Name");