public IDictionary<string, object> GetFormValues()
{
if (string.IsNullOrWhiteSpace(_statement) ||
(_prepareEncoded && _preparedPayload == null))
{
throw new ArgumentException("A statement or prepared plan must be provided.");
}
//build the map of request parameters
IDictionary<string, object> formValues = new Dictionary<string, object>();
if (_maxServerParallelism.HasValue)
{
formValues.Add(QueryParameters.MaxServerParallelism, _maxServerParallelism.Value.ToString());
}
if (_prepareEncoded)
{
formValues.Add(QueryParameters.Prepared, _preparedPayload.Name);
formValues.Add(QueryParameters.PreparedEncoded, _preparedPayload.EncodedPlan);
}
else
{
formValues.Add(QueryParameters.Statement, _statement);
}
if (_timeOut.HasValue && _timeOut.Value > TimeSpan.Zero)
{
formValues.Add(QueryParameters.Timeout, (uint) _timeOut.Value.TotalMilliseconds + "ms");
}
else
{
formValues.Add(QueryParameters.Timeout, string.Concat(TimeoutDefault, "ms"));
}
if (_readOnly.HasValue)
{
formValues.Add(QueryParameters.Readonly, _readOnly.Value);
}
if (_includeMetrics.HasValue)
{
formValues.Add(QueryParameters.Metrics, _includeMetrics);
}
if (_parameters.Count > 0)
{
foreach (var parameter in _parameters)
{
formValues.Add(
parameter.Key.Contains("$") ? parameter.Key : "$" + parameter.Key,
parameter.Value);
}
}
if (_arguments.Count > 0)
{
formValues.Add(QueryParameters.Args, _arguments);
}
if (_format.HasValue)
{
formValues.Add(QueryParameters.Format, _format.Value.ToString());
}
if (_encoding.HasValue)
{
formValues.Add(QueryParameters.Encoding, _encoding.Value.ToString());
}
if (_compression.HasValue)
{
formValues.Add(QueryParameters.Compression, _compression.Value.ToString());
}
if (_includeSignature.HasValue)
{
formValues.Add(QueryParameters.Signature, _includeSignature.Value);
}
if (_scanConsistency.HasValue)
{
formValues.Add(QueryParameters.ScanConsistency, ScanConsistencyResolver[_scanConsistency.Value]);
}
if (_scanVectors != null)
{
#pragma warning disable 618
if (_scanConsistency != N1QL.ScanConsistency.AtPlus)
#pragma warning restore 618
{
throw new ArgumentException("Only ScanConsistency.AtPlus is supported for this query request.");
}
formValues.Add(QueryParameters.ScanVectors, _scanVectors);
}
if (_scanWait.HasValue)
{
formValues.Add(QueryParameters.ScanWait, string.Format("{0}ms", (uint) _scanWait.Value.TotalMilliseconds));
}
if (_pretty)
{
formValues.Add(QueryParameters.Pretty, _pretty);
}
if (_credentials.Count > 0)
{
var creds = new List<dynamic>();
foreach (var credential in _credentials)
{
creds.Add(new { user = credential.Key, pass = credential.Value });
}
formValues.Add(QueryParameters.Creds, creds);
}
_requestContextId = QuerySequenceGenerator.GetNext();
formValues.Add(QueryParameters.ClientContextId, CurrentContextId);
return formValues;
}