/// <summary>
        /// Generates the query.
        /// </summary>
        /// <param name="request">The query to load.</param>
        /// <returns>An object containing the sql query and other lookup data.</returns>
        private static BulkSqlQuery CreateQuery(EntityRequest request)
        {
            BulkSqlQuery query;

            // Do not require access to the individual query components
            using (new SecurityBypassContext())
            {
                try
                {
                    // Parse the request
                    EntityMemberRequest memberRequest;
                    if (request.Request != null)
                    {
                        memberRequest = request.Request;
                    }
                    else
                    {
                        memberRequest = Factory.RequestParser.ParseRequestQuery(request.RequestString);
                    }

                    // Tweak it to handle request-type-specific hacks
                    BulkRequestRunner.AdjustEntityMemberRequest(request, memberRequest);

                    // Convert the request into a bulk SQL query.
                    query = BulkRequestSqlBuilder.BuildSql(memberRequest, request.Hint);
                }
                catch (Exception ex)
                {
                    EventLog.Application.WriteError(ex.ToString());
                    throw;
                }
            }
            return(query);
        }
        /// <summary>
        /// Build the overall T-SQL query.
        /// </summary>
        /// <param name="request">The root level entity member request.</param>
        /// <param name="hintText">A hint about what this query is doing. Use for logging/diagnostics only.</param>
        public static BulkSqlQuery BuildSql(EntityMemberRequest request, string hintText = null)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            var builder = new BulkRequestSqlBuilder
            {
                _request = request,
            };

            builder.BuildSql( );

            return(builder._result);
        }