Repository: incubator-ignite Updated Branches: refs/heads/ignite-45 b9a1e831e -> ef5c2f2e0
ignite-gg-9933 - portable queries fix Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/06324b1b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/06324b1b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/06324b1b Branch: refs/heads/ignite-45 Commit: 06324b1bc6f0b0cda8a724a5dc0191e694efce8d Parents: fe649a4 Author: S.Vladykin <svlady...@gridgain.com> Authored: Thu Mar 19 04:03:40 2015 +0300 Committer: S.Vladykin <svlady...@gridgain.com> Committed: Thu Mar 19 04:03:40 2015 +0300 ---------------------------------------------------------------------- .../org/apache/ignite/cache/CacheTypeMetadata.java | 6 ++++++ .../apache/ignite/cache/query/SqlFieldsQuery.java | 7 ------- .../org/apache/ignite/cache/query/TextQuery.java | 14 ++++---------- .../processors/query/GridQueryProcessor.java | 14 +++++++++++--- .../apache/ignite/internal/util/IgniteUtils.java | 16 ++++++++++++++++ 5 files changed, 37 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/06324b1b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java index f25d9f4..e97e3b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java @@ -18,6 +18,7 @@ package org.apache.ignite.cache; import org.apache.ignite.internal.util.tostring.*; +import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; import java.util.*; @@ -327,4 +328,9 @@ public class CacheTypeMetadata { public void setGroups(Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps) { this.grps = grps; } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(CacheTypeMetadata.class, this); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/06324b1b/modules/core/src/main/java/org/apache/ignite/cache/query/SqlFieldsQuery.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlFieldsQuery.java b/modules/core/src/main/java/org/apache/ignite/cache/query/SqlFieldsQuery.java index 65e7a29..c0733e6 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlFieldsQuery.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/query/SqlFieldsQuery.java @@ -39,13 +39,6 @@ public final class SqlFieldsQuery extends Query<SqlFieldsQuery>{ private Object[] args; /** - * Default constructor. - */ - public SqlFieldsQuery() { - // No-op. - } - - /** * Constructs sql fields query. * * @param sql SQL Query. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/06324b1b/modules/core/src/main/java/org/apache/ignite/cache/query/TextQuery.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/query/TextQuery.java b/modules/core/src/main/java/org/apache/ignite/cache/query/TextQuery.java index dbb9183..c48331b 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/query/TextQuery.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/query/TextQuery.java @@ -38,18 +38,13 @@ public final class TextQuery extends Query<TextQuery> { private String txt; /** - * Default constructor. - */ - public TextQuery() { - // No-op. - } - - /** * Constructs query for the given search string. * + * @param type Type. * @param txt Search string. */ - public TextQuery(String txt) { + public TextQuery(String type, String txt) { + setType(type); setText(txt); } @@ -60,9 +55,8 @@ public final class TextQuery extends Query<TextQuery> { * @param txt Search string. */ public TextQuery(Class<?> type, String txt) { - this(txt); - setType(type); + setText(txt); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/06324b1b/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 aa924c4..068ebe5 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 @@ -368,7 +368,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { if (desc == null || !desc.registered()) return; - if (!desc.valueClass().equals(valCls)) + if (!desc.valueClass().isAssignableFrom(valCls)) throw new IgniteCheckedException("Failed to update index due to class name conflict" + "(multiple classes with same simple name are stored in the same cache) " + "[expCls=" + desc.valueClass().getName() + ", actualCls=" + valCls.getName() + ']'); @@ -1057,6 +1057,14 @@ public class GridQueryProcessor extends GridProcessorAdapter { d.addProperty(prop, false); } + if (F.isEmpty(meta.getValueType())) + throw new IgniteCheckedException("Value type is not set: " + meta); + + d.name(meta.getValueType()); + + d.valueClass(U.classForName(meta.getValueType(), Object.class)); + d.keyClass(meta.getKeyType() == null ? Object.class : U.classForName(meta.getKeyType(), Object.class)); + return d; } @@ -1364,8 +1372,8 @@ public class GridQueryProcessor extends GridProcessorAdapter { else { int isKeyProp0 = isKeyProp; - if (isKeyProp0 == 0) { - if (ctx.cacheObjects().hasField(key, propName)) + if (isKeyProp0 == 0) { // Key is allowed to be a non-portable object here. + if (ctx.cacheObjects().isPortableObject(key) && ctx.cacheObjects().hasField(key, propName)) isKeyProp = isKeyProp0 = 1; else if (ctx.cacheObjects().hasField(val, propName)) isKeyProp = isKeyProp0 = -1; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/06324b1b/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 7804c9d..521cdc1 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 @@ -1068,6 +1068,22 @@ public abstract class IgniteUtils { } /** + * Gets class for the given name if it can be loaded or default given class. + * + * @param cls Class. + * @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 Class.forName(cls); + } + catch (ClassNotFoundException e) { + return dflt; + } + } + + /** * Creates new instance of a class only if it has an empty constructor (can be non-public). * * @param cls Class name.