You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by nt...@apache.org on 2016/04/04 20:38:40 UTC
[34/37] ignite git commit: IGNITE-2856 Use java name for index field
and add index only if all index fields described as query fields.
IGNITE-2856 Use java name for index field and add index only if all index fields described as query fields.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/87f78fb5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/87f78fb5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/87f78fb5
Branch: refs/heads/ignite-2004
Commit: 87f78fb51777cb6cd04710d676487cd7599b49aa
Parents: 922b75f
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Mon Apr 4 16:17:54 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Mon Apr 4 16:17:54 2016 +0700
----------------------------------------------------------------------
.../ignite/schema/generator/CodeGenerator.java | 96 ++++++++++++++------
1 file changed, 68 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/87f78fb5/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
index 769c7d9..1f2f2ab 100644
--- a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
+++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
@@ -35,7 +35,7 @@ import java.util.Set;
import java.util.regex.Pattern;
import org.apache.ignite.cache.QueryIndex;
-import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.T2;
import org.apache.ignite.schema.model.PojoDescriptor;
import org.apache.ignite.schema.model.PojoField;
import org.apache.ignite.schema.ui.ConfirmCallable;
@@ -556,6 +556,21 @@ public class CodeGenerator {
}
/**
+ * Find field by name.
+ *
+ * @param pojo POJO descriptor.
+ * @param name Field name to find.
+ * @return Field descriptor or {@code null} if not found.
+ */
+ private static PojoField findFieldByName(PojoDescriptor pojo, String name) {
+ for (PojoField field: pojo.valueFields(true))
+ if (field.dbName().equals(name))
+ return field;
+
+ return null;
+ }
+
+ /**
* Generate java snippet for cache configuration with JDBC store and types metadata.
*
* @param pojos POJO descriptors.
@@ -666,48 +681,73 @@ public class CodeGenerator {
Collection<QueryIndex> idxs = pojo.indexes();
if (!idxs.isEmpty()) {
- add2(src, "// Indexes for " + tbl + ".");
- add2(src, "Collection<QueryIndex> idxs = new ArrayList<>();");
- add0(src, "");
-
+ boolean first = true;
boolean firstIdx = true;
for (QueryIndex idx : idxs) {
- if (idx.getFields().size() == 1) {
- Map.Entry<String, Boolean> fld = F.first(idx.getFields().entrySet());
+ Set<Map.Entry<String, Boolean>> dbIdxFlds = idx.getFields().entrySet();
+
+ int sz = dbIdxFlds.size();
- add2(src, "idxs.add(new QueryIndex(\"" + fld.getKey() + "\", " + fld.getValue() + ", \"" +
- idx.getName() + "\"));");
- add0(src, "");
+ List<T2<String, Boolean>> idxFlds = new ArrayList<>(sz);
+
+ for (Map.Entry<String, Boolean> idxFld : dbIdxFlds) {
+ PojoField field = findFieldByName(pojo, idxFld.getKey());
+
+ if (field != null)
+ idxFlds.add(new T2<>(field.javaName(), idxFld.getValue()));
+ else
+ break;
}
- else {
- add2(src, (firstIdx ? "QueryIndex " : "") + "idx = new QueryIndex();");
- add0(src, "");
- add2(src, "idx.setName(\"" + idx.getName() + "\");");
- add0(src, "");
+ // Only if all fields present, add index description.
+ if (idxFlds.size() == sz) {
+ if (first) {
+ add2(src, "// Indexes for " + tbl + ".");
+ add2(src, "Collection<QueryIndex> idxs = new ArrayList<>();");
+ add0(src, "");
+ }
+
+ if (sz == 1) {
+ T2<String, Boolean> idxFld = idxFlds.get(0);
+
+ add2(src, "idxs.add(new QueryIndex(\"" + idxFld.getKey() + "\", " + idxFld.getValue() + ", \"" +
+ idx.getName() + "\"));");
+ add0(src, "");
+ }
+ else {
+ add2(src, (firstIdx ? "QueryIndex " : "") + "idx = new QueryIndex();");
+ add0(src, "");
- add2(src, (firstIdx ? "LinkedHashMap<String, Boolean> " : "") +
- "idxFlds = new LinkedHashMap<>();");
- add0(src, "");
+ add2(src, "idx.setName(\"" + idx.getName() + "\");");
+ add0(src, "");
- for (Map.Entry<String, Boolean> idxFld : idx.getFields().entrySet())
- add2(src, "idxFlds.put(\"" + idxFld.getKey() + "\", " + idxFld.getValue() + ");");
+ add2(src, (firstIdx ? "LinkedHashMap<String, Boolean> " : "") +
+ "idxFlds = new LinkedHashMap<>();");
+ add0(src, "");
- add0(src, "");
+ for (T2<String, Boolean> idxFld : idxFlds)
+ add2(src, "idxFlds.put(\"" + idxFld.getKey() + "\", " + idxFld.getValue() + ");");
- add2(src, "idx.setFields(idxFlds);");
- add0(src, "");
+ add0(src, "");
- add2(src, "idxs.add(idx);");
- add0(src, "");
+ add2(src, "idx.setFields(idxFlds);");
+ add0(src, "");
- firstIdx = false;
+ add2(src, "idxs.add(idx);");
+ add0(src, "");
+
+ firstIdx = false;
+ }
+
+ first = false;
}
}
- add2(src, "qryEntity.setIndexes(idxs);");
- add0(src, "");
+ if (!first) {
+ add2(src, "qryEntity.setIndexes(idxs);");
+ add0(src, "");
+ }
}
add2(src, "return qryEntity;");