Skip to content

Instantly share code, notes, and snippets.

@tolbertam
Created January 6, 2017 04:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tolbertam/eb157f2991f907a66626e9365592436d to your computer and use it in GitHub Desktop.
Save tolbertam/eb157f2991f907a66626e9365592436d to your computer and use it in GitHub Desktop.
diff --git a/driver-core/src/main/java/com/datastax/driver/core/Requests.java b/driver-core/src/main/java/com/datastax/driver/core/Requests.java
index 7ebc01b..ecf9653 100644
--- a/driver-core/src/main/java/com/datastax/driver/core/Requests.java
+++ b/driver-core/src/main/java/com/datastax/driver/core/Requests.java
@@ -238,12 +238,26 @@ class Requests {
return set;
}
- static int serialize(EnumSet<QueryFlag> flags) {
+ private static int serialize(EnumSet<QueryFlag> flags) {
int i = 0;
for (QueryFlag flag : flags)
i |= 1 << flag.ordinal();
return i;
}
+
+ static void writeFlags(EnumSet<QueryFlag> flags, ByteBuf dest, ProtocolVersion version) {
+ int i = serialize(flags);
+ if (version.compareTo(ProtocolVersion.V5) >= 0) {
+ dest.writeInt(i);
+ } else {
+ dest.writeByte((byte) i);
+ }
+ }
+
+ static int flagsSize(ProtocolVersion version) {
+ // Protocol V5+, flags are [int], otherwise [byte].
+ return version.compareTo(ProtocolVersion.V5) >= 0 ? 4 : 1;
+ }
}
static class QueryProtocolOptions {
@@ -328,7 +342,7 @@ class Requests {
case V4:
case V5:
CBUtil.writeConsistencyLevel(consistency, dest);
- dest.writeByte((byte) QueryFlag.serialize(flags));
+ QueryFlag.writeFlags(flags, dest, version);
if (flags.contains(QueryFlag.VALUES)) {
if (flags.contains(QueryFlag.VALUE_NAMES)) {
assert version.compareTo(ProtocolVersion.V3) >= 0;
@@ -364,7 +378,7 @@ class Requests {
case V5:
int size = 0;
size += CBUtil.sizeOfConsistencyLevel(consistency);
- size += 1; // flags
+ size += QueryFlag.flagsSize(version);
if (flags.contains(QueryFlag.VALUES)) {
if (flags.contains(QueryFlag.VALUE_NAMES)) {
assert version.compareTo(ProtocolVersion.V3) >= 0;
@@ -514,7 +528,7 @@ class Requests {
case V4:
case V5:
CBUtil.writeConsistencyLevel(consistency, dest);
- dest.writeByte((byte) QueryFlag.serialize(flags));
+ QueryFlag.writeFlags(flags, dest, version);
if (flags.contains(QueryFlag.SERIAL_CONSISTENCY))
CBUtil.writeConsistencyLevel(serialConsistency, dest);
if (flags.contains(QueryFlag.DEFAULT_TIMESTAMP))
@@ -534,7 +548,7 @@ class Requests {
case V5:
int size = 0;
size += CBUtil.sizeOfConsistencyLevel(consistency);
- size += 1; // flags
+ size += QueryFlag.flagsSize(version);
if (flags.contains(QueryFlag.SERIAL_CONSISTENCY))
size += CBUtil.sizeOfConsistencyLevel(serialConsistency);
if (flags.contains(QueryFlag.DEFAULT_TIMESTAMP))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment