You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/11/19 12:21:55 UTC

ignite git commit: ignite-sql-opt

Repository: ignite
Updated Branches:
  refs/heads/ignite-sql-opt [created] 5254ef3e4


ignite-sql-opt


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

Branch: refs/heads/ignite-sql-opt
Commit: 5254ef3e4b509d7007e8e365074c5b1c5998b1c0
Parents: c490de3
Author: sboikov <sb...@gridgain.com>
Authored: Thu Nov 19 14:21:43 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Nov 19 14:21:43 2015 +0300

----------------------------------------------------------------------
 .../processors/query/GridQueryProcessor.java    | 51 ++++++++++++++++++--
 .../query/GridQueryTypeDescriptor.java          |  2 +
 .../processors/query/h2/IgniteH2Indexing.java   | 12 ++++-
 .../h2/GridIndexingSpiAbstractSelfTest.java     |  6 +++
 4 files changed, 66 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5254ef3e/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 84db145..910bfb0 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
@@ -60,6 +60,7 @@ import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture;
 import org.apache.ignite.internal.processors.cache.query.CacheQueryType;
 import org.apache.ignite.internal.processors.cache.query.GridCacheTwoStepQuery;
 import org.apache.ignite.internal.util.GridSpinBusyLock;
+import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.future.GridCompoundFuture;
 import org.apache.ignite.internal.util.future.GridFinishedFuture;
 import org.apache.ignite.internal.util.lang.GridCloseableIterator;
@@ -78,6 +79,7 @@ import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.spi.indexing.IndexingQueryFilter;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
+import sun.misc.Unsafe;
 
 import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED;
 import static org.apache.ignite.internal.IgniteComponentType.INDEXING;
@@ -1539,7 +1541,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     /**
      *
      */
-    private abstract static class Property {
+    public abstract static class Property {
         /**
          * Gets this property value from the given object.
          *
@@ -1561,6 +1563,12 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         public abstract Class<?> type();
     }
 
+    enum FieldType {
+        INT,
+        DOUBLE,
+        OBJ
+    }
+
     /**
      * Description of type property.
      */
@@ -1580,6 +1588,12 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         /** */
         private boolean key;
 
+        private static Unsafe unsafe = GridUnsafe.unsafe();
+
+        private long off;
+
+        private FieldType type;
+
         /**
          * Constructor.
          *
@@ -1595,6 +1609,21 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             ((AccessibleObject) member).setAccessible(true);
 
             field = member instanceof Field;
+
+            if (field) {
+                Field field0 = (Field) member;
+
+                Class<?> t = field0.getType();
+
+                if (t.equals(int.class))
+                    type = FieldType.INT;
+                else if (t.equals(double.class))
+                    type = FieldType.DOUBLE;
+                else
+                    type = FieldType.OBJ;
+
+                off = unsafe.objectFieldOffset(field0);
+            }
         }
 
         /** {@inheritDoc} */
@@ -1609,9 +1638,18 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
             try {
                 if (field) {
-                    Field field = (Field)member;
-
-                    return field.get(x);
+                    switch (type) {
+                        case INT:
+                            return unsafe.getInt(x, off);
+                        case DOUBLE:
+                            return unsafe.getDouble(x, off);
+                        case OBJ:
+                            return unsafe.getObject(x, off);
+                    }
+                    return null;
+//                    Field field = (Field)member;
+//
+//                    return field.get(x);
                 }
                 else {
                     Method mtd = (Method)member;
@@ -1807,6 +1845,11 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             return fields;
         }
 
+        @Override
+        public Property property(String name) {
+            return props.get(name);
+        }
+
         /** {@inheritDoc} */
         @SuppressWarnings("unchecked")
         @Override public <T> T value(String field, Object key, Object val) throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/ignite/blob/5254ef3e/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
index b05e1d8..3b16274 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
@@ -38,6 +38,8 @@ public interface GridQueryTypeDescriptor {
      */
     public Map<String, Class<?>> fields();
 
+    public GridQueryProcessor.Property property(String name);
+
     /**
      * Gets field value for given key and value.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/5254ef3e/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 4c07132..f242c20 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -79,6 +79,7 @@ import org.apache.ignite.internal.processors.query.GridQueryFieldsResult;
 import org.apache.ignite.internal.processors.query.GridQueryFieldsResultAdapter;
 import org.apache.ignite.internal.processors.query.GridQueryIndexDescriptor;
 import org.apache.ignite.internal.processors.query.GridQueryIndexing;
+import org.apache.ignite.internal.processors.query.GridQueryProcessor;
 import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOffheap;
@@ -2110,6 +2111,9 @@ public class IgniteH2Indexing implements GridQueryIndexing {
         /** */
         private final boolean preferSwapVal;
 
+        /** */
+        private final GridQueryProcessor.Property[] properties;
+
         /**
          * @param type Type descriptor.
          * @param schema Schema.
@@ -2140,6 +2144,11 @@ public class IgniteH2Indexing implements GridQueryIndexing {
             valType = DataType.getTypeFromClass(type.valueClass());
 
             preferSwapVal = schema.ccfg.getMemoryMode() == CacheMemoryMode.OFFHEAP_TIERED;
+
+            properties = new GridQueryProcessor.Property[fields.length];
+
+            for (int i = 0; i < fields.length; i++)
+                properties[i] = type.property(fields[i]);
         }
 
         /** {@inheritDoc} */
@@ -2293,7 +2302,8 @@ public class IgniteH2Indexing implements GridQueryIndexing {
         /** {@inheritDoc} */
         @Override public Object columnValue(Object key, Object val, int col) {
             try {
-                return type.value(fields[col], key, val);
+                return properties[col].value(key, val);
+                //return type.value(fields[col], key, val);
             }
             catch (IgniteCheckedException e) {
                 throw DbException.convert(e);

http://git-wip-us.apache.org/repos/asf/ignite/blob/5254ef3e/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
index acfe3b6..f635df7 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
@@ -34,6 +34,7 @@ import org.apache.ignite.internal.processors.cache.CacheObjectContext;
 import org.apache.ignite.internal.processors.query.GridQueryFieldsResult;
 import org.apache.ignite.internal.processors.query.GridQueryIndexDescriptor;
 import org.apache.ignite.internal.processors.query.GridQueryIndexType;
+import org.apache.ignite.internal.processors.query.GridQueryProcessor;
 import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -504,6 +505,11 @@ public abstract class GridIndexingSpiAbstractSelfTest extends GridCommonAbstract
             return valFields;
         }
 
+        @Override
+        public GridQueryProcessor.Property property(String name) {
+            return null;
+        }
+
         /** {@inheritDoc} */
         @SuppressWarnings("unchecked")
         @Override public <T> T value(String field, Object key, Object val) throws IgniteSpiException {