summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/fs4
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-01-08 20:48:51 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-01-08 20:48:51 +0100
commitf30ddd29df0e9702f8b6fb0dfd5ce75077ddc013 (patch)
tree7cb3c61370e5d85774a06945831c6dbb86da9f8e /container-search/src/main/java/com/yahoo/fs4
parent3cbce5fb9a8100dd931aaeb9ed04ec47d2de9dbd (diff)
No need to create 2 temporary object just to check if a bit need to be set.
Nor is it necessary to redo in all the checks you already have done. Second guessing is bad and a waste of energy.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/fs4')
-rw-r--r--container-search/src/main/java/com/yahoo/fs4/QueryPacket.java36
1 files changed, 16 insertions, 20 deletions
diff --git a/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java b/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
index 16414e8eabd..3a695efa383 100644
--- a/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
+++ b/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
@@ -105,7 +105,8 @@ public class QueryPacket extends Packet {
int startOfFieldToSave;
boolean sendSessionKey = query.getGroupingSessionCache() || query.getRanking().getQueryCache();
- buffer.putInt(getFeatureInt(sendSessionKey));
+ int featureFlag = getFeatureInt(sendSessionKey);
+ buffer.putInt(featureFlag);
IntegerCompressor.putCompressedPositiveNumber(getOffset(), buffer);
IntegerCompressor.putCompressedPositiveNumber(getHits(), buffer);
@@ -117,7 +118,7 @@ public class QueryPacket extends Packet {
Item.putString(query.getRanking().getProfile(), buffer);
queryPacketData.setRankProfile(buffer, startOfFieldToSave);
- if ( query.hasEncodableProperties()) {
+ if ( (featureFlag & QF_PROPERTIES) != 0) {
startOfFieldToSave = buffer.position();
query.encodeAsProperties(buffer, true);
queryPacketData.setPropertyMaps(buffer, startOfFieldToSave);
@@ -125,17 +126,18 @@ public class QueryPacket extends Packet {
// Language not needed when sending query stacks
- if (query.getRanking().getSorting() != null) {
+ if ((featureFlag & QF_SORTSPEC) != 0) {
int sortSpecLengthPosition=buffer.position();
buffer.putInt(0);
int sortSpecLength = query.getRanking().getSorting().encode(buffer);
buffer.putInt(sortSpecLengthPosition, sortSpecLength);
}
- if (getGroupingList(query).size() > 0) {
+ if ( (featureFlag & QF_GROUPSPEC) != 0) {
+ List<Grouping> groupingList = GroupingExecutor.getGroupingList(query);
BufferSerializer gbuf = new BufferSerializer(new GrowableByteBuffer());
- gbuf.putInt(null, getGroupingList(query).size());
- for (Grouping g: getGroupingList(query)){
+ gbuf.putInt(null, groupingList.size());
+ for (Grouping g: groupingList){
g.serialize(gbuf);
}
gbuf.getBuf().flip();
@@ -150,7 +152,7 @@ public class QueryPacket extends Packet {
buffer.put(query.getSessionId(true).asUtf8String().getBytes());
}
- if (query.getRanking().getLocation() != null) {
+ if ((featureFlag & QF_LOCATION) != 0) {
startOfFieldToSave = buffer.position();
int locationLengthPosition=buffer.position();
buffer.putInt(0);
@@ -184,16 +186,14 @@ public class QueryPacket extends Packet {
static final int QF_SESSIONID = 0x00800000;
private int getFeatureInt(boolean sendSessionId) {
- int features = QF_PARSEDQUERY; // this bitmask means "parsed query" in query packet.
- // we always use a parsed query here
+ int features = QF_PARSEDQUERY | QF_RANKP; // this bitmask means "parsed query" in query packet.
+ // And rank properties. Both are always present
- features |= QF_RANKP; // hasRankProfile
-
- features |= (query.getRanking().getSorting() != null) ? QF_SORTSPEC : 0;
- features |= (query.getRanking().getLocation() != null) ? QF_LOCATION : 0;
- features |= (query.hasEncodableProperties()) ? QF_PROPERTIES : 0;
- features |= (getGroupingList(query).size() > 0) ? QF_GROUPSPEC : 0;
- features |= (sendSessionId) ? QF_SESSIONID : 0;
+ features |= (query.getRanking().getSorting() != null) ? QF_SORTSPEC : 0;
+ features |= (query.getRanking().getLocation() != null) ? QF_LOCATION : 0;
+ features |= (query.hasEncodableProperties()) ? QF_PROPERTIES : 0;
+ features |= GroupingExecutor.hasGroupingList(query) ? QF_GROUPSPEC : 0;
+ features |= (sendSessionId) ? QF_SESSIONID : 0;
return features;
}
@@ -233,10 +233,6 @@ public class QueryPacket extends Packet {
return "Query x packet [query: " + query + "]";
}
- private static List<Grouping> getGroupingList(Query query) {
- return Collections.unmodifiableList(GroupingExecutor.getGroupingList(query));
- }
-
static int getQueryFlags(Query query) {
int flags = 0;