/// <summary>
        /// Gets a <see cref="IDictionary{K, V}" /> of the name/value pairs to be POSTed to the analytics service.
        /// </summary>
        /// <returns>
        /// The <see cref="IDictionary{K, V}" /> of the name/value pairs to be POSTed to the analytics service.
        /// </returns>
        public IDictionary <string, object> GetFormValues()
        {
            var formValues = new Dictionary <string, object>
            {
                { "statement", OriginalStatement },
                { "pretty", _pretty },
                { "metrics", _includeMetrics }
            };

            if (_credentials.Any())
            {
                var creds = new List <dynamic>();
                foreach (var credential in _credentials)
                {
                    creds.Add(new { user = credential.Key, pass = credential.Value });
                }
                formValues.Add("creds", creds);
            }

            foreach (var parameter in _namedParameters)
            {
                formValues.Add(parameter.Key, parameter.Value);
            }

            if (_positionalArguments.Any())
            {
                formValues.Add("args", _positionalArguments.ToArray());
            }

            if (_executionMode != Analytics.ExecutionMode.Immediate)
            {
                formValues.Add("mode", _executionMode.GetDescription());
            }

            formValues.Add("timeout", $"{Lifespan.Duration * 1000}ms");

            _requestContextId = Guid.NewGuid().ToString();
            formValues.Add("client_context_id", CurrentContextId);

            return(formValues);
        }