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 {