Skip to content

Commit 2abe019

Browse files
authored
IGNITE-27238 Use MessageSerializer for GridCacheQueryResponse (#12563)
1 parent e2a24fc commit 2abe019

File tree

38 files changed

+504
-545
lines changed

38 files changed

+504
-545
lines changed

modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ protected IndexRow row2indexRow(Row bound) {
210210
if (key != ectx.unspecifiedValue()) {
211211
key = TypeUtils.fromInternal(ectx, key, fieldsStoreTypes[fieldIdx]);
212212

213-
keys[i] = IndexKeyFactory.wrap(key, idxRowHnd.indexKeyDefinitions().get(i).idxType(),
213+
keys[i] = IndexKeyFactory.wrap(key, idxRowHnd.indexKeyDefinitions().get(i).indexKeyType(),
214214
cctx.cacheObjectContext(), idxRowHnd.indexKeyTypeSettings());
215215

216216
nullSearchRow = false;

modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/SchemaHolderImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.apache.ignite.cluster.ClusterNode;
4343
import org.apache.ignite.configuration.CacheConfiguration;
4444
import org.apache.ignite.internal.GridKernalContext;
45-
import org.apache.ignite.internal.cache.query.index.SortOrder;
4645
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
4746
import org.apache.ignite.internal.processors.cache.GridCacheContextInfo;
4847
import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
@@ -325,10 +324,9 @@ private static Object affinityIdentity(CacheConfiguration<?, ?> ccfg) {
325324

326325
assert fieldDesc != null;
327326

328-
boolean descending = keyDef.getValue().order().sortOrder() == SortOrder.DESC;
329327
int fieldIdx = fieldDesc.fieldIndex();
330328

331-
collations.add(TraitUtils.createFieldCollation(fieldIdx, !descending));
329+
collations.add(TraitUtils.createFieldCollation(fieldIdx, keyDef.getValue().ascending()));
332330
}
333331

334332
return RelCollations.of(collations);

modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/IndexDdlIntegrationTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.List;
2323
import org.apache.ignite.internal.IgniteEx;
2424
import org.apache.ignite.internal.cache.query.index.Index;
25-
import org.apache.ignite.internal.cache.query.index.SortOrder;
2625
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
2726
import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndex;
2827
import org.apache.ignite.internal.processors.query.IgniteSQLException;
@@ -151,11 +150,11 @@ public void createIndexWithColumnsOrdering() {
151150
List<String> keys = new ArrayList<>(keyDefs.keySet());
152151

153152
assertEquals("ID", keys.get(0));
154-
assertEquals(SortOrder.ASC, keyDefs.get(keys.get(0)).order().sortOrder());
153+
assertEquals(true, keyDefs.get(keys.get(0)).ascending());
155154
assertEquals("VAL_INT", keys.get(1));
156-
assertEquals(SortOrder.ASC, keyDefs.get(keys.get(1)).order().sortOrder());
155+
assertEquals(true, keyDefs.get(keys.get(1)).ascending());
157156
assertEquals("VAL_STR", keys.get(2));
158-
assertEquals(SortOrder.DESC, keyDefs.get(keys.get(2)).order().sortOrder());
157+
assertEquals(false, keyDefs.get(keys.get(2)).ascending());
159158
}
160159

161160
/**

modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/TestTable.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@
4545
import org.apache.calcite.util.ImmutableBitSet;
4646
import org.apache.ignite.internal.cache.query.index.IndexDefinition;
4747
import org.apache.ignite.internal.cache.query.index.IndexName;
48-
import org.apache.ignite.internal.cache.query.index.Order;
49-
import org.apache.ignite.internal.cache.query.index.SortOrder;
5048
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
5149
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
5250
import org.apache.ignite.internal.cache.query.index.sorted.client.ClientIndex;
@@ -257,9 +255,7 @@ public TestTable addIndex(RelCollation collation, String name) {
257255
IndexKeyType keyType = (fieldType == Character.class || fieldType == char.class) ? IndexKeyType.STRING_FIXED :
258256
fieldType instanceof Class ? IndexKeyType.forClass((Class<?>)fieldType) : IndexKeyType.UNKNOWN;
259257

260-
Order order = new Order(fc.direction.isDescending() ? SortOrder.DESC : SortOrder.ASC, null);
261-
262-
keyDefs.put(field.getName(), new IndexKeyDefinition(keyType.code(), order, -1));
258+
keyDefs.put(field.getName(), new IndexKeyDefinition(keyType.code(), -1, !fc.direction.isDescending()));
263259
}
264260

265261
IndexDefinition idxDef = new ClientIndexDefinition(

modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyQueryCondition.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.apache.ignite.cache.query.IndexQueryCriterion;
2929
import org.apache.ignite.internal.cache.query.InIndexQueryCriterion;
3030
import org.apache.ignite.internal.cache.query.RangeIndexQueryCriterion;
31-
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
3231
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
3332
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings;
3433
import org.apache.ignite.internal.cache.query.index.sorted.IndexRowComparator;
@@ -39,7 +38,6 @@
3938
import org.jetbrains.annotations.Nullable;
4039

4140
import static org.apache.ignite.internal.cache.query.index.IndexQueryProcessor.rangeDesc;
42-
import static org.apache.ignite.internal.cache.query.index.SortOrder.DESC;
4341

4442
/**
4543
* IndexQuery condition for single indexed key. It accumulates user defined criteria (with Object as parameters)
@@ -343,8 +341,6 @@ private int compare(IndexKey left, IndexKey right) throws IgniteCheckedException
343341

344342
/** */
345343
boolean desc() {
346-
IndexKeyDefinition keyDef = idx.indexDefinition().indexKeyDefinitions().get(fldName);
347-
348-
return keyDef.order().sortOrder() == DESC;
344+
return !idx.indexDefinition().indexKeyDefinitions().get(fldName).ascending();
349345
}
350346
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.ignite.internal.cache.query.index;
19+
20+
import org.apache.ignite.internal.Order;
21+
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType;
22+
import org.apache.ignite.internal.managers.communication.GridIoMessageFactory;
23+
import org.apache.ignite.plugin.extensions.communication.Message;
24+
import org.jetbrains.annotations.Nullable;
25+
26+
/** Message wrapper for {@link IndexKeyType}. */
27+
public class IndexKeyTypeMessage implements Message {
28+
/** Type code. */
29+
public static final short TYPE_CODE = 516;
30+
31+
/** */
32+
public static final byte NULL_VALUE_CODE = Byte.MIN_VALUE;
33+
34+
/** Index key type. */
35+
private @Nullable IndexKeyType val;
36+
37+
/** Code. */
38+
@Order(0)
39+
private byte code = NULL_VALUE_CODE;
40+
41+
/** Empty constructor for {@link GridIoMessageFactory}. */
42+
public IndexKeyTypeMessage() {
43+
// No-op.
44+
}
45+
46+
/** Constructor. */
47+
public IndexKeyTypeMessage(@Nullable IndexKeyType keyType) {
48+
val = keyType;
49+
code = encode(keyType);
50+
}
51+
52+
/** Constructor. */
53+
public IndexKeyTypeMessage(int keyTypeCode) {
54+
code((byte)keyTypeCode);
55+
}
56+
57+
/** @return Code. */
58+
public byte code() {
59+
return code;
60+
}
61+
62+
/**
63+
* @param code New code.
64+
*/
65+
public void code(byte code) {
66+
this.code = code;
67+
val = decode(code);
68+
}
69+
70+
/** @return Index key type. */
71+
public @Nullable IndexKeyType value() {
72+
return val;
73+
}
74+
75+
/** @param keyType Index key type. */
76+
private static byte encode(@Nullable IndexKeyType keyType) {
77+
if (keyType == null)
78+
return NULL_VALUE_CODE;
79+
80+
return (byte)keyType.code();
81+
}
82+
83+
/**
84+
* @param code Code to decode an inde key type.
85+
*/
86+
private static @Nullable IndexKeyType decode(byte code) {
87+
if (code == NULL_VALUE_CODE)
88+
return null;
89+
90+
return IndexKeyType.forCode(code);
91+
}
92+
93+
/** {@inheritDoc} */
94+
@Override public short directType() {
95+
return TYPE_CODE;
96+
}
97+
}

modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexQueryResultMeta.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,28 @@
1717

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

20-
import java.io.Externalizable;
21-
import java.io.IOException;
22-
import java.io.ObjectInput;
23-
import java.io.ObjectOutput;
2420
import java.util.Iterator;
2521
import java.util.LinkedHashMap;
2622
import java.util.Map;
23+
import org.apache.ignite.internal.Order;
2724
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
2825
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings;
2926
import org.apache.ignite.internal.cache.query.index.sorted.MetaPageInfo;
3027
import org.apache.ignite.internal.cache.query.index.sorted.SortedIndexDefinition;
3128
import org.apache.ignite.internal.util.typedef.internal.U;
29+
import org.apache.ignite.plugin.extensions.communication.Message;
3230

3331
/**
3432
* Metadata for IndexQuery response. This information is required to be sent to a node that initiated a query.
3533
* Thick client nodes may have irrelevant information about index structure, {@link MetaPageInfo}.
3634
*/
37-
public class IndexQueryResultMeta implements Externalizable {
38-
/** */
39-
private static final long serialVersionUID = 0L;
40-
35+
public class IndexQueryResultMeta implements Message {
4136
/** Index key settings. */
37+
@Order(0)
4238
private IndexKeyTypeSettings keyTypeSettings;
4339

4440
/** Index key definitions. */
41+
@Order(value = 1, method = "keyDefinitions")
4542
private LinkedHashMap<String, IndexKeyDefinition> keyDefs;
4643

4744
/** */
@@ -53,7 +50,7 @@ public IndexQueryResultMeta() {
5350
public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
5451
keyTypeSettings = def.keyTypeSettings();
5552

56-
keyDefs = new LinkedHashMap<>();
53+
keyDefs = U.newLinkedHashMap(critSize);
5754

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

@@ -64,27 +61,30 @@ public IndexQueryResultMeta(SortedIndexDefinition def, int critSize) {
6461
}
6562
}
6663

64+
/** {@inheritDoc} */
65+
@Override public short directType() {
66+
return 18;
67+
}
68+
6769
/** */
6870
public IndexKeyTypeSettings keyTypeSettings() {
6971
return keyTypeSettings;
7072
}
7173

7274
/** */
73-
public LinkedHashMap<String, IndexKeyDefinition> keyDefinitions() {
74-
return keyDefs;
75+
public void keyTypeSettings(IndexKeyTypeSettings keyTypeSettings) {
76+
this.keyTypeSettings = keyTypeSettings;
7577
}
7678

77-
/** {@inheritDoc} */
78-
@Override public void writeExternal(ObjectOutput out) throws IOException {
79-
out.writeObject(keyTypeSettings);
80-
81-
U.writeMap(out, keyDefs);
79+
/** */
80+
public Map<String, IndexKeyDefinition> keyDefinitions() {
81+
return keyDefs;
8282
}
8383

84-
/** {@inheritDoc} */
85-
@Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
86-
keyTypeSettings = (IndexKeyTypeSettings)in.readObject();
87-
88-
keyDefs = U.readLinkedMap(in);
84+
/** */
85+
public void keyDefinitions(Map<String, IndexKeyDefinition> keyDefs) {
86+
this.keyDefs = keyDefs == null
87+
? null
88+
: keyDefs instanceof LinkedHashMap ? (LinkedHashMap)keyDefs : new LinkedHashMap<>(keyDefs);
8989
}
9090
}

modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/NullsOrder.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/Order.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/SortOrder.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)