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);

Reply via email to