diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-01-08 20:48:51 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-01-08 20:48:51 +0100 |
commit | f30ddd29df0e9702f8b6fb0dfd5ce75077ddc013 (patch) | |
tree | 7cb3c61370e5d85774a06945831c6dbb86da9f8e /container-search/src/main/java/com/yahoo/fs4 | |
parent | 3cbce5fb9a8100dd931aaeb9ed04ec47d2de9dbd (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.java | 36 |
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; |