in core/src/main/java/com/datastax/dse/driver/internal/core/graph/GraphConversions.java [258:369]
public static Map<String, ByteBuffer> createCustomPayload(
GraphStatement<?> statement,
GraphProtocol subProtocol,
DriverExecutionProfile config,
InternalDriverContext context,
GraphBinaryModule graphBinaryModule) {
ProtocolVersion protocolVersion = context.getProtocolVersion();
NullAllowingImmutableMap.Builder<String, ByteBuffer> payload =
NullAllowingImmutableMap.builder();
Map<String, ByteBuffer> statementOptions = statement.getCustomPayload();
payload.putAll(statementOptions);
final String graphLanguage;
// Don't override anything that's already provided at the statement level
if (!statementOptions.containsKey(GRAPH_LANG_OPTION_KEY)) {
graphLanguage =
statement instanceof ScriptGraphStatement ? LANGUAGE_GROOVY : LANGUAGE_BYTECODE;
payload.put(GRAPH_LANG_OPTION_KEY, TypeCodecs.TEXT.encode(graphLanguage, protocolVersion));
} else {
graphLanguage =
TypeCodecs.TEXT.decode(statementOptions.get(GRAPH_LANG_OPTION_KEY), protocolVersion);
Preconditions.checkNotNull(
graphLanguage, "A null value was set for the graph-language custom payload key.");
}
if (!isSystemQuery(statement, config)) {
if (!statementOptions.containsKey(GRAPH_NAME_OPTION_KEY)) {
String graphName = statement.getGraphName();
if (graphName == null) {
graphName = config.getString(DseDriverOption.GRAPH_NAME, null);
}
if (graphName != null) {
payload.put(GRAPH_NAME_OPTION_KEY, TypeCodecs.TEXT.encode(graphName, protocolVersion));
}
}
if (!statementOptions.containsKey(GRAPH_SOURCE_OPTION_KEY)) {
String traversalSource = statement.getTraversalSource();
if (traversalSource == null) {
traversalSource = config.getString(DseDriverOption.GRAPH_TRAVERSAL_SOURCE, null);
}
if (traversalSource != null) {
payload.put(
GRAPH_SOURCE_OPTION_KEY, TypeCodecs.TEXT.encode(traversalSource, protocolVersion));
}
}
}
// the payload allows null entry values so doing a get directly here and checking for null
final ByteBuffer payloadInitialProtocol = statementOptions.get(GRAPH_RESULTS_OPTION_KEY);
if (payloadInitialProtocol == null) {
Preconditions.checkNotNull(subProtocol);
payload.put(
GRAPH_RESULTS_OPTION_KEY,
TypeCodecs.TEXT.encode(subProtocol.toInternalCode(), protocolVersion));
} else {
subProtocol =
GraphProtocol.fromString(TypeCodecs.TEXT.decode(payloadInitialProtocol, protocolVersion));
}
if (subProtocol.isGraphBinary() && graphLanguage.equals(LANGUAGE_BYTECODE)) {
Object bytecodeQuery = bytecodeToSerialize(statement);
try {
Buffer bytecodeByteBuf = graphBinaryModule.serialize(bytecodeQuery);
payload.put(GRAPH_BINARY_QUERY_OPTION_KEY, bytecodeByteBuf.nioBuffer());
bytecodeByteBuf.release();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
if (!statementOptions.containsKey(GRAPH_READ_CONSISTENCY_LEVEL_OPTION_KEY)) {
ConsistencyLevel readCl = statement.getReadConsistencyLevel();
String readClString =
readCl != null
? readCl.name()
: config.getString(DseDriverOption.GRAPH_READ_CONSISTENCY_LEVEL, null);
if (readClString != null) {
payload.put(
GRAPH_READ_CONSISTENCY_LEVEL_OPTION_KEY,
TypeCodecs.TEXT.encode(readClString, protocolVersion));
}
}
if (!statementOptions.containsKey(GRAPH_WRITE_CONSISTENCY_LEVEL_OPTION_KEY)) {
ConsistencyLevel writeCl = statement.getWriteConsistencyLevel();
String writeClString =
writeCl != null
? writeCl.name()
: config.getString(DseDriverOption.GRAPH_WRITE_CONSISTENCY_LEVEL, null);
if (writeClString != null) {
payload.put(
GRAPH_WRITE_CONSISTENCY_LEVEL_OPTION_KEY,
TypeCodecs.TEXT.encode(writeClString, protocolVersion));
}
}
if (!statementOptions.containsKey(GRAPH_TIMEOUT_OPTION_KEY)) {
Duration timeout = statement.getTimeout();
if (timeout == null) {
timeout = config.getDuration(DseDriverOption.GRAPH_TIMEOUT, Duration.ZERO);
}
if (timeout != null && !timeout.isZero()) {
payload.put(
GRAPH_TIMEOUT_OPTION_KEY,
TypeCodecs.BIGINT.encode(timeout.toMillis(), protocolVersion));
}
}
return payload.build();
}