Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package org.apache.ignite.internal.cache.query.index;

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
Expand All @@ -25,8 +26,10 @@
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings;
import org.apache.ignite.internal.cache.query.index.sorted.MetaPageInfo;
import org.apache.ignite.internal.cache.query.index.sorted.SortedIndexDefinition;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.plugin.extensions.communication.Message;
import org.jetbrains.annotations.Nullable;

/**
* Metadata for IndexQuery response. This information is required to be sent to a node that initiated a query.
Expand All @@ -37,9 +40,13 @@ public class IndexQueryResultMeta implements Message {
@Order(0)
private IndexKeyTypeSettings keyTypeSettings;

/** Index key definitions. */
@Order(value = 1, method = "keyDefinitions")
private LinkedHashMap<String, IndexKeyDefinition> keyDefs;
/** Index names order holder. Should be serialized together with the definitions. */
@Order(value = 1, method = "orderedIndexNames")
private @Nullable String[] idxNames;

/** Index definitions serialization holder. Should be serialized together with the names. */
@Order(value = 2, method = "orderedIndexDefinitions")
private @Nullable IndexKeyDefinition[] idxDefs;

/** */
public IndexQueryResultMeta() {
Expand All @@ -50,14 +57,18 @@ public IndexQueryResultMeta() {
public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
keyTypeSettings = def.keyTypeSettings();

keyDefs = U.newLinkedHashMap(critSize);

Iterator<Map.Entry<String, IndexKeyDefinition>> keys = def.indexKeyDefinitions().entrySet().iterator();

for (int i = 0; i < critSize; i++) {
Map.Entry<String, IndexKeyDefinition> key = keys.next();
if (critSize > 0) {
idxNames = new String[critSize];
idxDefs = new IndexKeyDefinition[critSize];

keyDefs.put(key.getKey(), key.getValue());
for (int i = 0; i < critSize; i++) {
Map.Entry<String, IndexKeyDefinition> key = keys.next();

idxNames[i] = key.getKey();
idxDefs[i] = key.getValue();
}
}
}

Expand All @@ -76,15 +87,39 @@ public void keyTypeSettings(IndexKeyTypeSettings keyTypeSettings) {
this.keyTypeSettings = keyTypeSettings;
}

/** */
public Map<String, IndexKeyDefinition> keyDefinitions() {
return keyDefs;
/** @return Map of index definitions with proper order. */
public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
if (F.isEmpty(idxNames) && F.isEmpty(idxDefs))
return U.newLinkedHashMap(0);

assert idxNames.length == idxDefs.length : "Number of index names and index definitions must be equal " +
"[idxNames=" + Arrays.toString(idxNames) + ", idxDefs=" + Arrays.toString(idxDefs) + "]";

LinkedHashMap<String, IndexKeyDefinition> idxDefsMap = U.newLinkedHashMap(idxNames.length);

for (int i = 0; i < idxNames.length; i++)
idxDefsMap.put(idxNames[i], idxDefs[i]);

return idxDefsMap;
}

/** */
public void keyDefinitions(Map<String, IndexKeyDefinition> keyDefs) {
this.keyDefs = keyDefs == null
? null
: keyDefs instanceof LinkedHashMap ? (LinkedHashMap)keyDefs : new LinkedHashMap<>(keyDefs);
/** @return Index names with proper order. */
public @Nullable String[] orderedIndexNames() {
return idxNames;
}

/** Stores index names with proper order to build the linked map later. */
public void orderedIndexNames(@Nullable String[] idxNames) {
this.idxNames = idxNames;
}

/** @return Index definitions with proper order. */
public @Nullable IndexKeyDefinition[] orderedIndexDefinitions() {
return idxDefs;
}

/** Process the index definitions with proper order and buils the linked map. */
public void orderedIndexDefinitions(@Nullable IndexKeyDefinition[] idxDefs) {
this.idxDefs = idxDefs;
}
}
Loading