IGNITE-3399 Add support for primitive type names in QueryEntity - Fixes #878.
Signed-off-by: Sergi Vladykin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/df5a842f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/df5a842f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/df5a842f Branch: refs/heads/ignite-3553 Commit: df5a842f2ad3a676fcd0fd29b00a0eb361709488 Parents: ca5c8d8 Author: Jens Hoffmann <[email protected]> Authored: Mon Jul 25 08:47:35 2016 +0300 Committer: Sergi Vladykin <[email protected]> Committed: Mon Jul 25 08:47:35 2016 +0300 ---------------------------------------------------------------------- .../processors/query/GridQueryProcessor.java | 2 +- .../ignite/internal/util/IgniteUtils.java | 32 ++++++++++++++++---- .../IgniteCacheQuerySelfTestSuite.java | 2 ++ 3 files changed, 29 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/df5a842f/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 04c6cb0..0dd542e 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 @@ -1386,7 +1386,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { aliases = Collections.emptyMap(); for (Map.Entry<String, String> entry : qryEntity.getFields().entrySet()) { - BinaryProperty prop = buildBinaryProperty(entry.getKey(), U.classForName(entry.getValue(), Object.class), aliases); + BinaryProperty prop = buildBinaryProperty(entry.getKey(), U.classForName(entry.getValue(), Object.class, true), aliases); d.addProperty(prop, false); } http://git-wip-us.apache.org/repos/asf/ignite/blob/df5a842f/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index 7a81cf8..31128ca 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -1361,13 +1361,33 @@ public abstract class IgniteUtils { * @param dflt Default class to return. * @return Class or default given class if it can't be found. */ - @Nullable public static Class<?> classForName(String cls, @Nullable Class<?> dflt) { - try { - return cls == null ? dflt : Class.forName(cls); - } - catch (ClassNotFoundException ignore) { - return dflt; + @Nullable public static Class<?> classForName(@Nullable String cls, @Nullable Class<?> dflt) { + return classForName(cls, dflt, false); + } + + /** + * Gets class for the given name if it can be loaded or default given class. + * + * @param cls Class. + * @param dflt Default class to return. + * @param includePrimitiveTypes Whether class resolution should include primitive types (i.e. "int" will resolve to int.class if flag is set) + * @return Class or default given class if it can't be found. + */ + @Nullable + public static Class<?> classForName(@Nullable String cls, @Nullable Class<?> dflt, boolean includePrimitiveTypes) { + Class<?> clazz; + if (cls == null) + clazz = dflt; + else if (includePrimitiveTypes && primitiveMap.containsKey(cls)) + clazz = primitiveMap.get(cls); + else { + try { + clazz = Class.forName(cls); + } catch (ClassNotFoundException ignore) { + clazz = dflt; + } } + return clazz; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/df5a842f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java index 65a94dd..0203354 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java @@ -40,6 +40,7 @@ import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapEvictQueryT import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapIndexScanTest; import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapTieredMultithreadedSelfTest; import org.apache.ignite.internal.processors.cache.IgniteCachePartitionedQueryMultiThreadedSelfTest; +import org.apache.ignite.internal.processors.cache.IgniteCachePrimitiveFieldsQuerySelfTest; import org.apache.ignite.internal.processors.cache.IgniteCacheQueryEvictsMultiThreadedSelfTest; import org.apache.ignite.internal.processors.cache.IgniteCacheQueryH2IndexingLeakTest; import org.apache.ignite.internal.processors.cache.IgniteCacheQueryIndexSelfTest; @@ -125,6 +126,7 @@ public class IgniteCacheQuerySelfTestSuite extends TestSuite { suite.addTestSuite(IgniteBinaryWrappedObjectFieldsQuerySelfTest.class); suite.addTestSuite(IgniteCacheQueryH2IndexingLeakTest.class); suite.addTestSuite(IgniteCacheQueryNoRebalanceSelfTest.class); + suite.addTestSuite(IgniteCachePrimitiveFieldsQuerySelfTest.class); suite.addTestSuite(IgniteCacheJoinQueryWithAffinityKeyTest.class); suite.addTestSuite(IgniteCacheDistributedJoinCollocatedAndNotTest.class);
