IGNITE-3235 Failed to initialize primitive boolean cache property of superclass


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

Branch: refs/heads/ignite-ssl-hotfix
Commit: b9c776a8423471706ecb1dc6176b38f23e799077
Parents: 952be8b
Author: Anton Vinogradov <a...@apache.org>
Authored: Mon Oct 10 11:52:57 2016 +0300
Committer: Anton Vinogradov <a...@apache.org>
Committed: Mon Oct 10 11:52:57 2016 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcResultSetSelfTest.java   | 91 +++++++++++++++++++-
 .../configuration/CacheConfiguration.java       | 13 ++-
 .../processors/query/GridQueryProcessor.java    | 71 +++++++++------
 3 files changed, 142 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b9c776a8/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
index 3607f53..cc67a65 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
@@ -60,7 +60,8 @@ public class JdbcResultSetSelfTest extends 
GridCommonAbstractTest {
     /** SQL query. */
     private static final String SQL =
         "select id, boolVal, byteVal, shortVal, intVal, longVal, floatVal, " +
-            "doubleVal, bigVal, strVal, arrVal, dateVal, timeVal, tsVal, 
urlVal, f1, f2, f3, _val " +
+            "doubleVal, bigVal, strVal, arrVal, dateVal, timeVal, tsVal, 
urlVal, f1, f2, f3, _val, " +
+            "boolVal2, boolVal3, boolVal4 " +
             "from TestObject where id = 1";
 
     /** Statement. */
@@ -142,6 +143,9 @@ public class JdbcResultSetSelfTest extends 
GridCommonAbstractTest {
         TestObject o = new TestObject(id);
 
         o.boolVal = true;
+        o.boolVal2 = true;
+        o.boolVal3 = true;
+        o.boolVal4 = true;
         o.byteVal = 1;
         o.shortVal = 1;
         o.intVal = 1;
@@ -182,6 +186,66 @@ public class JdbcResultSetSelfTest extends 
GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
+    public void testBoolean2() throws Exception {
+        ResultSet rs = stmt.executeQuery(SQL);
+
+        int cnt = 0;
+
+        while (rs.next()) {
+            if (cnt == 0) {
+                assert rs.getBoolean("boolVal2");
+                assert rs.getBoolean(20);
+            }
+
+            cnt++;
+        }
+
+        assert cnt == 1;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBoolean3() throws Exception {
+        ResultSet rs = stmt.executeQuery(SQL);
+
+        int cnt = 0;
+
+        while (rs.next()) {
+            if (cnt == 0) {
+                assert rs.getBoolean("boolVal3");
+                assert rs.getBoolean(21);
+            }
+
+            cnt++;
+        }
+
+        assert cnt == 1;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBoolean4() throws Exception {
+        ResultSet rs = stmt.executeQuery(SQL);
+
+        int cnt = 0;
+
+        while (rs.next()) {
+            if (cnt == 0) {
+                assert rs.getBoolean("boolVal4");
+                assert rs.getBoolean(22);
+            }
+
+            cnt++;
+        }
+
+        assert cnt == 1;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testByte() throws Exception {
         ResultSet rs = stmt.executeQuery(SQL);
 
@@ -562,7 +626,30 @@ public class JdbcResultSetSelfTest extends 
GridCommonAbstractTest {
      * Test object.
      */
     @SuppressWarnings("UnusedDeclaration")
-    private static class TestObject implements Serializable {
+    private static class BaseTestObject implements Serializable {
+        /** */
+        @QuerySqlField(index = false)
+        protected Boolean boolVal2;
+
+        /** */
+        @QuerySqlField(index = false)
+        protected boolean boolVal3;
+
+        /** */
+        protected boolean boolVal4;
+
+        /** */
+        @QuerySqlField(index = false)
+        public boolean isBoolVal4() {
+            return boolVal4;
+        }
+    }
+
+    /**
+     * Test object.
+     */
+    @SuppressWarnings("UnusedDeclaration")
+    private static class TestObject extends BaseTestObject {
         /** */
         @QuerySqlField
         private final int id;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b9c776a8/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
 
b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index e28aad5..f65bf52 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -2668,10 +2668,17 @@ public class CacheConfiguration<K, V> extends 
MutableConfiguration<K, V> {
         ClassProperty(Member member) {
             this.member = member;
 
-            name = member instanceof Method && 
member.getName().startsWith("get") && member.getName().length() > 3 ?
-                member.getName().substring(3) : member.getName();
+            name = member.getName();
 
-            ((AccessibleObject) member).setAccessible(true);
+            if (member instanceof Method) {
+                if (member.getName().startsWith("get") && 
member.getName().length() > 3)
+                    name = member.getName().substring(3);
+
+                if (member.getName().startsWith("is") && 
member.getName().length() > 2)
+                    name = member.getName().substring(2);
+            }
+
+            ((AccessibleObject)member).setAccessible(true);
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b9c776a8/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 8469a7c..1605188 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
@@ -17,6 +17,30 @@
 
 package org.apache.ignite.internal.processors.query;
 
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutorService;
+import javax.cache.Cache;
+import javax.cache.CacheException;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -68,31 +92,6 @@ import org.apache.ignite.spi.indexing.IndexingQueryFilter;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 
-import javax.cache.Cache;
-import javax.cache.CacheException;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutorService;
-
 import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED;
 import static org.apache.ignite.internal.IgniteComponentType.INDEXING;
 import static 
org.apache.ignite.internal.processors.query.GridQueryIndexType.FULLTEXT;
@@ -1686,15 +1685,31 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
                 // No-op.
             }
 
-            if (tmp == null) {
+            if (tmp == null) { // Boolean getter can be defined as is###().
+                bld = new StringBuilder("is");
+
+                bld.append(prop);
+
+                bld.setCharAt(2, Character.toUpperCase(bld.charAt(2)));
+
                 try {
-                    tmp = new ClassProperty(cls.getDeclaredField(prop), key, 
alias, coCtx);
+                    tmp = new ClassProperty(cls.getMethod(bld.toString()), 
key, alias, coCtx);
                 }
-                catch (NoSuchFieldException ignored) {
+                catch (NoSuchMethodException ignore) {
                     // No-op.
                 }
             }
 
+            Class cls0 = cls;
+
+            while (tmp == null && cls0 != null)
+                try {
+                    tmp = new ClassProperty(cls0.getDeclaredField(prop), key, 
alias, coCtx);
+                }
+                catch (NoSuchFieldException ignored) {
+                    cls0 = cls0.getSuperclass();
+                }
+
             if (tmp == null) {
                 try {
                     tmp = new ClassProperty(cls.getMethod(prop), key, alias, 
coCtx);

Reply via email to