public Request Request(int sessionId)
{
Request request = new Request();
// standard request fields
request.DataItems.Add(new RequestDataItem() { Type = "byte", Data = BinarySerializer.ToArray((byte)OperationType.COMMAND) });
request.DataItems.Add(new RequestDataItem() { Type = "int", Data = BinarySerializer.ToArray(sessionId) });
// operation specific fields
request.DataItems.Add(new RequestDataItem() { Type = "byte", Data = BinarySerializer.ToArray((byte)OperationMode) });
// class name field
string className = "x";
switch (ClassType)
{
// idempotent command (e.g. select)
case CommandClassType.Idempotent:
className = "com.orientechnologies.orient.core.sql.query.OSQLSynchQuery";
break;
// non-idempotent command (e.g. insert)
case CommandClassType.NonIdempotent:
if (!string.IsNullOrEmpty(CommandPayload.Language) && CommandPayload.Language.Equals("gremlin"))
{
className = "com.orientechnologies.orient.graph.gremlin.OCommandGremlin";
}
else
{
className = "com.orientechnologies.orient.core.sql.OCommandSQL";
}
break;
// script command
case CommandClassType.Script:
className = "com.orientechnologies.orient.core.command.script.OCommandScript";
break;
default:
break;
}
// TODO: sql script case length
request.DataItems.Add(new RequestDataItem() { Type = "int", Data = BinarySerializer.ToArray(
//4 + // this int
4 + // class name int length
BinarySerializer.Length(className) +
4 + // limit int length
4 + // text int length
BinarySerializer.Length(CommandPayload.Text) +
4 + // fetch plant int length
BinarySerializer.Length(CommandPayload.FetchPlan) +
4 // serialized params int (disable)
) });
request.DataItems.Add(new RequestDataItem() { Type = "string", Data = BinarySerializer.ToArray(className) });
if (CommandPayload.Type == CommandPayloadType.SqlScript)
{
request.DataItems.Add(new RequestDataItem() { Type = "string", Data = BinarySerializer.ToArray(CommandPayload.Language) });
}
request.DataItems.Add(new RequestDataItem() { Type = "string", Data = BinarySerializer.ToArray(CommandPayload.Text) });
request.DataItems.Add(new RequestDataItem() { Type = "int", Data = BinarySerializer.ToArray(CommandPayload.NonTextLimit) });
request.DataItems.Add(new RequestDataItem() { Type = "string", Data = BinarySerializer.ToArray(CommandPayload.FetchPlan) });
//request.DataItems.Add(new RequestDataItem() { Type = "bytes", Data = CommandPayload.SerializedParams });
// HACK: 0:int means disable
request.DataItems.Add(new RequestDataItem() { Type = "int", Data = BinarySerializer.ToArray(0) });
return request;
}